sport_inventary/app/db.py

76 lines
3.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from . import db
from .models import Categories, Inventory, Partners, IssueOrders, IssueOrderItems, ReturnOrders, ReturnOrderItems
from datetime import datetime, timedelta
from .utils import calculate_item_price
def init_test_data():
if Categories.query.first() is not None:
return
# Категории
cat1 = Categories(name='Мячи', description='Футбольные, баскетбольные, волейбольные мячи')
cat2 = Categories(name='Лыжи', description='Горные и беговые лыжи')
cat3 = Categories(name='Ракетки', description='Теннисные и бадминтонные ракетки')
db.session.add_all([cat1, cat2, cat3])
db.session.commit()
# Инвентарь (все названия строго по ТЗ)
inv1 = Inventory(category_id=cat1.id, name='Футбольный мяч', base_price=1500.00, season_type='summer')
inv2 = Inventory(category_id=cat1.id, name='Баскетбольный мяч', base_price=2000.00, season_type='summer')
inv3 = Inventory(category_id=cat2.id, name='Горные лыжи', base_price=5000.00, season_type='winter')
inv4 = Inventory(category_id=cat2.id, name='Беговые лыжи', base_price=3500.00, season_type='winter')
inv5 = Inventory(category_id=cat3.id, name='Теннисная ракетка', base_price=3000.00, season_type='summer')
db.session.add_all([inv1, inv2, inv3, inv4, inv5])
db.session.commit()
# Партнеры
p1 = Partners(name='Иванов Иван', phone='+7(999)123-45-67', email='ivan@mail.ru', address='ул. Ленина, 1')
p2 = Partners(name='ООО "СпортМастер"', phone='+7(495)111-22-33', email='info@sportmaster.ru', address='Москва, Тверская, 10')
p3 = Partners(name='Петров Петр', phone='+7(911)444-55-66', email='petr@yandex.ru', address='СПб, Невский, 20')
db.session.add_all([p1, p2, p3])
db.session.commit()
# Выдача 1 (открыта)
issue1 = IssueOrders(partner_id=p1.id, issue_date=datetime.now() - timedelta(days=5), notes='Первая выдача')
db.session.add(issue1)
db.session.commit()
item1 = IssueOrderItems(issue_order_id=issue1.id, inventory_id=inv1.id, quantity=3)
item2 = IssueOrderItems(issue_order_id=issue1.id, inventory_id=inv3.id, quantity=2)
db.session.add_all([item1, item2])
db.session.commit()
# Выдача 2 (уже закрыта возвратом)
issue2 = IssueOrders(partner_id=p2.id, issue_date=datetime.now() - timedelta(days=10), notes='Вторая выдача')
db.session.add(issue2)
db.session.commit()
item3 = IssueOrderItems(issue_order_id=issue2.id, inventory_id=inv2.id, quantity=5)
item4 = IssueOrderItems(issue_order_id=issue2.id, inventory_id=inv4.id, quantity=1)
db.session.add_all([item3, item4])
db.session.commit()
# Возврат для второй выдачи
return2 = ReturnOrders(issue_order_id=issue2.id, return_date=datetime.now() - timedelta(days=1), notes='Возврат')
db.session.add(return2)
db.session.commit()
total = 0
for issue_item in [item3, item4]:
price = calculate_item_price(
base_price=issue_item.inventory.base_price,
quantity=issue_item.quantity,
wear_level='medium',
season_type=issue_item.inventory.season_type,
return_date=return2.return_date
)
ret_item = ReturnOrderItems(
return_order_id=return2.id,
inventory_id=issue_item.inventory_id,
quantity=issue_item.quantity,
wear_level='medium',
calculated_price=price
)
db.session.add(ret_item)
total += price
return2.total_amount = round(total, 2)
db.session.commit()