changeset b4ac30c45a50 in modules/stock:default
details: https://hg.tryton.org/modules/stock?cmd=changeset;node=b4ac30c45a50
description:
        Add picked step to customer shipment workflow

        issue9634
        review329071002
diffstat:

 CHANGELOG                                                 |   1 +
 shipment.py                                               |  33 ++++++++++++--
 shipment.xml                                              |  20 ++++++++-
 tests/scenario_stock_reporting.rst                        |   1 +
 tests/scenario_stock_shipment_out.rst                     |  10 +++-
 tests/scenario_stock_shipment_out_same_storage_output.rst |   4 +-
 view/shipment_out_form.xml                                |   5 +-
 7 files changed, 62 insertions(+), 12 deletions(-)

diffs (234 lines):

diff -r 002b02df04b2 -r b4ac30c45a50 CHANGELOG
--- a/CHANGELOG Mon Oct 12 20:31:27 2020 +0200
+++ b/CHANGELOG Mon Oct 12 23:19:54 2020 +0200
@@ -1,3 +1,4 @@
+* Add picked step to customer shipment workflow
 * Add cron task to reschedule past shipments
 * Allow lost and found on inventory moves of shipments
 * Add waste locations on warehouses
diff -r 002b02df04b2 -r b4ac30c45a50 shipment.py
--- a/shipment.py       Mon Oct 12 20:31:27 2020 +0200
+++ b/shipment.py       Mon Oct 12 23:19:54 2020 +0200
@@ -950,7 +950,7 @@
     origins = fields.Function(fields.Char('Origins'), 'get_origins')
     number = fields.Char('Number', size=None, select=True, readonly=True,
         help="The main identifier for the shipment.")
-    assigned_by = employee_field("Assigned By")
+    picked_by = employee_field("Picked By")
     packed_by = employee_field("Packed By")
     done_by = employee_field("Done By")
     state = fields.Selection([
@@ -958,6 +958,7 @@
         ('done', 'Done'),
         ('cancelled', 'Cancelled'),
         ('assigned', 'Assigned'),
+        ('picked', 'Picked'),
         ('packed', 'Packed'),
         ('waiting', 'Waiting'),
         ], 'State', readonly=True,
@@ -970,8 +971,9 @@
         cls._transitions |= set((
                 ('draft', 'waiting'),
                 ('waiting', 'assigned'),
-                ('waiting', 'packed'),
-                ('assigned', 'packed'),
+                ('waiting', 'picked'),
+                ('assigned', 'picked'),
+                ('picked', 'packed'),
                 ('packed', 'done'),
                 ('assigned', 'waiting'),
                 ('waiting', 'waiting'),
@@ -979,6 +981,7 @@
                 ('draft', 'cancelled'),
                 ('waiting', 'cancelled'),
                 ('assigned', 'cancelled'),
+                ('picked', 'cancelled'),
                 ('packed', 'cancelled'),
                 ('cancelled', 'draft'),
                 ))
@@ -1006,7 +1009,7 @@
                             'tryton-forward')),
                     'depends': ['state'],
                     },
-                'pack': {
+                'pick': {
                     'invisible': If(Eval('warehouse_storage')
                         == Eval('warehouse_output'),
                         ~Eval('state').in_(['assigned', 'waiting']),
@@ -1014,6 +1017,10 @@
                     'depends': ['state', 'warehouse_storage',
                         'warehouse_output'],
                     },
+                'pack': {
+                    'invisible': Eval('state') != 'picked',
+                    'depends': ['state'],
+                    },
                 'done': {
                     'invisible': Eval('state') != 'packed',
                     },
@@ -1036,6 +1043,10 @@
         if table.column_exist('code'):
             table.column_rename('code', 'number')
 
+        # Migration from 5.6: rename assigned_by into picked_by
+        if table.column_exist('assigned_by'):
+            table.column_rename('assigned_by', 'picked_by')
+
         super(ShipmentOut, cls).__register__(module_name)
 
         # Add index on create_date
@@ -1188,7 +1199,6 @@
 
     @classmethod
     @Workflow.transition('assigned')
-    @set_employee('assigned_by')
     def assign(cls, shipments):
         pool = Pool()
         Move = pool.get('stock.move')
@@ -1197,6 +1207,17 @@
 
     @classmethod
     @ModelView.button
+    @Workflow.transition('picked')
+    @set_employee('picked_by')
+    def pick(cls, shipments):
+        pool = Pool()
+        Move = pool.get('stock.move')
+        Move.do([m for s in shipments for m in s.inventory_moves])
+        cls._sync_inventory_to_outgoing(shipments, quantity=True)
+        Move.assign([m for s in shipments for m in s.outgoing_moves])
+
+    @classmethod
+    @ModelView.button
     @Workflow.transition('packed')
     @set_employee('packed_by')
     def pack(cls, shipments):
@@ -1370,7 +1391,7 @@
         default.setdefault('inventory_moves', None)
         default.setdefault('outgoing_moves', None)
         default.setdefault('number', None)
-        default.setdefault('assigned_by', None)
+        default.setdefault('picked_by', None)
         default.setdefault('packed_by', None)
         default.setdefault('done_by', None)
         return super(ShipmentOut, cls).copy(shipments, default=default)
diff -r 002b02df04b2 -r b4ac30c45a50 shipment.xml
--- a/shipment.xml      Mon Oct 12 20:31:27 2020 +0200
+++ b/shipment.xml      Mon Oct 12 23:19:54 2020 +0200
@@ -165,9 +165,16 @@
             <field name="count" eval="True"/>
             <field name="act_window" ref="act_shipment_out_form"/>
         </record>
+        <record model="ir.action.act_window.domain" 
id="act_shipment_out_form_domain_picked">
+            <field name="name">Picked</field>
+            <field name="sequence" eval="40"/>
+            <field name="domain" eval="[('state', '=', 'picked')]" pyson="1"/>
+            <field name="count" eval="True"/>
+            <field name="act_window" ref="act_shipment_out_form"/>
+        </record>
         <record model="ir.action.act_window.domain" 
id="act_shipment_out_form_domain_packed">
             <field name="name">Packed</field>
-            <field name="sequence" eval="40"/>
+            <field name="sequence" eval="50"/>
             <field name="domain" eval="[('state', '=', 'packed')]" pyson="1"/>
             <field name="count" eval="True"/>
             <field name="act_window" ref="act_shipment_out_form"/>
@@ -624,6 +631,17 @@
             <field name="group" ref="group_stock"/>
         </record>
 
+        <record model="ir.model.button" id="shipment_out_pick_button">
+            <field name="name">pick</field>
+            <field name="string">Pick</field>
+            <field name="model" search="[('model', '=', 
'stock.shipment.out')]"/>
+        </record>
+        <record model="ir.model.button-res.group"
+            id="shipment_out_pick_button_group_stock">
+            <field name="button" ref="shipment_out_pick_button"/>
+            <field name="group" ref="group_stock"/>
+        </record>
+
         <record model="ir.model.button" id="shipment_out_pack_button">
             <field name="name">pack</field>
             <field name="string">Pack</field>
diff -r 002b02df04b2 -r b4ac30c45a50 tests/scenario_stock_reporting.rst
--- a/tests/scenario_stock_reporting.rst        Mon Oct 12 20:31:27 2020 +0200
+++ b/tests/scenario_stock_reporting.rst        Mon Oct 12 23:19:54 2020 +0200
@@ -113,6 +113,7 @@
     >>> shipment_out.click('wait')
     >>> shipment_out.click('assign_try')
     True
+    >>> shipment_out.click('pick')
     >>> shipment_out.click('pack')
     >>> shipment_out.click('done')
 
diff -r 002b02df04b2 -r b4ac30c45a50 tests/scenario_stock_shipment_out.rst
--- a/tests/scenario_stock_shipment_out.rst     Mon Oct 12 20:31:27 2020 +0200
+++ b/tests/scenario_stock_shipment_out.rst     Mon Oct 12 23:19:54 2020 +0200
@@ -97,7 +97,7 @@
     ...     move.unit_price = Decimal('1')
     ...     move.currency = company.currency
     >>> shipment_out.save()
-    >>> shipment_out.assigned_by
+    >>> shipment_out.picked_by
     >>> shipment_out.packed_by
     >>> shipment_out.done_by
 
@@ -160,7 +160,12 @@
     >>> shipment_assign.execute('ignore')
     >>> sorted([m.quantity for m in shipment_out.inventory_moves])
     [0.0, 1.0]
-    >>> shipment_out.assigned_by == employee
+    >>> shipment_out.picked_by
+    >>> shipment_out.packed_by
+    >>> shipment_out.done_by
+
+    >>> shipment_out.click('pick')
+    >>> shipment_out.picked_by == employee
     True
     >>> shipment_out.packed_by
     >>> shipment_out.done_by
@@ -245,6 +250,7 @@
 
     >>> shipment_out.click('assign_try')
     True
+    >>> shipment_out.click('pick')
     >>> shipment_out.click('pack')
     >>> shipment_out.click('done')
     >>> shipment_out.state
diff -r 002b02df04b2 -r b4ac30c45a50 
tests/scenario_stock_shipment_out_same_storage_output.rst
--- a/tests/scenario_stock_shipment_out_same_storage_output.rst Mon Oct 12 
20:31:27 2020 +0200
+++ b/tests/scenario_stock_shipment_out_same_storage_output.rst Mon Oct 12 
23:19:54 2020 +0200
@@ -80,7 +80,9 @@
     0
 
 Assign the shipment::
-
+    >>> shipment_out.click('pick')
+    >>> shipment_out.state
+    'picked'
     >>> shipment_out.click('pack')
     >>> shipment_out.state
     'packed'
diff -r 002b02df04b2 -r b4ac30c45a50 view/shipment_out_form.xml
--- a/view/shipment_out_form.xml        Mon Oct 12 20:31:27 2020 +0200
+++ b/view/shipment_out_form.xml        Mon Oct 12 23:19:54 2020 +0200
@@ -26,8 +26,8 @@
             <field name="outgoing_moves" colspan="4" 
view_ids="stock.move_view_list_shipment"/>
         </page>
         <page string="Other Info" id="other">
-            <label name="assigned_by"/>
-            <field name="assigned_by"/>
+            <label name="picked_by"/>
+            <field name="picked_by"/>
             <label name="packed_by"/>
             <field name="packed_by"/>
             <label name="done_by"/>
@@ -41,6 +41,7 @@
         <button name="draft"/>
         <button name="wait"/>
         <button name="assign_wizard" icon="tryton-forward"/>
+        <button name="pick" icon="tryton-forward"/>
         <button name="pack" icon="tryton-forward"/>
         <button name="done" icon="tryton-ok"/>
     </group>

Reply via email to