28 lines
1.0 KiB
Python
28 lines
1.0 KiB
Python
from datetime import date
|
|
from decimal import Decimal
|
|
|
|
from sqlalchemy import Date, ForeignKey, Numeric
|
|
from sqlalchemy.orm import Mapped, mapped_column, relationship
|
|
|
|
from src.models.common import BaseModelDb
|
|
|
|
|
|
class CategoryBudgetDb(BaseModelDb):
|
|
"""Budget amount for a category, optionally bounded to a time window.
|
|
|
|
Satellite table to ``category``: one category may have several budgets
|
|
(e.g. one per month). ``valid_from``/``valid_to`` are nullable; ``None``
|
|
means unbounded on that side.
|
|
"""
|
|
|
|
__tablename__ = "category_budget"
|
|
|
|
id: Mapped[int] = mapped_column(primary_key=True, autoincrement=True)
|
|
category_id: Mapped[int] = mapped_column(ForeignKey("category.id"), nullable=False)
|
|
amount_eur: Mapped[Decimal] = mapped_column(Numeric(12, 2), nullable=False)
|
|
valid_from: Mapped[date | None] = mapped_column(Date, nullable=True, default=None)
|
|
valid_to: Mapped[date | None] = mapped_column(Date, nullable=True, default=None)
|
|
|
|
# relationship
|
|
category = relationship("CategoryDb", back_populates="budgets")
|