83 lines
3.5 KiB
Python
83 lines
3.5 KiB
Python
from . import db
|
|
from datetime import datetime
|
|
|
|
class Categories(db.Model):
|
|
__tablename__ = 'Categories'
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
name = db.Column(db.String(100), nullable=False)
|
|
description = db.Column(db.Text)
|
|
inventory_items = db.relationship('Inventory', backref='category', lazy=True)
|
|
|
|
def __repr__(self):
|
|
return f'<Category {self.name}>'
|
|
|
|
class Inventory(db.Model):
|
|
__tablename__ = 'Inventory'
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
category_id = db.Column(db.Integer, db.ForeignKey('Categories.id'), nullable=False)
|
|
name = db.Column(db.String(200), nullable=False)
|
|
base_price = db.Column(db.Numeric(10,2), nullable=False)
|
|
season_type = db.Column(db.String(10), nullable=False) # 'winter' или 'summer'
|
|
|
|
def __repr__(self):
|
|
return f'<Inventory {self.name}>'
|
|
|
|
class Partners(db.Model):
|
|
__tablename__ = 'Partners'
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
name = db.Column(db.String(200), nullable=False)
|
|
phone = db.Column(db.String(20))
|
|
email = db.Column(db.String(100))
|
|
address = db.Column(db.Text)
|
|
issue_orders = db.relationship('IssueOrders', backref='partner', lazy=True)
|
|
|
|
def __repr__(self):
|
|
return f'<Partner {self.name}>'
|
|
|
|
class IssueOrders(db.Model):
|
|
__tablename__ = 'IssueOrders'
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
partner_id = db.Column(db.Integer, db.ForeignKey('Partners.id'), nullable=False)
|
|
issue_date = db.Column(db.DateTime, default=datetime.now)
|
|
notes = db.Column(db.Text)
|
|
items = db.relationship('IssueOrderItems', backref='issue_order', lazy=True, cascade='all, delete-orphan')
|
|
return_order = db.relationship('ReturnOrders', backref='issue_order', uselist=False, cascade='all, delete-orphan')
|
|
|
|
def __repr__(self):
|
|
return f'<IssueOrder {self.id} for {self.partner.name}>'
|
|
|
|
class IssueOrderItems(db.Model):
|
|
__tablename__ = 'IssueOrderItems'
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
issue_order_id = db.Column(db.Integer, db.ForeignKey('IssueOrders.id'), nullable=False)
|
|
inventory_id = db.Column(db.Integer, db.ForeignKey('Inventory.id'), nullable=False)
|
|
quantity = db.Column(db.Integer, nullable=False, default=1)
|
|
inventory = db.relationship('Inventory')
|
|
|
|
def __repr__(self):
|
|
return f'<IssueOrderItem {self.id} qty={self.quantity}>'
|
|
|
|
class ReturnOrders(db.Model):
|
|
__tablename__ = 'ReturnOrders'
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
issue_order_id = db.Column(db.Integer, db.ForeignKey('IssueOrders.id'), nullable=False, unique=True)
|
|
return_date = db.Column(db.DateTime, default=datetime.now)
|
|
total_amount = db.Column(db.Numeric(10,2))
|
|
notes = db.Column(db.Text)
|
|
items = db.relationship('ReturnOrderItems', backref='return_order', lazy=True, cascade='all, delete-orphan')
|
|
|
|
def __repr__(self):
|
|
return f'<ReturnOrder {self.id} amount={self.total_amount}>'
|
|
|
|
class ReturnOrderItems(db.Model):
|
|
__tablename__ = 'ReturnOrderItems'
|
|
id = db.Column(db.Integer, primary_key=True)
|
|
return_order_id = db.Column(db.Integer, db.ForeignKey('ReturnOrders.id'), nullable=False)
|
|
inventory_id = db.Column(db.Integer, db.ForeignKey('Inventory.id'), nullable=False)
|
|
quantity = db.Column(db.Integer, nullable=False)
|
|
wear_level = db.Column(db.String(10), nullable=False) # 'low', 'medium', 'high'
|
|
calculated_price = db.Column(db.Numeric(10,2))
|
|
inventory = db.relationship('Inventory')
|
|
|
|
def __repr__(self):
|
|
return f'<ReturnOrderItem {self.id} wear={self.wear_level}>' |