From 0d1a331d502ac9800e13b49b9e0c39aa4fc76f99 Mon Sep 17 00:00:00 2001 From: "renatonlima@gmail.com" <> Date: Tue, 4 Oct 2011 19:39:05 -0300 Subject: [PATCH] Merge proposal to make action_create_invoice more extensible bzr revid: renatonlima@gmail.com-20111004223905-diinb3pmflbt9jrr --- addons/stock/stock.py | 107 ++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 55 deletions(-) diff --git a/addons/stock/stock.py b/addons/stock/stock.py index d9debe6641b..c329da51e97 100644 --- a/addons/stock/stock.py +++ b/addons/stock/stock.py @@ -955,6 +955,51 @@ class stock_picking(osv.osv): else: inv_type = 'out_invoice' return inv_type + + def _prepare_invoice(self, cr, uid, picking, partner, payment_term_id, account_id, inv_type, journal_id, context=False): + + address_contact_id, address_invoice_id = \ + self._get_address_invoice(cr, uid, picking).values() + + return { + 'name': picking.name, + 'origin': (picking.name or '') + (picking.origin and (':' + picking.origin) or ''), + 'type': inv_type, + 'account_id': account_id, + 'partner_id': partner.id, + 'address_invoice_id': address_invoice_id, + 'address_contact_id': address_contact_id, + 'comment': self._get_comment_invoice(cr, uid, picking), + 'payment_term': payment_term_id, + 'fiscal_position': partner.property_account_position.id, + 'date_invoice': context.get('date_inv',False), + 'company_id': picking.company_id.id, + 'user_id':uid, + 'currency_id': self.get_currency_id(cr, uid, picking) or False, + 'journal_id': journal_id, + } + + def _prepare_invoice_line(self, cr, uid, group, picking, move_line, invoice_id, account_id, inv_type, context=False): + + #set UoS if it's a sale and the picking doesn't have one + uos_id = move_line.product_uos and move_line.product_uos.id or False + if not uos_id and inv_type in ('out_invoice', 'out_refund'): + uos_id = move_line.product_uom.id + + return { + 'name': group and picking.name and picking.name + '-' + move_line.name or move_line.name, + 'origin': move_line.picking_id.origin and move_line.picking_id.name and (move_line.picking_id.origin + ':' + move_line.picking_id.name) or (move_line.picking_id.name or ''), + 'invoice_id': invoice_id, + 'uos_id': uos_id, + 'product_id': move_line.product_id.id, + 'account_id': account_id, + 'price_unit': self._get_price_unit_invoice(cr, uid,move_line, inv_type), + 'discount': self._get_discount_invoice(cr, uid, move_line), + 'quantity': move_line.product_uos_qty or move_line.product_qty, + 'invoice_line_tax_id': [(6, 0, self._get_taxes_invoice(cr, uid, move_line, inv_type))], + 'account_analytic_id': self._get_account_analytic_invoice(cr, uid, picking, move_line), + } + def action_invoice_create(self, cr, uid, ids, journal_id=False, group=False, type='out_invoice', context=None): @@ -1008,41 +1053,14 @@ class stock_picking(osv.osv): } invoice_obj.write(cr, uid, [invoice_id], invoice_vals, context=context) else: - invoice_vals = { - 'name': picking.name, - 'origin': (picking.name or '') + (picking.origin and (':' + picking.origin) or ''), - 'type': inv_type, - 'account_id': account_id, - 'partner_id': address.partner_id.id, - 'address_invoice_id': address_invoice_id, - 'address_contact_id': address_contact_id, - 'comment': comment, - 'payment_term': payment_term_id, - 'fiscal_position': partner.property_account_position.id, - 'date_invoice': context.get('date_inv',False), - 'company_id': picking.company_id.id, - 'user_id':uid - } - cur_id = self.get_currency_id(cr, uid, picking) - if cur_id: - invoice_vals['currency_id'] = cur_id - if journal_id: - invoice_vals['journal_id'] = journal_id - invoice_id = invoice_obj.create(cr, uid, invoice_vals, - context=context) + invoice_id = invoice_obj.create(cr, uid, self._prepare_invoice(cr, uid, picking, partner, \ + payment_term_id, account_id, inv_type, journal_id, context), context=context) invoices_group[partner.id] = invoice_id res[picking.id] = invoice_id for move_line in picking.move_lines: if move_line.state == 'cancel': continue - origin = move_line.picking_id.name or '' - if move_line.picking_id.origin: - origin += ':' + move_line.picking_id.origin - if group: - name = (picking.name or '') + '-' + move_line.name - else: - name = move_line.name - + if inv_type in ('out_invoice', 'out_refund'): account_id = move_line.product_id.product_tmpl_id.\ property_account_income.id @@ -1055,32 +1073,11 @@ class stock_picking(osv.osv): if not account_id: account_id = move_line.product_id.categ_id.\ property_account_expense_categ.id - - price_unit = self._get_price_unit_invoice(cr, uid, - move_line, inv_type) - discount = self._get_discount_invoice(cr, uid, move_line) - tax_ids = self._get_taxes_invoice(cr, uid, move_line, inv_type) - account_analytic_id = self._get_account_analytic_invoice(cr, uid, picking, move_line) - - #set UoS if it's a sale and the picking doesn't have one - uos_id = move_line.product_uos and move_line.product_uos.id or False - if not uos_id and inv_type in ('out_invoice', 'out_refund'): - uos_id = move_line.product_uom.id - + account_id = self.pool.get('account.fiscal.position').map_account(cr, uid, partner.property_account_position, account_id) - invoice_line_id = invoice_line_obj.create(cr, uid, { - 'name': name, - 'origin': origin, - 'invoice_id': invoice_id, - 'uos_id': uos_id, - 'product_id': move_line.product_id.id, - 'account_id': account_id, - 'price_unit': price_unit, - 'discount': discount, - 'quantity': move_line.product_uos_qty or move_line.product_qty, - 'invoice_line_tax_id': [(6, 0, tax_ids)], - 'account_analytic_id': account_analytic_id, - }, context=context) + + invoice_line_id = invoice_line_obj.create(cr, uid, self._prepare_invoice_line(cr, uid, group, picking, move_line, \ + invoice_id, account_id, inv_type, context=context), context=context) self._invoice_line_hook(cr, uid, move_line, invoice_line_id) invoice_obj.button_compute(cr, uid, [invoice_id], context=context,