Files
Fulfillment-Backend/models/client.py
2025-07-18 19:28:08 +04:00

68 lines
2.7 KiB
Python

from datetime import datetime
from typing import Optional, TYPE_CHECKING
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship, Mapped, mapped_column
from models import BaseModel
if TYPE_CHECKING:
from models import ResidualPallet, ResidualBox, Product, BarcodeTemplate, User, TgGroup, Chat
class Client(BaseModel):
__tablename__ = 'clients'
id: Mapped[int] = mapped_column(primary_key=True)
name: Mapped[str] = mapped_column(nullable=False, unique=True, comment='Название клиента')
company_name: Mapped[str] = mapped_column(
nullable=False,
server_default='',
comment='Название компании',
)
created_at: Mapped[datetime] = mapped_column(nullable=False, comment='Дата создания')
is_deleted: Mapped[bool] = mapped_column(
nullable=False,
default=False,
server_default='0',
)
products: Mapped[list['Product']] = relationship('Product', back_populates='client')
details: Mapped['ClientDetails'] = relationship(
uselist=False,
back_populates='client',
cascade='all, delete',
lazy='joined',
)
barcode_template_id: Mapped[int] = mapped_column(ForeignKey('barcode_templates.id'), nullable=True)
barcode_template: Mapped['BarcodeTemplate'] = relationship('BarcodeTemplate', lazy='selectin')
comment: Mapped[Optional[str]] = mapped_column(nullable=True, server_default=None, comment='Комментарий')
pallets: Mapped[list['ResidualPallet']] = relationship(back_populates='client', lazy='selectin')
boxes: Mapped[list['ResidualBox']] = relationship(back_populates='client', lazy='selectin')
tg_group: Mapped[Optional['TgGroup']] = relationship('TgGroup', back_populates='client', lazy='joined')
chat: Mapped[Optional['Chat']] = relationship('Chat', back_populates='client', lazy='joined')
class ClientDetails(BaseModel):
__tablename__ = 'client_details'
id: Mapped[int] = mapped_column(primary_key=True)
client_id: Mapped[int] = mapped_column(ForeignKey('clients.id'), unique=True, nullable=False, comment='ID клиента')
client: Mapped[Client] = relationship('Client', back_populates='details', cascade='all, delete', uselist=False)
telegram: Mapped[Optional[str]] = mapped_column()
phone_number: Mapped[Optional[str]] = mapped_column()
inn: Mapped[Optional[str]] = mapped_column()
email: Mapped[Optional[str]] = mapped_column()
last_modified_at: Mapped[datetime] = mapped_column(nullable=False)
modified_by_user_id: Mapped[int] = mapped_column(ForeignKey('users.id'), nullable=False)
modified_by_user: Mapped['User'] = relationship('User')