90 lines
2.9 KiB
Python
90 lines
2.9 KiB
Python
|
from sqlalchemy import Column, Integer, String, Date, ForeignKey, func, Null
|
|||
|
from sqlalchemy.dialects.postgresql import ENUM
|
|||
|
from sqlalchemy.orm import relationship, DeclarativeBase
|
|||
|
|
|||
|
status_enum = ENUM('Выполнено', 'В процессе', 'Создано', 'Ожидание комплектующих', name='status')
|
|||
|
|
|||
|
|
|||
|
class Base(DeclarativeBase):
|
|||
|
pass
|
|||
|
|
|||
|
|
|||
|
class Worker(Base):
|
|||
|
"""
|
|||
|
id SERIAL PRIMARY KEY,
|
|||
|
telegram_id INTEGER UNIQUE NOT NULL,
|
|||
|
name VARCHAR NOT NULL,
|
|||
|
email VARCHAR(50),
|
|||
|
phone_number VARCHAR(20) NOT NULL,
|
|||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
updated_at TIMESTAMP
|
|||
|
"""
|
|||
|
__tablename__ = "workers"
|
|||
|
|
|||
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|||
|
telegram_id = Column(Integer, unique=True, nullable=False)
|
|||
|
name = Column(String, nullable=False)
|
|||
|
email = Column(String, nullable=True)
|
|||
|
phone_number = Column(String, nullable=False)
|
|||
|
created_at = Column(Date, server_default=func.now())
|
|||
|
updated_at = Column(Date, onupdate=func.now())
|
|||
|
|
|||
|
|
|||
|
class Order(Base):
|
|||
|
"""
|
|||
|
id SERIAL PRIMARY KEY,
|
|||
|
name VARCHAR,
|
|||
|
worker_id INTEGER REFERENCES workers (id),
|
|||
|
status_id status DEFAULT 'Создано',
|
|||
|
counterparty VARCHAR(50),
|
|||
|
customer VARCHAR NOT NULL,
|
|||
|
commencement_work DATE,
|
|||
|
end_work DATE,
|
|||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
|||
|
description VARCHAR DEFAULT NULL
|
|||
|
"""
|
|||
|
__tablename__ = "orders"
|
|||
|
|
|||
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|||
|
name = Column(String)
|
|||
|
worker_id = Column(Integer, ForeignKey('workers.telegram_id'), nullable=False)
|
|||
|
status_id = Column(status_enum)
|
|||
|
counterparty = Column(String)
|
|||
|
customer = Column(String, nullable=False)
|
|||
|
commencement_work = Column(Date, nullable=True)
|
|||
|
end_work = Column(Date, nullable=True)
|
|||
|
created_at = Column(Date, server_default=func.now())
|
|||
|
description = Column(String, default=Null)
|
|||
|
user = relationship("Worker", backref="orders")
|
|||
|
|
|||
|
|
|||
|
class Component(Base):
|
|||
|
"""
|
|||
|
id SERIAL PRIMARY KEY,
|
|||
|
name VARCHAR NOT NULL,
|
|||
|
description VARCHAR NULL
|
|||
|
"""
|
|||
|
__tablename__ = "components"
|
|||
|
|
|||
|
id = Column(Integer, primary_key=True)
|
|||
|
name = Column(String, nullable=False)
|
|||
|
description = Column(String, default=Null)
|
|||
|
|
|||
|
|
|||
|
class OrderComponent(Base):
|
|||
|
"""
|
|||
|
id SERIAL PRIMARY KEY,
|
|||
|
order_id INTEGER REFERENCES orders (id),
|
|||
|
component_id INTEGER REFERENCES components (id),
|
|||
|
quantity INTEGER DEFAULT 1
|
|||
|
"""
|
|||
|
__tablename__ = "order_components"
|
|||
|
|
|||
|
id = Column(Integer, primary_key=True)
|
|||
|
order_id = Column(Integer, ForeignKey('orders.id'))
|
|||
|
component_id = Column(Integer, ForeignKey('components.id'))
|
|||
|
quantity = Column(Integer, default=1)
|
|||
|
|
|||
|
order = relationship("Order", backref="order_components")
|
|||
|
component = relationship("Component", backref="order_components")
|