[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:
committed by
Victor Feyens
parent
6d42ce2f67
commit
2f6b44d7e0
@@ -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):
|
||||
|
||||
@@ -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()
|
||||
|
||||
Reference in New Issue
Block a user