Merge lp:~unifield-team/unifield-addons/modification-of-stock-for-shipment into lp:unifield-addons

Proposed by Patrick Amstutz
Status: Merged
Merged at revision: 4492
Proposed branch: lp:~unifield-team/unifield-addons/modification-of-stock-for-shipment
Merge into: lp:unifield-addons
Diff against target: 481 lines (+209/-98)
7 files modified
sale/sale.py (+125/-56)
sale/test/invoice_on_shipped_qty.yml (+16/-13)
sale/test/manual_order_policy.yml (+20/-12)
sale/test/picking_order_policy.yml (+3/-1)
sale/test/postpaid_order_policy.yml (+6/-2)
sale/test/prepaid_order_policy.yml (+21/-10)
stock/stock.py (+18/-4)
To merge this branch: bzr merge lp:~unifield-team/unifield-addons/modification-of-stock-for-shipment
Reviewer Review Type Date Requested Status
UniField Dev Team Pending
Review via email: mp+76373@code.launchpad.net

Description of the change

ne pas oublier les tests yaml dans sale, merci.

To post a comment you must log in.
4494. By chloups208 <chloups208@chloups208-laptop>

[UF-390]one more hook for stock_picking>action_assign

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'sale/sale.py'
--- sale/sale.py 2011-07-07 10:50:50 +0000
+++ sale/sale.py 2011-09-21 12:33:24 +0000
@@ -649,14 +649,76 @@
649 if notcanceled:649 if notcanceled:
650 return False650 return False
651 return canceled651 return canceled
652652
653 def action_ship_create(self, cr, uid, ids, *args):653 def _hook_ship_create_stock_move(self, cr, uid, ids, context=None, *args, **kwargs):
654 '''
655 Please copy this to your module's method also.
656 This hook belongs to the action_ship_create method from sale>sale.py
657
658 - allow to modify the data for stock move creation
659 '''
660 move_data = kwargs['move_data']
661 return move_data
662
663 def _hook_ship_create_procurement_order(self, cr, uid, ids, context=None, *args, **kwargs):
664 '''
665 Please copy this to your module's method also.
666 This hook belongs to the action_ship_create method from sale>sale.py
667
668 - allow to modify the data for procurement order creation
669 '''
670 proc_data = kwargs['proc_data']
671 return proc_data
672
673 def _hook_ship_create_stock_picking(self, cr, uid, ids, context=None, *args, **kwargs):
674 '''
675 Please copy this to your module's method also.
676 This hook belongs to the action_ship_create method from sale>sale.py
677
678 - allow to modify the data for stock picking creation
679 '''
680 picking_data = kwargs['picking_data']
681 return picking_data
682
683 def _hook_ship_create_execute_picking_workflow(self, cr, uid, ids, context=None, *args, **kwargs):
684 '''
685 Please copy this to your module's method also.
686 This hook belongs to the action_ship_create method from sale>sale.py
687
688 - allow to avoid the stock picking workflow execution
689 '''
690 picking_id = kwargs['picking_id']
691 return picking_id
692
693 def _hook_ship_create_execute_specific_code_01(self, cr, uid, ids, context=None, *args, **kwargs):
694 '''
695 Please copy this to your module's method also.
696 This hook belongs to the action_ship_create method from sale>sale.py
697
698 - allow to execute specific code at position 01
699 '''
700 pass
701
702 def _hook_ship_create_line_condition(self, cr, uid, ids, context=None, *args, **kwargs):
703 '''
704 Please copy this to your module's method also.
705 This hook belongs to the action_ship_create method from sale>sale.py
706
707 - allow to customize the execution condition
708 '''
709 line = kwargs['line']
710 result = line.product_id and line.product_id.product_tmpl_id.type in ('product', 'consu')
711 return result
712
713 def action_ship_create(self, cr, uid, ids, context=None, *args):
714 if context is None:
715 context = {}
654 wf_service = netsvc.LocalService("workflow")716 wf_service = netsvc.LocalService("workflow")
655 picking_id = False717 picking_id = False
656 move_obj = self.pool.get('stock.move')718 move_obj = self.pool.get('stock.move')
657 proc_obj = self.pool.get('procurement.order')719 proc_obj = self.pool.get('procurement.order')
658 company = self.pool.get('res.users').browse(cr, uid, uid).company_id720 company = self.pool.get('res.users').browse(cr, uid, uid).company_id
659 for order in self.browse(cr, uid, ids, context={}):721 for order in self.browse(cr, uid, ids, context=context):
660 proc_ids = []722 proc_ids = []
661 output_id = order.shop_id.warehouse_id.lot_output_id.id723 output_id = order.shop_id.warehouse_id.lot_output_id.id
662 picking_id = False724 picking_id = False
@@ -668,63 +730,69 @@
668 if line.state == 'done':730 if line.state == 'done':
669 continue731 continue
670 move_id = False732 move_id = False
671 if line.product_id and line.product_id.product_tmpl_id.type in ('product', 'consu'):733 if self._hook_ship_create_line_condition(cr, uid, ids, context=context, line=line,):
672 location_id = order.shop_id.warehouse_id.lot_stock_id.id734 location_id = order.shop_id.warehouse_id.lot_stock_id.id
673 if not picking_id:735 if not picking_id:
674 pick_name = self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.out')736 pick_name = self.pool.get('ir.sequence').get(cr, uid, 'stock.picking.out')
675 picking_id = self.pool.get('stock.picking').create(cr, uid, {737 picking_data = {'name': pick_name,
676 'name': pick_name,738 'origin': order.name,
677 'origin': order.name,739 'type': 'out',
678 'type': 'out',740 'state': 'auto',
679 'state': 'auto',741 'move_type': order.picking_policy,
680 'move_type': order.picking_policy,742 'sale_id': order.id,
681 'sale_id': order.id,743 'address_id': order.partner_shipping_id.id,
682 'address_id': order.partner_shipping_id.id,744 'note': order.note,
683 'note': order.note,745 'invoice_state': (order.order_policy=='picking' and '2binvoiced') or 'none',
684 'invoice_state': (order.order_policy=='picking' and '2binvoiced') or 'none',746 'company_id': order.company_id.id,
685 'company_id': order.company_id.id,747 }
686 })748 picking_data = self._hook_ship_create_stock_picking(cr, uid, ids, context=context, picking_data=picking_data, order=order,)
687 move_id = self.pool.get('stock.move').create(cr, uid, {749 picking_id = self.pool.get('stock.picking').create(cr, uid, picking_data, context=context)
688 'name': line.name[:64],750
689 'picking_id': picking_id,751 move_data = {'name': line.name[:64],
690 'product_id': line.product_id.id,752 'picking_id': picking_id,
691 'date': date_planned,753 'product_id': line.product_id.id,
692 'date_expected': date_planned,754 'date': date_planned,
693 'product_qty': line.product_uom_qty,755 'date_expected': date_planned,
694 'product_uom': line.product_uom.id,756 'product_qty': line.product_uom_qty,
695 'product_uos_qty': line.product_uos_qty,757 'product_uom': line.product_uom.id,
696 'product_uos': (line.product_uos and line.product_uos.id)\758 'product_uos_qty': line.product_uos_qty,
697 or line.product_uom.id,759 'product_uos': (line.product_uos and line.product_uos.id)\
698 'product_packaging': line.product_packaging.id,760 or line.product_uom.id,
699 'address_id': line.address_allotment_id.id or order.partner_shipping_id.id,761 'product_packaging': line.product_packaging.id,
700 'location_id': location_id,762 'address_id': line.address_allotment_id.id or order.partner_shipping_id.id,
701 'location_dest_id': output_id,763 'location_id': location_id,
702 'sale_line_id': line.id,764 'location_dest_id': output_id,
703 'tracking_id': False,765 'sale_line_id': line.id,
704 'state': 'draft',766 'tracking_id': False,
705 #'state': 'waiting',767 'state': 'draft',
706 'note': line.notes,768 #'state': 'waiting',
707 'company_id': order.company_id.id,769 'note': line.notes,
708 })770 'company_id': order.company_id.id,
771 }
772
773 # hook for stock move data modification
774 move_data = self._hook_ship_create_stock_move(cr, uid, ids, context=context, move_data=move_data, line=line, order=order,)
775 move_id = self.pool.get('stock.move').create(cr, uid, move_data, context=context)
709776
710 if line.product_id:777 if line.product_id:
711 proc_id = self.pool.get('procurement.order').create(cr, uid, {778 proc_data = {'name': line.name,
712 'name': line.name,779 'origin': order.name,
713 'origin': order.name,780 'date_planned': date_planned,
714 'date_planned': date_planned,781 'product_id': line.product_id.id,
715 'product_id': line.product_id.id,782 'product_qty': line.product_uom_qty,
716 'product_qty': line.product_uom_qty,783 'product_uom': line.product_uom.id,
717 'product_uom': line.product_uom.id,784 'product_uos_qty': (line.product_uos and line.product_uos_qty)\
718 'product_uos_qty': (line.product_uos and line.product_uos_qty)\785 or line.product_uom_qty,
719 or line.product_uom_qty,786 'product_uos': (line.product_uos and line.product_uos.id)\
720 'product_uos': (line.product_uos and line.product_uos.id)\787 or line.product_uom.id,
721 or line.product_uom.id,788 'location_id': order.shop_id.warehouse_id.lot_stock_id.id,
722 'location_id': order.shop_id.warehouse_id.lot_stock_id.id,789 'procure_method': line.type,
723 'procure_method': line.type,790 'move_id': move_id,
724 'move_id': move_id,791 'property_ids': [(6, 0, [x.id for x in line.property_ids])],
725 'property_ids': [(6, 0, [x.id for x in line.property_ids])],792 'company_id': order.company_id.id,
726 'company_id': order.company_id.id,793 }
727 })794 proc_data = self._hook_ship_create_procurement_order(cr, uid, ids, context=context, proc_data=proc_data, line=line,)
795 proc_id = self.pool.get('procurement.order').create(cr, uid, proc_data)
728 proc_ids.append(proc_id)796 proc_ids.append(proc_id)
729 self.pool.get('sale.order.line').write(cr, uid, [line.id], {'procurement_id': proc_id})797 self.pool.get('sale.order.line').write(cr, uid, [line.id], {'procurement_id': proc_id})
730 if order.state == 'shipping_except':798 if order.state == 'shipping_except':
@@ -739,11 +807,12 @@
739807
740 val = {}808 val = {}
741809
742 if picking_id:810 if self._hook_ship_create_execute_picking_workflow(cr, uid, ids, context=context, picking_id=picking_id,):
743 wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)811 wf_service.trg_validate(uid, 'stock.picking', picking_id, 'button_confirm', cr)
744812
745 for proc_id in proc_ids:813 for proc_id in proc_ids:
746 wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)814 wf_service.trg_validate(uid, 'procurement.order', proc_id, 'button_confirm', cr)
815 self._hook_ship_create_execute_specific_code_01(cr, uid, ids, context=context, order=order, proc_id=proc_id,)
747816
748 if order.state == 'shipping_except':817 if order.state == 'shipping_except':
749 val['state'] = 'progress'818 val['state'] = 'progress'
750819
=== modified file 'sale/test/invoice_on_shipped_qty.yml'
--- sale/test/invoice_on_shipped_qty.yml 2011-01-14 00:11:01 +0000
+++ sale/test/invoice_on_shipped_qty.yml 2011-09-21 12:33:24 +0000
@@ -86,19 +86,22 @@
86 I verify that an invoice is created on the basis of shipped quantities 100 not ordered quantities 20086 I verify that an invoice is created on the basis of shipped quantities 100 not ordered quantities 200
87-87-
88 !python {model: account.invoice}: |88 !python {model: account.invoice}: |
89 sale_order_obj = self.pool.get('sale.order')89 modules = self.pool.get('ir.module.module')
90 so = sale_order_obj.browse(cr, uid, ref("sale_order_so6"))90 mod_pur = modules.search(cr, uid, [('name','=','msf_outgoing'), ('state', 'in', ['installed', 'to upgrade', 'to install'])])
91 picking_obj = self.pool.get('stock.picking')91 if not mod_pur:
92 ids = picking_obj.search(cr, uid, [('origin', '=', so.name),('type','=','out'),('state','=','done')])92 sale_order_obj = self.pool.get('sale.order')
93 qty = qty1 = 0.093 so = sale_order_obj.browse(cr, uid, ref("sale_order_so6"))
94 for pick_brw in picking_obj.browse(cr,uid, ids):94 picking_obj = self.pool.get('stock.picking')
95 for lines in pick_brw.move_lines:95 ids = picking_obj.search(cr, uid, [('origin', '=', so.name),('type','=','out'),('state','=','done')])
96 qty=lines.product_qty96 qty = qty1 = 0.0
97 inv_id = self.search(cr, uid, [('origin', 'like', so.name)])97 for pick_brw in picking_obj.browse(cr,uid, ids):
98 inv_brw = self.browse(cr,uid,inv_id)[0]98 for lines in pick_brw.move_lines:
99 for inv_lines in inv_brw.invoice_line:99 qty=lines.product_qty
100 qty1=inv_lines.quantity100 inv_id = self.search(cr, uid, [('origin', 'like', so.name)])
101 assert (qty1 == qty), "Quantities are not the same"101 inv_brw = self.browse(cr,uid,inv_id)[0]
102 for inv_lines in inv_brw.invoice_line:
103 qty1=inv_lines.quantity
104 assert (qty1 == qty), "Quantities are not the same"
102-105-
103 I open the Invoice for the SO.106 I open the Invoice for the SO.
104-107-
105108
=== modified file 'sale/test/manual_order_policy.yml'
--- sale/test/manual_order_policy.yml 2011-01-14 00:11:01 +0000
+++ sale/test/manual_order_policy.yml 2011-09-21 12:33:24 +0000
@@ -244,14 +244,16 @@
244 ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ),('state', '=', 'done')])244 ids = picking_obj.search(cr, uid, [('purchase_id', '=', po.id ),('state', '=', 'done')])
245 assert(ids),"Picking is not in the done state!"245 assert(ids),"Picking is not in the done state!"
246-246-
247 Then I done the picking247 Then I done the picking, if msf_outgoing module is not installed
248-248-
249 !python {model: stock.picking }: |249 !python {model: stock.picking }: |
250 import time250 import time
251 modules = self.pool.get('ir.module.module')
252 mod_pur = modules.search(cr, uid, [('name','=','msf_outgoing'), ('state', 'in', ['installed', 'to upgrade', 'to install'])])
251 sale_order_obj = self.pool.get('sale.order')253 sale_order_obj = self.pool.get('sale.order')
252 so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))254 so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
253 picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])255 picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])
254 if picking_id:256 if picking_id and not mod_pur:
255 pick=self.browse(cr,uid,picking_id[0])257 pick=self.browse(cr,uid,picking_id[0])
256 pick.force_assign(cr, uid)258 pick.force_assign(cr, uid)
257 partial_datas = {259 partial_datas = {
@@ -270,11 +272,14 @@
270 I verify that picking for sale order is in done state.272 I verify that picking for sale order is in done state.
271-273-
272 !python {model: stock.picking }: |274 !python {model: stock.picking }: |
273 sale_order_obj = self.pool.get('sale.order')275 modules = self.pool.get('ir.module.module')
274 so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))276 mod_pur = modules.search(cr, uid, [('name','=','msf_outgoing'), ('state', 'in', ['installed', 'to upgrade', 'to install'])])
275 picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])277 if not mod_pur:
276 pick = self.browse(cr,uid,picking_id[0])278 sale_order_obj = self.pool.get('sale.order')
277 assert (pick.state) =='done', "Picking for SO is not in done state."279 so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
280 picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])
281 pick = self.browse(cr,uid,picking_id[0])
282 assert (pick.state) =='done', "Picking for SO is not in done state."
278-283-
279 Then I done the delivery order284 Then I done the delivery order
280-285-
@@ -302,11 +307,14 @@
302 I verify that delivery state is done307 I verify that delivery state is done
303-308-
304 !python {model: stock.picking }: |309 !python {model: stock.picking }: |
305 sale_order_obj = self.pool.get('sale.order')310 modules = self.pool.get('ir.module.module')
306 so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))311 mod_pur = modules.search(cr, uid, [('name','=','msf_outgoing'), ('state', 'in', ['installed', 'to upgrade', 'to install'])])
307 picking_id = self.search(cr, uid, [('origin','=',so.name)])312 if not mod_pur:
308 pick = self.browse(cr,uid,picking_id[0])313 sale_order_obj = self.pool.get('sale.order')
309 assert (pick.state) =='done', "Picking for SO is not in done state."314 so = sale_order_obj.browse(cr, uid, ref("sale_order_so0"))
315 picking_id = self.search(cr, uid, [('origin','=',so.name)])
316 pick = self.browse(cr,uid,picking_id[0])
317 assert (pick.state) =='done', "Picking for SO is not in done state."
310-318-
311 I verify that a "Picked" has been set to true319 I verify that a "Picked" has been set to true
312-320-
313321
=== modified file 'sale/test/picking_order_policy.yml'
--- sale/test/picking_order_policy.yml 2011-01-14 00:11:01 +0000
+++ sale/test/picking_order_policy.yml 2011-09-21 12:33:24 +0000
@@ -286,7 +286,9 @@
286 sale_order_obj = self.pool.get('sale.order')286 sale_order_obj = self.pool.get('sale.order')
287 so = sale_order_obj.browse(cr, uid, ref("sale_order_so7"))287 so = sale_order_obj.browse(cr, uid, ref("sale_order_so7"))
288 picking_id = self.search(cr, uid, [('origin','=',so.name)])288 picking_id = self.search(cr, uid, [('origin','=',so.name)])
289 if picking_id:289 modules = self.pool.get('ir.module.module')
290 mod_pur = modules.search(cr, uid, [('name','=','msf_outgoing'), ('state', 'in', ['installed', 'to upgrade', 'to install'])])
291 if picking_id and not mod_pur:
290 pick = self.browse(cr,uid,picking_id[0])292 pick = self.browse(cr,uid,picking_id[0])
291 assert (pick.state) =='done', "Picking for SO is not in done state."293 assert (pick.state) =='done', "Picking for SO is not in done state."
292-294-
293295
=== modified file 'sale/test/postpaid_order_policy.yml'
--- sale/test/postpaid_order_policy.yml 2011-01-14 00:11:01 +0000
+++ sale/test/postpaid_order_policy.yml 2011-09-21 12:33:24 +0000
@@ -64,7 +64,9 @@
64 sale_order_obj = self.pool.get('sale.order')64 sale_order_obj = self.pool.get('sale.order')
65 so = sale_order_obj.browse(cr, uid, ref("sale_order_so8"))65 so = sale_order_obj.browse(cr, uid, ref("sale_order_so8"))
66 picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])66 picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])
67 if picking_id:67 modules = self.pool.get('ir.module.module')
68 mod_pur = modules.search(cr, uid, [('name','=','msf_outgoing'), ('state', 'in', ['installed', 'to upgrade', 'to install'])])
69 if picking_id and not mod_pur:
68 pick = self.browse(cr,uid,picking_id[0])70 pick = self.browse(cr,uid,picking_id[0])
69 assert (pick.state == 'done'), "Picking for SO is not in done state."71 assert (pick.state == 'done'), "Picking for SO is not in done state."
70-72-
@@ -105,7 +107,9 @@
105 sale_order_obj = self.pool.get('sale.order')107 sale_order_obj = self.pool.get('sale.order')
106 so = sale_order_obj.browse(cr, uid, ref("sale_order_so8"))108 so = sale_order_obj.browse(cr, uid, ref("sale_order_so8"))
107 picking_id = self.search(cr, uid, [('origin','=',so.name)])109 picking_id = self.search(cr, uid, [('origin','=',so.name)])
108 if picking_id:110 modules = self.pool.get('ir.module.module')
111 mod_pur = modules.search(cr, uid, [('name','=','msf_outgoing'), ('state', 'in', ['installed', 'to upgrade', 'to install'])])
112 if picking_id and not mod_pur:
109 pick = self.browse(cr,uid,picking_id[0])113 pick = self.browse(cr,uid,picking_id[0])
110 assert (pick.state) =='done', "Picking for SO is not in done state."114 assert (pick.state) =='done', "Picking for SO is not in done state."
111-115-
112116
=== modified file 'sale/test/prepaid_order_policy.yml'
--- sale/test/prepaid_order_policy.yml 2011-01-14 00:11:01 +0000
+++ sale/test/prepaid_order_policy.yml 2011-09-21 12:33:24 +0000
@@ -98,7 +98,9 @@
98 sale_order_obj = self.pool.get('sale.order')98 sale_order_obj = self.pool.get('sale.order')
99 so = sale_order_obj.browse(cr, uid, ref("sale_order_so1"))99 so = sale_order_obj.browse(cr, uid, ref("sale_order_so1"))
100 picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])100 picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])
101 if picking_id:101 modules = self.pool.get('ir.module.module')
102 mod_pur = modules.search(cr, uid, [('name','=','msf_outgoing'), ('state', 'in', ['installed', 'to upgrade', 'to install'])])
103 if picking_id and not mod_pur:
102 pick=self.browse(cr,uid,picking_id[0])104 pick=self.browse(cr,uid,picking_id[0])
103 pick.force_assign(cr, uid)105 pick.force_assign(cr, uid)
104 partial_datas = {106 partial_datas = {
@@ -117,11 +119,14 @@
117 I verify that picking order is in done state.119 I verify that picking order is in done state.
118-120-
119 !python {model: stock.picking }: |121 !python {model: stock.picking }: |
120 sale_order_obj = self.pool.get('sale.order')122 modules = self.pool.get('ir.module.module')
121 so = sale_order_obj.browse(cr, uid, ref("sale_order_so1"))123 mod_pur = modules.search(cr, uid, [('name','=','msf_outgoing'), ('state', 'in', ['installed', 'to upgrade', 'to install'])])
122 picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])124 if not mod_pur:
123 pick = self.browse(cr,uid,picking_id[0])125 sale_order_obj = self.pool.get('sale.order')
124 assert (pick.state) =='done', "Picking for SO is not in done state."126 so = sale_order_obj.browse(cr, uid, ref("sale_order_so1"))
127 picking_id = self.search(cr, uid, [('origin','=',so.name),('type','=','out')])
128 pick = self.browse(cr,uid,picking_id[0])
129 assert (pick.state) =='done', "Picking for SO is not in done state."
125-130-
126 I verify that a procurement has been generated for so131 I verify that a procurement has been generated for so
127-132-
@@ -256,11 +261,17 @@
256 I verify that a "Picked" has been set to true261 I verify that a "Picked" has been set to true
257-262-
258 !python {model: sale.order}: |263 !python {model: sale.order}: |
259 so = self.browse(cr, uid, ref("sale_order_so1"))264 modules = self.pool.get('ir.module.module')
260 assert (so.shipped == True), "Picking is not done."265 mod_pur = modules.search(cr, uid, [('name','=','msf_outgoing'), ('state', 'in', ['installed', 'to upgrade', 'to install'])])
266 if not mod_pur:
267 so = self.browse(cr, uid, ref("sale_order_so1"))
268 assert (so.shipped == True), "Picking is not done."
261-269-
262 I verify that a sale order is in done state270 I verify that a sale order is in done state
263-271-
264 !python {model: sale.order}: |272 !python {model: sale.order}: |
265 so = self.browse(cr, uid, ref("sale_order_so1"))273 modules = self.pool.get('ir.module.module')
266 assert (so.state == 'done'), "Sale order is not in the done state."274 mod_pur = modules.search(cr, uid, [('name','=','msf_outgoing'), ('state', 'in', ['installed', 'to upgrade', 'to install'])])
275 if not mod_pur:
276 so = self.browse(cr, uid, ref("sale_order_so1"))
277 assert (so.state == 'done'), "Sale order is not in the done state."
267278
=== modified file 'stock/stock.py'
--- stock/stock.py 2011-09-20 12:14:48 +0000
+++ stock/stock.py 2011-09-21 12:33:24 +0000
@@ -677,7 +677,7 @@
677 'context': dict(context, active_ids=ids)677 'context': dict(context, active_ids=ids)
678 }678 }
679679
680 def _keep_prodlot_hook(self, cr, uid, id, context, *args, **kwargs):680 def _erase_prodlot_hook(self, cr, uid, id, context=None, *args, **kwargs):
681 '''681 '''
682 hook to keep the production lot when a stock move is copied682 hook to keep the production lot when a stock move is copied
683 '''683 '''
@@ -689,6 +689,8 @@
689 def copy(self, cr, uid, id, default=None, context=None):689 def copy(self, cr, uid, id, default=None, context=None):
690 if default is None:690 if default is None:
691 default = {}691 default = {}
692 if context is None:
693 context = {}
692 default = default.copy()694 default = default.copy()
693 picking_obj = self.browse(cr, uid, id, context=context)695 picking_obj = self.browse(cr, uid, id, context=context)
694 move_obj = self.pool.get('stock.move')696 move_obj = self.pool.get('stock.move')
@@ -698,7 +700,7 @@
698 default['origin'] = ''700 default['origin'] = ''
699 default['backorder_id'] = False701 default['backorder_id'] = False
700 res = super(stock_picking, self).copy(cr, uid, id, default, context)702 res = super(stock_picking, self).copy(cr, uid, id, default, context)
701 if self._keep_prodlot_hook(cr, uid, id, context, res=res):703 if self._erase_prodlot_hook(cr, uid, id, context=context, res=res):
702 picking_obj = self.browse(cr, uid, res, context=context)704 picking_obj = self.browse(cr, uid, res, context=context)
703 for move in picking_obj.move_lines:705 for move in picking_obj.move_lines:
704 move_obj.write(cr, uid, [move.id], {'tracking_id': False,'prodlot_id':False})706 move_obj.write(cr, uid, [move.id], {'tracking_id': False,'prodlot_id':False})
@@ -731,16 +733,28 @@
731 def test_auto_picking(self, cr, uid, ids):733 def test_auto_picking(self, cr, uid, ids):
732 # TODO: Check locations to see if in the same location ?734 # TODO: Check locations to see if in the same location ?
733 return True735 return True
736
737 def _hook_action_assign_raise_exception(self, cr, uid, ids, context=None, *args, **kwargs):
738 '''
739 Please copy this to your module's method also.
740 This hook belongs to the action_assign method from stock>stock.py>stock_picking class
741
742 - allow to choose wether or not an exception should be raised in case of no stock move
743 '''
744 return True
734745
735 def action_assign(self, cr, uid, ids, *args):746 def action_assign(self, cr, uid, ids, context=None, *args):
736 """ Changes state of picking to available if all moves are confirmed.747 """ Changes state of picking to available if all moves are confirmed.
737 @return: True748 @return: True
738 """749 """
750 if context is None:
751 context = {}
739 move_obj = self.pool.get('stock.move')752 move_obj = self.pool.get('stock.move')
740 for pick in self.browse(cr, uid, ids):753 for pick in self.browse(cr, uid, ids):
741 move_ids = [x.id for x in pick.move_lines if x.state == 'confirmed']754 move_ids = [x.id for x in pick.move_lines if x.state == 'confirmed']
742 if not move_ids:755 if not move_ids:
743 raise osv.except_osv(_('Warning !'),_('Not enough stock, unable to reserve the products.'))756 if self._hook_action_assign_raise_exception(cr, uid, ids, context=context,):
757 raise osv.except_osv(_('Warning !'),_('Not enough stock, unable to reserve the products.'))
744 move_obj.action_assign(cr, uid, move_ids)758 move_obj.action_assign(cr, uid, move_ids)
745 return True759 return True
746760

Subscribers

People subscribed via source and target branches

to all changes: