From 84a134c46d70b8eac0663e4f8c578a1002a1b36b Mon Sep 17 00:00:00 2001 From: "Quentin (OpenERP)" Date: Wed, 10 Jul 2013 23:56:55 +0200 Subject: [PATCH] [FIX] account_anglo_saxon: backport of revision 8787 of trunk bzr revid: qdp-launchpad@openerp.com-20130710215655-5ym1u4ecsmqdw30n --- addons/account_anglo_saxon/purchase.py | 10 ++--- addons/purchase/purchase.py | 28 ++++++------ .../purchase/wizard/purchase_line_invoice.py | 44 +++++-------------- 3 files changed, 30 insertions(+), 52 deletions(-) diff --git a/addons/account_anglo_saxon/purchase.py b/addons/account_anglo_saxon/purchase.py index 959f8b7eb49..fc36dab41c2 100644 --- a/addons/account_anglo_saxon/purchase.py +++ b/addons/account_anglo_saxon/purchase.py @@ -26,17 +26,15 @@ class purchase_order(osv.osv): _inherit = "purchase.order" _description = "Purchase Order" - def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None): - line = super(purchase_order, self)._prepare_inv_line(cr, uid, account_id, order_line, context=context) + def _choose_account_from_po_line(self, cr, uid, order_line, context=None): + account_id = super(purchase_order, self)._choose_account_from_po_line(cr, uid, order_line, context=context) if order_line.product_id and not order_line.product_id.type == 'service': acc_id = order_line.product_id.property_stock_account_input and order_line.product_id.property_stock_account_input.id if not acc_id: acc_id = order_line.product_id.categ_id.property_stock_account_input_categ and order_line.product_id.categ_id.property_stock_account_input_categ.id if acc_id: fpos = order_line.order_id.fiscal_position or False - new_account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, acc_id) - line.update({'account_id': new_account_id}) - return line -purchase_order() + account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, fpos, acc_id) + return account_id # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: diff --git a/addons/purchase/purchase.py b/addons/purchase/purchase.py index a7973a40a47..f4a28bc9934 100644 --- a/addons/purchase/purchase.py +++ b/addons/purchase/purchase.py @@ -465,6 +465,20 @@ class purchase_order(osv.osv): self.write(cr, uid, [id], {'state' : 'confirmed', 'validator' : uid}) return True + def _choose_account_from_po_line(self, cr, uid, po_line, context=None): + fiscal_obj = self.pool.get('account.fiscal.position') + property_obj = self.pool.get('ir.property') + if po_line.product_id: + acc_id = po_line.product_id.property_account_expense.id + if not acc_id: + acc_id = po_line.product_id.categ_id.property_account_expense_categ.id + if not acc_id: + raise osv.except_osv(_('Error!'), _('Define expense account for this company: "%s" (id:%d).') % (po_line.product_id.name, po_line.product_id.id,)) + else: + acc_id = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category').id + fpos = po_line.order_id.fiscal_position or False + return fiscal_obj.map_account(cr, uid, fpos, acc_id) + def _prepare_inv_line(self, cr, uid, account_id, order_line, context=None): """Collects require data from purchase order line that is used to create invoice line for that purchase order line @@ -506,8 +520,6 @@ class purchase_order(osv.osv): journal_obj = self.pool.get('account.journal') inv_obj = self.pool.get('account.invoice') inv_line_obj = self.pool.get('account.invoice.line') - fiscal_obj = self.pool.get('account.fiscal.position') - property_obj = self.pool.get('ir.property') for order in self.browse(cr, uid, ids, context=context): pay_acc_id = order.partner_id.property_account_payable.id @@ -519,17 +531,7 @@ class purchase_order(osv.osv): # generate invoice line correspond to PO line and link that to created invoice (inv_id) and PO line inv_lines = [] for po_line in order.order_line: - if po_line.product_id: - acc_id = po_line.product_id.property_account_expense.id - if not acc_id: - acc_id = po_line.product_id.categ_id.property_account_expense_categ.id - if not acc_id: - raise osv.except_osv(_('Error!'), _('Define expense account for this company: "%s" (id:%d).') % (po_line.product_id.name, po_line.product_id.id,)) - else: - acc_id = property_obj.get(cr, uid, 'property_account_expense_categ', 'product.category').id - fpos = order.fiscal_position or False - acc_id = fiscal_obj.map_account(cr, uid, fpos, acc_id) - + acc_id = self._choose_account_from_po_line(cr, uid, po_line, context=context) inv_line_data = self._prepare_inv_line(cr, uid, acc_id, po_line, context=context) inv_line_id = inv_line_obj.create(cr, uid, inv_line_data, context=context) inv_lines.append(inv_line_id) diff --git a/addons/purchase/wizard/purchase_line_invoice.py b/addons/purchase/wizard/purchase_line_invoice.py index 12dbf4a09f6..e70234884ef 100644 --- a/addons/purchase/wizard/purchase_line_invoice.py +++ b/addons/purchase/wizard/purchase_line_invoice.py @@ -48,12 +48,11 @@ class purchase_line_invoice(osv.osv_memory): if record_ids: res = False invoices = {} - invoice_obj=self.pool.get('account.invoice') - purchase_line_obj=self.pool.get('purchase.order.line') - property_obj=self.pool.get('ir.property') - account_fiscal_obj=self.pool.get('account.fiscal.position') - invoice_line_obj=self.pool.get('account.invoice.line') - account_jrnl_obj=self.pool.get('account.journal') + invoice_obj = self.pool.get('account.invoice') + purchase_obj = self.pool.get('purchase.order') + purchase_line_obj = self.pool.get('purchase.order.line') + invoice_line_obj = self.pool.get('account.invoice.line') + account_jrnl_obj = self.pool.get('account.journal') def multiple_order_invoice_notes(orders): notes = "" @@ -93,35 +92,14 @@ class purchase_line_invoice(osv.osv_memory): order.write({'invoice_ids': [(4, inv_id)]}) return inv_id - for line in purchase_line_obj.browse(cr,uid,record_ids): - if (not line.invoiced) and (line.state not in ('draft','cancel')): + for line in purchase_line_obj.browse(cr, uid, record_ids, context=context): + if (not line.invoiced) and (line.state not in ('draft', 'cancel')): if not line.partner_id.id in invoices: invoices[line.partner_id.id] = [] - if line.product_id: - a = line.product_id.property_account_expense.id - if not a: - a = line.product_id.categ_id.property_account_expense_categ.id - if not a: - raise osv.except_osv(_('Error!'), - _('Define expense account for this product: "%s" (id:%d).') % \ - (line.product_id.name, line.product_id.id,)) - else: - a = property_obj.get(cr, uid, - 'property_account_expense_categ', 'product.category', - context=context).id - fpos = line.order_id.fiscal_position or False - a = account_fiscal_obj.map_account(cr, uid, fpos, a) - inv_id = invoice_line_obj.create(cr, uid, { - 'name': line.name, - 'origin': line.order_id.name, - 'account_id': a, - 'price_unit': line.price_unit, - 'quantity': line.product_qty, - 'uos_id': line.product_uom.id, - 'product_id': line.product_id.id or False, - 'invoice_line_tax_id': [(6, 0, [x.id for x in line.taxes_id])], - 'account_analytic_id': line.account_analytic_id and line.account_analytic_id.id or False, - }) + acc_id = purchase_obj._choose_account_from_po_line(cr, uid, line, context=context) + inv_line_data = purchase_obj._prepare_inv_line(cr, uid, acc_id, line, context=context) + inv_line_data.update({'origin': line.order_id.name}) + inv_id = invoice_line_obj.create(cr, uid, inv_line_data, context=context) purchase_line_obj.write(cr, uid, [line.id], {'invoiced': True, 'invoice_lines': [(4, inv_id)]}) invoices[line.partner_id.id].append((line,inv_id))