diff options
| author | Indoteknik . <it@fixcomart.co.id> | 2025-06-02 12:09:27 +0700 |
|---|---|---|
| committer | Indoteknik . <it@fixcomart.co.id> | 2025-06-02 12:09:27 +0700 |
| commit | 43d180117e90db9115f07ab4b5b2880c32594bea (patch) | |
| tree | 046d11b926f2c455a966b929d76c1630007bfcbf | |
| parent | 9e71d7ac3e018e9d4415e1341231671e62fbdb45 (diff) | |
(andri) fix date tracking
| -rw-r--r-- | indoteknik_custom/models/stock_picking.py | 34 |
1 files changed, 26 insertions, 8 deletions
diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 4517a941..a2935a07 100644 --- a/indoteknik_custom/models/stock_picking.py +++ b/indoteknik_custom/models/stock_picking.py @@ -1570,7 +1570,8 @@ class StockPicking(models.Model): dt = False try: - dt = picking._convert_to_local_time(dt_str) + dt = picking._convert_to_utc_datetime(dt_str) + _logger.info(f"[Biteship Sync] Berhasil parse datetime: {dt_str} -> {dt}") except Exception as e: _logger.warning(f"[Biteship Sync] Gagal parse datetime: {e}") continue @@ -1584,7 +1585,12 @@ class StockPicking(models.Model): # Buat log unik dengan waktu lokal Asia/Jakarta if dt and desc: - dt_local = pytz.utc.localize(dt).astimezone(pytz.timezone("Asia/Jakarta")) + try: + dt_local = parser.parse(dt_str).replace(tzinfo=None) + except Exception as e: + _logger.warning(f"[Biteship Sync] Gagal parse dt_str untuk log: {e}") + dt_local = dt # fallback + desc_clean = ' '.join(desc.strip().split()) log_line = f"[TRACKING] {status} - {dt_local.strftime('%d %b %Y %H:%M')}: {desc_clean}" if not picking._has_existing_log(log_line): @@ -1605,10 +1611,24 @@ class StockPicking(models.Model): """, (self._name, self.id, f"%{log_line}%")) return self.env.cr.fetchone() is not None + # Untuk internal Odoo (mengembalikan naive UTC datetime untuk disimpan ke DB) + def _convert_to_utc_datetime(self, iso_date): + try: + 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) + utc_dt = waktu.astimezone(pytz.utc).replace(tzinfo=None) + return utc_dt + except Exception as e: + _logger.warning(f"[Biteship] Gagal konversi waktu UTC: {e}") + return False + + # Untuk tampilan di API atau kebutuhan web (mengembalikan string waktu lokal) def _convert_to_local_time(self, iso_date): try: - from dateutil import parser - import pytz if isinstance(iso_date, str): waktu = parser.parse(iso_date) else: @@ -1617,11 +1637,9 @@ class StockPicking(models.Model): waktu = waktu.replace(tzinfo=pytz.utc) local_tz = pytz.timezone("Asia/Jakarta") local_dt = waktu.astimezone(local_tz) - utc_dt = local_dt.astimezone(pytz.utc).replace(tzinfo=None) - return utc_dt + return local_dt.strftime("%Y-%m-%d %H:%M:%S") except Exception as e: - _logger.warning(f"[Biteship] Gagal konversi waktu lokal: {e}") - return False + return str(e) def _map_status_biteship(self, status): status_mapping = { |
