brewman/brewman/brewman/models/rate_contract_item.py

50 lines
1.6 KiB
Python

import uuid
from decimal import Decimal
from typing import TYPE_CHECKING, Optional
from sqlalchemy import Column, ForeignKey, Numeric, UniqueConstraint
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, relationship
from .meta import Base
if TYPE_CHECKING:
# if the target of the relationship is in another module
# that cannot normally be imported at runtime
from .rate_contract import RateContract
from .stock_keeping_unit import StockKeepingUnit
class RateContractItem(Base):
__tablename__ = "rate_contract_items"
__table_args__ = (UniqueConstraint("rate_contract_id", "sku_id"),)
id: uuid.UUID = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
rate_contract_id: uuid.UUID = Column(
"rate_contract_id",
UUID(as_uuid=True),
ForeignKey("rate_contracts.id"),
nullable=False,
index=True,
)
sku_id: uuid.UUID = Column("sku_id", UUID(as_uuid=True), ForeignKey("stock_keeping_units.id"), nullable=False)
price: Decimal = Column("cost_price", Numeric(precision=15, scale=2), nullable=False)
rate_contract: Mapped["RateContract"] = relationship("RateContract", back_populates="items")
sku: Mapped["StockKeepingUnit"] = relationship("StockKeepingUnit")
def __init__(
self,
rate_contract_id: uuid.UUID,
sku_id: uuid.UUID,
price: Decimal,
id_: Optional[uuid.UUID] = None,
) -> None:
self.rate_contract_id = rate_contract_id
self.sku_id = sku_id
self.price = price
if id_ is not None:
self.id = id_