This commit is contained in:
@@ -36,6 +36,7 @@ from app.schemas.sto_booking import (
|
||||
ServiceCenterHolidayRead,
|
||||
STODashboardRead,
|
||||
)
|
||||
from app.services.admin_notifications import create_admin_notification
|
||||
from app.services.rate_limit import check_rate_limit
|
||||
from app.services.sto_booking import (
|
||||
calculate_available_slots,
|
||||
@@ -238,6 +239,28 @@ async def create_appointment(
|
||||
body=f"{appointment.service_name}: {appointment.requested_start_at:%Y-%m-%d %H:%M}",
|
||||
appointment_id=appointment.id,
|
||||
)
|
||||
await create_admin_notification(
|
||||
session,
|
||||
event_type="appointment_created",
|
||||
title="Новая запись в СТО",
|
||||
body="\n".join(
|
||||
[
|
||||
f"СТО ID: {appointment.service_center_id}",
|
||||
f"User ID: {current_user.id}",
|
||||
f"Авто ID: {appointment.vehicle_id}",
|
||||
f"Услуга: {appointment.service_name}",
|
||||
f"Время: {appointment.requested_start_at:%Y-%m-%d %H:%M}",
|
||||
]
|
||||
),
|
||||
entity_type="appointment",
|
||||
entity_id=appointment.id,
|
||||
idempotency_key=f"appointment_created:{appointment.id}",
|
||||
metadata={
|
||||
"service_center_id": appointment.service_center_id,
|
||||
"vehicle_id": appointment.vehicle_id,
|
||||
"owner_id": appointment.owner_id,
|
||||
},
|
||||
)
|
||||
await log_audit(
|
||||
session,
|
||||
actor=current_user,
|
||||
@@ -554,6 +577,17 @@ async def reject_appointment(
|
||||
title="СТО отклонило запись",
|
||||
body=payload.comment,
|
||||
)
|
||||
await create_admin_notification(
|
||||
session,
|
||||
event_type="appointment_cancelled",
|
||||
title="СТО отклонило запись",
|
||||
body=payload.comment,
|
||||
entity_type="appointment",
|
||||
entity_id=appointment.id,
|
||||
severity="warning",
|
||||
idempotency_key=f"appointment_rejected_by_sto:{appointment.id}",
|
||||
metadata={"service_center_id": appointment.service_center_id, "owner_id": appointment.owner_id},
|
||||
)
|
||||
await log_audit(session, actor=current_user, action="appointment.reject", target_type="service_appointment", target_id=appointment_id)
|
||||
await session.commit()
|
||||
await session.refresh(appointment)
|
||||
@@ -579,6 +613,17 @@ async def delete_appointment_by_sto(
|
||||
body=f"{appointment.service_name}: {appointment.requested_start_at:%Y-%m-%d %H:%M}",
|
||||
idempotency_key=f"appointment:{appointment.id}:deleted_by_sto",
|
||||
)
|
||||
await create_admin_notification(
|
||||
session,
|
||||
event_type="appointment_cancelled",
|
||||
title="СТО удалило запись",
|
||||
body=f"{appointment.service_name}: {appointment.requested_start_at:%Y-%m-%d %H:%M}",
|
||||
entity_type="appointment",
|
||||
entity_id=appointment.id,
|
||||
severity="warning",
|
||||
idempotency_key=f"appointment_deleted_by_sto:{appointment.id}",
|
||||
metadata={"service_center_id": appointment.service_center_id, "owner_id": appointment.owner_id},
|
||||
)
|
||||
await log_audit(
|
||||
session,
|
||||
actor=current_user,
|
||||
@@ -677,6 +722,21 @@ async def create_work_order_from_appointment(
|
||||
body=visit.work_order_number,
|
||||
idempotency_key=f"work_order:{visit.id}:created",
|
||||
)
|
||||
await create_admin_notification(
|
||||
session,
|
||||
event_type="work_order_created",
|
||||
title="Создан заказ-наряд",
|
||||
body=f"{visit.work_order_number or visit.id}: СТО {visit.service_center_id}, авто {visit.vehicle_id}",
|
||||
entity_type="work_order",
|
||||
entity_id=visit.id,
|
||||
idempotency_key=f"work_order_created:{visit.id}",
|
||||
metadata={
|
||||
"appointment_id": appointment.id,
|
||||
"service_center_id": visit.service_center_id,
|
||||
"vehicle_id": visit.vehicle_id,
|
||||
"owner_id": visit.owner_id,
|
||||
},
|
||||
)
|
||||
await log_audit(session, actor=current_user, action="appointment.create_work_order", target_type="service_appointment", target_id=appointment_id, metadata={"service_visit_id": visit.id})
|
||||
await session.commit()
|
||||
await session.refresh(visit)
|
||||
|
||||
Reference in New Issue
Block a user