More email SKU shenanigans, now with more TEST labels!

This commit is contained in:
2026-09-14 11:41:27 -05:00
parent a6f60408ff
commit b5570d39f0
12 changed files with 815 additions and 139 deletions
+49 -4
View File
@@ -61,23 +61,52 @@ class SendToShipStationWorker(QThread):
self.finished_ok.emit(result)
class CreateDummyShipmentWorker(QThread):
"""Runs step 1 (dummy outbound shipment creation) off the GUI thread."""
finished_ok = pyqtSignal(dict) # the created dummy label's JSON
failed = pyqtSignal(str)
def __init__(self, order, parent=None):
super().__init__(parent)
self.order = order
def run(self) -> None:
from app.services.shipstation_send import create_dummy_shipment, ShipStationSendError
try:
result = create_dummy_shipment(self.order)
except ShipStationSendError as exc:
self.failed.emit(str(exc))
return
except Exception as exc: # noqa: BLE001
self.failed.emit(f"Unexpected error creating dummy shipment: {exc}")
return
self.finished_ok.emit(result)
class CreateReturnLabelWorker(QThread):
"""Runs return-label creation off the GUI thread."""
"""Runs step 2 (the real return label, from an already-created dummy)
off the GUI thread."""
finished_ok = pyqtSignal(dict) # the created label's JSON
failed = pyqtSignal(str)
def __init__(self, order, packages: list[dict], charge_event: str, parent=None):
def __init__(self, order, dummy_label_id: str, packages: list[dict], charge_event: str, parent=None):
super().__init__(parent)
self.order = order
self.dummy_label_id = dummy_label_id
self.packages = packages
self.charge_event = charge_event
def run(self) -> None:
from app.services.shipstation_send import create_return_label, ShipStationSendError
from app.services.shipstation_send import create_return_label_from_dummy, ShipStationSendError
try:
result = create_return_label(self.order, self.packages, self.charge_event)
result = create_return_label_from_dummy(
self.order, self.dummy_label_id, self.packages, self.charge_event
)
except ShipStationSendError as exc:
self.failed.emit(str(exc))
return
@@ -334,6 +363,22 @@ def mark_shipstation_sent(ticket_number: str) -> None:
session.close()
def save_dummy_outbound_label_id(ticket_number: str, label_id: str) -> None:
"""Persists step 1's result (the dummy shipment's label_id) so step 2
(the real return label) can be triggered separately - including in a
later session, after the dummy has been verified in ShipStation."""
session = get_session()
try:
order = session.execute(
select(Order).where(Order.source == "jira", Order.ticket_number == ticket_number)
).scalar_one_or_none()
if order is not None:
order.dummy_outbound_label_id = label_id
session.commit()
finally:
session.close()
def save_pack_data(ticket_number: str, serial_numbers: dict, packed: bool) -> None:
"""
Saves serial numbers and the packed/done flag from the Pack Ticket