From 59351c4821dabf7d959e4749cbde4165f4347031 Mon Sep 17 00:00:00 2001 From: Borruso Date: Fri, 24 Jan 2025 10:29:49 +0100 Subject: [PATCH] [ADD] l10n_it_delivery_note: aggiornata PR https://github.com/OCA/l10n-italy/pull/4413 --- l10n_it_delivery_note/README.rst | 4 + l10n_it_delivery_note/__manifest__.py | 1 + l10n_it_delivery_note/mixins/__init__.py | 1 + .../mixins/delivery_mixin.py | 91 +++++++++++ .../models/stock_delivery_note.py | 104 +++++++++++-- l10n_it_delivery_note/models/stock_picking.py | 2 + l10n_it_delivery_note/readme/CONTRIBUTORS.md | 4 + .../report/delivery_data.xml | 105 +++++++++++++ .../report/report_delivery_note.xml | 141 +----------------- .../static/description/index.html | 5 + .../views/res_config_settings.xml | 30 +--- l10n_it_delivery_note/views/stock_picking.xml | 7 + 12 files changed, 318 insertions(+), 177 deletions(-) create mode 100644 l10n_it_delivery_note/mixins/delivery_mixin.py create mode 100644 l10n_it_delivery_note/report/delivery_data.xml diff --git a/l10n_it_delivery_note/README.rst b/l10n_it_delivery_note/README.rst index 8199bbcb963e..f3231562d34d 100644 --- a/l10n_it_delivery_note/README.rst +++ b/l10n_it_delivery_note/README.rst @@ -216,6 +216,10 @@ Contributors - Alessandro Uffreduzzi - Sebastiano Picchi +- `Aion Tech `__: + + - Simone Rubino + Maintainers ----------- diff --git a/l10n_it_delivery_note/__manifest__.py b/l10n_it_delivery_note/__manifest__.py index 691792674a41..d1d8af6f1de3 100644 --- a/l10n_it_delivery_note/__manifest__.py +++ b/l10n_it_delivery_note/__manifest__.py @@ -34,6 +34,7 @@ "security/res_groups.xml", "security/res_users.xml", "data/delivery_note_data.xml", + "report/delivery_data.xml", "report/report_delivery_note.xml", "views/account_move.xml", "views/res_config_settings.xml", diff --git a/l10n_it_delivery_note/mixins/__init__.py b/l10n_it_delivery_note/mixins/__init__.py index 5fb6adab4175..28ad667b944c 100644 --- a/l10n_it_delivery_note/mixins/__init__.py +++ b/l10n_it_delivery_note/mixins/__init__.py @@ -1,2 +1,3 @@ +from . import delivery_mixin from . import picking_checker from . import shipping_updater diff --git a/l10n_it_delivery_note/mixins/delivery_mixin.py b/l10n_it_delivery_note/mixins/delivery_mixin.py new file mode 100644 index 000000000000..b1ec55f39eb5 --- /dev/null +++ b/l10n_it_delivery_note/mixins/delivery_mixin.py @@ -0,0 +1,91 @@ +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). + + +from odoo import fields, models + + +def _default_volume_uom(model): + return model.env.ref("uom.product_uom_litre", raise_if_not_found=False) + + +def _domain_volume_uom(model): + uom_category_id = model.env.ref( + "uom.product_uom_categ_vol", raise_if_not_found=False + ) + + return [("category_id", "=", uom_category_id.id)] + + +def _default_weight_uom(model): + return model.env.ref("uom.product_uom_kgm", raise_if_not_found=False) + + +def _domain_weight_uom(model): + uom_category_id = model.env.ref( + "uom.product_uom_categ_kgm", raise_if_not_found=False + ) + + return [("category_id", "=", uom_category_id.id)] + + +class DeliveryData(models.AbstractModel): + _name = "l10n_it_delivery_note.delivery_mixin" + _description = "Common data for records to be delivered" + + delivery_transport_reason_id = fields.Many2one( + comodel_name="stock.picking.transport.reason", + string="Reason of transport of Delivery", + ) + delivery_transport_condition_id = fields.Many2one( + comodel_name="stock.picking.transport.condition", + string="Condition of transport of Delivery", + ) + delivery_transport_method_id = fields.Many2one( + comodel_name="stock.picking.transport.method", + string="Method of transport of Delivery", + ) + delivery_carrier_id = fields.Many2one( + comodel_name="res.partner", + string="Carrier of Delivery", + ) + delivery_goods_appearance_id = fields.Many2one( + comodel_name="stock.picking.goods.appearance", + string="Appearance of goods of Delivery", + ) + delivery_volume_uom_id = fields.Many2one( + "uom.uom", + string="Volume of Delivery UoM", + default=_default_volume_uom, + domain=_domain_volume_uom, + ) + delivery_volume = fields.Float( + string="Volume of Delivery", + ) + delivery_gross_weight_uom_id = fields.Many2one( + "uom.uom", + string="Gross Weight of Delivery UoM", + default=_default_weight_uom, + domain=_domain_weight_uom, + ) + delivery_gross_weight = fields.Float( + string="Gross Weight of Delivery", + ) + delivery_net_weight_uom_id = fields.Many2one( + "uom.uom", + string="Net Weight of Delivery UoM", + default=_default_weight_uom, + domain=_domain_weight_uom, + ) + delivery_net_weight = fields.Float( + string="Net Weight of Delivery", + ) + delivery_transport_datetime = fields.Datetime( + string="Transport Date of Delivery", + ) + delivery_packages = fields.Integer( + string="Packages of Delivery", + ) + delivery_note = fields.Html( + string="Internal note of delivery", + ) diff --git a/l10n_it_delivery_note/models/stock_delivery_note.py b/l10n_it_delivery_note/models/stock_delivery_note.py index 0d6e825826b6..46c2b5ebd1d9 100644 --- a/l10n_it_delivery_note/models/stock_delivery_note.py +++ b/l10n_it_delivery_note/models/stock_delivery_note.py @@ -1,11 +1,19 @@ # Copyright (c) 2019, Link IT Europe Srl # @author: Matteo Bilotta +# Copyright 2023 Simone Rubino - Aion Tech +# License AGPL-3.0 or later (https://www.gnu.org/licenses/agpl). import datetime from odoo import api, fields, models from odoo.exceptions import UserError +from ..mixins.delivery_mixin import ( + _default_volume_uom, + _default_weight_uom, + _domain_volume_uom, + _domain_weight_uom, +) from ..mixins.picking_checker import ( DOMAIN_PICKING_TYPES, DONE_PICKING_STATE, @@ -43,6 +51,7 @@ class StockDeliveryNote(models.Model): "mail.activity.mixin", "stock.picking.checker.mixin", "shipping.information.updater.mixin", + "l10n_it_delivery_note.delivery_mixin", ] _description = "Delivery Note" _order = "date DESC, id DESC" @@ -61,24 +70,16 @@ def _default_type(self): ) def _default_volume_uom(self): - return self.env.ref("uom.product_uom_litre", raise_if_not_found=False) + return _default_volume_uom(self) def _domain_volume_uom(self): - uom_category_id = self.env.ref( - "uom.product_uom_categ_vol", raise_if_not_found=False - ) - - return [("category_id", "=", uom_category_id.id)] + return _domain_volume_uom(self) def _default_weight_uom(self): - return self.env.ref("uom.product_uom_kgm", raise_if_not_found=False) + return _default_weight_uom(self) def _domain_weight_uom(self): - uom_category_id = self.env.ref( - "uom.product_uom_categ_kgm", raise_if_not_found=False - ) - - return [("category_id", "=", uom_category_id.id)] + return _domain_weight_uom(self) active = fields.Boolean(default=True) name = fields.Char( @@ -269,6 +270,70 @@ def _domain_weight_uom(self): show_product_information = fields.Boolean(compute="_compute_boolean_flags") company_id = fields.Many2one("res.company", required=True, default=_default_company) + # Sync with delivery mixin fields + delivery_transport_reason_id = fields.Many2one( + related="transport_reason_id", + readonly=True, + ) + delivery_transport_condition_id = fields.Many2one( + related="transport_condition_id", + readonly=True, + ) + delivery_transport_method_id = fields.Many2one( + related="transport_method_id", + readonly=True, + ) + delivery_carrier_id = fields.Many2one( + related="carrier_id", + readonly=True, + ) + delivery_goods_appearance_id = fields.Many2one( + related="goods_appearance_id", + readonly=True, + ) + delivery_volume_uom_id = fields.Many2one( + related="volume_uom_id", + readonly=True, + default=None, + domain=None, + ) + delivery_volume = fields.Float( + related="volume", + readonly=True, + ) + delivery_gross_weight_uom_id = fields.Many2one( + related="gross_weight_uom_id", + readonly=True, + default=None, + domain=None, + ) + delivery_gross_weight = fields.Float( + related="gross_weight", + readonly=True, + ) + delivery_net_weight_uom_id = fields.Many2one( + related="net_weight_uom_id", + readonly=True, + default=None, + domain=None, + ) + delivery_net_weight = fields.Float( + related="net_weight", + readonly=True, + ) + delivery_transport_datetime = fields.Datetime( + related="transport_datetime", + readonly=True, + ) + delivery_packages = fields.Integer( + related="packages", + readonly=True, + ) + delivery_note = fields.Html( + related="note", + readonly=True, + ) + _sql_constraints = [ ( "name_uniq", @@ -521,9 +586,18 @@ def _action_confirm(self): note.date = datetime.date.today() if not note.name: - note.name = sequence.with_context( - ir_sequence_date=note.date - ).next_by_id() + note.name = sequence.next_by_id() + # Avoid duplicates + while True: + name = sequence.with_context( + ir_sequence_date=note.date + ).next_by_id() + if not self.search( + [("name", "=", name), ("company_id", "=", note.company_id.id)] + ): + break + + note.name = name note.sequence_id = sequence def action_confirm(self): diff --git a/l10n_it_delivery_note/models/stock_picking.py b/l10n_it_delivery_note/models/stock_picking.py index 2b402bdc9a15..0a93b7b2b1e7 100644 --- a/l10n_it_delivery_note/models/stock_picking.py +++ b/l10n_it_delivery_note/models/stock_picking.py @@ -99,6 +99,8 @@ class StockPicking(models.Model): delivery_note_draft = fields.Boolean(compute="_compute_boolean_flags") delivery_note_readonly = fields.Boolean(compute="_compute_boolean_flags") can_be_invoiced = fields.Boolean(compute="_compute_boolean_flags") + dn_supplier_number = fields.Char(string="Supplier DN Number", copy=False) + dn_supplier_date = fields.Date(string="Supplier DN Date", copy=False) @property def _delivery_note_fields(self): diff --git a/l10n_it_delivery_note/readme/CONTRIBUTORS.md b/l10n_it_delivery_note/readme/CONTRIBUTORS.md index 0c7a5f2776e0..3fb9893ac0cb 100644 --- a/l10n_it_delivery_note/readme/CONTRIBUTORS.md +++ b/l10n_it_delivery_note/readme/CONTRIBUTORS.md @@ -27,3 +27,7 @@ > - Alessandro Uffreduzzi \<\> > - Sebastiano Picchi \<\> + +- [Aion Tech](https://aiontech.company/): + + - Simone Rubino <> diff --git a/l10n_it_delivery_note/report/delivery_data.xml b/l10n_it_delivery_note/report/delivery_data.xml new file mode 100644 index 000000000000..fb17131ecff8 --- /dev/null +++ b/l10n_it_delivery_note/report/delivery_data.xml @@ -0,0 +1,105 @@ + + + + + + + diff --git a/l10n_it_delivery_note/report/report_delivery_note.xml b/l10n_it_delivery_note/report/report_delivery_note.xml index 98dd1395cc5a..4fad72f34fd0 100644 --- a/l10n_it_delivery_note/report/report_delivery_note.xml +++ b/l10n_it_delivery_note/report/report_delivery_note.xml @@ -2,6 +2,7 @@