62 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from typing import TYPE_CHECKING
 | 
						|
 | 
						|
from sqlalchemy import ForeignKey, Column, Integer, DateTime, String
 | 
						|
from sqlalchemy.orm import Mapped, mapped_column, relationship
 | 
						|
 | 
						|
from models import BaseModel
 | 
						|
 | 
						|
if TYPE_CHECKING:
 | 
						|
    from models import Board
 | 
						|
 | 
						|
 | 
						|
class DealStatus(BaseModel):
 | 
						|
    __tablename__ = "deal_statuses"
 | 
						|
 | 
						|
    id: Mapped[int] = mapped_column(primary_key=True)
 | 
						|
    name: Mapped[str] = mapped_column(nullable=False)
 | 
						|
    ordinal_number: Mapped[int] = mapped_column(nullable=False)
 | 
						|
    is_finishing: Mapped[bool] = mapped_column(default=False, nullable=False)
 | 
						|
    is_deleted: Mapped[bool] = mapped_column(default=False, nullable=False)
 | 
						|
 | 
						|
    board_id: Mapped[int] = mapped_column(ForeignKey('boards.id'), nullable=False)
 | 
						|
    board: Mapped["Board"] = relationship("Board", back_populates="deal_statuses")
 | 
						|
 | 
						|
 | 
						|
class DealStatusHistory(BaseModel):
 | 
						|
    __tablename__ = 'deals_status_history'
 | 
						|
    id = Column(Integer, autoincrement=True, primary_key=True, index=True)
 | 
						|
 | 
						|
    deal_id = Column(Integer, ForeignKey('deals.id'), nullable=False, comment='ID сделки')
 | 
						|
    deal = relationship('Deal', back_populates='status_history')
 | 
						|
 | 
						|
    user_id = Column(Integer, ForeignKey('users.id'), nullable=False)
 | 
						|
    user = relationship('User')
 | 
						|
 | 
						|
    changed_at = Column(DateTime, nullable=False, comment='Дата и время когда произошла смена статуса')
 | 
						|
 | 
						|
    from_status_id: Mapped[int] = mapped_column(
 | 
						|
        ForeignKey('deal_statuses.id'),
 | 
						|
        nullable=False,
 | 
						|
        comment='Предыдущий статус',
 | 
						|
    )
 | 
						|
    from_status: Mapped[DealStatus] = relationship(
 | 
						|
        'DealStatus',
 | 
						|
        foreign_keys=[from_status_id],
 | 
						|
        lazy='joined',
 | 
						|
    )
 | 
						|
 | 
						|
    to_status_id: Mapped[int] = mapped_column(
 | 
						|
        ForeignKey('deal_statuses.id'),
 | 
						|
        nullable=False,
 | 
						|
        comment='Новый статус',
 | 
						|
    )
 | 
						|
    to_status: Mapped[DealStatus] = relationship(
 | 
						|
        'DealStatus',
 | 
						|
        foreign_keys=[to_status_id],
 | 
						|
        lazy='joined',
 | 
						|
    )
 | 
						|
 | 
						|
    next_status_deadline = Column(DateTime,
 | 
						|
                                  comment='Дедлайн до которого сделку нужно перевести на следующий этап')
 | 
						|
    comment = Column(String, nullable=False, comment='Коментарий', server_default='')
 |