76 lines
3.8 KiB
Python
76 lines
3.8 KiB
Python
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() |