[FIX] MRP fix in production operation [IMP] removing phantom on bom.line

This commit is contained in:
Fabien Pinckaers
2015-08-29 23:37:29 +02:00
parent 2d54c93dea
commit 0bbdfe1305
6 changed files with 43 additions and 82 deletions
+1 -1
View File
@@ -1001,7 +1001,7 @@ class mrp_production(osv.osv):
if not float_is_zero(remaining_qty, precision_digits=precision):
#consumed more in wizard than previously planned
product = self.pool.get('product.product').browse(cr, uid, consume['product_id'], context=context)
extra_move_id = self._make_consume_line_from_data(cr, uid, production, product, product.uom_id.id, remaining_qty, False, 0, context=context)
extra_move_id = self._make_consume_line_from_data(cr, uid, production, product, product.uom_id.id, remaining_qty, context=context)
stock_mov_obj.write(cr, uid, [extra_move_id], {'restrict_lot_id': consume['lot_id'],
'consumed_for': main_production_move}, context=context)
stock_mov_obj.action_done(cr, uid, [extra_move_id], context=context)
+22 -48
View File
@@ -238,12 +238,14 @@
<!-- Resource: mrp.bom -->
<record id="product.product_product_18_product_template" model="product.template">
<field name="route_ids" eval="[(6, 0, [ref('stock.route_warehouse0_mto'), ref('mrp.route_warehouse0_manufacture')])]"/>
</record>
<record id="mrp_bom_1" model="mrp.bom">
<field name="product_tmpl_id" ref="product.product_product_18_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">5</field>
<field name="sequence">5</field>
<field name="routing_id" ref="mrp_routing_0"/>
<field name="type">normal</field>
</record>
<record id="mrp_bom_line_1" model="mrp.bom.line">
@@ -251,16 +253,17 @@
<field name="product_qty">2</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">5</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_1"/>
</record>
<record id="product.product_product_19_product_template" model="product.template">
<field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
</record>
<record id="mrp_bom_2" model="mrp.bom">
<field name="product_tmpl_id" ref="product.product_product_19_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">5</field>
<field name="routing_id" ref="mrp_routing_1"/>
<field name="type">normal</field>
</record>
<record id="mrp_bom_line_2" model="mrp.bom.line">
@@ -268,7 +271,6 @@
<field name="product_qty">4</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">5</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_2"/>
</record>
@@ -276,7 +278,6 @@
<field name="product_tmpl_id" ref="product.product_product_19_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">10</field>
<field name="type">normal</field>
</record>
<record id="mrp_bom_line_3" model="mrp.bom.line">
@@ -284,16 +285,17 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">5</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_3"/>
</record>
<record id="product.product_product_27_product_template" model="product.template">
<field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
</record>
<record id="mrp_bom_4" model="mrp.bom">
<field name="product_tmpl_id" ref="product.product_product_27_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">5</field>
<field name="routing_id" ref="mrp_routing_1"/>
<field name="type">normal</field>
</record>
<record id="mrp_bom_line_4" model="mrp.bom.line">
@@ -301,7 +303,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">2</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_4"/>
</record>
@@ -310,7 +311,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">4</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_4"/>
</record>
@@ -319,7 +319,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">6</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_4"/>
</record>
@@ -327,7 +326,6 @@
<field name="product_tmpl_id" ref="product.product_product_27_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">10</field>
<field name="type">normal</field>
</record>
<record id="mrp_bom_line_7" model="mrp.bom.line">
@@ -335,7 +333,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">2</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_5"/>
</record>
@@ -344,7 +341,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">4</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_5"/>
</record>
@@ -353,15 +349,16 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">6</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_5"/>
</record>
<record id="product.product_product_16_product_template" model="product.template">
<field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
</record>
<record id="mrp_bom_6" model="mrp.bom">
<field name="product_tmpl_id" ref="product.product_product_16_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">5</field>
<field name="type">normal</field>
</record>
<record id="mrp_bom_line_10" model="mrp.bom.line">
@@ -369,7 +366,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">4</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_6"/>
</record>
@@ -378,7 +374,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">6</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_6"/>
</record>
@@ -387,7 +382,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">8</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_6"/>
</record>
@@ -395,7 +389,6 @@
<field name="product_tmpl_id" ref="product.product_product_16_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">10</field>
<field name="type">normal</field>
</record>
<record id="mrp_bom_line_13" model="mrp.bom.line">
@@ -403,7 +396,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">2</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_7"/>
</record>
@@ -412,7 +404,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">4</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_7"/>
</record>
@@ -421,7 +412,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">6</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_7"/>
</record>
@@ -430,22 +420,22 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">10</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_7"/>
</record>
<record id="product.product_product_3_product_template" model="product.template">
<field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
</record>
<record id="mrp_bom_8" model="mrp.bom">
<field name="product_tmpl_id" ref="product.product_product_3_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">5</field>
<field name="type">normal</field>
</record>
<record id="mrp_bom_property_0" model="mrp.bom">
<field name="product_tmpl_id" ref="product.product_product_3_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">5</field>
<field name="type">normal</field>
<field name="property_ids" eval="[(6,0,[ref('mrp_property_0')])]"/>
</record>
@@ -463,7 +453,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">2</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_8"/>
</record>
@@ -472,7 +461,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">4</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_8"/>
</record>
@@ -481,7 +469,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">6</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_8"/>
</record>
@@ -490,7 +477,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">8</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_8"/>
</record>
@@ -499,7 +485,6 @@
<field name="product_qty">2</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">10</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_8"/>
</record>
@@ -516,7 +501,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">2</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_9"/>
</record>
@@ -525,7 +509,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">4</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_9"/>
</record>
@@ -534,7 +517,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">6</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_9"/>
</record>
@@ -543,7 +525,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">8</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_9"/>
</record>
@@ -552,10 +533,12 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">10</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_9"/>
</record>
<record id="product.product_product_5_product_template" model="product.template">
<field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
</record>
<record id="mrp_bom_10" model="mrp.bom">
<field name="product_tmpl_id" ref="product.product_product_5_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
@@ -569,7 +552,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">2</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_10"/>
</record>
@@ -578,7 +560,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">4</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_10"/>
</record>
@@ -587,7 +568,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">6</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_10"/>
</record>
@@ -596,7 +576,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">8</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_10"/>
</record>
@@ -605,22 +584,22 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">10</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_10"/>
</record>
<record id="product.product_product_4_product_template" model="product.template">
<field name="route_ids" eval="[(6, 0, [ref('mrp.route_warehouse0_manufacture')])]"/>
</record>
<record id="mrp_bom_11" model="mrp.bom">
<field name="product_tmpl_id" ref="product.product_product_4_product_template"/>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">1</field>
<field name="type">normal</field>
</record>
<record id="mrp_bom_line_32" model="mrp.bom.line">
<field name="product_id" ref="product.product_product_14"/>
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">1</field>
<field name="type">normal</field>
<field name="attribute_value_ids" eval="[(6,0,[ref('product.product_attribute_value_1')])]"/>
<field name="bom_id" ref="mrp_bom_11"/>
</record>
@@ -629,7 +608,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">2</field>
<field name="type">normal</field>
<field name="attribute_value_ids" eval="[(6,0,[ref('product.product_attribute_value_2')])]"/>
<field name="bom_id" ref="mrp_bom_11"/>
</record>
@@ -638,7 +616,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">3</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_11"/>
</record>
@@ -647,7 +624,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">1</field>
<field name="type">normal</field>
<field name="property_ids" eval="[(6,0,[ref('mrp_property_8')])]"/>
<field name="bom_id" ref="mrp_bom_property_line"/>
</record>
@@ -657,7 +633,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">1</field>
<field name="type">normal</field>
<field name="property_ids" eval="[(6,0,[ref('mrp_property_0')])]"/>
<field name="bom_id" ref="mrp_bom_property_line"/>
</record>
@@ -667,7 +642,6 @@
<field name="product_qty">1</field>
<field name="product_uom" ref="product.product_uom_unit"/>
<field name="sequence">1</field>
<field name="type">normal</field>
<field name="bom_id" ref="mrp_bom_property_line"/>
</record>
+3 -3
View File
@@ -406,7 +406,7 @@
<field name="date_start"/>
<field name="date_stop"/>
<field name="attribute_value_ids" widget="many2many_tags" domain="[('product_ids.product_tmpl_id', '=', parent.product_tmpl_id)]" groups="product.group_product_variant"/>
<field name="property_ids" widget="many2many_tags"/>
<field name="property_ids" widget="many2many_tags" groups="product.group_mrp_properties"/>
</tree>
</field>
</page>
@@ -514,7 +514,7 @@
<field name="date_stop"/>
<field name="routing_id"/>
<field name="attribute_value_ids" widget="many2many_tags" groups="product.group_product_variant"/>
<field name="property_ids" widget="many2many_tags"/>
<field name="property_ids" widget="many2many_tags" groups="product.group_mrp_properties"/>
</tree>
</field>
</record>
@@ -950,7 +950,7 @@
</xpath>
<xpath expr="//field[@name='origin']" position="after">
<group colspan="4" groups="product.group_mrp_properties">
<field colspan="4" name="property_ids" widget="many2many_tags"/>
<field colspan="4" name="property_ids" widget="many2many_tags" groups="product.group_mrp_properties"/>
</group>
</xpath>
</data>
+5 -5
View File
@@ -80,7 +80,7 @@
<record id="product_product_3" model="product.product">
<field name="name">PC Assemble SC234</field>
<field name="name">Computer SC234</field>
<field name="categ_id" ref="product_category_5"/>
<field name="list_price">450.0</field>
<field name="standard_price">300.0</field>
@@ -204,14 +204,14 @@ FaceTime HD Camera, 1.2 MP Photos</field>
<record id="product_product_5" model="product.product">
<field name="name">PC Assemble + Custom (PC on Demand) </field>
<field name="name">Custom Computer (kit)</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">600.0</field>
<field name="list_price">147.0</field>
<field name="type">consu</field>
<field name="uom_id" ref="product_uom_unit"/>
<field name="uom_po_id" ref="product_uom_unit"/>
<field name="description">Custom computer assembled on order based on customer's requirement.</field>
<field name="description">Custom computer shipped in kit.</field>
<field name="default_code">B3424</field>
</record>
@@ -330,7 +330,7 @@ FaceTime HD Camera, 1.2 MP Photos</field>
</record>
<record id="product_product_14" model="product.product">
<field name="name">RAM SR2</field>
<field name="name">RAM SR2 (kit)</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">87.0</field>
<field name="list_price">95.0</field>
@@ -374,7 +374,7 @@ FaceTime HD Camera, 1.2 MP Photos</field>
</record>
<record id="product_product_18" model="product.product">
<field name="name">HDD SH-2</field>
<field name="name">HDD SH-2 (mto)</field>
<field name="categ_id" ref="product_category_5"/>
<field name="standard_price">1020.0</field>
<field name="list_price">1150.0</field>
+3 -3
View File
@@ -7,8 +7,8 @@
<field name="model">sale.report</field>
<field name="arch" type="xml">
<pivot string="Sales Analysis" disable_linking="True">
<field name="team_id" type="row"/>
<field name="date" interval="month" type="col"/>
<field name="team_id" type="col"/>
<field name="date" interval="month" type="row"/>
<field name="price_total" type="measure"/>
</pivot>
</field>
@@ -19,7 +19,7 @@
<field name="model">sale.report</field>
<field name="arch" type="xml">
<graph string="Sales Analysis">
<field name="team_id" type="row"/>
<field name="date" type="row"/>
<field name="price_total" type="measure"/>
</graph>
</field>
+9 -22
View File
@@ -42,11 +42,10 @@ class TestSaleMrpFlow(common.TransactionCase):
'uom_po_id': uom_id,
'route_ids': route_ids})
def create_bom_lines(bom_id, product_id, qty, uom_id, bom_type):
def create_bom_lines(bom_id, product_id, qty, uom_id):
self.MrpBomLine.create({
'product_id': product_id,
'product_qty': qty,
'type': bom_type,
'bom_id': bom_id,
'product_uom': uom_id})
@@ -97,18 +96,17 @@ class TestSaleMrpFlow(common.TransactionCase):
# Bill of materials for Product A.
bom_a = create_bom(product_a.product_tmpl_id.id, 2, self.uom_dozen.id, 'normal')
create_bom_lines(bom_a.id, product_b.id, 3, self.uom_unit.id, 'phantom')
create_bom_lines(bom_a.id, product_c.id, 300.5, self.uom_gm.id, 'normal')
create_bom_lines(bom_a.id, product_d.id, 4, self.uom_unit.id, 'phantom')
create_bom_lines(bom_a.id, product_d.id, 4, self.uom_unit.id, 'normal')
create_bom_lines(bom_a.id, product_b.id, 3, self.uom_unit.id)
create_bom_lines(bom_a.id, product_c.id, 300.5, self.uom_gm.id)
create_bom_lines(bom_a.id, product_d.id, 4, self.uom_unit.id)
# Bill of materials for Product B.
bom_b = create_bom(product_b.product_tmpl_id.id, 1, self.uom_unit.id, 'phantom')
create_bom_lines(bom_b.id, product_c.id, 0.400, self.uom_kg.id, 'normal')
create_bom_lines(bom_b.id, product_c.id, 0.400, self.uom_kg.id)
# Bill of materials for Product D.
bom_d = create_bom(product_d.product_tmpl_id.id, 1, self.uom_unit.id, 'normal')
create_bom_lines(bom_d.id, product_c.id, 1, self.uom_kg.id, 'normal')
create_bom_lines(bom_d.id, product_c.id, 1, self.uom_kg.id)
# ----------------------------------------
# Create sale order of 10 Dozen product A.
@@ -152,14 +150,6 @@ class TestSaleMrpFlow(common.TransactionCase):
# then for 10 Dozen product A will consume 1502.5 gm product C.
# ]
#
# Product C 20 kg
# As product D phantom in bom A, product A will consume product C.
# ================================================================
# For 1 unit product D will consume 1 kg product C
# then for 20 unit ( Product D 4 unit per 2 Dozen product A)
# product D it will consume [ 20 kg ] product C,
# Product A will consume 20 kg product C.
#
# product D 20 Unit.
# [
# For 2 dozen product A will consume 4 unit product D
@@ -198,9 +188,10 @@ class TestSaleMrpFlow(common.TransactionCase):
('product_uom', '=', self.uom_kg.id)])
# Check total consume line with product c and uom kg.
self.assertEqual(len(moves), 2, 'Production move lines are not generated proper.')
self.assertEqual(len(moves), 1, 'Production move lines are not generated proper.')
list_qty = [move.product_uom_qty for move in moves]
self.assertEqual(set(list_qty), set([6.0, 20.0]), "Wrong product quantity in 'To consume line' of manufacturing order.")
print '***', list_qty
self.assertEqual(set(list_qty), set([6.0]), "Wrong product quantity in 'To consume line' of manufacturing order.")
# Check state of consume line with product c and uom kg.
for move in moves:
self.assertEqual(move.state, 'confirmed', "Wrong state in 'To consume line' of manufacturing order.")
@@ -229,10 +220,6 @@ class TestSaleMrpFlow(common.TransactionCase):
# Check total consume line with product D.
self.assertEqual(len(move), 1, 'Production lines are not generated proper.')
# Check state of consume line with product D.
self.assertEqual(move.state, 'waiting', "Wrong state in 'To consume line' of manufacturing order.")
# Check quantity of consume line with product D.
self.assertEqual(move.product_uom_qty, 20, "Wrong product quantity in 'To consume line' of manufacturing order.")
# <><><><><><><><><><><><><><><><><><><><><><>
# Manufacturing order for product D (20 unit).