74 lines
2.7 KiB
Python
74 lines
2.7 KiB
Python
"""
|
|
Order detail dialog.
|
|
|
|
Mainly a debugging aid: shows exactly what JIRA sent back for this
|
|
ticket (raw payload), plus the tracking numbers ShipStation supplied
|
|
and the JIRA status they suggest - handy for the end-of-day close-out
|
|
without having to piece it together by hand.
|
|
"""
|
|
from __future__ import annotations
|
|
|
|
import json
|
|
|
|
from PyQt6.QtWidgets import QDialog, QVBoxLayout, QTextEdit, QLabel, QPushButton
|
|
|
|
from app.models import Order
|
|
from app.tracking import suggest_jira_status
|
|
|
|
|
|
def _format_tracking_line(t: dict) -> str:
|
|
kind = "RETURN" if t.get("is_return") else "outgoing"
|
|
carrier = t.get("carrier")
|
|
carrier_suffix = f" ({carrier})" if carrier else ""
|
|
return f" {t.get('number')} - {kind}{carrier_suffix}"
|
|
|
|
|
|
class OrderDetailDialog(QDialog):
|
|
def __init__(self, order: Order, parent=None):
|
|
super().__init__(parent)
|
|
self.setWindowTitle(f"Order Detail - {order.ticket_number or order.external_id}")
|
|
self.resize(700, 600)
|
|
|
|
layout = QVBoxLayout(self)
|
|
|
|
tracking = order.tracking_numbers or []
|
|
tracking_lines = [_format_tracking_line(t) for t in tracking]
|
|
suggested = suggest_jira_status(tracking)
|
|
|
|
info = order.shipping_info or {}
|
|
address_line2 = f" {info.get('address2')}" if info.get("address2") else ""
|
|
|
|
summary_lines = [
|
|
f"Ticket #: {order.ticket_number or '(none found)'}",
|
|
f"Company: {order.company}",
|
|
f"Created by: {order.creator or '(unknown)'}",
|
|
f"SKUs: {', '.join(order.skus or []) or '(none extracted)'}",
|
|
f"Status: {order.status}",
|
|
"",
|
|
"Shipping info (used by the emergency Send to ShipStation action):",
|
|
f" Name: {info.get('name') or '(missing)'}",
|
|
f" Address: {info.get('address1') or '(missing)'}{address_line2}",
|
|
f" {info.get('city', '')}, {info.get('state', '')} {info.get('zip', '')}".rstrip(),
|
|
f" Phone: {info.get('phone') or '(none)'} Email: {info.get('email') or '(none)'}",
|
|
"",
|
|
"Tracking numbers:",
|
|
]
|
|
summary_lines.extend(tracking_lines or [" (none pulled yet)"])
|
|
if suggested:
|
|
summary_lines.append("")
|
|
summary_lines.append(f"Suggested JIRA status: {suggested}")
|
|
|
|
summary_label = QLabel("\n".join(summary_lines))
|
|
layout.addWidget(summary_label)
|
|
|
|
layout.addWidget(QLabel("Raw payload from source system:"))
|
|
text = QTextEdit()
|
|
text.setReadOnly(True)
|
|
text.setFontFamily("Courier New")
|
|
text.setPlainText(json.dumps(order.raw_data, indent=2, default=str))
|
|
layout.addWidget(text)
|
|
|
|
close_button = QPushButton("Close")
|
|
close_button.clicked.connect(self.accept)
|
|
layout.addWidget(close_button)
|