diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index e15220f987e..70e0059dce6 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -105,8 +105,15 @@ class account_asset_asset(osv.osv): 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): - # For all cases: amount to depreciate is (Purchase Value - Salvage Value) - amount_to_depr = residual_amount = asset.purchase_value - asset.salvage_value + if asset.value_residual == 0.0: + continue + posted_depreciation_line_ids = depreciation_lin_obj.search(cr, uid, [('asset_id', '=', asset.id), ('move_check', '=', True)]) + old_depreciation_line_ids = depreciation_lin_obj.search(cr, uid, [('asset_id', '=', asset.id), ('move_id', '=', False)]) + if old_depreciation_line_ids: + depreciation_lin_obj.unlink(cr, uid, old_depreciation_line_ids, context=context) + + amount_to_depr = residual_amount = asset.value_residual + depreciation_date = datetime.strptime(self._get_last_depreciation_date(cr, uid, [asset.id], context)[asset.id], '%Y-%m-%d') day = depreciation_date.day month = depreciation_date.month @@ -118,12 +125,13 @@ class account_asset_asset(osv.osv): undone_dotation_number = (end_date - depreciation_date).days / total_days if asset.prorata or asset.method_time == 'end': undone_dotation_number += 1 - for i in range(1, undone_dotation_number+1): - if i == undone_dotation_number + 1: + 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 + 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: @@ -140,14 +148,10 @@ class account_asset_asset(osv.osv): 'sequence': i, 'name': str(asset.id) +'/' + str(i), 'remaining_value': residual_amount, - 'depreciated_value': amount_to_depr - residual_amount, + 'depreciated_value': (asset.purchase_value - asset.salvage_value) - (residual_amount + amount), 'depreciation_date': depreciation_date.strftime('%Y-%m-%d'), } - dep_id = [dep.id for dep in asset.depreciation_line_ids if not dep.move_check and dep.sequence == vals['sequence']] - if asset.depreciation_line_ids: - depreciation_lin_obj.write(cr, uid, dep_id, vals, context=context) - else: - depreciation_lin_obj.create(cr, uid, vals, context=context) + depreciation_lin_obj.create(cr, uid, vals, context=context) # Considering Depr. Period as months depreciation_date = (datetime(year, month, day) + relativedelta(months=+asset.method_period)) day = depreciation_date.day @@ -246,6 +250,12 @@ class account_asset_asset(osv.osv): } return res + def onchange_method_time(self, cr, uid, ids, method='linear', method_time='delay', context=None): + res = {'value': {}} + if method != 'linear' or method_time != 'delay': + res['value'] = {'prorata': False} + return res + def copy(self, cr, uid, id, default=None, context=None): if default is None: default = {} diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml index 48e077c746f..bebaa40fea0 100644 --- a/addons/account_asset/account_asset_view.xml +++ b/addons/account_asset/account_asset_view.xml @@ -86,16 +86,16 @@ type="action" colspan="2"/> - + - + - + @@ -104,9 +104,9 @@ + - - +