From 0d4b5eb6c6528ef103effa2c744cc124bbf103fc Mon Sep 17 00:00:00 2001 From: Ruslan Bakiev <572431+veikab@users.noreply.github.com> Date: Fri, 13 Feb 2026 17:19:05 +0700 Subject: [PATCH] Sync remote addons before module update and add zone map preview --- Makefile | 51 ++++++++++++++++++- .../dsrpt_repair_config/models/fsm_zone.py | 17 +++++++ .../views/repair_fsm_zone_view_form.xml | 3 ++ 3 files changed, 70 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index c5333b1..cf7ec2d 100644 --- a/Makefile +++ b/Makefile @@ -2,6 +2,9 @@ ODOO_SERVICE_PREFIX ?= sandbox-odoorepair-gfijxl MODULES ?= all CUSTOM_MODULES ?= dsrpt_repair_config,dsrpt_address_book,dsrpt_repair_technicians,dsrpt_repair_materials,dsrpt_repair_work_orders ODOO_CONFIG ?= /etc/odoo/odoo.conf +REMOTE_APP_PATH ?= /etc/dokploy/applications/$(ODOO_SERVICE_PREFIX)/code +REMOTE_ADDONS_SRC ?= $(REMOTE_APP_PATH)/odoo/addons +REMOTE_ADDONS_DST ?= /var/lib/docker/volumes/repair_odoo_addons/_data ODOO_DB_NAME ?= ODOO_DB_USER ?= @@ -12,7 +15,7 @@ ODOO_DB_PORT ?= GIT_REMOTE ?= origin GIT_BRANCH ?= main -.PHONY: help install-modules update-modules install-custom update-custom restart-service logs shell repo-status repo-pull repo-set-ssh repo-set-https +.PHONY: help install-modules update-modules install-custom update-custom restart-service logs shell repo-status repo-pull repo-set-ssh repo-set-https preflight-check remote-repo-pull sync-addons help: @echo "Targets:" @@ -27,8 +30,51 @@ help: @echo " make repo-set-ssh" @echo " make repo-set-https" @echo " make repo-pull GIT_BRANCH=main" + @echo " env DOCKER_HOST=ssh://root@dsrptlab make update-custom" + +preflight-check: + @if [ -n "$$(git status --porcelain)" ]; then \ + echo "Working tree is not clean. Commit changes first."; \ + exit 1; \ + fi + @if git rev-parse --abbrev-ref --symbolic-full-name '@{u}' >/dev/null 2>&1; then \ + ahead="$$(git rev-list --count @{u}..HEAD)"; \ + if [ "$$ahead" -gt 0 ]; then \ + echo "Local branch is ahead by $$ahead commit(s). Run git push first."; \ + exit 1; \ + fi; \ + fi + +remote-repo-pull: + @echo "Pulling latest repo on remote host: $(REMOTE_APP_PATH)" + @docker run --rm -v "$(REMOTE_APP_PATH):/repo" alpine/git sh -lc "set -e; cd /repo && git fetch $(GIT_REMOTE) && git pull --ff-only $(GIT_REMOTE) $(GIT_BRANCH)" + +sync-addons: + @echo "Syncing addons to volume: $(REMOTE_ADDONS_DST)" + @docker run --rm -v "$(REMOTE_ADDONS_SRC):/src" -v "$(REMOTE_ADDONS_DST):/dst" alpine:3.20 sh -lc '\ + set -e; \ + if [ "$(MODULES)" = "all" ]; then \ + for src in /src/dsrpt_*; do \ + [ -d "$$src" ] || continue; \ + mod="$$(basename "$$src")"; \ + rm -rf "/dst/$$mod"; \ + cp -a "$$src" "/dst/$$mod"; \ + echo "Synced $$mod"; \ + done; \ + else \ + for mod in $$(echo "$(MODULES)" | tr "," " "); do \ + mod="$${mod# }"; mod="$${mod% }"; \ + [ -d "/src/$$mod" ] || { echo "Missing module in source: $$mod"; exit 1; }; \ + rm -rf "/dst/$$mod"; \ + cp -a "/src/$$mod" "/dst/$$mod"; \ + echo "Synced $$mod"; \ + done; \ + fi' install-modules: + @$(MAKE) preflight-check + @$(MAKE) remote-repo-pull + @$(MAKE) sync-addons MODULES='$(MODULES)' @container="$$(docker ps --filter 'name=$(ODOO_SERVICE_PREFIX)' --format '{{.Names}}' | head -1)"; \ if [ -z "$$container" ]; then \ echo "No Odoo container found for prefix: $(ODOO_SERVICE_PREFIX)"; \ @@ -55,6 +101,9 @@ install-modules: $(MAKE) restart-service update-modules: + @$(MAKE) preflight-check + @$(MAKE) remote-repo-pull + @$(MAKE) sync-addons MODULES='$(MODULES)' @container="$$(docker ps --filter 'name=$(ODOO_SERVICE_PREFIX)' --format '{{.Names}}' | head -1)"; \ if [ -z "$$container" ]; then \ echo "No Odoo container found for prefix: $(ODOO_SERVICE_PREFIX)"; \ diff --git a/odoo/addons/dsrpt_repair_config/models/fsm_zone.py b/odoo/addons/dsrpt_repair_config/models/fsm_zone.py index e70aa83..a2545eb 100644 --- a/odoo/addons/dsrpt_repair_config/models/fsm_zone.py +++ b/odoo/addons/dsrpt_repair_config/models/fsm_zone.py @@ -18,6 +18,11 @@ class RepairFsmZone(models.Model): tracking=True, help="GeoJSON Polygon geometry. Coordinates order: [longitude, latitude].", ) + polygon_map_preview = fields.Html( + string="Polygon Map Preview", + compute="_compute_polygon_map_preview", + sanitize=False, + ) state = fields.Selection( selection=[ ("draft", "Draft"), @@ -121,6 +126,18 @@ class RepairFsmZone(models.Model): "target": "new", } + @api.depends("polygon_geojson") + def _compute_polygon_map_preview(self): + for rec in self: + if not rec.polygon_geojson: + rec.polygon_map_preview = "
No polygon yet.
" + continue + encoded = quote(rec.polygon_geojson) + rec.polygon_map_preview = ( + f'' + ) + @api.constrains("polygon_geojson") def _check_polygon_geojson(self): for rec in self: diff --git a/odoo/addons/dsrpt_repair_config/views/repair_fsm_zone_view_form.xml b/odoo/addons/dsrpt_repair_config/views/repair_fsm_zone_view_form.xml index 38f8bbd..8b5f08d 100644 --- a/odoo/addons/dsrpt_repair_config/views/repair_fsm_zone_view_form.xml +++ b/odoo/addons/dsrpt_repair_config/views/repair_fsm_zone_view_form.xml @@ -22,6 +22,9 @@ + + +