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>