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()