diff --git a/addons/stock_account/stock.py b/addons/stock_account/stock.py index 509bd91f173..db08ba39eb4 100644 --- a/addons/stock_account/stock.py +++ b/addons/stock_account/stock.py @@ -192,7 +192,7 @@ class stock_picking(osv.osv): invoice_obj = self.pool.get('account.invoice') return invoice_obj.create(cr, uid, vals, context=context) - def action_invoice_create(self, cr, uid, ids, journal_id=False, group=False, type='out_invoice', context=None): + def action_invoice_create(self, cr, uid, ids, journal_id, group=False, type='out_invoice', context=None): """ Creates invoice based on the invoice state selected for picking. @param journal_id: Id of journal @param group: Whether to create a group invoice or not @@ -213,7 +213,31 @@ class stock_picking(osv.osv): invoices = self._invoice_create_line(cr, uid, moves, journal_id, type, context=context) return invoices - def _invoice_create_line(self, cr, uid, moves, journal_id=False, inv_type='out_invoice', context=None): + def _get_invoice_vals(self, cr, uid, key, inv_type, journal_id, origin, context=None): + if context is None: + context = {} + partner, currency_id, company_id, user_id = key + if inv_type in ('out_invoice', 'out_refund'): + account_id = partner.property_account_receivable.id + payment_term = partner.property_payment_term.id or False + else: + account_id = partner.property_account_payable.id + payment_term = partner.property_supplier_payment_term.id or False + return { + 'origin': origin, + 'date_invoice': context.get('date_inv', False), + 'user_id': user_id, + 'partner_id': partner.id, + 'account_id': account_id, + 'payment_term': payment_term, + 'type': inv_type, + 'fiscal_position': partner.property_account_position.id, + 'company_id': company_id, + 'currency_id': currency_id, + 'journal_id': journal_id, + } + + def _invoice_create_line(self, cr, uid, moves, journal_id, inv_type='out_invoice', context=None): invoice_obj = self.pool.get('account.invoice') move_obj = self.pool.get('stock.move') invoices = {} @@ -222,30 +246,11 @@ class stock_picking(osv.osv): origin = move.picking_id.name partner, user_id, currency_id = move_obj._get_master_data(cr, uid, move, company, context=context) - key = (partner.id, currency_id, company.id, user_id) + key = (partner, currency_id, company.id, user_id) if key not in invoices: # Get account and payment terms - if inv_type in ('out_invoice', 'out_refund'): - account_id = partner.property_account_receivable.id - payment_term = partner.property_payment_term.id or False - else: - account_id = partner.property_account_payable.id - payment_term = partner.property_supplier_payment_term.id or False - - invoice_vals = { - 'origin': origin, - 'date_invoice': context.get('date_inv', False), - 'user_id': user_id, - 'partner_id': partner.id, - 'account_id': account_id, - 'payment_term': payment_term, - 'type': inv_type, - 'fiscal_position': partner.property_account_position.id, - 'company_id': company.id, - 'currency_id': currency_id, - 'journal_id': journal_id, - } + invoice_vals = self._get_invoice_vals(cr, uid, key, inv_type, journal_id, origin, context=context) invoice_id = self._create_invoice_from_picking(cr, uid, move.picking_id, invoice_vals, context=context) invoices[key] = invoice_id