Extend the function action_invoice_create() so that the dict of the invoice is generated inside a dedicated function. We can now inherit this function in custom modules to add/modify values easily.
bzr revid: alexis@via.ecp.fr-20120105160635-ac6drtj2ei363r8l
This commit is contained in:
+48
-39
@@ -968,6 +968,49 @@ class stock_picking(osv.osv):
|
||||
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.
|
||||
@@ -981,7 +1024,6 @@ class stock_picking(osv.osv):
|
||||
|
||||
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
|
||||
@@ -996,48 +1038,15 @@ class stock_picking(osv.osv):
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user