diff --git a/addons/delivery/models/delivery_carrier.py b/addons/delivery/models/delivery_carrier.py
index 191d86e6229..d12344780f4 100644
--- a/addons/delivery/models/delivery_carrier.py
+++ b/addons/delivery/models/delivery_carrier.py
@@ -60,10 +60,21 @@ class DeliveryCarrier(models.Model):
free_over = fields.Boolean('Free if order amount is above', help="If the order total amount (shipping excluded) is above or equal to this value, the customer benefits from a free shipping", default=False, oldname='free_if_more_than')
amount = fields.Float(string='Amount', help="Amount of the order to benefit from a free shipping, expressed in the company currency")
+ can_generate_return = fields.Boolean(compute="_compute_can_generate_return")
+ return_label_on_delivery = fields.Boolean(string="Generate Return Label", required=True, default=False,
+ help="The return label is automatically generated at the delivery.")
+ get_return_label_from_portal = fields.Boolean(string="Return Label Accessible from Customer Portal", required=True, default=False,
+ help="The return label can be downloaded by the customer from the customer portal.")
+
_sql_constraints = [
('margin_not_under_100_percent', 'CHECK (margin >= -100)', 'Margin cannot be lower than -100%'),
]
+ @api.depends('delivery_type')
+ def _compute_can_generate_return(self):
+ for carrier in self:
+ carrier.can_generate_return = hasattr(self, '%s_get_return_label' % carrier.delivery_type)
+
def toggle_prod_environment(self):
for c in self:
c.prod_environment = not c.prod_environment
@@ -100,6 +111,16 @@ class DeliveryCarrier(models.Model):
return False
return True
+ @api.onchange('can_generate_return')
+ def _onchange_can_generate_return(self):
+ if not self.can_generate_return:
+ self.return_label_on_delivery = False
+
+ @api.onchange('return_label_on_delivery')
+ def _onchange_return_label_on_delivery(self):
+ if not self.return_label_on_delivery:
+ self.get_return_label_from_portal = False
+
@api.onchange('state_ids')
def onchange_states(self):
self.country_ids = [(6, 0, self.country_ids.ids + self.state_ids.mapped('country_id.id'))]
@@ -150,7 +171,7 @@ class DeliveryCarrier(models.Model):
def get_return_label(self,pickings):
self.ensure_one()
- if hasattr(self, '%s_get_return_label' % self.delivery_type):
+ if self.can_generate_return:
return getattr(self, '%s_get_return_label' % self.delivery_type)(pickings)
def get_tracking_link(self, picking):
diff --git a/addons/delivery/models/stock_picking.py b/addons/delivery/models/stock_picking.py
index b67e7235527..5b90a23c480 100644
--- a/addons/delivery/models/stock_picking.py
+++ b/addons/delivery/models/stock_picking.py
@@ -84,6 +84,7 @@ class StockPicking(models.Model):
weight_bulk = fields.Float('Bulk Weight', compute='_compute_bulk_weight')
shipping_weight = fields.Float("Weight for Shipping", compute='_compute_shipping_weight', help="Total weight of the packages and products which are not in a package. That's the weight used to compute the cost of the shipping.")
is_return_picking = fields.Boolean(compute='_compute_return_picking')
+ return_label_ids = fields.One2many('ir.attachment', compute='_compute_return_label')
@api.depends('carrier_id', 'carrier_tracking_ref')
def _compute_carrier_tracking_url(self):
@@ -93,10 +94,15 @@ class StockPicking(models.Model):
@api.depends('carrier_id', 'move_ids_without_package')
def _compute_return_picking(self):
for picking in self:
- if picking.carrier_id and hasattr(picking.carrier_id, '%s_get_return_label' % picking.carrier_id.delivery_type):
+ if picking.carrier_id and picking.carrier_id.can_generate_return:
picking.is_return_picking = any(m.origin_returned_move_id for m in picking.move_ids_without_package)
else:
picking.is_return_picking = False
+
+ def _compute_return_label(self):
+ for picking in self:
+ picking.return_label_ids = self.env['ir.attachment'].search([('res_model', '=', 'stock.picking'), ('res_id', '=', picking.id), ('name', 'ilike', 'ReturnLabel')])
+
@api.depends('move_lines')
def _cal_weight(self):
for picking in self:
diff --git a/addons/delivery/views/delivery_portal_template.xml b/addons/delivery/views/delivery_portal_template.xml
index 698a60ba876..da0e6750e18 100644
--- a/addons/delivery/views/delivery_portal_template.xml
+++ b/addons/delivery/views/delivery_portal_template.xml
@@ -2,14 +2,19 @@
- Tracking:
+ Tracking:
-
+
+
+
+
diff --git a/addons/delivery/views/delivery_view.xml b/addons/delivery/views/delivery_view.xml
index f52a571b52f..afbad0e54ae 100644
--- a/addons/delivery/views/delivery_view.xml
+++ b/addons/delivery/views/delivery_view.xml
@@ -96,6 +96,9 @@
+
+
+