Major crashing bug fixed, program returned to normal operations
This commit is contained in:
+57
-12
@@ -23,6 +23,7 @@ from PyQt6.QtWidgets import (
|
||||
QLabel,
|
||||
QTabWidget,
|
||||
QFileDialog,
|
||||
QDialog,
|
||||
)
|
||||
|
||||
from app.return_labels import is_emailed_label_order
|
||||
@@ -59,6 +60,12 @@ class MainWindow(QMainWindow):
|
||||
self._send_worker: SendToShipStationWorker | None = None
|
||||
self._return_label_worker: CreateReturnLabelWorker | None = None
|
||||
|
||||
# Reused, never-destroyed dialog instances (see the WORKAROUND NOTE
|
||||
# in each dialog's module docstring) - created lazily via
|
||||
# set_order() rather than a fresh instance per ticket.
|
||||
self._pack_ticket_dialog: PackTicketDialog | None = None
|
||||
self._return_label_dialog: ReturnLabelDialog | None = None
|
||||
|
||||
self._build_ui()
|
||||
self._refresh_everything()
|
||||
|
||||
@@ -105,10 +112,12 @@ class MainWindow(QMainWindow):
|
||||
export_action.triggered.connect(self._on_export_clicked)
|
||||
toolbar.addAction(export_action)
|
||||
|
||||
pack_action = QAction("Pack Ticket", self)
|
||||
pack_action.setToolTip("Enter serial numbers and mark packed - select a ticket first")
|
||||
pack_action.triggered.connect(self._on_pack_ticket_clicked)
|
||||
toolbar.addAction(pack_action)
|
||||
self._pack_ticket_action = QAction("Pack Ticket", self)
|
||||
self._pack_ticket_action.setToolTip(
|
||||
"Enter serial numbers and mark packed - select a ticket first"
|
||||
)
|
||||
self._pack_ticket_action.triggered.connect(self._on_pack_ticket_clicked)
|
||||
toolbar.addAction(self._pack_ticket_action)
|
||||
|
||||
toolbar.addSeparator()
|
||||
|
||||
@@ -117,12 +126,12 @@ class MainWindow(QMainWindow):
|
||||
emergency_action.triggered.connect(self._on_emergency_send_clicked)
|
||||
toolbar.addAction(emergency_action)
|
||||
|
||||
return_label_action = QAction("Create Return Label", self)
|
||||
return_label_action.setToolTip(
|
||||
self._return_label_action = QAction("Create Return Label", self)
|
||||
self._return_label_action.setToolTip(
|
||||
"For emailed-return-label tickets (SH007/OK012) - select one in Active Orders first"
|
||||
)
|
||||
return_label_action.triggered.connect(self._on_create_return_label_clicked)
|
||||
toolbar.addAction(return_label_action)
|
||||
self._return_label_action.triggered.connect(self._on_create_return_label_clicked)
|
||||
toolbar.addAction(self._return_label_action)
|
||||
|
||||
toolbar.addSeparator()
|
||||
|
||||
@@ -379,10 +388,28 @@ class MainWindow(QMainWindow):
|
||||
if proceed != QMessageBox.StandardButton.Yes:
|
||||
return
|
||||
|
||||
dialog = ReturnLabelDialog(order, self)
|
||||
if dialog.exec() != QDialog.DialogCode.Accepted:
|
||||
if self._return_label_dialog is None:
|
||||
self._return_label_dialog = ReturnLabelDialog(order, self)
|
||||
self._return_label_dialog.finished.connect(self._on_return_label_dialog_finished)
|
||||
else:
|
||||
self._return_label_dialog.set_order(order)
|
||||
|
||||
# Non-modal on purpose - see the module docstring in
|
||||
# return_label_dialog.py. Disable the action while it's open so a
|
||||
# second click can't call set_order() on it mid-edit and silently
|
||||
# overwrite whatever the user is in the middle of entering.
|
||||
self._return_label_action.setEnabled(False)
|
||||
self._return_label_dialog.show()
|
||||
self._return_label_dialog.raise_()
|
||||
self._return_label_dialog.activateWindow()
|
||||
|
||||
def _on_return_label_dialog_finished(self, result: int) -> None:
|
||||
self._return_label_action.setEnabled(True)
|
||||
if result != QDialog.DialogCode.Accepted:
|
||||
return
|
||||
|
||||
dialog = self._return_label_dialog
|
||||
order = dialog.order
|
||||
packages = dialog.get_packages()
|
||||
charge_event = dialog.get_charge_event()
|
||||
if not packages:
|
||||
@@ -427,10 +454,28 @@ class MainWindow(QMainWindow):
|
||||
)
|
||||
return
|
||||
|
||||
dialog = PackTicketDialog(order, self)
|
||||
if dialog.exec() != QDialog.DialogCode.Accepted:
|
||||
if self._pack_ticket_dialog is None:
|
||||
self._pack_ticket_dialog = PackTicketDialog(order, self)
|
||||
self._pack_ticket_dialog.finished.connect(self._on_pack_ticket_dialog_finished)
|
||||
else:
|
||||
self._pack_ticket_dialog.set_order(order)
|
||||
|
||||
# Non-modal on purpose - see the module docstring in
|
||||
# pack_ticket_dialog.py. Disable the action while it's open so a
|
||||
# second click can't call set_order() on it mid-edit and silently
|
||||
# overwrite whatever the user is in the middle of entering/scanning.
|
||||
self._pack_ticket_action.setEnabled(False)
|
||||
self._pack_ticket_dialog.show()
|
||||
self._pack_ticket_dialog.raise_()
|
||||
self._pack_ticket_dialog.activateWindow()
|
||||
|
||||
def _on_pack_ticket_dialog_finished(self, result: int) -> None:
|
||||
self._pack_ticket_action.setEnabled(True)
|
||||
if result != QDialog.DialogCode.Accepted:
|
||||
return
|
||||
|
||||
dialog = self._pack_ticket_dialog
|
||||
order = dialog.order
|
||||
ticket_number = order.ticket_number or order.external_id
|
||||
save_pack_data(ticket_number, dialog.get_serial_numbers(), dialog.get_packed())
|
||||
self._refresh_everything()
|
||||
|
||||
Reference in New Issue
Block a user