feat: deal product services

This commit is contained in:
2024-05-19 04:08:10 +03:00
parent 30886d223c
commit e2de43064a
6 changed files with 233 additions and 30 deletions

View File

@@ -1,14 +1,46 @@
import asyncio
from sqlalchemy import select, func, union
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.orm import joinedload
from backend.session import session_maker
from migrations.env import run_async_migrations
from models import Product, ProductBarcode
from models import Deal, DealProduct, Service
import models
import models.secondary
async def main(session: AsyncSession):
await run_async_migrations()
deal_services_subquery = (
select(
models.secondary.DealService.deal_id,
func.sum(models.secondary.DealService.quantity * Service.price).label('total_price')
)
.join(Service)
.group_by(models.secondary.DealService.deal_id)
)
product_services_subquery = select(
select(
models.secondary.DealProductService.deal_id,
func.sum(models.DealProduct.quantity * models.secondary.DealProductService.price).label('total_price')
)
.join(models.secondary.DealProduct)
.group_by(models.secondary.DealProductService.deal_id)
.subquery()
)
union_subqueries = deal_services_subquery.union(product_services_subquery).subquery()
final_subquery = (
select(
union_subqueries.c.deal_id,
func.sum(union_subqueries.c.total_price).label('total_sum')
)
.group_by(union_subqueries.c.deal_id)
.subquery()
)
print(final_subquery)
async def preload():
async with session_maker() as session: