diff options
| author | Azka Nathan <darizkyfaz@gmail.com> | 2024-12-06 11:27:03 +0700 |
|---|---|---|
| committer | Azka Nathan <darizkyfaz@gmail.com> | 2024-12-06 11:27:03 +0700 |
| commit | b0e71c613a80283a76371a468d54771b284205b5 (patch) | |
| tree | 01bf69c2fa783a89c225493796fcb80f253acd1b | |
| parent | 3771d33ddb1abf2ffe434d71bd1dbeadcb83c00d (diff) | |
fix bug envio
| -rw-r--r-- | indoteknik_api/controllers/controller.py | 2 | ||||
| -rw-r--r-- | indoteknik_custom/models/stock_picking.py | 69 |
2 files changed, 37 insertions, 34 deletions
diff --git a/indoteknik_api/controllers/controller.py b/indoteknik_api/controllers/controller.py index 7f49c4e5..ebabfd03 100644 --- a/indoteknik_api/controllers/controller.py +++ b/indoteknik_api/controllers/controller.py @@ -207,7 +207,7 @@ class Controller(http.Controller): if not variant: image = self.add_watermark_to_image(image, ratio, version) - image = self.convert_to_webp(image) + # image = self.convert_to_webp(image) response_headers = [ ('Content-Type', 'image/jpg'), diff --git a/indoteknik_custom/models/stock_picking.py b/indoteknik_custom/models/stock_picking.py index 37e43054..e6506a0b 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,50 +181,53 @@ class StockPicking(models.Model): } try: + # Request ke API response = requests.get(url, headers=headers, timeout=10) - response.raise_for_status() + response.raise_for_status() # Raise error jika status code bukan 200 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 - # 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 + # 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) + 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") != 'delivered': + 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: {e}") + raise UserError(f"Terjadi kesalahan saat menghubungi API Envio: {str(e)}") except Exception as e: - raise UserError(f"Kesalahan tidak terduga: {e}") - + raise UserError(f"Kesalahan tidak terduga: {str(e)}") def action_send_to_biteship(self): url = "https://api.biteship.com/v1/orders" |
