From a0154cca0621c7c9de8e89f96a00f75a8738585d Mon Sep 17 00:00:00 2001 From: "Ujjvala Collins (OpenERP)" Date: Wed, 8 Jun 2011 19:05:53 +0530 Subject: [PATCH 1/8] [FIX] account_asset: Fixed problem of change in params when computing depreciation lines. bzr revid: uco@tinyerp.com-20110608133553-f9039h3zjvmj6do3 --- addons/account_asset/account_asset.py | 11 ++++++----- addons/account_asset/account_asset_view.xml | 2 +- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index 67556639fe5..498894ea68f 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -105,6 +105,9 @@ 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): + 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) # For all cases: amount to depreciate is (Purchase Value - Salvage Value) amount_to_depr = residual_amount = asset.purchase_value - asset.salvage_value depreciation_date = datetime.strptime(self._get_last_depreciation_date(cr, uid, [asset.id], context)[asset.id], '%Y-%m-%d') @@ -134,6 +137,8 @@ class account_asset_asset(osv.osv): else: amount = residual_amount * asset.method_progress_factor residual_amount -= amount + if i <= len(asset.account_move_line_ids): + continue vals = { 'amount': amount, 'asset_id': asset.id, @@ -143,11 +148,7 @@ class account_asset_asset(osv.osv): 'depreciated_value': amount_to_depr - residual_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 diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml index 9748110640c..2a578117ffe 100644 --- a/addons/account_asset/account_asset_view.xml +++ b/addons/account_asset/account_asset_view.xml @@ -91,7 +91,7 @@ - + From 6806f33ed7398724cbd75cc072e4052ae05d504f Mon Sep 17 00:00:00 2001 From: "Ujjvala Collins (OpenERP)" Date: Thu, 9 Jun 2011 12:57:28 +0530 Subject: [PATCH 2/8] [REF] account_asset: Small corrections. bzr revid: uco@tinyerp.com-20110609072728-0hmyg18oc1rhcr63 --- addons/account_asset/account_asset.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index 498894ea68f..9862cd5c48b 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -137,8 +137,11 @@ class account_asset_asset(osv.osv): else: amount = residual_amount * asset.method_progress_factor residual_amount -= amount + + # To skip already created lines if i <= len(asset.account_move_line_ids): continue + vals = { 'amount': amount, 'asset_id': asset.id, @@ -149,6 +152,7 @@ class account_asset_asset(osv.osv): 'depreciation_date': depreciation_date.strftime('%Y-%m-%d'), } 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 From b21a1bfcfd60122cc6a4b86e9128d10e6d7068cc Mon Sep 17 00:00:00 2001 From: "Ujjvala Collins (OpenERP)" Date: Thu, 9 Jun 2011 15:55:52 +0530 Subject: [PATCH 3/8] [IMP] account_asset: Improved calcultion of depreciation lines. bzr revid: uco@tinyerp.com-20110609102552-z3hdmf8gp3j57f33 --- addons/account_asset/account_asset.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index 9862cd5c48b..bf92467def5 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -108,14 +108,16 @@ class account_asset_asset(osv.osv): 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) - # For all cases: amount to depreciate is (Purchase Value - Salvage Value) - amount_to_depr = residual_amount = asset.purchase_value - asset.salvage_value + + 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 year = depreciation_date.year total_days = (year % 4) and 365 or 366 - undone_dotation_number = asset.method_delay + + undone_dotation_number = asset.method_delay - len(asset.account_move_line_ids) 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 @@ -138,10 +140,6 @@ class account_asset_asset(osv.osv): amount = residual_amount * asset.method_progress_factor residual_amount -= amount - # To skip already created lines - if i <= len(asset.account_move_line_ids): - continue - vals = { 'amount': amount, 'asset_id': asset.id, From 5aed3a1b0c619655e83c0af71b54b9318cded5b3 Mon Sep 17 00:00:00 2001 From: "Ujjvala Collins (OpenERP)" Date: Thu, 9 Jun 2011 18:55:59 +0530 Subject: [PATCH 4/8] [ADD,FIX] account_asset: Added onchange method for computation method and time method. Fixed problem of depreciation dates. bzr revid: uco@tinyerp.com-20110609132559-1r9hml4d1j73dtfv --- addons/account_asset/account_asset.py | 15 ++++++++++++--- addons/account_asset/account_asset_view.xml | 4 ++-- 2 files changed, 14 insertions(+), 5 deletions(-) diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index bf92467def5..189ffdec22d 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -110,12 +110,14 @@ class account_asset_asset(osv.osv): 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 year = depreciation_date.year total_days = (year % 4) and 365 or 366 + if asset.account_move_line_ids: + add_months = asset.method_period * len(asset.account_move_line_ids) + depreciation_date = (datetime(year, month, day) + relativedelta(months=+add_months)) undone_dotation_number = asset.method_delay - len(asset.account_move_line_ids) if asset.method_time == 'end': @@ -123,6 +125,7 @@ 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: amount = residual_amount @@ -139,7 +142,6 @@ class account_asset_asset(osv.osv): else: amount = residual_amount * asset.method_progress_factor residual_amount -= amount - vals = { 'amount': amount, 'asset_id': asset.id, @@ -152,10 +154,11 @@ class account_asset_asset(osv.osv): 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 month = depreciation_date.month year = depreciation_date.year + depreciation_date = (datetime(year, month, day) + relativedelta(months=+asset.method_period)) + return True def validate(self, cr, uid, ids, context={}): @@ -248,6 +251,12 @@ class account_asset_asset(osv.osv): 'prorata': category_obj.prorata, } 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: diff --git a/addons/account_asset/account_asset_view.xml b/addons/account_asset/account_asset_view.xml index 2a578117ffe..cd7eda512f0 100644 --- a/addons/account_asset/account_asset_view.xml +++ b/addons/account_asset/account_asset_view.xml @@ -85,10 +85,10 @@ type="action" colspan="2"/> - + - + From 0c7b3fa6bb220626453e67c8c02037e5234d297c Mon Sep 17 00:00:00 2001 From: "Ujjvala Collins (OpenERP)" Date: Fri, 10 Jun 2011 18:39:26 +0530 Subject: [PATCH 5/8] [FIX] account_asset: Fixed problem of ending date method. bzr revid: uco@tinyerp.com-20110610130926-tlprfn7nphowj8hx --- addons/account_asset/account_asset.py | 39 +++++++++++++++------------ 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index 189ffdec22d..2c5b63a8479 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -101,7 +101,10 @@ class account_asset_asset(osv.osv): WHERE a.id IN %s GROUP BY a.id, a.purchase_date """, (tuple(ids),)) return dict(cr.fetchall()) - + + def calculate_date(self, date, period): + return datetime(date.year, date.month, date.day) + relativedelta(months=+period) + 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): @@ -110,20 +113,25 @@ class account_asset_asset(osv.osv): depreciation_lin_obj.unlink(cr, uid, old_depreciation_line_ids, context=context) amount_to_depr = residual_amount = asset.value_residual + add_months = asset.method_period * len(asset.account_move_line_ids) 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 - year = depreciation_date.year - total_days = (year % 4) and 365 or 366 - if asset.account_move_line_ids: - add_months = asset.method_period * len(asset.account_move_line_ids) - depreciation_date = (datetime(year, month, day) + relativedelta(months=+add_months)) - + depreciation_date = self.calculate_date(depreciation_date, add_months) + total_days = (depreciation_date.year % 4) and 365 or 366 undone_dotation_number = asset.method_delay - len(asset.account_move_line_ids) - if asset.method_time == 'end': + if asset.method_time == 'end' and asset.value_residual != 0: + start_date = depreciation_date 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 + while True: + if start_date <= end_date: + start_date = self.calculate_date(start_date, asset.method_period) + undone_dotation_number += 1 + else: + break + if start_date > end_date: + undone_dotation_number -= 1 + + if asset.prorata: undone_dotation_number += 1 for i in range(1, undone_dotation_number+1): @@ -132,7 +140,7 @@ class account_asset_asset(osv.osv): else: if asset.method == 'linear': amount = amount_to_depr / undone_dotation_number - if asset.prorata: + if asset.prorata and not asset.account_move_line_ids: amount = amount_to_depr / asset.method_delay if i == 1: days = total_days - float(depreciation_date.strftime('%j')) @@ -154,10 +162,7 @@ class account_asset_asset(osv.osv): depreciation_lin_obj.create(cr, uid, vals, context=context) # Considering Depr. Period as months - day = depreciation_date.day - month = depreciation_date.month - year = depreciation_date.year - depreciation_date = (datetime(year, month, day) + relativedelta(months=+asset.method_period)) + depreciation_date = self.calculate_date(depreciation_date, asset.method_period) return True From 79f28936f5480e86743b8e4239da6d727722e8ce Mon Sep 17 00:00:00 2001 From: "Ujjvala Collins (OpenERP)" Date: Fri, 10 Jun 2011 18:59:37 +0530 Subject: [PATCH 6/8] [IMP] account_asset: Small improvement. bzr revid: uco@tinyerp.com-20110610132937-syniedgbntmjq48u --- addons/account_asset/account_asset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index 2c5b63a8479..113d4322272 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -113,7 +113,7 @@ class account_asset_asset(osv.osv): depreciation_lin_obj.unlink(cr, uid, old_depreciation_line_ids, context=context) amount_to_depr = residual_amount = asset.value_residual - add_months = asset.method_period * len(asset.account_move_line_ids) + add_months = len(asset.account_move_line_ids) and asset.method_period * len(asset.account_move_line_ids) or 0 depreciation_date = datetime.strptime(self._get_last_depreciation_date(cr, uid, [asset.id], context)[asset.id], '%Y-%m-%d') depreciation_date = self.calculate_date(depreciation_date, add_months) total_days = (depreciation_date.year % 4) and 365 or 366 From fff4963e2ff8b9339ab7f51de5658e85100ec47f Mon Sep 17 00:00:00 2001 From: "Ujjvala Collins (OpenERP)" Date: Mon, 13 Jun 2011 12:14:36 +0530 Subject: [PATCH 7/8] [FIX] account_asset: Fixed problem of depreciation lines when residual value is 0. bzr revid: uco@tinyerp.com-20110613064436-p4o9isalkdw765e7 --- addons/account_asset/account_asset.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index 113d4322272..ca53e30611f 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -108,6 +108,8 @@ 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): + if asset.value_residual == 0: + continue 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) @@ -118,7 +120,7 @@ class account_asset_asset(osv.osv): depreciation_date = self.calculate_date(depreciation_date, add_months) total_days = (depreciation_date.year % 4) and 365 or 366 undone_dotation_number = asset.method_delay - len(asset.account_move_line_ids) - if asset.method_time == 'end' and asset.value_residual != 0: + if asset.method_time == 'end': start_date = depreciation_date end_date = datetime.strptime(asset.method_end, '%Y-%m-%d') undone_dotation_number = 1 From f644d2643928f4bac5cc4a10225d30ce4f824ad1 Mon Sep 17 00:00:00 2001 From: "Ujjvala Collins (OpenERP)" Date: Mon, 13 Jun 2011 12:38:52 +0530 Subject: [PATCH 8/8] [FIX] account_asset: Small change. bzr revid: uco@tinyerp.com-20110613070852-1pnhhwsxhs0acg9o --- addons/account_asset/account_asset.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account_asset/account_asset.py b/addons/account_asset/account_asset.py index ca53e30611f..e823650bfcc 100644 --- a/addons/account_asset/account_asset.py +++ b/addons/account_asset/account_asset.py @@ -108,7 +108,7 @@ 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): - if asset.value_residual == 0: + if asset.value_residual == 0.0: continue old_depreciation_line_ids = depreciation_lin_obj.search(cr, uid, [('asset_id', '=', asset.id), ('move_id', '=', False)]) if old_depreciation_line_ids: