From 2409ac1af8c2c37c26a3b9b65361f5418b7bbf27 Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev <572431+veikab@users.noreply.github.com> Date: Fri, 13 Feb 2026 17:02:12 +0700 Subject: [PATCH] Harden zone polygon validation for safe upgrades --- odoo/addons/dsrpt_repair_config/models/fsm_zone.py | 12 ++++++++++-- .../views/repair_work_order_view_form.xml | 2 +- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/odoo/addons/dsrpt_repair_config/models/fsm_zone.py b/odoo/addons/dsrpt_repair_config/models/fsm_zone.py index 51bbbfe..e70aa83 100644 --- a/odoo/addons/dsrpt_repair_config/models/fsm_zone.py +++ b/odoo/addons/dsrpt_repair_config/models/fsm_zone.py @@ -15,7 +15,6 @@ class RepairFsmZone(models.Model): code = fields.Char(tracking=True) polygon_geojson = fields.Text( string="Polygon (GeoJSON)", - required=True, tracking=True, help="GeoJSON Polygon geometry. Coordinates order: [longitude, latitude].", ) @@ -35,6 +34,10 @@ class RepairFsmZone(models.Model): return [key for key, _label in self._fields["state"].selection] def action_set_active(self): + for rec in self: + if not rec.polygon_geojson: + raise ValidationError("Polygon is required before activating the FSM Zone.") + rec._extract_polygon_points() self.write({"state": "active", "active": True}) def action_archive(self): @@ -59,6 +62,8 @@ class RepairFsmZone(models.Model): def _extract_polygon_points(self): self.ensure_one() + if not self.polygon_geojson: + raise ValidationError("Polygon is required.") try: data = json.loads(self.polygon_geojson or "") except json.JSONDecodeError as exc: @@ -95,6 +100,8 @@ class RepairFsmZone(models.Model): self.ensure_one() if latitude is None or longitude is None: return False + if not self.polygon_geojson: + return False points = self._extract_polygon_points() return self._point_in_polygon(float(longitude), float(latitude), points) @@ -117,4 +124,5 @@ class RepairFsmZone(models.Model): @api.constrains("polygon_geojson") def _check_polygon_geojson(self): for rec in self: - rec._extract_polygon_points() + if rec.polygon_geojson: + rec._extract_polygon_points() diff --git a/odoo/addons/dsrpt_repair_work_orders/views/repair_work_order_view_form.xml b/odoo/addons/dsrpt_repair_work_orders/views/repair_work_order_view_form.xml index 175de19..349db80 100644 --- a/odoo/addons/dsrpt_repair_work_orders/views/repair_work_order_view_form.xml +++ b/odoo/addons/dsrpt_repair_work_orders/views/repair_work_order_view_form.xml @@ -8,7 +8,7 @@