[IMP] Purchase on incoming shipments with services added
authorJosse Colpaert <jco@odoo.com>
Wed, 17 Sep 2014 14:47:57 +0000 (16:47 +0200)
committerJosse Colpaert <jco@odoo.com>
Wed, 17 Sep 2014 19:41:42 +0000 (21:41 +0200)
addons/purchase/purchase.py
addons/purchase/stock.py
addons/sale/sale.py
addons/sale/sale_view.xml
addons/stock/stock.py
addons/stock/stock_demo.xml

index 4688b75..5f523c2 100644 (file)
@@ -1152,6 +1152,7 @@ class purchase_order_line(osv.osv):
         self.write(cr, uid, ids, {'state': 'confirmed'}, context=context)
         return True
 
+
 class procurement_rule(osv.osv):
     _inherit = 'procurement.rule'
 
index 205513c..977326e 100644 (file)
@@ -139,6 +139,25 @@ class stock_picking(osv.osv):
                }),
     }
 
+    def _create_invoice_from_picking(self, cr, uid, picking, vals, context=None):
+        purchase_obj = self.pool.get("purchase.order")
+        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
+
 
 class stock_warehouse(osv.osv):
     _inherit = 'stock.warehouse'
index 6400bf5..e50346e 100644 (file)
@@ -243,8 +243,9 @@ class sale_order(osv.osv):
         'company_id': fields.many2one('res.company', 'Company'),
         'section_id': fields.many2one('crm.case.section', 'Sales Team'),
         'procurement_group_id': fields.many2one('procurement.group', 'Procurement group', copy=False),
-
+        'product_id': fields.related('order_line', 'product_id', type='many2one', relation='product.product', string='Product'),
     }
+
     _defaults = {
         'date_order': fields.datetime.now,
         'order_policy': 'manual',
index e4993b4..c4b6af7 100644 (file)
                     <field name="user_id"/>
                     <field name="section_id" string="Sales Team" groups="base.group_multi_salesteams"/>
                     <field name="project_id"/>
+                    <field name="product_id"/>
                     <filter string="My" domain="[('user_id','=',uid)]" name="my_sale_orders_filter"/>
                     <separator/>
                     <filter string="Quotations" name="draft" domain="[('state','in',('draft','sent'))]" help="Sales Order that haven't yet been confirmed"/>
index 8b7b8a2..2603867 100644 (file)
@@ -938,7 +938,8 @@ class stock_picking(osv.osv):
                 'pack_operation_ids': [],
                 'backorder_id': picking.id,
             })
-            self.message_post(cr, uid, picking.id, body=_("Back order <em>%s</em> <b>created</b>.") % (picking.name), context=context)
+            backorder = self.browse(cr, uid, backorder_id, context=context)
+            self.message_post(cr, uid, picking.id, body=_("Back order <em>%s</em> <b>created</b>.") % (backorder.name), context=context)
             move_obj = self.pool.get("stock.move")
             move_obj.write(cr, uid, backorder_move_ids, {'picking_id': backorder_id}, context=context)
 
index 5bada91..316acce 100644 (file)
@@ -77,7 +77,7 @@
             <field name="product_id" ref="product.product_product_6"/>
             <field name="product_uom_id" ref="product.product_uom_unit"/>
             <field name="inventory_id" ref="stock_inventory_0"/>
-            <field name="product_qty">10.0</field>
+            <field name="product_qty">500.0</field>
             <field name="location_id" ref="stock_location_components"/>
         </record>
         <record id="stock_inventory_line_4" model="stock.inventory.line">