This commit is contained in:
@@ -39,6 +39,7 @@ from app.schemas.service_center import (
|
||||
WorkOrderStatusHistoryRead,
|
||||
WorkOrderUpdate,
|
||||
)
|
||||
from app.services.admin_notifications import create_admin_notification
|
||||
from app.services.sto_booking import create_service_notification
|
||||
from app.services.work_orders import (
|
||||
add_labor_item,
|
||||
@@ -461,6 +462,17 @@ async def reject_work_order(
|
||||
visit.owner_comment = payload.comment
|
||||
visit.owner_resolved_at = datetime.now(UTC)
|
||||
await add_status_history(session, visit, to_status="rejected_by_owner", actor=current_user, comment=payload.comment)
|
||||
await create_admin_notification(
|
||||
session,
|
||||
event_type="work_order_rejected_by_owner",
|
||||
title="Владелец отклонил смету",
|
||||
body=payload.comment,
|
||||
entity_type="work_order",
|
||||
entity_id=visit.id,
|
||||
severity="warning",
|
||||
idempotency_key=f"work_order_rejected_by_owner:{visit.id}",
|
||||
metadata={"service_center_id": visit.service_center_id, "vehicle_id": visit.vehicle_id, "owner_id": current_user.id},
|
||||
)
|
||||
await log_audit(session, actor=current_user, action="work_order.reject", target_type="service_visit", target_id=visit.id)
|
||||
await session.commit()
|
||||
await session.refresh(visit)
|
||||
@@ -502,6 +514,21 @@ async def complete_work_order(
|
||||
actor=current_user,
|
||||
confirm_lower_odometer=payload.confirm_lower_odometer,
|
||||
)
|
||||
await create_admin_notification(
|
||||
session,
|
||||
event_type="work_order_completed",
|
||||
title="Заказ-наряд завершён",
|
||||
body=f"{visit.work_order_number or visit.id}: {visit.final_total} {visit.currency}",
|
||||
entity_type="work_order",
|
||||
entity_id=visit.id,
|
||||
idempotency_key=f"work_order_completed:{visit.id}",
|
||||
metadata={
|
||||
"service_center_id": visit.service_center_id,
|
||||
"vehicle_id": visit.vehicle_id,
|
||||
"owner_id": visit.owner_id,
|
||||
"final_total": str(visit.final_total),
|
||||
},
|
||||
)
|
||||
await log_audit(session, actor=current_user, action="work_order.complete", target_type="service_visit", target_id=visit.id)
|
||||
await session.commit()
|
||||
await session.refresh(visit)
|
||||
@@ -599,6 +626,21 @@ async def create_work_order_correction(
|
||||
web_app_url=work_order_webapp_url(visit.id),
|
||||
button_text="Открыть заказ-наряд",
|
||||
)
|
||||
await create_admin_notification(
|
||||
session,
|
||||
event_type="work_order_correction_requested",
|
||||
title="Запрошена коррекция заказ-наряда",
|
||||
body=payload.reason,
|
||||
entity_type="work_order",
|
||||
entity_id=visit.id,
|
||||
severity="warning",
|
||||
idempotency_key=f"work_order_correction_requested:{visit.id}:{visit.version or 1}:{payload.reason[:80]}",
|
||||
metadata={
|
||||
"service_center_id": visit.service_center_id,
|
||||
"vehicle_id": visit.vehicle_id,
|
||||
"owner_approval_required": payload.owner_approval_required,
|
||||
},
|
||||
)
|
||||
await log_audit(
|
||||
session,
|
||||
actor=current_user,
|
||||
@@ -626,6 +668,16 @@ async def approve_work_order_correction(
|
||||
raise HTTPException(status_code=409, detail="Correction is already resolved")
|
||||
correction.status = "approved"
|
||||
correction.resolved_at = datetime.now(UTC)
|
||||
await create_admin_notification(
|
||||
session,
|
||||
event_type="work_order_correction_resolved",
|
||||
title="Коррекция заказ-наряда согласована",
|
||||
body=payload.comment,
|
||||
entity_type="work_order",
|
||||
entity_id=visit.id,
|
||||
idempotency_key=f"work_order_correction_approved:{correction.id}",
|
||||
metadata={"correction_id": correction.id, "status": "approved"},
|
||||
)
|
||||
await log_audit(
|
||||
session,
|
||||
actor=current_user,
|
||||
@@ -653,6 +705,17 @@ async def reject_work_order_correction(
|
||||
raise HTTPException(status_code=409, detail="Correction is already resolved")
|
||||
correction.status = "rejected"
|
||||
correction.resolved_at = datetime.now(UTC)
|
||||
await create_admin_notification(
|
||||
session,
|
||||
event_type="work_order_correction_resolved",
|
||||
title="Коррекция заказ-наряда отклонена",
|
||||
body=payload.comment,
|
||||
entity_type="work_order",
|
||||
entity_id=visit.id,
|
||||
severity="warning",
|
||||
idempotency_key=f"work_order_correction_rejected:{correction.id}",
|
||||
metadata={"correction_id": correction.id, "status": "rejected"},
|
||||
)
|
||||
await log_audit(
|
||||
session,
|
||||
actor=current_user,
|
||||
|
||||
Reference in New Issue
Block a user