from datetime import datetime from typing import Any from sqlalchemy import Boolean, Column, DateTime, Float, Integer, String from app import db from .base import default_uuid class ComponentStock(db.Model): """Остатки компонентов на сервере (не синхронизируется). Без TimestampMixin: в БД (Alembic 0001) нет колонки created_at, только updated_at/stocktake_at. """ __tablename__ = "component_stock" id = Column(String(36), primary_key=True, default=default_uuid) component_id = Column(String(36), nullable=False, unique=True, index=True) component_name = Column(String(100), nullable=False, default="") total_kg = Column(Float, nullable=False, default=0.0) inflow_kg = Column(Float, nullable=False, default=0.0) baseline_consumed_kg = Column(Float, nullable=False, default=0.0) stocktake_at = Column(DateTime, nullable=False) updated_at = Column(DateTime, nullable=False) updated_by = Column(String(50), nullable=False, default="system") sort_order = Column(Integer, nullable=False, default=0) is_deleted = Column(Boolean, default=False, nullable=True) deleted_at = Column(DateTime, nullable=True) deleted_by = Column(String(50), nullable=True) def soft_delete(self, deleted_by_user: str = "system", **_: Any) -> None: """Мягкое удаление строки склада (ожидается из sklad.init_sklad).""" if self.is_deleted: return self.is_deleted = True self.deleted_at = datetime.now() self.deleted_by = deleted_by_user