updating cycle close request feature to get approval from national dashboard instead auto from system
This commit is contained in:
1 parent
3a868cf1db
commit
e4dbfd0252
31 files changed
+1322
-182
No files matched your search
@@ -0,0 +1,74 @@
|
||||
"""Notify pusat about cycle close request / cancel."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
import httpx
|
||||
from django.conf import settings
|
||||
|
||||
from apps.farms.models import Cycle
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class PusatCloseError(Exception):
|
||||
def __init__(self, message: str):
|
||||
self.message = message
|
||||
super().__init__(message)
|
||||
|
||||
|
||||
def _configured() -> bool:
|
||||
return bool(
|
||||
settings.PUSAT_BASE_URL
|
||||
and settings.PUSAT_API_KEY
|
||||
and settings.PUSAT_CITY_SITE_ID
|
||||
)
|
||||
|
||||
|
||||
def notify_pusat_close_request(cycle: Cycle, *, cancelled: bool = False) -> None:
|
||||
"""POST ingest/cancel to pusat. Raises PusatCloseError on failure when configured."""
|
||||
if not _configured():
|
||||
logger.info("Pusat close channel not configured; skipping notify for cycle %s", cycle.pk)
|
||||
return
|
||||
|
||||
base = settings.PUSAT_BASE_URL.rstrip("/")
|
||||
headers = {"X-API-Key": settings.PUSAT_API_KEY, "Content-Type": "application/json"}
|
||||
city_site_id = int(settings.PUSAT_CITY_SITE_ID)
|
||||
|
||||
try:
|
||||
if cancelled:
|
||||
url = f"{base}/cycle-close/cancel/"
|
||||
payload: dict[str, Any] = {
|
||||
"city_site_id": city_site_id,
|
||||
"source_cycle_id": cycle.pk,
|
||||
}
|
||||
else:
|
||||
url = f"{base}/cycle-close/ingest/"
|
||||
payload = {
|
||||
"city_site_id": city_site_id,
|
||||
"source_cycle_id": cycle.pk,
|
||||
"kandang_name": cycle.kandang.kandang_name,
|
||||
"site_name": cycle.kandang.site.site_name,
|
||||
"start_date": cycle.start_date.isoformat(),
|
||||
"proposed_end_date": cycle.proposed_end_date.isoformat()
|
||||
if cycle.proposed_end_date
|
||||
else None,
|
||||
"doc_in_weight": cycle.doc_in_weight,
|
||||
"doc_in_count": cycle.doc_in_count,
|
||||
"total_days": cycle.total_days,
|
||||
"requested_at": cycle.close_requested_at.isoformat()
|
||||
if cycle.close_requested_at
|
||||
else None,
|
||||
}
|
||||
with httpx.Client(timeout=30) as client:
|
||||
response = client.post(url, json=payload, headers=headers)
|
||||
if response.status_code >= 400:
|
||||
detail = response.text[:300]
|
||||
raise PusatCloseError(f"gagal kirim ke pusat — coba lagi ({response.status_code}: {detail})")
|
||||
except PusatCloseError:
|
||||
raise
|
||||
except httpx.HTTPError as exc:
|
||||
logger.exception("Pusat notify failed for cycle %s", cycle.pk)
|
||||
raise PusatCloseError("gagal kirim ke pusat — coba lagi") from exc
|
||||
Reference in new issue
Block a user