summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAzka Nathan <darizkyfaz@gmail.com>2026-01-17 14:21:18 +0700
committerAzka Nathan <darizkyfaz@gmail.com>2026-01-17 14:21:18 +0700
commitd90a7762d13adf43520ea006a2ab9d3034dfdd15 (patch)
tree3c55164135b49e15374344951960bd9d550f4bfe
parentbd6c4da5e84a1b0aa98a9b41918cd70f836d2b59 (diff)
push
-rwxr-xr-xfixco_custom/models/stock_picking.py296
-rwxr-xr-xfixco_custom/models/webhook_ginee.py2
2 files changed, 141 insertions, 157 deletions
diff --git a/fixco_custom/models/stock_picking.py b/fixco_custom/models/stock_picking.py
index c72f3a4..3faa5e1 100755
--- a/fixco_custom/models/stock_picking.py
+++ b/fixco_custom/models/stock_picking.py
@@ -537,11 +537,7 @@ class StockPicking(models.Model):
# ==============================
# SPLIT ORDER REFERENCE
# ==============================
- order_refs = [
- ref.strip()
- for ref in self.order_reference.split(",")
- if ref.strip()
- ]
+ order_refs = self.order_reference.split(",")[0].strip()
# API ini WAJIB 1 order per call
authorization = self.sign_request(1)
@@ -553,80 +549,76 @@ class StockPicking(models.Model):
url = "https://api.ginee.com/openapi/logistics/v1/get-shipping-parameter"
+ payload = {
+ "orderId": order_refs
+ }
+
+ response = requests.post(
+ url,
+ headers=headers,
+ data=json.dumps(payload)
+ )
+
+ try:
+ res = response.json()
+ except Exception:
+ raise UserError(
+ "Invalid JSON response from Ginee for order %s"
+ % order_refs
+ )
+
+ if res.get("code") != "SUCCESS":
+ raise UserError(
+ "Ginee Error (%s): %s"
+ % (order_refs, res.get("message"))
+ )
+
+ data = res.get("data", {})
+
# ==============================
- # LOOP PER ORDER ID
+ # BASIC FIELDS
# ==============================
- for order_id in order_refs:
- payload = {
- "orderId": order_id
- }
-
- response = requests.post(
- url,
- headers=headers,
- data=json.dumps(payload)
- )
+ self.ginee_delivery_type = data.get("deliveryType")
+ self.ginee_tracking_no = data.get("logisticsTrackingNumber")
+ self.ginee_invoice_no = data.get("invoiceNumber")
- try:
- res = response.json()
- except Exception:
- raise UserError(
- "Invalid JSON response from Ginee for order %s"
- % order_id
- )
+ # ==============================
+ # FIND PROVIDER
+ # ==============================
+ provider_id = None
+ provider_name = None
+ logistics_type = None
- if res.get("code") != "SUCCESS":
- raise UserError(
- "Ginee Error (%s): %s"
- % (order_id, res.get("message"))
- )
+ for lg in data.get("logistics", []) or []:
+ details = lg.get("logisticDetailList") or []
+ if details:
+ d = details[0]
+ provider_id = d.get("logisticsProviderId")
+ provider_name = d.get("logisticsProviderName")
+ logistics_type = lg.get("logisticsDeliveryType")
+ break
- data = res.get("data", {})
-
- # ==============================
- # BASIC FIELDS
- # ==============================
- self.ginee_delivery_type = data.get("deliveryType")
- self.ginee_tracking_no = data.get("logisticsTrackingNumber")
- self.ginee_invoice_no = data.get("invoiceNumber")
-
- # ==============================
- # FIND PROVIDER
- # ==============================
- provider_id = None
- provider_name = None
- logistics_type = None
-
- for lg in data.get("logistics", []) or []:
- details = lg.get("logisticDetailList") or []
- if details:
- d = details[0]
- provider_id = d.get("logisticsProviderId")
- provider_name = d.get("logisticsProviderName")
- logistics_type = lg.get("logisticsDeliveryType")
- break
-
- self.ginee_provider_id = provider_id
- self.ginee_provider_name = provider_name
- self.ginee_delivery_type = logistics_type or self.ginee_delivery_type
-
- # ==============================
- # PICKUP ADDRESS
- # ==============================
- addresses = data.get("addresses") or []
- if addresses:
- first = addresses[0]
- self.ginee_address = first.get("address")
- self.ginee_address_id = first.get("addressId")
-
- times = first.get("pickupTimeList") or []
- if times:
- self.ginee_pickup_time_id = times[0].get("pickupTimeId")
-
- # ==============================
- # OPTIONAL: DELAY (ANTI RATE LIMIT)
- # ==============================
- time.sleep(0.2)
+ self.ginee_provider_id = provider_id
+ self.ginee_provider_name = provider_name
+ self.ginee_delivery_type = logistics_type or self.ginee_delivery_type
+
+ # ==============================
+ # PICKUP ADDRESS
+ # ==============================
+ addresses = data.get("addresses") or []
+ if addresses:
+ first = addresses[0]
+ self.ginee_address = first.get("address")
+ self.ginee_address_id = first.get("addressId")
+
+ times = first.get("pickupTimeList") or []
+ if times:
+ self.ginee_pickup_time_id = times[0].get("pickupTimeId")
+
+ # ==============================
+ # OPTIONAL: DELAY (ANTI RATE LIMIT)
+ # ==============================
+ time.sleep(0.2)
except Exception as e:
raise UserError(_("Error: %s") % str(e))
@@ -829,11 +821,7 @@ class StockPicking(models.Model):
# ==============================
# SPLIT ORDER IDS
# ==============================
- order_refs = [
- ref.strip()
- for ref in self.order_reference.split(",")
- if ref.strip()
- ]
+ order_refs = self.order_reference.split(",")[0].strip()
if not order_refs:
return False
@@ -866,86 +854,82 @@ class StockPicking(models.Model):
order_ships = []
+ order_data = {
+ "orderId": order_refs,
+ "deliveryType": base_shipping["deliveryType"],
+ }
+
+ dt = base_shipping["deliveryType"]
+
# ==============================
- # BUILD ORDER SHIPS
+ # PLATFORM RULES
# ==============================
- for order_id in order_refs:
- order_data = {
- "orderId": order_id,
- "deliveryType": base_shipping["deliveryType"],
- }
-
- dt = base_shipping["deliveryType"]
-
- # ==============================
- # PLATFORM RULES
- # ==============================
- def add(*keys):
- for k in keys:
- if base_shipping.get(k):
- order_data[k] = base_shipping[k]
-
- if platform == "SHOPEE":
- if dt == "PICK_UP":
- add("shippingProvider", "pickupTimeId", "addressId", "address")
- elif dt == "DROP_OFF":
- add("shippingProvider")
- elif dt == "MANUAL_SHIP":
- add("shippingProvider", "trackingNo")
-
- elif platform == "TOKOPEDIA":
- if dt in ["PICK_UP", "MANUAL_SHIP"]:
- add("shippingProvider", "trackingNo")
- elif dt == "DROP_OFF":
- add("shippingProvider")
-
- elif platform == "LAZADA":
- if dt == "PICK_UP":
- add("shippingProvider", "address", "addressId", "pickupTimeId")
- elif dt == "DROP_OFF":
- add("shippingProvider", "invoiceNumber")
-
- elif platform == "TIKTOK":
- if dt == "PICK_UP":
- order_data.update({
- "shippingProvider": base_shipping["shippingProvider"],
- "pickupStartTime": base_shipping["pickupTimeId"] or "",
- "pickupEndTime": base_shipping["pickupTimeId"] or "",
- })
- elif dt == "DROP_OFF":
- add("shippingProvider")
-
- elif platform == "ZALORA":
- if dt == "DROP_OFF":
- add("trackingNo", "invoiceNumber")
-
- elif platform == "AKULAKU":
- if dt in ["PICK_UP", "DROP_OFF"]:
- add("shippingProvider", "shippingProviderId", "addressId", "address")
- elif dt == "MANUAL_SHIP":
- add("shippingProvider", "shippingProviderId", "trackingNo")
-
- elif platform == "BUKALAPAK":
- if dt in ["PICK_UP", "DROP_OFF"]:
- add("shippingProvider")
- elif dt == "MANUAL_SHIP":
- add("shippingProvider", "trackingNo")
-
- elif platform == "BLIBLI":
- if dt == "PICK_UP":
- add("shippingProvider")
- elif dt == "DROP_OFF":
- add("shippingProvider", "trackingNo")
+ def add(*keys):
+ for k in keys:
+ if base_shipping.get(k):
+ order_data[k] = base_shipping[k]
- else:
- if dt == "PICK_UP":
- add("shippingProvider", "pickupTimeId", "addressId", "address")
- elif dt == "DROP_OFF":
- add("shippingProvider")
- elif dt == "MANUAL_SHIP":
- add("shippingProvider", "trackingNo")
-
- order_ships.append(order_data)
+ if platform == "SHOPEE":
+ if dt == "PICK_UP":
+ add("shippingProvider", "pickupTimeId", "addressId", "address")
+ elif dt == "DROP_OFF":
+ add("shippingProvider")
+ elif dt == "MANUAL_SHIP":
+ add("shippingProvider", "trackingNo")
+
+ elif platform == "TOKOPEDIA":
+ if dt in ["PICK_UP", "MANUAL_SHIP"]:
+ add("shippingProvider", "trackingNo")
+ elif dt == "DROP_OFF":
+ add("shippingProvider")
+
+ elif platform == "LAZADA":
+ if dt == "PICK_UP":
+ add("shippingProvider", "address", "addressId", "pickupTimeId")
+ elif dt == "DROP_OFF":
+ add("shippingProvider", "invoiceNumber")
+
+ elif platform == "TIKTOK":
+ if dt == "PICK_UP":
+ order_data.update({
+ "shippingProvider": base_shipping["shippingProvider"],
+ "pickupStartTime": base_shipping["pickupTimeId"] or "",
+ "pickupEndTime": base_shipping["pickupTimeId"] or "",
+ })
+ elif dt == "DROP_OFF":
+ add("shippingProvider")
+
+ elif platform == "ZALORA":
+ if dt == "DROP_OFF":
+ add("trackingNo", "invoiceNumber")
+
+ elif platform == "AKULAKU":
+ if dt in ["PICK_UP", "DROP_OFF"]:
+ add("shippingProvider", "shippingProviderId", "addressId", "address")
+ elif dt == "MANUAL_SHIP":
+ add("shippingProvider", "shippingProviderId", "trackingNo")
+
+ elif platform == "BUKALAPAK":
+ if dt in ["PICK_UP", "DROP_OFF"]:
+ add("shippingProvider")
+ elif dt == "MANUAL_SHIP":
+ add("shippingProvider", "trackingNo")
+
+ elif platform == "BLIBLI":
+ if dt == "PICK_UP":
+ add("shippingProvider")
+ elif dt == "DROP_OFF":
+ add("shippingProvider", "trackingNo")
+
+ else:
+ if dt == "PICK_UP":
+ add("shippingProvider", "pickupTimeId", "addressId", "address")
+ elif dt == "DROP_OFF":
+ add("shippingProvider")
+ elif dt == "MANUAL_SHIP":
+ add("shippingProvider", "trackingNo")
+
+ order_ships.append(order_data)
# ==============================
# FINAL PAYLOAD (1 CALL ONLY)
diff --git a/fixco_custom/models/webhook_ginee.py b/fixco_custom/models/webhook_ginee.py
index 444306b..fb1bbf6 100755
--- a/fixco_custom/models/webhook_ginee.py
+++ b/fixco_custom/models/webhook_ginee.py
@@ -20,7 +20,7 @@ class WebhookGinee(models.Model):
], 'Execute Status')
def process_queue_item(self, limit=100, max_exec_time=30):
- domain = [('execute_status', '=', False)]
+ domain = [('execute_status', '=', False), ('json_ginee', 'not ilike', 'BLIBLI_ID')]
records = self.search(domain, order='create_date asc', limit=limit)
start_time = time.time()
for rec in records: