diff --git a/inventory/models/work_log.py b/inventory/models/work_log.py new file mode 100644 index 0000000..d33d4cd --- /dev/null +++ b/inventory/models/work_log.py @@ -0,0 +1,25 @@ +from typing import List, Optional + +from sqlalchemy import Boolean, DateTime, ForeignKey, Integer, Unicode +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from crudkit.core.base import Base, CRUDMixin + +class WorkLog(Base, CRUDMixin): + __tablename__ = "work_log" + + start_time: Mapped[Optional[DateTime]] = mapped_column(DateTime) + end_time: Mapped[Optional[DateTime]] = mapped_column(DateTime) + + complete: Mapped[Optional[bool]] = mapped_column(Boolean, nullable=False, default=False) + + contact: Mapped[Optional['User']] = relationship('User', back_populates='work_logs') + contact_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey("user.id"), nullable=True, index=True) + + updates: Mapped[List['WorkNote']] = relationship('WorkNote', back_populates='work_log', cascade='all, delete-orphan') + + work_item: Mapped[Optional['Inventory']] = relationship('Inventory', back_populates='work_logs') + work_item_id: Mapped[Optional[int]] = mapped_column(Integer, ForeignKey('inventory.id'), nullable=True, index=True) + + def __repr__(self): + return f"" diff --git a/inventory/models/work_note.py b/inventory/models/work_note.py new file mode 100644 index 0000000..17609d9 --- /dev/null +++ b/inventory/models/work_note.py @@ -0,0 +1,16 @@ +from sqlalchemy import DateTime, UnicodeText, func +from sqlalchemy.orm import Mapped, mapped_column, relationship + +from crudkit.core.base import Base, CRUDMixin + +class WorkNote(Base, CRUDMixin): + __tablename__ = "work_note" + + content: Mapped[str] = mapped_column(UnicodeText, nullable=False) + timestamp: Mapped[DateTime] = mapped_column(DateTime, default=func.now(), server_default=func.now()) + + work_log: Mapped['WorkLog'] = relationship('WorkLog', back_populates='updates') + + def __repr__(self) -> str: + preview = self.content[:30].replace("\n", " ") + "..." if len(self.content) > 30 else self.content + return f""