@@ -0,0 +1,39 @@
|
||||
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
|
||||
|
||||
Reference in New Issue
Block a user