From 1874ca53b8ca95f55ff1a3a57472adc87ade3960 Mon Sep 17 00:00:00 2001 From: "pso (OpenERP)" Date: Thu, 14 Apr 2011 11:12:10 +0530 Subject: [PATCH 1/6] [FIX] account: Fixed wrong computation of amount currency in analytic line lp bug: https://launchpad.net/bugs/717198 fixed bzr revid: pso@tinyerp.com-20110414054210-67don64hp8ajcv8v --- addons/account/account_analytic_line.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/addons/account/account_analytic_line.py b/addons/account/account_analytic_line.py index a93dc70b2fb..f41e0c707c8 100644 --- a/addons/account/account_analytic_line.py +++ b/addons/account/account_analytic_line.py @@ -28,6 +28,20 @@ from tools.translate import _ class account_analytic_line(osv.osv): _inherit = 'account.analytic.line' _description = 'Analytic Line' + + def _get_amount(self, cr, uid, ids, name, args, context=None): + res = {} + if not ids: + return res + for id in ids: + res.setdefault(id, 0.0) + for line in self.browse(cr, uid, ids, context=context): + from_currency_id = line.company_id.currency_id.id + to_currency_id = line.currency_id.id + from_amount = line.amount + res[line.id] = self.pool.get('res.currency').compute(cr, uid, from_currency_id, to_currency_id, from_amount, round=True, context=context) + return res + _columns = { 'product_uom_id': fields.many2one('product.uom', 'UoM'), 'product_id': fields.many2one('product.product', 'Product'), @@ -37,7 +51,7 @@ class account_analytic_line(osv.osv): 'code': fields.char('Code', size=8), 'ref': fields.char('Ref.', size=64), 'currency_id': fields.related('move_id', 'currency_id', type='many2one', relation='res.currency', string='Account currency', store=True, help="The related account currency if not equal to the company one.", readonly=True), - 'amount_currency': fields.related('move_id', 'amount_currency', type='float', string='Amount currency', store=True, help="The amount expressed in the related account currency if not equal to the company one.", readonly=True), + 'amount_currency': fields.function(_get_amount, string="Amount Currency", type="float", method=True, store=True, help="The amount expressed in the related account currency if not equal to the company one.", readonly=True), } _defaults = { From 9d96add953aefddf10a7d0ed4be312e2fc935d26 Mon Sep 17 00:00:00 2001 From: "pso (OpenERP)" Date: Thu, 14 Apr 2011 12:06:06 +0530 Subject: [PATCH 2/6] [IMP] account, account_analytic_plans: Moved amount currency function from account to analytic plans bzr revid: pso@tinyerp.com-20110414063606-4ssc3esyxdn1s22w --- addons/account/account_analytic_line.py | 15 +----------- .../account_analytic_plans.py | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/addons/account/account_analytic_line.py b/addons/account/account_analytic_line.py index f41e0c707c8..c43391f85dc 100644 --- a/addons/account/account_analytic_line.py +++ b/addons/account/account_analytic_line.py @@ -29,19 +29,6 @@ class account_analytic_line(osv.osv): _inherit = 'account.analytic.line' _description = 'Analytic Line' - def _get_amount(self, cr, uid, ids, name, args, context=None): - res = {} - if not ids: - return res - for id in ids: - res.setdefault(id, 0.0) - for line in self.browse(cr, uid, ids, context=context): - from_currency_id = line.company_id.currency_id.id - to_currency_id = line.currency_id.id - from_amount = line.amount - res[line.id] = self.pool.get('res.currency').compute(cr, uid, from_currency_id, to_currency_id, from_amount, round=True, context=context) - return res - _columns = { 'product_uom_id': fields.many2one('product.uom', 'UoM'), 'product_id': fields.many2one('product.product', 'Product'), @@ -51,7 +38,7 @@ class account_analytic_line(osv.osv): 'code': fields.char('Code', size=8), 'ref': fields.char('Ref.', size=64), 'currency_id': fields.related('move_id', 'currency_id', type='many2one', relation='res.currency', string='Account currency', store=True, help="The related account currency if not equal to the company one.", readonly=True), - 'amount_currency': fields.function(_get_amount, string="Amount Currency", type="float", method=True, store=True, help="The amount expressed in the related account currency if not equal to the company one.", readonly=True), + 'amount_currency': fields.related('move_id', 'amount_currency', type='float', string='Amount currency', store=True, help="The amount expressed in the related account currency if not equal to the company one.", readonly=True), } _defaults = { diff --git a/addons/account_analytic_plans/account_analytic_plans.py b/addons/account_analytic_plans/account_analytic_plans.py index b25f6994394..14fce624c7f 100644 --- a/addons/account_analytic_plans/account_analytic_plans.py +++ b/addons/account_analytic_plans/account_analytic_plans.py @@ -47,6 +47,29 @@ class one2many_mod2(fields.one2many): res[r[self._fields_id]].append( r['id'] ) return res +class account_analytic_line(osv.osv): + _inherit = 'account.analytic.line' + _description = 'Analytic Line' + + def _get_amount(self, cr, uid, ids, name, args, context=None): + res = {} + if not ids: + return res + for id in ids: + res.setdefault(id, 0.0) + for line in self.browse(cr, uid, ids, context=context): + from_currency_id = line.company_id.currency_id.id + to_currency_id = line.currency_id.id + from_amount = line.amount + res[line.id] = self.pool.get('res.currency').compute(cr, uid, from_currency_id, to_currency_id, from_amount, round=True, context=context) + return res + + _columns = { + 'amount_currency': fields.function(_get_amount, string="Amount Currency", type="float", method=True, store=True, help="The amount expressed in the related account currency if not equal to the company one.", readonly=True), + } + +account_analytic_line() + class account_analytic_plan(osv.osv): _name = "account.analytic.plan" _description = "Analytic Plan" From 11644bde680b5ee991c3f50a50631ed8c8e05808 Mon Sep 17 00:00:00 2001 From: "pso (OpenERP)" Date: Fri, 15 Apr 2011 11:30:50 +0530 Subject: [PATCH 3/6] [IMP] account, account_analytic_plans: Improvements in amount currency func and removed extra spaces bzr revid: pso@tinyerp.com-20110415060050-mzt5k94o63y8n43r --- addons/account/account_analytic_line.py | 1 - addons/account_analytic_plans/account_analytic_plans.py | 3 ++- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/account/account_analytic_line.py b/addons/account/account_analytic_line.py index c43391f85dc..a93dc70b2fb 100644 --- a/addons/account/account_analytic_line.py +++ b/addons/account/account_analytic_line.py @@ -28,7 +28,6 @@ from tools.translate import _ class account_analytic_line(osv.osv): _inherit = 'account.analytic.line' _description = 'Analytic Line' - _columns = { 'product_uom_id': fields.many2one('product.uom', 'UoM'), 'product_id': fields.many2one('product.product', 'Product'), diff --git a/addons/account_analytic_plans/account_analytic_plans.py b/addons/account_analytic_plans/account_analytic_plans.py index 14fce624c7f..307c1214ec7 100644 --- a/addons/account_analytic_plans/account_analytic_plans.py +++ b/addons/account_analytic_plans/account_analytic_plans.py @@ -57,11 +57,12 @@ class account_analytic_line(osv.osv): return res for id in ids: res.setdefault(id, 0.0) + currency_obj = self.pool.get('res.currency') for line in self.browse(cr, uid, ids, context=context): from_currency_id = line.company_id.currency_id.id to_currency_id = line.currency_id.id from_amount = line.amount - res[line.id] = self.pool.get('res.currency').compute(cr, uid, from_currency_id, to_currency_id, from_amount, round=True, context=context) + res[line.id] = currency_obj.compute(cr, uid, from_currency_id, to_currency_id, from_amount, round=True, context=context) return res _columns = { From a864885c72033d971d56548477527acaf10ca22d Mon Sep 17 00:00:00 2001 From: "pso (OpenERP)" Date: Fri, 15 Apr 2011 11:47:54 +0530 Subject: [PATCH 4/6] [IMP] account_analytic_plans: Declared object at the starting of fucntion bzr revid: pso@tinyerp.com-20110415061754-5kkpc3de6tt2cizj --- addons/account_analytic_plans/account_analytic_plans.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/addons/account_analytic_plans/account_analytic_plans.py b/addons/account_analytic_plans/account_analytic_plans.py index 307c1214ec7..3285e1c1562 100644 --- a/addons/account_analytic_plans/account_analytic_plans.py +++ b/addons/account_analytic_plans/account_analytic_plans.py @@ -53,11 +53,11 @@ class account_analytic_line(osv.osv): def _get_amount(self, cr, uid, ids, name, args, context=None): res = {} + currency_obj = self.pool.get('res.currency') if not ids: return res for id in ids: res.setdefault(id, 0.0) - currency_obj = self.pool.get('res.currency') for line in self.browse(cr, uid, ids, context=context): from_currency_id = line.company_id.currency_id.id to_currency_id = line.currency_id.id From 0036d659495c06050e8874a6be69dedb212a314d Mon Sep 17 00:00:00 2001 From: "pso (OpenERP)" Date: Fri, 6 May 2011 10:51:05 +0530 Subject: [PATCH 5/6] [IMP] account_analytic_plans: Added new field percentage, Improved create_analytic_lines and get amount from amount currency of move line bzr revid: pso@tinyerp.com-20110506052105-t28i1jyn9nf2zbfy --- .../account_analytic_plans/account_analytic_plans.py | 9 ++++----- .../account_analytic_plans_view.xml | 12 ++++++++++++ 2 files changed, 16 insertions(+), 5 deletions(-) diff --git a/addons/account_analytic_plans/account_analytic_plans.py b/addons/account_analytic_plans/account_analytic_plans.py index 3285e1c1562..4498fb1e1d3 100644 --- a/addons/account_analytic_plans/account_analytic_plans.py +++ b/addons/account_analytic_plans/account_analytic_plans.py @@ -53,20 +53,18 @@ class account_analytic_line(osv.osv): def _get_amount(self, cr, uid, ids, name, args, context=None): res = {} - currency_obj = self.pool.get('res.currency') if not ids: return res for id in ids: res.setdefault(id, 0.0) for line in self.browse(cr, uid, ids, context=context): - from_currency_id = line.company_id.currency_id.id - to_currency_id = line.currency_id.id - from_amount = line.amount - res[line.id] = currency_obj.compute(cr, uid, from_currency_id, to_currency_id, from_amount, round=True, context=context) + amount = line.move_id.amount_currency * (line.percentage / 100) + res[line.id] = amount return res _columns = { 'amount_currency': fields.function(_get_amount, string="Amount Currency", type="float", method=True, store=True, help="The amount expressed in the related account currency if not equal to the company one.", readonly=True), + 'percentage': fields.float('Percentage') } account_analytic_line() @@ -362,6 +360,7 @@ class account_move_line(osv.osv): 'move_id': line.id, 'journal_id': line.journal_id.analytic_journal_id.id, 'ref': line.ref, + 'percentage': line2.rate } analytic_line_obj.create(cr, uid, al_vals, context=context) return True diff --git a/addons/account_analytic_plans/account_analytic_plans_view.xml b/addons/account_analytic_plans/account_analytic_plans_view.xml index 8282461e512..4f7096d031c 100644 --- a/addons/account_analytic_plans/account_analytic_plans_view.xml +++ b/addons/account_analytic_plans/account_analytic_plans_view.xml @@ -312,5 +312,17 @@ + + account.analytic.line.percentage.form + account.analytic.line + form + + + + + + + + From 1c4add74501f91238d310f98034c1370ccc31754 Mon Sep 17 00:00:00 2001 From: "pso (OpenERP)" Date: Fri, 6 May 2011 11:35:07 +0530 Subject: [PATCH 6/6] [IMP] account_analytic_plans: Improved function for amount currency bzr revid: pso@tinyerp.com-20110506060507-pdm26vbzn9mfbqd5 --- addons/account_analytic_plans/account_analytic_plans.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/addons/account_analytic_plans/account_analytic_plans.py b/addons/account_analytic_plans/account_analytic_plans.py index 4498fb1e1d3..990f53e91ef 100644 --- a/addons/account_analytic_plans/account_analytic_plans.py +++ b/addons/account_analytic_plans/account_analytic_plans.py @@ -53,12 +53,10 @@ class account_analytic_line(osv.osv): def _get_amount(self, cr, uid, ids, name, args, context=None): res = {} - if not ids: - return res for id in ids: res.setdefault(id, 0.0) for line in self.browse(cr, uid, ids, context=context): - amount = line.move_id.amount_currency * (line.percentage / 100) + amount = line.move_id and line.move_id.amount_currency * (line.percentage / 100) or 0.0 res[line.id] = amount return res