feat: вфыв
This commit is contained in:
@@ -4,7 +4,7 @@ import models.secondary
|
||||
from typing import Union
|
||||
import models.deal
|
||||
from fastapi import HTTPException
|
||||
from sqlalchemy import select, func, update
|
||||
from sqlalchemy import select, func, update, delete, insert
|
||||
from sqlalchemy.orm import joinedload, selectinload
|
||||
|
||||
from models import User, Service, Client
|
||||
@@ -103,7 +103,8 @@ class DealService(BaseService):
|
||||
client_id=client.id,
|
||||
current_status=DealStatus.CREATED,
|
||||
lexorank=rank,
|
||||
shipping_warehouse_id=shipping_warehouse.id
|
||||
shipping_warehouse_id=shipping_warehouse.id,
|
||||
base_marketplace_key=request.base_marketplace.key
|
||||
)
|
||||
self.session.add(deal)
|
||||
await self.session.flush()
|
||||
@@ -183,6 +184,9 @@ class DealService(BaseService):
|
||||
deal: Deal
|
||||
last_status: DealStatusHistory = max(deal.status_history, key=lambda status: status.changed_at)
|
||||
deadline = last_status.next_status_deadline
|
||||
base_marketplace = None
|
||||
if deal.base_marketplace:
|
||||
base_marketplace = BaseMarketplaceSchema.model_validate(deal.base_marketplace)
|
||||
summaries.append(
|
||||
DealSummary(
|
||||
id=deal.id,
|
||||
@@ -192,7 +196,8 @@ class DealService(BaseService):
|
||||
deadline=deadline,
|
||||
status=last_status.to_status,
|
||||
total_price=total_price,
|
||||
rank=rank
|
||||
rank=rank,
|
||||
base_marketplace=base_marketplace
|
||||
)
|
||||
)
|
||||
return DealSummaryResponse(summaries=summaries)
|
||||
@@ -214,8 +219,10 @@ class DealService(BaseService):
|
||||
joinedload(Deal.client)
|
||||
.joinedload(Client.details),
|
||||
selectinload(Deal.services)
|
||||
.joinedload(models.secondary.DealService.service)
|
||||
.joinedload(Service.category),
|
||||
.options(
|
||||
joinedload(models.secondary.DealService.service).joinedload(Service.category),
|
||||
selectinload(models.secondary.DealService.employees)
|
||||
),
|
||||
selectinload(Deal.products)
|
||||
.joinedload(models.secondary.DealProduct.product)
|
||||
.joinedload(models.Product.client),
|
||||
@@ -224,7 +231,10 @@ class DealService(BaseService):
|
||||
.joinedload(models.Product.barcodes),
|
||||
selectinload(Deal.products)
|
||||
.joinedload(models.secondary.DealProduct.services)
|
||||
.joinedload(models.secondary.DealProductService.service),
|
||||
.options(
|
||||
joinedload(models.secondary.DealProductService.service),
|
||||
selectinload(models.secondary.DealProductService.employees)
|
||||
),
|
||||
selectinload(Deal.status_history)
|
||||
.joinedload(DealStatusHistory.user),
|
||||
selectinload(Deal.status_history)
|
||||
@@ -439,13 +449,43 @@ class DealService(BaseService):
|
||||
raise HTTPException(status_code=404, detail="Сделка не найдена")
|
||||
service_dict = request.service.dict()
|
||||
del service_dict['service']
|
||||
del service_dict['employees']
|
||||
|
||||
service_dict['service_id'] = request.service.service.id
|
||||
|
||||
await self.session.execute(
|
||||
update(models.secondary.DealService)
|
||||
.where(models.secondary.DealService.deal_id == request.deal_id,
|
||||
models.secondary.DealService.service_id == request.service.service.id)
|
||||
.values(**service_dict)
|
||||
)
|
||||
|
||||
# Updating deleting previous employees
|
||||
delete_stmt = (
|
||||
delete(
|
||||
models.deal_service_employees
|
||||
)
|
||||
.where(
|
||||
models.deal_service_employees.c.deal_id == request.deal_id,
|
||||
models.deal_service_employees.c.service_id == request.service.service.id,
|
||||
)
|
||||
)
|
||||
await self.session.execute(delete_stmt)
|
||||
await self.session.flush()
|
||||
insert_data = []
|
||||
for employee in request.service.employees:
|
||||
insert_data.append({
|
||||
'deal_id': request.deal_id,
|
||||
'service_id': request.service.service.id,
|
||||
'user_id': employee.id
|
||||
})
|
||||
if insert_data:
|
||||
await self.session.execute(
|
||||
insert(models.deal_service_employees),
|
||||
insert_data
|
||||
)
|
||||
await self.session.flush()
|
||||
|
||||
await self.session.commit()
|
||||
return DealUpdateServiceQuantityResponse(ok=True, message='Услуга успешно обновлена')
|
||||
except Exception as e:
|
||||
@@ -586,6 +626,35 @@ class DealService(BaseService):
|
||||
# Updating product
|
||||
deal_product.quantity = request.product.quantity
|
||||
|
||||
# Updating deleting old employees
|
||||
delete_stmt = (
|
||||
delete(
|
||||
models.deal_product_service_employees
|
||||
)
|
||||
.where(
|
||||
models.deal_product_service_employees.c.deal_id == request.deal_id,
|
||||
models.deal_product_service_employees.c.service_id.in_(request_services.union(database_services)),
|
||||
models.deal_product_service_employees.c.product_id == request.product.product.id
|
||||
)
|
||||
)
|
||||
await self.session.execute(delete_stmt)
|
||||
await self.session.flush()
|
||||
|
||||
insert_data = []
|
||||
for service in request.product.services:
|
||||
service: DealProductServiceSchema
|
||||
for employee in service.employees:
|
||||
insert_data.append({
|
||||
'deal_id': request.deal_id,
|
||||
'service_id': service.service.id,
|
||||
'product_id': request.product.product.id,
|
||||
'user_id': employee.id
|
||||
})
|
||||
if insert_data:
|
||||
await self.session.execute(insert(models.deal_product_service_employees),
|
||||
insert_data)
|
||||
await self.session.flush()
|
||||
|
||||
await self.session.commit()
|
||||
return DealUpdateProductResponse(ok=True, message='Товар успешно обновлен')
|
||||
|
||||
|
||||
Reference in New Issue
Block a user