Externalize _make_invoice to allow easy override

bzr revid: ced-8e2e06f77a969347ee57005d956112b998273794
This commit is contained in:
ced 2007-10-08 11:30:30 +00:00
parent a5e357ee3a
commit a9b6ba1676
1 changed files with 34 additions and 33 deletions

View File

@ -211,42 +211,43 @@ class sale_order(osv.osv):
def _inv_get(self, cr, uid, order, context={}):
return {}
def _make_invoice(self, cr, uid, order, lines):
a = order.partner_id.property_account_receivable.id
if order.partner_id and order.partner_id.property_payment_term.id:
pay_term = order.partner_id.property_payment_term.id
else:
pay_term = False
for preinv in order.invoice_ids:
if preinv.state in ('open','paid','proforma'):
for preline in preinv.invoice_line:
inv_line_id = self.pool.get('account.invoice.line').copy(cr, uid, preline.id, {'invoice_id':False, 'price_unit':-preline.price_unit})
lines.append(inv_line_id)
inv = {
'name': order.name,
'origin': order.name,
'type': 'out_invoice',
'reference': "P%dSO%d"%(order.partner_id.id,order.id),
'account_id': a,
'partner_id': order.partner_id.id,
'address_invoice_id': order.partner_invoice_id.id,
'address_contact_id': order.partner_invoice_id.id,
'invoice_line': [(6,0,lines)],
'currency_id' : order.pricelist_id.currency_id.id,
'comment': order.note,
'payment_term': pay_term,
}
inv.update(self._inv_get(cr, uid, order))
inv_obj = self.pool.get('account.invoice')
inv_id = inv_obj.create(cr, uid, inv)
inv_obj.button_compute(cr, uid, [inv_id])
return inv_id
def action_invoice_create(self, cr, uid, ids, grouped=False, states=['confirmed','done']):
res = False
invoices = {}
invoice_ids = []
def make_invoice(order, lines):
a = order.partner_id.property_account_receivable.id
if order.partner_id and order.partner_id.property_payment_term.id:
pay_term = order.partner_id.property_payment_term.id
else:
pay_term = False
for preinv in order.invoice_ids:
if preinv.state in ('open','paid','proforma'):
for preline in preinv.invoice_line:
inv_line_id = self.pool.get('account.invoice.line').copy(cr, uid, preline.id, {'invoice_id':False, 'price_unit':-preline.price_unit})
lines.append(inv_line_id)
inv = {
'name': order.name,
'origin': order.name,
'type': 'out_invoice',
'reference': "P%dSO%d"%(order.partner_id.id,order.id),
'account_id': a,
'partner_id': order.partner_id.id,
'address_invoice_id': order.partner_invoice_id.id,
'address_contact_id': order.partner_invoice_id.id,
'invoice_line': [(6,0,lines)],
'currency_id' : order.pricelist_id.currency_id.id,
'comment': order.note,
'payment_term': pay_term,
}
inv.update(self._inv_get(cr, uid, order))
inv_obj = self.pool.get('account.invoice')
inv_id = inv_obj.create(cr, uid, inv)
inv_obj.button_compute(cr, uid, [inv_id])
return inv_id
for o in self.browse(cr,uid,ids):
lines = []
for line in o.order_line:
@ -264,13 +265,13 @@ class sale_order(osv.osv):
for val in invoices.values():
if grouped:
res = make_invoice(val[0][0], reduce(lambda x,y: x + y, [l for o,l in val], []))
res = self._make_invoice(cr, uid, val[0][0], reduce(lambda x,y: x + y, [l for o,l in val], []))
for o,l in val:
self.write(cr, uid, [o.id], {'state' : 'progress'})
cr.execute('insert into sale_order_invoice_rel (order_id,invoice_id) values (%d,%d)', (o.id, res))
else:
for order, il in val:
res = make_invoice(order, il)
res = self._make_invoice(cr, uid, order, il)
invoice_ids.append(res)
self.write(cr, uid, [order.id], {'state' : 'progress'})
cr.execute('insert into sale_order_invoice_rel (order_id,invoice_id) values (%d,%d)', (order.id, res))