Files
orion/scripts/investigate_order.py
Samir Boulahtit dad2ebc677 refactor: update services, alembic, scripts to use module imports
Update remaining application code to use canonical module locations:
- app/services/letzshop/order_service.py
- app/services/platform_health_service.py
- alembic/env.py (inventory and order models)
- scripts/investigate_order.py, verify_setup.py, seed_demo.py

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-01-30 08:37:47 +01:00

127 lines
5.0 KiB
Python

#!/usr/bin/env python3
"""Debug script to investigate order shipping information."""
import sys
sys.path.insert(0, ".")
from app.core.database import SessionLocal
from app.modules.orders.models import Order, OrderItem
def investigate_order(order_number: str):
"""Investigate shipping info for a specific order."""
db = SessionLocal()
try:
# Try to find the order by various number formats
order = db.query(Order).filter(
(Order.order_number == order_number) |
(Order.external_order_number == order_number) |
(Order.order_number.contains(order_number)) |
(Order.external_order_number.contains(order_number))
).first()
if not order:
print(f"Order not found: {order_number}")
print("\nSearching for similar orders...")
similar = db.query(Order).filter(
Order.order_number.ilike(f"%{order_number[-6:]}%")
).limit(5).all()
if similar:
print("Found similar orders:")
for o in similar:
print(f" - {o.order_number} (external: {o.external_order_number})")
return
print("=" * 60)
print(f"ORDER FOUND: {order.order_number}")
print("=" * 60)
print("\n--- Basic Info ---")
print(f" ID: {order.id}")
print(f" Order Number: {order.order_number}")
print(f" External Order Number: {order.external_order_number}")
print(f" External Order ID: {order.external_order_id}")
print(f" External Shipment ID: {order.external_shipment_id}")
print(f" Channel: {order.channel}")
print(f" Status: {order.status}")
print(f" Vendor ID: {order.vendor_id}")
print("\n--- Dates ---")
print(f" Order Date: {order.order_date}")
print(f" Confirmed At: {order.confirmed_at}")
print(f" Shipped At: {order.shipped_at}")
print(f" Cancelled At: {order.cancelled_at}")
print(f" Created At: {order.created_at}")
print(f" Updated At: {order.updated_at}")
print("\n--- Shipping Info ---")
print(f" Tracking Number: {order.tracking_number}")
print(f" Tracking Provider: {order.tracking_provider}")
print(f" Ship First Name: {order.ship_first_name}")
print(f" Ship Last Name: {order.ship_last_name}")
print(f" Ship Address: {order.ship_address_line_1}")
print(f" Ship City: {order.ship_city}")
print(f" Ship Postal Code: {order.ship_postal_code}")
print(f" Ship Country: {order.ship_country_iso}")
print("\n--- Customer Info ---")
print(f" Customer Name: {order.customer_first_name} {order.customer_last_name}")
print(f" Customer Email: {order.customer_email}")
print("\n--- Financial ---")
print(f" Subtotal: {order.subtotal}")
print(f" Tax: {order.tax_amount}")
print(f" Shipping: {order.shipping_amount}")
print(f" Total: {order.total_amount} {order.currency}")
print("\n--- External Data (raw from Letzshop) ---")
if order.external_data:
import json
# Look for shipping-related fields
ext = order.external_data
print(f" Keys: {list(ext.keys())}")
# Check for tracking info in external data
if 'tracking' in ext:
print(f" tracking: {ext['tracking']}")
if 'trackingNumber' in ext:
print(f" trackingNumber: {ext['trackingNumber']}")
if 'carrier' in ext:
print(f" carrier: {ext['carrier']}")
if 'state' in ext:
print(f" state: {ext['state']}")
if 'shipmentState' in ext:
print(f" shipmentState: {ext['shipmentState']}")
# Print full external data (truncated if too long)
ext_str = json.dumps(ext, indent=2, default=str)
if len(ext_str) > 2000:
print(f"\n Full data (truncated):\n{ext_str[:2000]}...")
else:
print(f"\n Full data:\n{ext_str}")
else:
print(" No external data stored")
print("\n--- Order Items ---")
items = db.query(OrderItem).filter(OrderItem.order_id == order.id).all()
print(f" Total items: {len(items)}")
for i, item in enumerate(items, 1):
print(f"\n Item {i}:")
print(f" Product: {item.product_name}")
print(f" SKU: {item.product_sku}")
print(f" GTIN: {item.gtin}")
print(f" Qty: {item.quantity}")
print(f" Price: {item.unit_price} (total: {item.total_price})")
print(f" Item State: {item.item_state}")
print(f" External Item ID: {item.external_item_id}")
print(f" Needs Product Match: {item.needs_product_match}")
finally:
db.close()
if __name__ == "__main__":
order_number = sys.argv[1] if len(sys.argv) > 1 else "R532332163"
print(f"Investigating order: {order_number}\n")
investigate_order(order_number)