You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
3.0 KiB
80 lines
3.0 KiB
# Copyright 2016 Nicolas Bessi, Camptocamp SA
|
|
# Copyright 2018 Tecnativa - Pedro M. Baeza
|
|
# License AGPL-3.0 or later (http://www.gnu.org/licenses/agpl).
|
|
|
|
from odoo import _, api, fields, models
|
|
from odoo.exceptions import ValidationError
|
|
|
|
|
|
class ResPartner(models.Model):
|
|
_inherit = "res.partner"
|
|
|
|
zip_id = fields.Many2one("res.city.zip", "ZIP Location")
|
|
|
|
@api.onchange("city_id")
|
|
def _onchange_city_id(self):
|
|
if not self.zip_id:
|
|
super()._onchange_city_id()
|
|
if self.zip_id and self.city_id != self.zip_id.city_id:
|
|
self.update({"zip_id": False, "zip": False, "city": False})
|
|
if self.city_id and self.country_enforce_cities:
|
|
return {"domain": {"zip_id": [("city_id", "=", self.city_id.id)]}}
|
|
return {"domain": {"zip_id": []}}
|
|
|
|
@api.onchange("country_id")
|
|
def _onchange_country_id(self):
|
|
res = super()._onchange_country_id()
|
|
if self.zip_id and self.zip_id.city_id.country_id != self.country_id:
|
|
self.zip_id = False
|
|
return res
|
|
|
|
@api.onchange("zip_id")
|
|
def _onchange_zip_id(self):
|
|
if self.zip_id:
|
|
vals = {
|
|
"city_id": self.zip_id.city_id,
|
|
"zip": self.zip_id.name,
|
|
"city": self.zip_id.city_id.name,
|
|
}
|
|
if self.zip_id.city_id.country_id:
|
|
vals.update({"country_id": self.zip_id.city_id.country_id})
|
|
if self.zip_id.city_id.state_id:
|
|
vals.update({"state_id": self.zip_id.city_id.state_id})
|
|
self.update(vals)
|
|
elif not self.country_enforce_cities:
|
|
self.city_id = False
|
|
|
|
@api.constrains("zip_id", "country_id", "city_id", "state_id")
|
|
def _check_zip(self):
|
|
if self.env.context.get("skip_check_zip"):
|
|
return
|
|
for rec in self:
|
|
if not rec.zip_id:
|
|
continue
|
|
if rec.zip_id.city_id.state_id != rec.state_id:
|
|
raise ValidationError(
|
|
_("The state of the partner %s differs from that in " "location %s")
|
|
% (rec.name, rec.zip_id.name)
|
|
)
|
|
if rec.zip_id.city_id.country_id != rec.country_id:
|
|
raise ValidationError(
|
|
_(
|
|
"The country of the partner %s differs from that in "
|
|
"location %s"
|
|
)
|
|
% (rec.name, rec.zip_id.name)
|
|
)
|
|
if rec.zip_id.city_id != rec.city_id:
|
|
raise ValidationError(
|
|
_("The city of partner %s differs from that in " "location %s")
|
|
% (rec.name, rec.zip_id.name)
|
|
)
|
|
|
|
@api.onchange("state_id")
|
|
def _onchange_state_id(self):
|
|
vals = {}
|
|
if self.state_id.country_id:
|
|
vals.update({"country_id": self.state_id.country_id})
|
|
if self.zip_id and self.state_id != self.zip_id.city_id.state_id:
|
|
vals.update({"zip_id": False, "zip": False, "city": False})
|
|
self.update(vals)
|