diff --git a/modules/stock_package_shipping/CHANGELOG b/modules/stock_package_shipping/CHANGELOG index 55e0ca17da..c9ed545f06 100644 --- a/modules/stock_package_shipping/CHANGELOG +++ b/modules/stock_package_shipping/CHANGELOG @@ -1,3 +1,4 @@ +* Manage internal shipment with transit Version 7.4.0 - 2024-11-04 -------------------------- diff --git a/modules/stock_package_shipping/__init__.py b/modules/stock_package_shipping/__init__.py index eeecf0436f..4d49fe2b06 100644 --- a/modules/stock_package_shipping/__init__.py +++ b/modules/stock_package_shipping/__init__.py @@ -11,6 +11,7 @@ def register(): stock.Package, stock.ShipmentOut, stock.ShipmentInReturn, + stock.ShipmentInternal, carrier.Carrier, module='stock_package_shipping', type_='model') Pool.register( diff --git a/modules/stock_package_shipping/stock.py b/modules/stock_package_shipping/stock.py index 5b8e9dff00..7c763d75ab 100644 --- a/modules/stock_package_shipping/stock.py +++ b/modules/stock_package_shipping/stock.py @@ -310,6 +310,63 @@ class ShipmentInReturn(ShippingMixin, metaclass=PoolMeta): return self.delivery_address +class ShipmentInternal(ShippingMixin, metaclass=PoolMeta): + __name__ = 'stock.shipment.internal' + + carrier = fields.Many2One( + 'carrier', "Carrier", + states={ + 'invisible': ~Eval('transit_location'), + 'readonly': ~Eval('state').in_(['draft', 'waiting', 'assigned']), + }) + + @classmethod + def __setup__(cls): + super().__setup__() + shipping_invisible = ~Eval('transit_location') + for field in [ + cls.shipping_reference, + cls.shipping_description, + cls.has_shipping_service]: + field.states['invisible'] = shipping_invisible + cls._buttons['create_shipping']['invisible'] |= shipping_invisible + + @classmethod + @ModelView.button + @Workflow.transition('packed') + def pack(cls, shipments): + super().pack(shipments) + pool = Pool() + Warning = pool.get('res.user.warning') + for shipment in shipments: + if not shipment.transit_location: + continue + if not shipment.carrier: + name = Warning.format('no_carrier', [shipment]) + if Warning.check(name): + raise PackWarning( + gettext('stock_package_shipping' + '.msg_shipment_without_carrier', + shipment=shipment.rec_name)) + + @property + def shipping_allowed(self): + return {'packed', 'shipped'} + + @property + def shipping_warehouse(self): + return self.warehouse + + @property + def shipping_to(self): + return self.company.party + + @property + def shipping_to_address(self): + if self.to_location.warehouse: + return self.to_location.warehouse.address + + class CreateShipping(Wizard): __name__ = 'stock.shipment.create_shipping' diff --git a/modules/stock_package_shipping/stock.xml b/modules/stock_package_shipping/stock.xml index 9489897576..e81d7acebf 100644 --- a/modules/stock_package_shipping/stock.xml +++ b/modules/stock_package_shipping/stock.xml @@ -58,6 +58,24 @@ this repository contains the full copyright notices and license terms. --> Create Shipping for Packages + + stock.shipment.internal + + shipment_internal_form + + + + stock.shipment.internal + + shipment_internal_list + + + + stock.shipment.internal + create_shipping + Create Shipping for Packages + + Create Shipping stock.shipment.create_shipping diff --git a/modules/stock_package_shipping/view/shipment_internal_form.xml b/modules/stock_package_shipping/view/shipment_internal_form.xml new file mode 100644 index 0000000000..021413d623 --- /dev/null +++ b/modules/stock_package_shipping/view/shipment_internal_form.xml @@ -0,0 +1,18 @@ + + + + + + +