From 6206ef7bb06f82081306cb2d3091379f4f0d8f34 Mon Sep 17 00:00:00 2001 From: Dimitrios Josef Moustos Date: Mon, 19 Feb 2024 22:51:55 +0100 Subject: [PATCH] Fill shipment number only in waiting state Closes #12905 --- modules/stock/CHANGELOG | 1 + modules/stock/shipment.py | 77 ++++++------------- .../tests/scenario_stock_shipment_in.rst | 3 +- .../scenario_stock_shipment_in_return.rst | 5 +- .../scenario_stock_shipment_internal.rst | 5 +- .../tests/scenario_stock_shipment_out.rst | 7 +- .../scenario_stock_shipment_out_return.rst | 3 +- 7 files changed, 41 insertions(+), 60 deletions(-) diff --git a/modules/stock/CHANGELOG b/modules/stock/CHANGELOG index 524a057f20..2d0d8e2cab 100644 --- a/modules/stock/CHANGELOG +++ b/modules/stock/CHANGELOG @@ -1,3 +1,4 @@ +* Fill shipment number only in waiting state * Manage assignation for customer shipment with same picking and output location * Add pblc argument to assign_try diff --git a/modules/stock/shipment.py b/modules/stock/shipment.py index 400f00b160..bf38ee19db 100644 --- a/modules/stock/shipment.py +++ b/modules/stock/shipment.py @@ -85,6 +85,23 @@ class ShipmentMixin: table, _ = tables[None] return [Coalesce(table.effective_date, table.planned_date)] + @classmethod + def set_number(cls, shipments): + ''' + Fill the number field from sequence + ''' + pool = Pool() + Config = pool.get('stock.configuration') + + config = Config(1) + sequence = cls.__name__[len('stock.'):].replace('.', '_') + for shipment in shipments: + if not shipment.number: + shipment.number = config.get_multivalue( + sequence + '_sequence', + company=shipment.company.id).get() + cls.save(shipments) + def get_delay(self, name): pool = Pool() Date = pool.get('ir.date') @@ -604,18 +621,8 @@ class ShipmentIn( @classmethod def create(cls, vlist): - pool = Pool() - Config = pool.get('stock.configuration') - - vlist = [x.copy() for x in vlist] - config = Config(1) - default_company = cls.default_company() - for values in vlist: - if values.get('number') is None: - values['number'] = config.get_multivalue( - 'shipment_in_sequence', - company=values.get('company', default_company)).get() shipments = super(ShipmentIn, cls).create(vlist) + cls.set_number(shipments) cls._set_move_planned_date(shipments) return shipments @@ -961,17 +968,6 @@ class ShipmentInReturn(ShipmentAssignMixin, Workflow, ModelSQL, ModelView): @classmethod def create(cls, vlist): - pool = Pool() - Config = pool.get('stock.configuration') - - vlist = [x.copy() for x in vlist] - config = Config(1) - default_company = cls.default_company() - for values in vlist: - if values.get('number') is None: - values['number'] = config.get_multivalue( - 'shipment_in_return_sequence', - company=values.get('company', default_company)).get() shipments = super(ShipmentInReturn, cls).create(vlist) cls._set_move_planned_date(shipments) return shipments @@ -1032,6 +1028,7 @@ class ShipmentInReturn(ShipmentAssignMixin, Workflow, ModelSQL, ModelView): else: assert all(m.shipment in shipments for m in moves) Move.draft(moves) + cls.set_number(shipments) cls._set_move_planned_date(shipments) @classmethod @@ -1508,6 +1505,7 @@ class ShipmentOut( to_create.append(inventory_move) if to_create: Move.save(to_create) + cls.set_number(shipments) def _get_inventory_move(self, move): 'Return inventory move for the outgoing move if necessary' @@ -1742,17 +1740,6 @@ class ShipmentOut( @classmethod def create(cls, vlist): - pool = Pool() - Config = pool.get('stock.configuration') - - vlist = [x.copy() for x in vlist] - config = Config(1) - default_company = cls.default_company() - for values in vlist: - if values.get('number') is None: - values['number'] = config.get_multivalue( - 'shipment_out_sequence', - company=values.get('company', default_company)).get() shipments = super(ShipmentOut, cls).create(vlist) cls._set_move_planned_date(shipments) return shipments @@ -2140,18 +2127,8 @@ class ShipmentOutReturn( @classmethod def create(cls, vlist): - pool = Pool() - Config = pool.get('stock.configuration') - - vlist = [x.copy() for x in vlist] - config = Config(1) - default_company = cls.default_company() - for values in vlist: - if values.get('number') is None: - values['number'] = config.get_multivalue( - 'shipment_out_return_sequence', - company=values.get('company', default_company)).get() shipments = super(ShipmentOutReturn, cls).create(vlist) + cls.set_number(shipments) cls._set_move_planned_date(shipments) return shipments @@ -2624,17 +2601,6 @@ class ShipmentInternal( @classmethod def create(cls, vlist): - pool = Pool() - Config = pool.get('stock.configuration') - - vlist = [x.copy() for x in vlist] - config = Config(1) - default_company = cls.default_company() - for values in vlist: - if values.get('number') is None: - values['number'] = config.get_multivalue( - 'shipment_internal_sequence', - company=values.get('company', default_company)).get() shipments = super().create(vlist) cls._set_move_planned_date(shipments) return shipments @@ -2841,6 +2807,7 @@ class ShipmentInternal( moves.append(move) Move.save(moves) + cls.set_number(shipments) cls._set_transit(shipments) cls._sync_moves(shipments) diff --git a/modules/stock/tests/scenario_stock_shipment_in.rst b/modules/stock/tests/scenario_stock_shipment_in.rst index 7b4c8186d5..71a1b26533 100644 --- a/modules/stock/tests/scenario_stock_shipment_in.rst +++ b/modules/stock/tests/scenario_stock_shipment_in.rst @@ -8,7 +8,7 @@ Imports:: >>> from proteus import Model, Report >>> from trytond.modules.company.tests.tools import create_company, get_company - >>> from trytond.tests.tools import activate_modules + >>> from trytond.tests.tools import activate_modules, assertNotEqual Activate modules:: @@ -59,6 +59,7 @@ Create a shipment:: >>> move.unit_price = Decimal('5') >>> move.currency = company.currency >>> shipment.save() + >>> assertNotEqual(shipment.number, None) >>> len(shipment.incoming_moves) 1 diff --git a/modules/stock/tests/scenario_stock_shipment_in_return.rst b/modules/stock/tests/scenario_stock_shipment_in_return.rst index 056637efa3..0eeda98745 100644 --- a/modules/stock/tests/scenario_stock_shipment_in_return.rst +++ b/modules/stock/tests/scenario_stock_shipment_in_return.rst @@ -9,7 +9,7 @@ Imports:: >>> from proteus import Model >>> from trytond.modules.company.tests.tools import create_company, get_company - >>> from trytond.tests.tools import activate_modules, assertEqual + >>> from trytond.tests.tools import activate_modules, assertEqual, assertNotEqual >>> today = dt.date.today() >>> yesterday = today - dt.timedelta(days=1) @@ -65,9 +65,12 @@ Create Shipment In:: >>> move.company = company >>> move.unit_price = Decimal('1') >>> move.currency = company.currency + >>> shipment_return.save() + >>> shipment_return.number >>> shipment_return.click('wait') >>> shipment_return.state 'waiting' + >>> assertNotEqual(shipment_return.number, None) Reschedule shipment:: diff --git a/modules/stock/tests/scenario_stock_shipment_internal.rst b/modules/stock/tests/scenario_stock_shipment_internal.rst index 4656d8ddfb..e6e7997259 100644 --- a/modules/stock/tests/scenario_stock_shipment_internal.rst +++ b/modules/stock/tests/scenario_stock_shipment_internal.rst @@ -9,7 +9,8 @@ Imports:: >>> from proteus import Model, Report >>> from trytond.modules.company.tests.tools import create_company, get_company - >>> from trytond.tests.tools import activate_modules, assertEqual, set_user + >>> from trytond.tests.tools import ( + ... activate_modules, assertEqual, assertNotEqual, set_user) >>> today = dt.date.today() >>> yesterday = today - dt.timedelta(days=1) @@ -82,12 +83,14 @@ Create Internal Shipment:: >>> move.to_location = storage_loc >>> move.currency = company.currency >>> shipment.save() + >>> shipment.number >>> shipment.assigned_by >>> shipment.done_by >>> shipment.click('wait') >>> shipment.state 'waiting' + >>> assertNotEqual(shipment.number, None) >>> shipment.click('assign_try') >>> shipment.state 'waiting' diff --git a/modules/stock/tests/scenario_stock_shipment_out.rst b/modules/stock/tests/scenario_stock_shipment_out.rst index 79ee4402e4..762a3fb5d8 100644 --- a/modules/stock/tests/scenario_stock_shipment_out.rst +++ b/modules/stock/tests/scenario_stock_shipment_out.rst @@ -9,7 +9,8 @@ Imports:: >>> from proteus import Model, Report >>> from trytond.modules.company.tests.tools import create_company, get_company - >>> from trytond.tests.tools import activate_modules, assertEqual, set_user + >>> from trytond.tests.tools import ( + ... activate_modules, assertEqual, assertNotEqual, set_user) >>> today = dt.date.today() >>> yesterday = today - dt.timedelta(days=1) @@ -96,6 +97,7 @@ Add two shipment lines of same product:: ... move.unit_price = Decimal('1') ... move.currency = company.currency >>> shipment_out.save() + >>> shipment_out.number >>> shipment_out.picked_by >>> shipment_out.packed_by >>> shipment_out.done_by @@ -103,6 +105,9 @@ Add two shipment lines of same product:: Set the shipment state to waiting:: >>> shipment_out.click('wait') + >>> shipment_out.state + 'waiting' + >>> assertNotEqual(shipment_out.number, None) >>> len(shipment_out.outgoing_moves) 2 >>> len(shipment_out.inventory_moves) diff --git a/modules/stock/tests/scenario_stock_shipment_out_return.rst b/modules/stock/tests/scenario_stock_shipment_out_return.rst index fea470b751..7795897488 100644 --- a/modules/stock/tests/scenario_stock_shipment_out_return.rst +++ b/modules/stock/tests/scenario_stock_shipment_out_return.rst @@ -8,7 +8,7 @@ Imports:: >>> from proteus import Model, Report >>> from trytond.modules.company.tests.tools import create_company, get_company - >>> from trytond.tests.tools import activate_modules + >>> from trytond.tests.tools import activate_modules, assertNotEqual Activate modules:: @@ -62,6 +62,7 @@ Create Shipment Out Return:: >>> move.unit_price = Decimal('20') >>> move.currency = company.currency >>> shipment.save() + >>> assertNotEqual(shipment.number, None) >>> len(shipment.incoming_moves) 1