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 @@ 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 @@ + + +