dodil/erp-brick-sales-order

DODIL ERP brick: sales order

src/brick_sales_order/domain/events.py

"""Domain events: facts the aggregate records when a rule lets something happen. The use case may publish them."""
from dataclasses import dataclass
from decimal import Decimal


@dataclass(frozen=True)
class Event:
    sales_order_id: str


@dataclass(frozen=True)
class OrderDrafted(Event):
    source_kind: str = ""
    source_id: str = ""


@dataclass(frozen=True)
class OrderConfirmed(Event):
    order_no: str = ""


@dataclass(frozen=True)
class DeliveryRecorded(Event):
    line_no: int = 0
    quantity: Decimal = Decimal(0)
    delivery_ref: str = ""


@dataclass(frozen=True)
class InvoiceRequested(Event):
    request_no: int = 0
    kind: str = ""


@dataclass(frozen=True)
class OrderAmended(Event):
    revision: int = 0


@dataclass(frozen=True)
class OrderCancelled(Event):
    reason: str = ""


@dataclass(frozen=True)
class OrderDone(Event):
    pass


@dataclass(frozen=True)
class SuggestionDecided(Event):
    step: str = ""
    suggestion_no: int = 0
    decision: str = ""