Odoo18-Base/addons/l10n_br/models/l10n_br_zip_range.py
2025-01-06 10:57:38 +07:00

38 lines
1.4 KiB
Python

# Part of Odoo. See LICENSE file for full copyright and licensing details.
import re
from odoo import models, fields, api, _
from odoo.exceptions import ValidationError
class L10nBrZipRange(models.Model):
_name = "l10n_br.zip.range"
_description = "Brazilian city zip range"
city_id = fields.Many2one("res.city", string="City", required=True)
start = fields.Char(string="From", required=True)
end = fields.Char(string="To", required=True)
_sql_constraints = [
("uniq_start", "unique(start)", 'The "from" zip must be unique'),
("uniq_end", 'unique("end")', 'The "to" zip must be unique.'),
]
@api.constrains("start", "end")
def _check_range(self):
zip_format = re.compile(r"\d{5}-\d{3}")
for zip_range in self:
if not zip_format.fullmatch(zip_range.start) or not zip_format.fullmatch(zip_range.end):
raise ValidationError(
_(
"Invalid zip range format: %(start)s %(end)s. It should follow this format: 01000-001",
start=zip_range.start,
end=zip_range.end,
)
)
if zip_range.start >= zip_range.end:
raise ValidationError(
_("Start should be less than end: %(start)s %(end)s", start=zip_range.start, end=zip_range.end)
)