sport_inventary/app/models.py

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}>'