adjust citysite table name to activesites
This commit is contained in:
1 parent
fb0f996776
commit
64b37b6b6d
27 files changed
+382
-221
No files matched your search
@@ -0,0 +1,49 @@
|
||||
"""Link HQ Site rows to ActiveSite registry entries (Pengaturan view list)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from apps.farms.models import Site
|
||||
from apps.sync.models import ActiveSite
|
||||
|
||||
|
||||
def ensure_hq_site_for_active_site(active_site: ActiveSite) -> Site:
|
||||
"""
|
||||
Ensure the active-site registry entry has an HQ Site for farm visibility.
|
||||
|
||||
Prefers an existing linked site, then an unlinked site owned by the
|
||||
registrar with a matching name (so seeded Sukawarna attaches when
|
||||
registered), otherwise creates a new Site.
|
||||
"""
|
||||
existing = Site.objects.filter(active_site=active_site).first()
|
||||
if existing:
|
||||
return existing
|
||||
|
||||
owner = active_site.registered_by
|
||||
if owner is None:
|
||||
raise ValueError("ActiveSite.registered_by is required to create an HQ site.")
|
||||
|
||||
site_name = (active_site.name or active_site.code or "Site")[:30]
|
||||
orphan = (
|
||||
Site.objects.filter(
|
||||
user=owner, active_site__isnull=True, site_name__iexact=site_name
|
||||
)
|
||||
.order_by("pk")
|
||||
.first()
|
||||
)
|
||||
if orphan is None and active_site.code:
|
||||
# e.g. code "sukawarna" ↔ site_name "Sukawarna"
|
||||
orphan = (
|
||||
Site.objects.filter(
|
||||
user=owner, active_site__isnull=True, site_name__iexact=active_site.code
|
||||
)
|
||||
.order_by("pk")
|
||||
.first()
|
||||
)
|
||||
if orphan is not None:
|
||||
orphan.active_site = active_site
|
||||
orphan.save(update_fields=["active_site", "updated_at"])
|
||||
return orphan
|
||||
|
||||
return Site.objects.create(
|
||||
site_name=site_name, user=owner, active_site=active_site
|
||||
)
|
||||
@@ -1,43 +0,0 @@
|
||||
"""Link HQ Site rows to CitySite registry entries (Pengaturan view list)."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
from apps.farms.models import Site
|
||||
from apps.sync.models import CitySite
|
||||
|
||||
|
||||
def ensure_hq_site_for_city(city: CitySite) -> Site:
|
||||
"""
|
||||
Ensure the city registry entry has an HQ Site for farm visibility.
|
||||
|
||||
Prefers an existing linked site, then an unlinked site owned by the
|
||||
registrar with a matching name (so seeded Sukawarna attaches when
|
||||
registered), otherwise creates a new Site.
|
||||
"""
|
||||
existing = Site.objects.filter(city_site=city).first()
|
||||
if existing:
|
||||
return existing
|
||||
|
||||
owner = city.registered_by
|
||||
if owner is None:
|
||||
raise ValueError("CitySite.registered_by is required to create an HQ site.")
|
||||
|
||||
site_name = (city.name or city.code or "Site")[:30]
|
||||
orphan = (
|
||||
Site.objects.filter(user=owner, city_site__isnull=True, site_name__iexact=site_name)
|
||||
.order_by("pk")
|
||||
.first()
|
||||
)
|
||||
if orphan is None and city.code:
|
||||
# e.g. code "sukawarna" ↔ site_name "Sukawarna"
|
||||
orphan = (
|
||||
Site.objects.filter(user=owner, city_site__isnull=True, site_name__iexact=city.code)
|
||||
.order_by("pk")
|
||||
.first()
|
||||
)
|
||||
if orphan is not None:
|
||||
orphan.city_site = city
|
||||
orphan.save(update_fields=["city_site", "updated_at"])
|
||||
return orphan
|
||||
|
||||
return Site.objects.create(site_name=site_name, user=owner, city_site=city)
|
||||
@@ -1,4 +1,4 @@
|
||||
"""Push close decisions from pusat to city dashboard-cpsp."""
|
||||
"""Push close decisions from pusat to farm-location dashboard-cpsp."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
@@ -18,12 +18,17 @@ class SiteClosePushError(Exception):
|
||||
|
||||
|
||||
def push_close_decision(cycle: Cycle, *, approved: bool) -> None:
|
||||
city = cycle.city_site
|
||||
if not city or not city.api_base_url or not city.api_key or not cycle.source_cycle_id:
|
||||
logger.info("No city channel configured for cycle %s; skip push", cycle.pk)
|
||||
active_site = cycle.active_site
|
||||
if (
|
||||
not active_site
|
||||
or not active_site.api_base_url
|
||||
or not active_site.api_key
|
||||
or not cycle.source_cycle_id
|
||||
):
|
||||
logger.info("No active-site channel configured for cycle %s; skip push", cycle.pk)
|
||||
return
|
||||
|
||||
base = city.api_base_url.rstrip("/")
|
||||
base = active_site.api_base_url.rstrip("/")
|
||||
url = f"{base}/cycles/{cycle.source_cycle_id}/apply-close-decision/"
|
||||
payload = {"decision": "approve" if approved else "reject"}
|
||||
if approved:
|
||||
@@ -35,7 +40,10 @@ def push_close_decision(cycle: Cycle, *, approved: bool) -> None:
|
||||
response = httpx.post(
|
||||
url,
|
||||
json=payload,
|
||||
headers={"X-API-Key": city.api_key, "Content-Type": "application/json"},
|
||||
headers={
|
||||
"X-API-Key": active_site.api_key,
|
||||
"Content-Type": "application/json",
|
||||
},
|
||||
timeout=30.0,
|
||||
)
|
||||
if response.status_code >= 400:
|
||||
|
||||
Reference in new issue
Block a user