diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2024-12-06 09:01:32 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2024-12-06 09:01:32 +0700 |
| commit | 3771d33ddb1abf2ffe434d71bd1dbeadcb83c00d (patch) | |
| tree | 7994019ba2911874f8d3a2326878d449a3874137 | |
| parent | 19abaad4eb47443e621108985c0d0dcf2d4c6609 (diff) | |
fix bug
| -rw-r--r-- | indoteknik_custom/models/stock_picking.py | 69 |
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" |
