Skip to content

Commit

Permalink
[IMP] When invoicing from multiple pickings, services should be check…
Browse files Browse the repository at this point in the history
…ed for all purchases/sales

[FIX] Should make sure purchase order lines are not invoiced twice
  • Loading branch information
jco-odoo committed Feb 25, 2015
1 parent 3050e35 commit cb6e27c
Show file tree
Hide file tree
Showing 2 changed files with 21 additions and 19 deletions.
26 changes: 14 additions & 12 deletions addons/purchase/stock.py
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,20 @@ def _create_invoice_line_from_vals(self, cr, uid, move, invoice_line_vals, conte
self.pool.get('purchase.order').write(cr, uid, [purchase_line.order_id.id], {
'invoice_ids': [(4, invoice_line_vals['invoice_id'])],
})
purchase_line_obj = self.pool.get('purchase.order.line')
purchase_obj = self.pool.get('purchase.order')
invoice_line_obj = self.pool.get('account.invoice.line')
purchase_id = move.purchase_line_id.order_id.id
purchase_line_ids = purchase_line_obj.search(cr, uid, [('order_id', '=', purchase_id), ('product_id.type', '=', 'service'), ('invoice_lines', '=', False)], context=context)
if purchase_line_ids:
inv_lines = []
for po_line in purchase_line_obj.browse(cr, uid, purchase_line_ids, context=context):
acc_id = purchase_obj._choose_account_from_po_line(cr, uid, po_line, context=context)
inv_line_data = purchase_obj._prepare_inv_line(cr, uid, acc_id, po_line, context=context)
inv_line_id = invoice_line_obj.create(cr, uid, inv_line_data, context=context)
inv_lines.append(inv_line_id)
po_line.write({'invoice_lines': [(4, inv_line_id)]})
invoice_line_obj.write(cr, uid, inv_lines, {'invoice_id': invoice_line_vals['invoice_id']}, context=context)
return invoice_line_id

def _get_master_data(self, cr, uid, move, company, context=None):
Expand Down Expand Up @@ -148,18 +162,6 @@ def _create_invoice_from_picking(self, cr, uid, picking, vals, context=None):
purchase_line_obj = self.pool.get('purchase.order.line')
invoice_line_obj = self.pool.get('account.invoice.line')
invoice_id = super(stock_picking, self)._create_invoice_from_picking(cr, uid, picking, vals, context=context)
if picking.move_lines and picking.move_lines[0].purchase_line_id:
purchase_id = picking.move_lines[0].purchase_line_id.order_id.id
purchase_line_ids = purchase_line_obj.search(cr, uid, [('order_id', '=', purchase_id), ('product_id.type', '=', 'service'), ('invoiced', '=', False)], context=context)
if purchase_line_ids:
inv_lines = []
for po_line in purchase_line_obj.browse(cr, uid, purchase_line_ids, context=context):
acc_id = purchase_obj._choose_account_from_po_line(cr, uid, po_line, context=context)
inv_line_data = purchase_obj._prepare_inv_line(cr, uid, acc_id, po_line, context=context)
inv_line_id = invoice_line_obj.create(cr, uid, inv_line_data, context=context)
inv_lines.append(inv_line_id)
po_line.write({'invoice_lines': [(4, inv_line_id)]})
invoice_line_obj.write(cr, uid, inv_lines, {'invoice_id': invoice_id}, context=context)
return invoice_id

def _get_invoice_vals(self, cr, uid, key, inv_type, journal_id, move, context=None):
Expand Down
14 changes: 7 additions & 7 deletions addons/sale_stock/sale_stock.py
Original file line number Diff line number Diff line change
Expand Up @@ -368,6 +368,13 @@ def _create_invoice_line_from_vals(self, cr, uid, move, invoice_line_vals, conte
self.pool.get('sale.order').write(cr, uid, [sale_line.order_id.id], {
'invoice_ids': [(4, invoice_line_vals['invoice_id'])],
})
sale_line_obj = self.pool.get('sale.order.line')
invoice_line_obj = self.pool.get('account.invoice.line')
sale_line_ids = sale_line_obj.search(cr, uid, [('order_id', '=', move.procurement_id.sale_line_id.order_id.id), ('product_id.type', '=', 'service'), ('invoiced', '=', False)], context=context)
if sale_line_ids:
created_lines = sale_line_obj.invoice_line_create(cr, uid, sale_line_ids, context=context)
invoice_line_obj.write(cr, uid, created_lines, {'invoice_id': invoice_line_vals['invoice_id']}, context=context)

return invoice_line_id

def _get_master_data(self, cr, uid, move, company, context=None):
Expand Down Expand Up @@ -436,13 +443,6 @@ def _create_invoice_from_picking(self, cr, uid, picking, vals, context=None):
sale_line_obj = self.pool.get('sale.order.line')
invoice_line_obj = self.pool.get('account.invoice.line')
invoice_id = super(stock_picking, self)._create_invoice_from_picking(cr, uid, picking, vals, context=context)
if picking.group_id:
sale_ids = sale_obj.search(cr, uid, [('procurement_group_id', '=', picking.group_id.id)], context=context)
if sale_ids:
sale_line_ids = sale_line_obj.search(cr, uid, [('order_id', 'in', sale_ids), ('product_id.type', '=', 'service'), ('invoiced', '=', False)], context=context)
if sale_line_ids:
created_lines = sale_line_obj.invoice_line_create(cr, uid, sale_line_ids, context=context)
invoice_line_obj.write(cr, uid, created_lines, {'invoice_id': invoice_id}, context=context)
return invoice_id

def _get_invoice_vals(self, cr, uid, key, inv_type, journal_id, move, context=None):
Expand Down

0 comments on commit cb6e27c

Please sign in to comment.