From b07157770f2d8b978b900d110e97c4a307b767ed Mon Sep 17 00:00:00 2001
From: "Paolo Gatti (pgi)" <pgi@odoo.com>
Date: Tue, 25 Apr 2023 15:34:32 +0000
Subject: [PATCH] [FIX] l10n_it_stock_ddt: Print not printing DDT in case of
 Dropshipping

The visibility of the "Print" DDT button wasn't taking into
consideration the dropshipping case.

closes odoo/odoo#121822

Signed-off-by: Josse Colpaert <jco@odoo.com>
Signed-off-by: Grazioso Andrea (agr) <agr@odoo.com>
---
 .../l10n_it_stock_ddt/models/stock_picking.py | 27 +++++++++++++++++++
 .../views/stock_picking_views.xml             |  5 ++--
 2 files changed, 30 insertions(+), 2 deletions(-)

diff --git a/addons/l10n_it_stock_ddt/models/stock_picking.py b/addons/l10n_it_stock_ddt/models/stock_picking.py
index 15de68eb7831..9634cba7f457 100644
--- a/addons/l10n_it_stock_ddt/models/stock_picking.py
+++ b/addons/l10n_it_stock_ddt/models/stock_picking.py
@@ -21,6 +21,33 @@ class StockPicking(models.Model):
     l10n_it_transport_method_details = fields.Char('Transport Note')
     l10n_it_parcels = fields.Integer(string="Parcels", default=1)
     l10n_it_ddt_number = fields.Char('DDT Number', readonly=True)
+    l10n_it_show_print_ddt_button = fields.Boolean(compute="_compute_l10n_it_show_print_ddt_button")
+
+    @api.depends('country_code',
+                 'picking_type_code',
+                 'state',
+                 'is_locked',
+                 'move_ids_without_package',
+                 'move_ids_without_package.partner_id',
+                 'location_id',
+                 'location_dest_id')
+    def _compute_l10n_it_show_print_ddt_button(self):
+        # Enable printing the DDT for done outgoing shipments
+        # or dropshipping (picking going from supplier to customer)
+        for picking in self:
+            picking.l10n_it_show_print_ddt_button = (
+                picking.country_code == 'IT'
+                and picking.state == 'done'
+                and picking.is_locked
+                and (picking.picking_type_code == 'outgoing'
+                     or (
+                         picking.move_ids_without_package
+                         and picking.move_ids_without_package[0].partner_id
+                         and picking.location_id.usage == 'supplier'
+                         and picking.location_dest_id.usage == 'customer'
+                         )
+                     )
+                )
 
     def _action_done(self):
         super(StockPicking, self)._action_done()
diff --git a/addons/l10n_it_stock_ddt/views/stock_picking_views.xml b/addons/l10n_it_stock_ddt/views/stock_picking_views.xml
index 97c31339c978..9226da758020 100644
--- a/addons/l10n_it_stock_ddt/views/stock_picking_views.xml
+++ b/addons/l10n_it_stock_ddt/views/stock_picking_views.xml
@@ -7,12 +7,13 @@
         <field name="arch" type="xml">
             <xpath expr="//button[@name='do_print_picking']" position="after">
                 <field name="country_code" invisible="1"/>
+                <field name="l10n_it_show_print_ddt_button" invisible="1"/>
                 <button name="%(l10n_it_stock_ddt.action_report_ddt)d" type="action" string="Print"
-                        attrs="{'invisible': ['|', '|', '|', ('picking_type_code', '!=', 'outgoing'), ('country_code', '!=', 'IT'), ('state', '!=', 'done'), ('is_locked', '=', False)]}"
+                        attrs="{'invisible': [('l10n_it_show_print_ddt_button', '=', False)]}"
                         groups="base.group_user"/>
             </xpath>
             <xpath expr="//button[@name='%(stock.action_report_delivery)d']" position="attributes">
-                <attribute name="attrs">{'invisible': ['|', ('state', '!=', 'done'), '|', ('is_locked', '=', False), '&amp;', ('picking_type_code', '=', 'outgoing'), ('country_code', '=', 'IT')]}</attribute>
+                <attribute name="attrs">{'invisible': ['|', ('l10n_it_show_print_ddt_button', '=', True), '&amp;', ('picking_type_code', '=', 'outgoing'), ('country_code', '=', 'IT')]}</attribute>
             </xpath>
             <group name='carrier_data' position="after">
                 <group string="DDT Information" attrs="{'invisible': ['|', ('country_code', '!=', 'IT'), ('picking_type_code', '!=', 'outgoing')]}">
-- 
GitLab