Merge lp:~camptocamp/ocb-addons/ocb-7.0-bug-1168398-tta+afe into lp:ocb-addons

Proposed by Alexandre Fayolle - camptocamp
Status: Merged
Merged at revision: 9341
Proposed branch: lp:~camptocamp/ocb-addons/ocb-7.0-bug-1168398-tta+afe
Merge into: lp:ocb-addons
Diff against target: 107 lines (+79/-2)
3 files modified
mrp/__openerp__.py (+1/-0)
mrp/mrp.py (+11/-2)
mrp/test/order_process_prodlot_split.yml (+67/-0)
To merge this branch: bzr merge lp:~camptocamp/ocb-addons/ocb-7.0-bug-1168398-tta+afe
Reviewer Review Type Date Requested Status
Holger Brunn (Therp) code review Approve
Guewen Baconnier @ Camptocamp code review, no test Approve
Review via email: mp+174154@code.launchpad.net

Description of the change

Port of https://code.launchpad.net/~camptocamp/openobject-addons/7.0-bug-1168398-tta+afe/+merge/174153 to OCB

Note that there are two MP on openoject-addons/7.0 for bug lp:1168398: the original by tta (which I reviewed as 'needs fixing' because of the lack of test, and mine, which adds that missing test.

To post a comment you must log in.
Revision history for this message
Guewen Baconnier @ Camptocamp (gbaconnier-c2c) wrote :

Small typo on l.97 s/expeect/expect

LGTM, thanks for adding the test

review: Approve (code review, no test)
Revision history for this message
Alexandre Fayolle - camptocamp (alexandre-fayolle-c2c) wrote :

> Small typo on l.97 s/expeect/expect
>
> LGTM, thanks for adding the test

Fixed, thanks for the heads up.

Revision history for this message
Holger Brunn (Therp) (hbrunn) :
review: Approve (code review)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'mrp/__openerp__.py'
--- mrp/__openerp__.py 2013-05-23 10:01:15 +0000
+++ mrp/__openerp__.py 2013-07-11 14:58:31 +0000
@@ -81,6 +81,7 @@
81# 'test/order_demo.yml',81# 'test/order_demo.yml',
82# 'test/order_process.yml',82# 'test/order_process.yml',
83# 'test/cancel_order.yml',83# 'test/cancel_order.yml',
84 'test/order_process_prodlot_split.yml',
84 ],85 ],
85 'installable': True,86 'installable': True,
86 'application': True,87 'application': True,
8788
=== modified file 'mrp/mrp.py'
--- mrp/mrp.py 2013-06-20 08:37:55 +0000
+++ mrp/mrp.py 2013-07-11 14:58:31 +0000
@@ -746,8 +746,17 @@
746 if qty <= 0.0:746 if qty <= 0.0:
747 # we already have more qtys consumed than we need747 # we already have more qtys consumed than we need
748 continue748 continue
749749 splitqty = qty
750 raw_product[0].action_consume(qty, raw_product[0].location_id.id, context=context)750 moves = sorted(raw_product, key=lambda k: (k.product_qty))
751 for move in moves:
752 if splitqty <= 0:
753 break
754 elif move.product_qty >= qty:
755 move.action_consume(qty, move.location_id.id, context=context)
756 splitqty = 0
757 else:
758 move.action_consume(splitqty, move.location_id.id, context=context)
759 splitqty = splitqty - move.product_qty
751760
752 if production_mode == 'consume_produce':761 if production_mode == 'consume_produce':
753 # To produce remaining qty of final product762 # To produce remaining qty of final product
754763
=== added file 'mrp/test/order_process_prodlot_split.yml'
--- mrp/test/order_process_prodlot_split.yml 1970-01-01 00:00:00 +0000
+++ mrp/test/order_process_prodlot_split.yml 2013-07-11 14:58:31 +0000
@@ -0,0 +1,67 @@
1-
2 I create a MO for 1 PCSC349
3-
4 !record {model: mrp.production, id: test_mo_pcsc349}:
5 product_id: product.product_product_4
6 product_qty: 1
7 product_uom: product.product_uom_unit
8 location_src_id: stock.stock_location_stock
9 location_dest_id: stock.stock_location_stock
10 bom_id: mrp_bom_24
11-
12 I confirm the MO
13-
14 !workflow {model: mrp.production, action: button_confirm, ref: test_mo_pcsc349}
15-
16 I split the RAM SR3 in 2 production lots
17-
18 !python {model: stock.move.split}: |
19 order = self.pool.get('mrp.production').browse(cr, uid, ref('test_mo_pcsc349'), context=context)
20 ram_lines = [line for line in order.move_lines if line.product_id.default_code == 'RAM-SR3']
21 assert len(ram_lines) == 1, 'no RAM-SR3 lines found'
22 ctxt = context.copy()
23 ctxt['active_id'] = ram_lines[0].id
24 ctxt['active_ids'] = [ram_lines[0].id]
25 ctxt['active_model'] = 'stock.move'
26 values = self.default_get(cr, uid,
27 ['product_id', 'product_uom', 'qty', 'use_exist', 'location_id'],
28 ctxt)
29 wizard_id = self.create(cr, uid, values, context=ctxt)
30 prodlot_obj = self.pool.get('stock.production.lot')
31 split_line_obj = self.pool.get('stock.move.split.lines')
32 split_line_obj.create(cr, uid, {'wizard_id': wizard_id,
33 'name': 'ram_sn_1',
34 'quantity': 1,}, context=ctxt)
35 split_line_obj.create(cr, uid, {'wizard_id': wizard_id,
36 'name': 'ram_sn_2',
37 'quantity': 1,}, context=ctxt)
38 self.split_lot(cr, uid, [wizard_id], context=ctxt)
39 order.refresh()
40 ram_lines = [line for line in order.move_lines if line.product_id.default_code == 'RAM-SR3']
41 assert len(ram_lines) == 2, 'RAM-SR3 line not split'
42
43
44-
45 I click on the "Produce" button of the Manufacturing Order and in the wizard select "Consume and Produce" mode
46-
47 !python {model: mrp.product.produce}: |
48 ctxt = context.copy()
49 order = self.pool.get('mrp.production').browse(cr, uid, ref('test_mo_pcsc349'), context=context)
50 ctxt['active_id'] = order.id
51 ctxt['active_model'] = 'mrp.production'
52 wizard_id = self.create(cr, uid,
53 {'product_qty': 1,
54 'mode': 'consume_produce'}, ctxt)
55 self.do_produce(cr, uid, [wizard_id], ctxt)
56-
57 I expect
58 all the Products in the "Products to consume" lists to be consumed
59 and moved to the "consumed products" list,
60 and the manufacturing order to be in state "Done"
61-
62 !python {model: mrp.production}: |
63 order = self.browse(cr, uid, ref('test_mo_pcsc349'), context=context)
64 assert order.state == 'done', "wrong state for the production order (%r, expected: 'done')" % order.state
65 assert len(order.move_lines) == 0, "%d leftover move lines in 'products to consume'" % len(order.move_lines)
66 ram_lines = [line for line in order.move_lines2 if line.product_id.default_code == 'RAM-SR3']
67 assert len(ram_lines) == 2, 'not all RAM-SR3 were consumed'