63 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			63 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
import datetime
 | 
						|
from typing import TYPE_CHECKING, Optional
 | 
						|
 | 
						|
from sqlalchemy import ForeignKey
 | 
						|
from sqlalchemy.orm import Mapped, mapped_column, relationship
 | 
						|
 | 
						|
from models import BaseModel
 | 
						|
 | 
						|
if TYPE_CHECKING:
 | 
						|
    from models import Product, Client
 | 
						|
 | 
						|
 | 
						|
class ResidualPallet(BaseModel):
 | 
						|
    __tablename__ = 'residual_pallets'
 | 
						|
    id: Mapped[int] = mapped_column(primary_key=True)
 | 
						|
    created_at: Mapped[datetime.datetime] = mapped_column(nullable=False)
 | 
						|
 | 
						|
    client_id: Mapped[Optional[int]] = mapped_column(ForeignKey('clients.id'))
 | 
						|
    client: Mapped['Client'] = relationship(back_populates='pallets')
 | 
						|
 | 
						|
    boxes: Mapped[list['ResidualBox']] = relationship(
 | 
						|
        back_populates='pallet',
 | 
						|
        uselist=True,
 | 
						|
        lazy='joined',
 | 
						|
        cascade='all, delete-orphan',
 | 
						|
    )
 | 
						|
 | 
						|
    residual_products: Mapped[list['ResidualProduct']] = relationship(
 | 
						|
        back_populates='pallet',
 | 
						|
        uselist=True,
 | 
						|
        lazy='joined',
 | 
						|
        cascade='all, delete-orphan',
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
class ResidualProduct(BaseModel):
 | 
						|
    __tablename__ = 'residual_products'
 | 
						|
    id: Mapped[int] = mapped_column(primary_key=True)
 | 
						|
    quantity: Mapped[int] = mapped_column()
 | 
						|
 | 
						|
    product_id: Mapped[int] = mapped_column(ForeignKey('products.id'))
 | 
						|
    product: Mapped['Product'] = relationship(lazy='joined')
 | 
						|
 | 
						|
    pallet_id: Mapped[Optional[int]] = mapped_column(ForeignKey('residual_pallets.id'))
 | 
						|
    pallet: Mapped[ResidualPallet] = relationship(lazy='joined', back_populates="residual_products")
 | 
						|
 | 
						|
    box_id: Mapped[Optional[int]] = mapped_column(ForeignKey('residual_boxes.id'))
 | 
						|
    box: Mapped['ResidualBox'] = relationship(back_populates='residual_products')
 | 
						|
 | 
						|
 | 
						|
class ResidualBox(BaseModel):
 | 
						|
    __tablename__ = 'residual_boxes'
 | 
						|
    id: Mapped[int] = mapped_column(primary_key=True)
 | 
						|
    created_at: Mapped[datetime.datetime] = mapped_column(nullable=False)
 | 
						|
 | 
						|
    pallet_id: Mapped[Optional[int]] = mapped_column(ForeignKey('residual_pallets.id'))
 | 
						|
    pallet: Mapped[ResidualPallet] = relationship(back_populates='boxes')
 | 
						|
 | 
						|
    client_id: Mapped[Optional[int]] = mapped_column(ForeignKey('clients.id'))
 | 
						|
    client: Mapped['Client'] = relationship(back_populates='boxes')
 | 
						|
 | 
						|
    residual_products: Mapped[list['ResidualProduct']] = relationship(back_populates='box')
 |