summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIndoteknik . <it@fixcomart.co.id>2025-05-31 12:32:45 +0700
committerIndoteknik . <it@fixcomart.co.id>2025-05-31 12:32:45 +0700
commitb6928c9bffc486b471d4c335c2550cbc1bf7d841 (patch)
tree9a2723dbc571a72ed5092df28bd0a3e80eb2b731
parentec6fdea2682ae2d66f0d16f6d47a903c9eed99e9 (diff)
(andri) fix bug datetime departure&arrival
-rw-r--r--indoteknik_custom/models/stock_picking.py34
1 files changed, 20 insertions, 14 deletions
diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py
index 4d38e5b3..4517a941 100644
--- a/indoteknik_custom/models/stock_picking.py
+++ b/indoteknik_custom/models/stock_picking.py
@@ -1570,23 +1570,23 @@ class StockPicking(models.Model):
dt = False
try:
- local_dt_str = picking._convert_to_local_time(dt_str)
- dt = fields.Datetime.from_string(local_dt_str)
+ dt = picking._convert_to_local_time(dt_str)
except Exception as e:
_logger.warning(f"[Biteship Sync] Gagal parse datetime: {e}")
continue
- # Update tanggal ke field
+ # Update tanggal ke field (pastikan naive datetime UTC)
if status == "picked" and dt and not picking.driver_departure_date:
- updated_fields["driver_departure_date"] = dt
+ updated_fields["driver_departure_date"] = fields.Datetime.to_string(dt)
if status == "delivered" and dt and not picking.driver_arrival_date:
- updated_fields["driver_arrival_date"] = dt
+ updated_fields["driver_arrival_date"] = fields.Datetime.to_string(dt)
- # Buat log unik
+ # Buat log unik dengan waktu lokal Asia/Jakarta
if dt and desc:
+ dt_local = pytz.utc.localize(dt).astimezone(pytz.timezone("Asia/Jakarta"))
desc_clean = ' '.join(desc.strip().split())
- log_line = f"[TRACKING] {status} - {dt.strftime('%d %b %Y %H:%M')}: {desc_clean}"
+ log_line = f"[TRACKING] {status} - {dt_local.strftime('%d %b %Y %H:%M')}: {desc_clean}"
if not picking._has_existing_log(log_line):
picking.message_post(body=log_line)
seen_logs.add(log_line)
@@ -1607,15 +1607,21 @@ class StockPicking(models.Model):
def _convert_to_local_time(self, iso_date):
try:
- dt_with_tz = waktu.fromisoformat(iso_date)
- utc_dt = dt_with_tz.astimezone(pytz.utc)
-
+ from dateutil import parser
+ import pytz
+ if isinstance(iso_date, str):
+ waktu = parser.parse(iso_date)
+ else:
+ waktu = iso_date
+ if waktu.tzinfo is None:
+ waktu = waktu.replace(tzinfo=pytz.utc)
local_tz = pytz.timezone("Asia/Jakarta")
- local_dt = utc_dt.astimezone(local_tz)
-
- return local_dt.strftime("%Y-%m-%d %H:%M:%S")
+ local_dt = waktu.astimezone(local_tz)
+ utc_dt = local_dt.astimezone(pytz.utc).replace(tzinfo=None)
+ return utc_dt
except Exception as e:
- return str(e)
+ _logger.warning(f"[Biteship] Gagal konversi waktu lokal: {e}")
+ return False
def _map_status_biteship(self, status):
status_mapping = {