[FIX] procurement: magic bypass transition was incomplete and preventing pulled flows...
authorOlivier Dony <odo@openerp.com>
Tue, 12 Nov 2013 15:17:47 +0000 (16:17 +0100)
committerOlivier Dony <odo@openerp.com>
Tue, 12 Nov 2013 15:17:47 +0000 (16:17 +0100)
The procurement workflow has a magic `bypass` transition
that acts as a fallback for MTO procurements in case the
necessary modules are not (yet) installed. For example
it will consider a MTO+Buy procurement directly satisfied
if the Purchase module is not yet installed.
However this bypass transition did not properly take
"internal pulled flows" into account, which are added
by the `stock_location` module as a third kind of procurement
type. In this case the bypass would match and never
give stock_location the chance to run.
In order to be consistent with the other procurement
methods, the bypass transition needs to be adapted.

Also updated the check_move() method to make it more
explicit rather than a side-effect.

bzr revid: odo@openerp.com-20131112151747-da67h4yavhz3k29c

addons/procurement/procurement.py
addons/procurement/procurement_workflow.xml

index 6602425..badd0c7 100644 (file)
@@ -182,10 +182,6 @@ class procurement_order(osv.osv):
         """
         return all(procurement.move_id.state == 'cancel' for procurement in self.browse(cr, uid, ids, context=context))
 
-    #This Function is create to avoid  a server side Error Like 'ERROR:tests.mrp:name 'check_move' is not defined'
-    def check_move(self, cr, uid, ids, context=None):
-        pass
-
     def check_move_done(self, cr, uid, ids, context=None):
         """ Checks if move is done or not.
         @return: True or False.
@@ -298,6 +294,12 @@ class procurement_order(osv.osv):
         """
         return False
 
+    def check_move(self, cr, uid, ids, context=None):
+        """ Check whether the given procurement can be satisfied by an internal move,
+            typically a pulled flow. By default, it's False. Overwritten by the `stock_location` module.
+        """
+        return False
+
     def check_conditions_confirm2wait(self, cr, uid, ids):
         """ condition on the transition to go from 'confirm' activity to 'confirm_wait' activity """
         return not self.test_cancel(cr, uid, ids)
index fce74af..d4068a6 100644 (file)
 
         <record id="trans_confirm_mto_make_done" model="workflow.transition">
             <!-- This transition is there to unblock products that would be in MTO with a supply method that would be
-                 produce or buy without MRP or purchase module installed. These modules overwrite the check_produce()
+                 produce or buy, and without MRP or Purchase modules installed. These modules overwrite the check_produce()
                  and check_buy() methods -so that it invalidates their part of this 'bypass transition'-,  and define
                  their own workflow paths.
+                 The stock_location module also introduces a check_move() alternative, for pulled flows that are
+                 satisfied with an internal product move. This yields a threefold test for the bypass transition. 
             -->
             <field name="act_from" ref="act_confirm_mto"/>
             <field name="act_to" ref="act_make_done"/>