inv_type = 'out_invoice'
return inv_type
+ def _prepare_invoice_group(self, cr, uid, picking, partner, invoice, context=None):
+ """Builds the dict for grouped invoices"""
+ comment = self._get_comment_invoice(cr, uid, picking)
+
+ return {
+ 'name': (invoice.name or '') + ', ' + (picking.name or ''),
+ 'origin': (invoice.origin or '') + ', ' + (picking.name or '') + (picking.origin and (':' + picking.origin) or ''),
+ 'comment': (comment and (invoice.comment and invoice.comment + "\n" + comment or comment)) or (invoice.comment and invoice.comment or ''),
+ 'date_invoice': context.get('date_inv', False),
+ 'user_id': uid
+ }
+
+ def _prepare_invoice(self, cr, uid, picking, partner, inv_type, journal_id, context=None):
+ """Builds the dict containing the values for the invoice"""
+ if inv_type in ('out_invoice', 'out_refund'):
+ account_id = partner.property_account_receivable.id
+ else:
+ account_id = partner.property_account_payable.id
+ address_contact_id, address_invoice_id = \
+ self._get_address_invoice(cr, uid, picking).values()
+ comment = self._get_comment_invoice(cr, uid, picking)
+ invoice_vals = {
+ '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': comment,
+ 'payment_term': self._get_payment_term(cr, uid, picking),
+ '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
+ return invoice_vals
+
def action_invoice_create(self, cr, uid, ids, journal_id=False,
group=False, type='out_invoice', context=None):
""" Creates invoice based on the invoice state selected for picking.
invoice_obj = self.pool.get('account.invoice')
invoice_line_obj = self.pool.get('account.invoice.line')
- address_obj = self.pool.get('res.partner.address')
invoices_group = {}
res = {}
inv_type = type
if not inv_type:
inv_type = self._get_invoice_type(picking)
- if inv_type in ('out_invoice', 'out_refund'):
- account_id = partner.property_account_receivable.id
- else:
- account_id = partner.property_account_payable.id
- address_contact_id, address_invoice_id = \
- self._get_address_invoice(cr, uid, picking).values()
- address = address_obj.browse(cr, uid, address_contact_id, context=context)
-
- comment = self._get_comment_invoice(cr, uid, picking)
if group and partner.id in invoices_group:
invoice_id = invoices_group[partner.id]
invoice = invoice_obj.browse(cr, uid, invoice_id)
- invoice_vals = {
- 'name': (invoice.name or '') + ', ' + (picking.name or ''),
- 'origin': (invoice.origin or '') + ', ' + (picking.name or '') + (picking.origin and (':' + picking.origin) or ''),
- 'comment': (comment and (invoice.comment and invoice.comment+"\n"+comment or comment)) or (invoice.comment and invoice.comment or ''),
- 'date_invoice':context.get('date_inv',False),
- 'user_id':uid
- }
- invoice_obj.write(cr, uid, [invoice_id], invoice_vals, context=context)
+ invoice_obj.write(cr, uid, [invoice_id],
+ self._prepare_invoice_group(cr, uid, picking, partner, invoice, context=context),
+ 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': self._get_payment_term(cr, uid, picking),
- '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,
+ invoice_id = invoice_obj.create(cr, uid,
+ self._prepare_invoice(cr, uid, picking, partner, inv_type, journal_id, context=context),
context=context)
invoices_group[partner.id] = invoice_id
res[picking.id] = invoice_id