56 lines
2.3 KiB
Python
56 lines
2.3 KiB
Python
from odoo import models, fields, api
|
|
|
|
|
|
class Picking(models.Model):
|
|
_inherit = ["stock.picking", "carrier.account.mixin"]
|
|
_name = "stock.picking"
|
|
|
|
recipient_id = fields.Many2one(
|
|
comodel_name="res.partner",
|
|
compute="_compute_sender_recipient",
|
|
)
|
|
sender_id = fields.Many2one(
|
|
comodel_name="res.partner",
|
|
compute="_compute_sender_recipient",
|
|
)
|
|
|
|
def _compute_sender_recipient(self):
|
|
for picking in self:
|
|
dest_usage = picking.location_dest_id.usage
|
|
src_usage = picking.location_id.usage
|
|
match (src_usage, dest_usage):
|
|
case ("internal", "customer") | ("internal", "supplier"):
|
|
picking.recipient_id = picking.partner_id
|
|
picking.sender_id = (
|
|
picking.picking_type_id.warehouse_id.partner_id
|
|
or picking.company_id.partner_id
|
|
)
|
|
case ("customer", "internal") | ("supplier", "internal"):
|
|
picking.recipient_id = (
|
|
picking.picking_type_id.warehouse_id.partner_id
|
|
or picking.company_id.partner_id
|
|
)
|
|
picking.sender_id = picking.partner_id
|
|
case _:
|
|
picking.recipient_id = (
|
|
picking.location_dest_id.warehouse_id.partner_id
|
|
or picking.partner_id
|
|
)
|
|
picking.sender_id = (
|
|
picking.location_id.warehouse_id.partner_id
|
|
or picking.partner_id
|
|
)
|
|
|
|
def _add_delivery_cost_to_so(self):
|
|
self.ensure_one()
|
|
if not self.delivery_billing_mode or self.delivery_billing_mode != "ppc":
|
|
super()._add_delivery_cost_to_so()
|
|
else:
|
|
sale_order = self.sale_id
|
|
delivery_lines = self._get_matching_delivery_lines()
|
|
if not delivery_lines:
|
|
delivery_lines = sale_order.with_context(
|
|
delivery_billing_mode="ppc", carrier_account=self.carrier_account_id
|
|
)._create_delivery_line(self.carrier_id, self.carrier_price)
|
|
vals = self._prepare_sale_delivery_line_vals()
|
|
delivery_lines[0].write(vals)
|