[IMP] delivery: Make delivery line creation and selection hookable

closes odoo/odoo#131047

X-original-commit: 1242d6309b9b76c2bea5606facd81d6d20fa8b65
Signed-off-by: Victor Feyens (vfe) <vfe@odoo.com>
This commit is contained in:
Michael Tietz
2023-08-11 21:32:53 +02:00
committed by Victor Feyens
parent 6d42ce2f67
commit 2f6b44d7e0
2 changed files with 23 additions and 10 deletions
+6 -4
View File
@@ -88,8 +88,7 @@ class SaleOrder(models.Model):
}
}
def _create_delivery_line(self, carrier, price_unit):
SaleOrderLine = self.env['sale.order.line']
def _prepare_delivery_line_vals(self, carrier, price_unit):
context = {}
if self.partner_id:
# set delivery detail in the customer language
@@ -123,9 +122,12 @@ class SaleOrder(models.Model):
values['name'] += '\n' + _('Free Shipping')
if self.order_line:
values['sequence'] = self.order_line[-1].sequence + 1
sol = SaleOrderLine.sudo().create(values)
del context
return sol
return values
def _create_delivery_line(self, carrier, price_unit):
values = self._prepare_delivery_line_vals(carrier, price_unit)
return self.env['sale.order.line'].sudo().create(values)
@api.depends('order_line.is_delivery', 'order_line.is_downpayment')
def _compute_invoice_status(self):
+17 -6
View File
@@ -200,18 +200,29 @@ class StockPicking(models.Model):
self.ensure_one()
self.carrier_id.get_return_label(self)
def _get_matching_delivery_lines(self):
return self.sale_id.order_line.filtered(
lambda l: l.is_delivery
and l.currency_id.is_zero(l.price_unit)
and l.product_id == self.carrier_id.product_id
)
def _prepare_sale_delivery_line_vals(self):
return {
'price_unit': self.carrier_price,
# remove the estimated price from the description
'name': self.carrier_id.with_context(lang=self.partner_id.lang).name,
}
def _add_delivery_cost_to_so(self):
self.ensure_one()
sale_order = self.sale_id
if sale_order and self.carrier_id.invoice_policy == 'real' and self.carrier_price:
delivery_lines = sale_order.order_line.filtered(lambda l: l.is_delivery and l.currency_id.is_zero(l.price_unit) and l.product_id == self.carrier_id.product_id)
delivery_lines = self._get_matching_delivery_lines()
if not delivery_lines:
delivery_lines = sale_order._create_delivery_line(self.carrier_id, self.carrier_price)
delivery_lines[0].write({
'price_unit': self.carrier_price,
# remove the estimated price from the description
'name': self.carrier_id.with_context(lang=self.partner_id.lang).name,
})
vals = self._prepare_sale_delivery_line_vals()
delivery_lines[0].write(vals)
def open_website_url(self):
self.ensure_one()