Set CRM order status to PACKED after Checkbox accepts the receipt
- ExoCrmClient.set_status: live SetStatus needs {Orders: [id], Status} and
replies per order, unlike the documented {ID, Status}
- receipts.crm_status_set_at (migration 0006); set right after creation,
retried by cron, row-locked to avoid a repeat PACKED overwriting a newer status
- CRM errors under capitalized 'Errors' and non-JSON replies are reported
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -36,6 +36,7 @@ class AuditAction(str):
|
||||
CASH_REGISTER_UPDATED = "cash_register.updated"
|
||||
RECEIPT_CREATE_REQUESTED = "receipt.create_requested"
|
||||
RECEIPT_CANCELLED = "receipt.cancelled"
|
||||
ORDER_CRM_STATUS_SET = "order.crm_status_set"
|
||||
|
||||
|
||||
class AuditLog(UUIDPrimaryKeyMixin, Base):
|
||||
|
||||
@@ -70,6 +70,9 @@ class Receipt(UUIDPrimaryKeyMixin, TimestampMixin, Base):
|
||||
# Снимок отправленного в Checkbox тела — для разбора спорных случаев.
|
||||
request_body: Mapped[dict[str, Any]] = mapped_column(JSONB, nullable=False, default=dict)
|
||||
last_checked_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True))
|
||||
# Когда заказу в CRM выставлен статус после создания чека (PACKED). NULL при
|
||||
# живом чеке — ещё не выставлен (CRM была недоступна), cron повторит.
|
||||
crm_status_set_at: Mapped[datetime | None] = mapped_column(DateTime(timezone=True))
|
||||
|
||||
__table_args__ = (
|
||||
# Не больше одного «живого» чека на заказ — защита от двойного нажатия
|
||||
|
||||
Reference in New Issue
Block a user