summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authortrisusilo48 <tri.susilo@altama.co.id>2024-12-06 10:17:31 +0700
committertrisusilo48 <tri.susilo@altama.co.id>2024-12-06 10:17:31 +0700
commitd63e247db149b79ce8ec73f596925ab5a39bee20 (patch)
tree411d17bba7fcfdc305c84af02dc89e0b9f18c87a
parent16f2140b7ce089cb417acd1093364fd8c6b51513 (diff)
parent3771d33ddb1abf2ffe434d71bd1dbeadcb83c00d (diff)
Merge branch 'production' of https://bitbucket.org/altafixco/indoteknik-addons into production
-rw-r--r--indoteknik_custom/models/stock_picking.py69
1 files changed, 33 insertions, 36 deletions
diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py
index 6d911470..37e43054 100644
--- a/indoteknik_custom/models/stock_picking.py
+++ b/indoteknik_custom/models/stock_picking.py
@@ -169,11 +169,11 @@ class StockPicking(models.Model):
('state', '=', 'done'),
('carrier_id', '=', 151)
])
+
for picking in pickings:
if not picking.name:
raise UserError("Name pada stock.picking tidak ditemukan.")
- # API URL dan headers
url = f"https://api.envio.co.id/v1/tracking/distribution?code={picking.name}"
headers = {
'Authorization': 'Bearer JZ0Seh6qpYJAC3CJHdhF7sPqv8B/uSSfZe1VX5BL?vPYdo',
@@ -181,53 +181,50 @@ class StockPicking(models.Model):
}
try:
- # Request ke API
response = requests.get(url, headers=headers, timeout=10)
- response.raise_for_status() # Raise error jika status code bukan 200
+ response.raise_for_status()
response_data = response.json()
- # Validasi jika respons tidak sesuai format yang diharapkan
- if not response_data or "data" not in response_data:
- raise UserError("Respons API tidak sesuai format yang diharapkan.")
-
data = response_data.get("data")
if not data:
continue
- # Menyimpan data ke field masing-masing
- picking.envio_id = data.get("id")
- picking.envio_code = data.get("code")
- picking.envio_ref_code = data.get("ref_code")
- picking.envio_eta_at = self._convert_to_datetime(data.get("eta_at"))
- picking.envio_ata_at = self._convert_to_datetime(data.get("ata_at"))
- picking.envio_etd_at = self._convert_to_datetime(data.get("etd_at"))
- picking.envio_atd_at = self._convert_to_datetime(data.get("atd_at"))
- picking.envio_received_by = data.get("received_by")
- picking.envio_status = data.get("status")
- picking.envio_cod_value = data.get("cod_value", 0.0)
- picking.envio_cod_status = data.get("cod_status")
-
- # Menyimpan log terbaru
- logs = data.get("logs", [])
- if logs and isinstance(logs, list) and logs[0]:
- latest_log = logs[0]
- picking.envio_latest_message = latest_log.get("message", "Log kosong.")
- picking.envio_latest_recorded_at = self._convert_to_datetime(latest_log.get("recorded_at"))
- picking.envio_latest_latitude = latest_log.get("latitude", 0.0)
- picking.envio_latest_longitude = latest_log.get("longitude", 0.0)
-
+ # Mapping field dengan data API
+ fields_map = {
+ 'envio_id': "id",
+ 'envio_code': "code",
+ 'envio_ref_code': "ref_code",
+ 'envio_eta_at': "eta_at",
+ 'envio_ata_at': "ata_at",
+ 'envio_etd_at': "etd_at",
+ 'envio_atd_at': "atd_at",
+ 'envio_received_by': "received_by",
+ 'envio_status': "status",
+ 'envio_cod_value': "cod_value",
+ 'envio_cod_status': "cod_status",
+ }
+
+ for field, key in fields_map.items():
+ setattr(picking, field, data.get(key, 0.0 if 'cod' in key else False))
+
+ # Menyimpan log terbaru jika ada
+ latest_log = (data.get("logs") or [{}])[0]
+ picking.envio_latest_message = latest_log.get("message", "Log kosong.")
+ picking.envio_latest_recorded_at = self._convert_to_datetime(latest_log.get("recorded_at"))
+ picking.envio_latest_latitude = latest_log.get("latitude", 0.0)
+ picking.envio_latest_longitude = latest_log.get("longitude", 0.0)
+
+ # Menyimpan data tambahan
picking.tracking_by = self.env.user.id
- ata_at_str = data.get("ata_at")
envio_ata = self._convert_to_datetime(data.get("ata_at"))
+ picking.driver_arrival_date = envio_ata if envio_ata != '0001-01-01 00:00:00' else False
+ picking.envio_ata_at = envio_ata if envio_ata != '0001-01-01 00:00:00' else False
- picking.driver_arrival_date = envio_ata
- if data.get("status") == 'returned':
- picking.driver_arrival_date = False
- picking.envio_ata_at = False
except requests.exceptions.RequestException as e:
- raise UserError(f"Terjadi kesalahan saat menghubungi API Envio: {str(e)}")
+ raise UserError(f"Terjadi kesalahan saat menghubungi API Envio: {e}")
except Exception as e:
- raise UserError(f"Kesalahan tidak terduga: {str(e)}")
+ raise UserError(f"Kesalahan tidak terduga: {e}")
+
def action_send_to_biteship(self):
url = "https://api.biteship.com/v1/orders"