61 lines
2.6 KiB
Python
61 lines
2.6 KiB
Python
|
# -*- coding: utf-8 -*-
|
||
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
||
|
|
||
|
from odoo import fields, models, api, _
|
||
|
from odoo.tools.json import scriptsafe as json_safe
|
||
|
from odoo.exceptions import ValidationError
|
||
|
|
||
|
|
||
|
class ChooseDeliveryCarrier(models.TransientModel):
|
||
|
_inherit = 'choose.delivery.carrier'
|
||
|
|
||
|
shipping_zip = fields.Char(related='order_id.partner_shipping_id.zip')
|
||
|
shipping_country_code = fields.Char(related='order_id.partner_shipping_id.country_id.code')
|
||
|
|
||
|
is_mondialrelay = fields.Boolean(compute='_compute_is_mondialrelay')
|
||
|
mondialrelay_last_selected = fields.Char(string="Last Relay Selected")
|
||
|
mondialrelay_last_selected_id = fields.Char(compute='_compute_mr_last_selected_id')
|
||
|
mondialrelay_brand = fields.Char(related='carrier_id.mondialrelay_brand')
|
||
|
mondialrelay_colLivMod = fields.Char(related='carrier_id.mondialrelay_packagetype')
|
||
|
mondialrelay_allowed_countries = fields.Char(compute='_compute_mr_allowed_countries')
|
||
|
|
||
|
@api.depends('carrier_id')
|
||
|
def _compute_is_mondialrelay(self):
|
||
|
self.ensure_one()
|
||
|
self.is_mondialrelay = self.carrier_id.product_id.default_code == "MR"
|
||
|
|
||
|
@api.depends('carrier_id', 'order_id.partner_shipping_id')
|
||
|
def _compute_mr_last_selected_id(self):
|
||
|
self.ensure_one()
|
||
|
if self.order_id.partner_shipping_id.is_mondialrelay:
|
||
|
self.mondialrelay_last_selected_id = '%s-%s' % (
|
||
|
self.shipping_country_code,
|
||
|
self.order_id.partner_shipping_id.ref.lstrip('MR#'),
|
||
|
)
|
||
|
else:
|
||
|
self.mondialrelay_last_selected_id = ''
|
||
|
|
||
|
@api.depends('carrier_id')
|
||
|
def _compute_mr_allowed_countries(self):
|
||
|
self.ensure_one()
|
||
|
self.mondialrelay_allowed_countries = ','.join(self.carrier_id.country_ids.mapped('code')).upper() or ''
|
||
|
|
||
|
def button_confirm(self):
|
||
|
if self.carrier_id.is_mondialrelay:
|
||
|
if not self.mondialrelay_last_selected:
|
||
|
raise ValidationError(_('Please, choose a Parcel Point'))
|
||
|
data = json_safe.loads(self.mondialrelay_last_selected)
|
||
|
partner_shipping = self.order_id.partner_id._mondialrelay_search_or_create({
|
||
|
'id': data['id'],
|
||
|
'name': data['name'],
|
||
|
'street': data['street'],
|
||
|
'street2': data['street2'],
|
||
|
'zip': data['zip'],
|
||
|
'city': data['city'],
|
||
|
'country_code': data['country'][:2].lower(),
|
||
|
})
|
||
|
if partner_shipping != self.order_id.partner_shipping_id:
|
||
|
self.order_id.partner_shipping_id = partner_shipping
|
||
|
|
||
|
return super().button_confirm()
|