diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index ac59db610fb..7715c4e6465 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -107,6 +107,34 @@ class account_asset_asset(osv.osv): GROUP BY a.id, a.purchase_date """, (tuple(ids),)) return dict(cr.fetchall()) + def _compute_board_amount(self, cr, uid, asset, i, residual_amount, amount_to_depr, undone_dotation_number, posted_depreciation_line_ids, total_days, context=None): + #by default amount = 0 + amount = 0 + if i == undone_dotation_number: + amount = residual_amount + else: + if asset.method == 'linear': + amount = amount_to_depr / (undone_dotation_number - len(posted_depreciation_line_ids)) + if asset.prorata: + amount = amount_to_depr / asset.method_delay + days = total_days - float(depreciation_date.strftime('%j')) + if i == 1: + amount = (amount_to_depr / asset.method_delay) / total_days * days + elif i == undone_dotation_number: + amount = (amount_to_depr / asset.method_delay) / total_days * (total_days - days) + elif asset.method == 'degressive': + amount = residual_amount * asset.method_progress_factor + return amount + + def _compute_board_undone_dotation_nb(self, cr, uid, asset, depreciation_date, total_days, context=None): + undone_dotation_number = asset.method_delay + if asset.method_time == 'end': + end_date = datetime.strptime(asset.method_end, '%Y-%m-%d') + undone_dotation_number = (end_date - depreciation_date).days / total_days + if asset.prorata or asset.method_time == 'end': + undone_dotation_number += 1 + return undone_dotation_number + def compute_depreciation_board(self, cr, uid,ids, context=None): depreciation_lin_obj = self.pool.get('account.asset.depreciation.line') for asset in self.browse(cr, uid, ids, context=context): @@ -124,28 +152,11 @@ class account_asset_asset(osv.osv): month = depreciation_date.month year = depreciation_date.year total_days = (year % 4) and 365 or 366 - undone_dotation_number = asset.method_delay - if asset.method_time == 'end': - end_date = datetime.strptime(asset.method_end, '%Y-%m-%d') - undone_dotation_number = (end_date - depreciation_date).days / total_days - if asset.prorata or asset.method_time == 'end': - undone_dotation_number += 1 + + undone_dotation_number = self._compute_board_undone_dotation_nb(cr, uid, asset, depreciation_date, total_days, context=context) for x in range(len(posted_depreciation_line_ids), undone_dotation_number): i = x + 1 - if i == undone_dotation_number: - amount = residual_amount - else: - if asset.method == 'linear': - amount = amount_to_depr / (undone_dotation_number - len(posted_depreciation_line_ids)) - if asset.prorata: - amount = amount_to_depr / asset.method_delay - if i == 1: - days = total_days - float(depreciation_date.strftime('%j')) - amount = (amount_to_depr / asset.method_delay) / total_days * days - elif i == undone_dotation_number: - amount = (amount_to_depr / asset.method_delay) / total_days * (total_days - days) - else: - amount = residual_amount * asset.method_progress_factor + amount = self._compute_board_amount(cr, uid, asset, i, residual_amount, amount_to_depr, undone_dotation_number, posted_depreciation_line_ids, total_days, context=context) residual_amount -= amount vals = { 'amount': amount, @@ -201,8 +212,8 @@ class account_asset_asset(osv.osv): 'state': fields.selection([('draft','Draft'),('open','Running'),('close','Close')], 'State', required=True), 'active': fields.boolean('Active', select=2), 'partner_id': fields.many2one('res.partner', 'Partner'), - 'method': fields.selection([('linear','Linear'),('progressif','Progressive')], 'Computation Method', required=True, readonly=True, states={'draft':[('readonly',False)]}, help="Linear: Calculated on basis of Gross Value/During (interval) \ - \nProgressive: Calculated on basis of Gross Value * Progressif Factor"), + 'method': fields.selection([('linear','Linear'),('degressive','Degressive')], 'Computation Method', required=True, readonly=True, states={'draft':[('readonly',False)]}, help="Linear: Calculated on basis of Gross Value/During (interval) \ + \nDegressive: Calculated on basis of Gross Value * Degressive Factor"), 'method_delay': fields.integer('Number of Depreciations', readonly=True, states={'draft':[('readonly',False)]}, help="Calculates Depreciation within specified interval"), 'method_period': fields.integer('Period Length', readonly=True, states={'draft':[('readonly',False)]}, help="State here the time during 2 depreciations, in months"), 'method_end': fields.date('Ending date', readonly=True, states={'draft':[('readonly',False)]}), diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml index 7bf9cff2743..9e3f589c008 100644 --- a/addons/account_asset/account_asset_view.xml +++ b/addons/account_asset/account_asset_view.xml @@ -92,6 +92,7 @@ +