63 lines
2.5 KiB
Python
63 lines
2.5 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='Дата создания')
|
|
|
|
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')
|