diff --git a/addons/sale/sale.py b/addons/sale/sale.py index ac27fac214d..21ca506bb83 100644 --- a/addons/sale/sale.py +++ b/addons/sale/sale.py @@ -328,7 +328,7 @@ class sale_order(osv.osv): cr.execute('select id from sale_order_line where order_id IN %s and state=%s',(tuple(ids),'cancel')) line_ids = map(lambda x: x[0], cr.fetchall()) self.write(cr, uid, ids, {'state': 'draft', 'invoice_ids': [], 'shipped': 0}) - self.pool.get('sale.order.line').write(cr, uid, line_ids, {'invoiced': False, 'state': 'draft', 'line_invoice_id': False}) + self.pool.get('sale.order.line').write(cr, uid, line_ids, {'invoiced': False, 'state': 'draft', 'invoice_lines': [(6, 0, [])]}) wf_service = netsvc.LocalService("workflow") for inv_id in ids: # Deleting the existing instance of workflow for SO @@ -512,10 +512,11 @@ class sale_order(osv.osv): for sale in self.browse(cr, uid, ids, context=context): for line in sale.order_line: invoiced = False - if line.line_invoice_id and line.line_invoice_id.invoice_id.state == 'cancel': - continue - else: - invoiced = True + for iline in line.invoice_lines: + if iline.invoice_id and iline.invoice_id.state == 'cancel': + continue + else: + invoiced = True self.pool.get('sale.order.line').write(cr, uid, [line.id], {'invoiced': invoiced}) self.write(cr, uid, ids, {'state': 'invoice_except', 'invoice_ids': False}) return True @@ -805,8 +806,7 @@ class sale_order_line(osv.osv): 'sequence': fields.integer('Sequence', help="Gives the sequence order when displaying a list of sale order lines."), 'delay': fields.float('Delivery Lead Time', required=True, help="Number of days between the order confirmation the the shipping of the products to the customer", readonly=True, states={'draft':[('readonly',False)]}), 'product_id': fields.many2one('product.product', 'Product', domain=[('sale_ok', '=', True)], change_default=True), -# 'invoice_lines': fields.many2many('account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True), - 'line_invoice_id': fields.many2one('account.invoice.line','Invoice Line',readonly=True), + 'invoice_lines': fields.many2many('account.invoice.line', 'sale_order_line_invoice_rel', 'order_line_id', 'invoice_id', 'Invoice Lines', readonly=True), 'invoiced': fields.boolean('Invoiced', readonly=True), 'procurement_id': fields.many2one('procurement.order', 'Procurement'), 'price_unit': fields.float('Unit Price', required=True, digits_compute= dp.get_precision('Sale Price'), readonly=True, states={'draft':[('readonly',False)]}), @@ -918,7 +918,8 @@ class sale_order_line(osv.osv): 'note': line.notes, 'account_analytic_id': line.order_id.project_id and line.order_id.project_id.id or False, }) - self.write(cr, uid, [line.id], {'invoiced': True, 'line_invoice_id':inv_id}) + cr.execute('insert into sale_order_line_invoice_rel (order_line_id,invoice_id) values (%s,%s)', (line.id, inv_id)) + self.write(cr, uid, [line.id], {'invoiced': True}) sales[line.order_id.id] = True create_ids.append(inv_id) # Trigger workflow events @@ -981,7 +982,7 @@ class sale_order_line(osv.osv): context = {} if not default: default = {} - default.update({'state': 'draft', 'move_ids': [], 'invoiced': False, 'line_invoice_id': False}) + default.update({'state': 'draft', 'move_ids': [], 'invoiced': False, 'invoice_lines': []}) return super(sale_order_line, self).copy_data(cr, uid, id, default, context=context) def product_id_change(self, cr, uid, ids, pricelist, product, qty=0, diff --git a/addons/sale/sale_view.xml b/addons/sale/sale_view.xml index dbe4e876f27..69b9b1c094a 100644 --- a/addons/sale/sale_view.xml +++ b/addons/sale/sale_view.xml @@ -175,8 +175,8 @@ - - + + @@ -414,8 +414,8 @@ - - + + diff --git a/addons/sale/stock.py b/addons/sale/stock.py index e7020ff2515..b908c440b1d 100644 --- a/addons/sale/stock.py +++ b/addons/sale/stock.py @@ -96,7 +96,7 @@ class stock_picking(osv.osv): sale_line_obj = self.pool.get('sale.order.line') if move_line.sale_line_id: sale_line_obj.write(cursor, user, [move_line.sale_line_id.id], {'invoiced':True, - 'line_invoice_id': invoice_line_id, + 'invoice_lines': [(4, invoice_line_id)], }) return super(stock_picking, self)._invoice_line_hook(cursor, user, move_line, invoice_line_id) @@ -185,7 +185,7 @@ class stock_picking(osv.osv): 'account_analytic_id': account_analytic_id, }, context=context) self.pool.get('sale.order.line').write(cursor, user, [sale_line.id], {'invoiced':True, - 'line_invoice_id': invoice_line_id, + 'invoice_lines': [(6, 0, [invoice_line_id])], }) return result diff --git a/addons/sale_layout/sale_layout_view.xml b/addons/sale_layout/sale_layout_view.xml index 46a582372ef..41ab5d33900 100755 --- a/addons/sale_layout/sale_layout_view.xml +++ b/addons/sale_layout/sale_layout_view.xml @@ -80,7 +80,7 @@ - +