Sync remote addons before module update and add zone map preview
This commit is contained in:
51
Makefile
51
Makefile
@@ -2,6 +2,9 @@ ODOO_SERVICE_PREFIX ?= sandbox-odoorepair-gfijxl
|
|||||||
MODULES ?= all
|
MODULES ?= all
|
||||||
CUSTOM_MODULES ?= dsrpt_repair_config,dsrpt_address_book,dsrpt_repair_technicians,dsrpt_repair_materials,dsrpt_repair_work_orders
|
CUSTOM_MODULES ?= dsrpt_repair_config,dsrpt_address_book,dsrpt_repair_technicians,dsrpt_repair_materials,dsrpt_repair_work_orders
|
||||||
ODOO_CONFIG ?= /etc/odoo/odoo.conf
|
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_NAME ?=
|
||||||
ODOO_DB_USER ?=
|
ODOO_DB_USER ?=
|
||||||
@@ -12,7 +15,7 @@ ODOO_DB_PORT ?=
|
|||||||
GIT_REMOTE ?= origin
|
GIT_REMOTE ?= origin
|
||||||
GIT_BRANCH ?= main
|
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:
|
help:
|
||||||
@echo "Targets:"
|
@echo "Targets:"
|
||||||
@@ -27,8 +30,51 @@ help:
|
|||||||
@echo " make repo-set-ssh"
|
@echo " make repo-set-ssh"
|
||||||
@echo " make repo-set-https"
|
@echo " make repo-set-https"
|
||||||
@echo " make repo-pull GIT_BRANCH=main"
|
@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:
|
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)"; \
|
@container="$$(docker ps --filter 'name=$(ODOO_SERVICE_PREFIX)' --format '{{.Names}}' | head -1)"; \
|
||||||
if [ -z "$$container" ]; then \
|
if [ -z "$$container" ]; then \
|
||||||
echo "No Odoo container found for prefix: $(ODOO_SERVICE_PREFIX)"; \
|
echo "No Odoo container found for prefix: $(ODOO_SERVICE_PREFIX)"; \
|
||||||
@@ -55,6 +101,9 @@ install-modules:
|
|||||||
$(MAKE) restart-service
|
$(MAKE) restart-service
|
||||||
|
|
||||||
update-modules:
|
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)"; \
|
@container="$$(docker ps --filter 'name=$(ODOO_SERVICE_PREFIX)' --format '{{.Names}}' | head -1)"; \
|
||||||
if [ -z "$$container" ]; then \
|
if [ -z "$$container" ]; then \
|
||||||
echo "No Odoo container found for prefix: $(ODOO_SERVICE_PREFIX)"; \
|
echo "No Odoo container found for prefix: $(ODOO_SERVICE_PREFIX)"; \
|
||||||
|
|||||||
@@ -18,6 +18,11 @@ class RepairFsmZone(models.Model):
|
|||||||
tracking=True,
|
tracking=True,
|
||||||
help="GeoJSON Polygon geometry. Coordinates order: [longitude, latitude].",
|
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(
|
state = fields.Selection(
|
||||||
selection=[
|
selection=[
|
||||||
("draft", "Draft"),
|
("draft", "Draft"),
|
||||||
@@ -121,6 +126,18 @@ class RepairFsmZone(models.Model):
|
|||||||
"target": "new",
|
"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 = "<div>No polygon yet.</div>"
|
||||||
|
continue
|
||||||
|
encoded = quote(rec.polygon_geojson)
|
||||||
|
rec.polygon_map_preview = (
|
||||||
|
f'<iframe src="https://geojson.io/#data=data:application/json,{encoded}" '
|
||||||
|
'style="width:100%;height:420px;border:1px solid #d9d9d9;border-radius:6px;"></iframe>'
|
||||||
|
)
|
||||||
|
|
||||||
@api.constrains("polygon_geojson")
|
@api.constrains("polygon_geojson")
|
||||||
def _check_polygon_geojson(self):
|
def _check_polygon_geojson(self):
|
||||||
for rec in self:
|
for rec in self:
|
||||||
|
|||||||
@@ -22,6 +22,9 @@
|
|||||||
<group>
|
<group>
|
||||||
<field name="polygon_geojson" widget="text" placeholder='{"type":"Polygon","coordinates":[[[-84.55,33.60],[-84.20,33.60],[-84.20,33.90],[-84.55,33.90],[-84.55,33.60]]]}'/>
|
<field name="polygon_geojson" widget="text" placeholder='{"type":"Polygon","coordinates":[[[-84.55,33.60],[-84.20,33.60],[-84.20,33.90],[-84.55,33.90],[-84.55,33.60]]]}'/>
|
||||||
</group>
|
</group>
|
||||||
|
<group>
|
||||||
|
<field name="polygon_map_preview" widget="html" readonly="1" nolabel="1"/>
|
||||||
|
</group>
|
||||||
</sheet>
|
</sheet>
|
||||||
<chatter/>
|
<chatter/>
|
||||||
</form>
|
</form>
|
||||||
|
|||||||
Reference in New Issue
Block a user