Tower: upload base_accounting_kit 19.0.2.3.1 (via marketplace)
This commit is contained in:
120
addons/base_accounting_kit/models/account_asset_category.py
Normal file
120
addons/base_accounting_kit/models/account_asset_category.py
Normal file
@@ -0,0 +1,120 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
#############################################################################
|
||||
#
|
||||
# Cybrosys Technologies Pvt. Ltd.
|
||||
#
|
||||
# Copyright (C) 2025-TODAY Cybrosys Technologies(<https://www.cybrosys.com>)
|
||||
# Author: Cybrosys Techno Solutions(<https://www.cybrosys.com>)
|
||||
#
|
||||
# You can modify it under the terms of the GNU LESSER
|
||||
# GENERAL PUBLIC LICENSE (LGPL v3), Version 3.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU LESSER GENERAL PUBLIC LICENSE (LGPL v3) for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU LESSER GENERAL PUBLIC LICENSE
|
||||
# (LGPL v3) along with this program.
|
||||
# If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
#############################################################################
|
||||
from odoo import api, fields, models
|
||||
|
||||
|
||||
class AccountAssetCategory(models.Model):
|
||||
_name = 'account.asset.category'
|
||||
_description = 'Asset category'
|
||||
|
||||
active = fields.Boolean(default=True)
|
||||
name = fields.Char(required=True, index=True, string="Asset Type")
|
||||
company_id = fields.Many2one('res.company', string='Company',
|
||||
required=True,
|
||||
default=lambda self: self.env.company)
|
||||
price = fields.Monetary(string='Price', required=True)
|
||||
currency_id = fields.Many2one("res.currency",
|
||||
default=lambda self: self.env[
|
||||
'res.currency'].search(
|
||||
[('name', '=', 'USD')]).id,
|
||||
readonly=True, hide=True)
|
||||
account_analytic_id = fields.Many2one('account.analytic.account',
|
||||
string='Analytic Account',
|
||||
domain="[('company_id', '=', company_id)]")
|
||||
account_asset_id = fields.Many2one('account.account',
|
||||
string='Asset Account', required=True,
|
||||
domain="[('account_type', '!=', 'asset_receivable'),('account_type', '!=', 'liability_payable'),('account_type', '!=', 'asset_cash'),('account_type', '!=', 'liability_credit_card'),('active', '=', True)]",
|
||||
help="Account used to record the purchase of the asset at its original price.")
|
||||
account_depreciation_id = fields.Many2one(
|
||||
'account.account', string='Depreciation Account',
|
||||
required=True,
|
||||
domain="[('account_type', '!=', 'asset_receivable'),('account_type', '!=', 'liability_payable'),('account_type', '!=', 'asset_cash'),('account_type', '!=', 'liability_credit_card'),('active', '=', True)]",
|
||||
help="Account used in the depreciation entries, to decrease the asset value.")
|
||||
account_depreciation_expense_id = fields.Many2one(
|
||||
'account.account', string='Expense Account',
|
||||
required=True,
|
||||
domain="[('account_type', '!=', 'asset_receivable'),('account_type', '!=','liability_payable'),('account_type', '!=', 'asset_cash'),('account_type', '!=','liability_credit_card'),('active', '=', True)]",
|
||||
help="Account used in the periodical entries, to record a part of the asset as expense.")
|
||||
journal_id = fields.Many2one('account.journal', string='Journal',
|
||||
required=True)
|
||||
method = fields.Selection(
|
||||
[('linear', 'Straight Line'), ('degressive', 'Declining')],
|
||||
string='Computation Method', required=True, default='linear',
|
||||
help="Choose the method to use to compute the amount of depreciation lines.\n"
|
||||
" * Linear: Calculated on basis of: Gross Value / Number of Depreciations\n"
|
||||
" * Degressive: Calculated on basis of: Residual Value * Degressive Factor")
|
||||
method_number = fields.Integer(string='Number of Depreciations', default=5,
|
||||
help="The number of depreciations needed to depreciate your asset")
|
||||
method_period = fields.Integer(string='Period Length', default=1,
|
||||
help="State here the time between 2 depreciations, in months",
|
||||
required=True)
|
||||
method_progress_factor = fields.Float('Degressive Factor', default=0.3)
|
||||
method_time = fields.Selection(
|
||||
[('number', 'Number of Entries'), ('end', 'Ending Date')],
|
||||
string='Time Method', required=True, default='number',
|
||||
help="Choose the method to use to compute the dates and number of entries.\n"
|
||||
" * Number of Entries: Fix the number of entries and the time between 2 depreciations.\n"
|
||||
" * Ending Date: Choose the time between 2 depreciations and the date the depreciations won't go beyond.")
|
||||
method_end = fields.Date('Ending date')
|
||||
prorata = fields.Boolean(string='Prorata Temporis',
|
||||
help='Indicates that the first depreciation entry for this asset have to be done from the purchase date instead of the first of January')
|
||||
open_asset = fields.Boolean(string='Auto-confirm Assets',
|
||||
help="Check this if you want to automatically confirm the assets of this category when created by invoices.")
|
||||
group_entries = fields.Boolean(string='Group Journal Entries',
|
||||
help="Check this if you want to group the generated entries by categories.")
|
||||
type = fields.Selection([('sale', 'Sale: Revenue Recognition'),
|
||||
('purchase', 'Purchase: Asset')], required=True,
|
||||
index=True, default='purchase')
|
||||
|
||||
@api.onchange('account_asset_id')
|
||||
def onchange_account_asset(self):
|
||||
"""Onchange method triggered when the 'account_asset_id' field is modified.
|
||||
Updates 'account_depreciation_id' or 'account_depreciation_expense_id' based on the 'type' field value."""
|
||||
if self.type == "purchase":
|
||||
self.account_depreciation_id = self.account_asset_id
|
||||
elif self.type == "sale":
|
||||
self.account_depreciation_expense_id = self.account_asset_id
|
||||
|
||||
@api.onchange('type')
|
||||
def onchange_type(self):
|
||||
"""Update the 'prorata' and 'method_period' fields based on the value of the 'type' field."""
|
||||
if self.type == 'sale':
|
||||
self.prorata = True
|
||||
self.method_period = 1
|
||||
else:
|
||||
self.method_period = 12
|
||||
|
||||
@api.onchange('method_time')
|
||||
def _onchange_method_time(self):
|
||||
"""Update the 'prorata' field based on the value of the 'method_time' field.
|
||||
Set 'prorata' to False if 'method_time' is not equal to 'number'."""
|
||||
if self.method_time != 'number':
|
||||
self.prorata = False
|
||||
|
||||
@api.model
|
||||
def create(self, vals):
|
||||
record = super().create(vals)
|
||||
asset_id = self.env.context.get('default_asset_id')
|
||||
if asset_id:
|
||||
asset = self.env['account.asset.asset'].browse(asset_id)
|
||||
asset.category_id = record.id
|
||||
return record
|
||||
Reference in New Issue
Block a user