95 lines
3.3 KiB
Python
95 lines
3.3 KiB
Python
from fastapi import APIRouter, Depends, Query
|
|
from sqlalchemy.orm import Session
|
|
|
|
from backend.app.api.deps import require_roles
|
|
from backend.app.db import get_db_session
|
|
from backend.app.schemas.common import success_payload
|
|
from backend.app.services.reminder_service import reminder_service
|
|
|
|
router = APIRouter(prefix="/api/reminders", tags=["reminders"])
|
|
|
|
|
|
@router.get("")
|
|
def list_reminders(
|
|
reminder_type: str | None = Query(default=None),
|
|
status: str | None = Query(default=None),
|
|
receiver_user_id: int | None = Query(default=None),
|
|
page_no: int = Query(default=1),
|
|
page_size: int = Query(default=20),
|
|
session: Session = Depends(get_db_session),
|
|
current_user: dict = Depends(require_roles("salesman", "manager", "admin")),
|
|
) -> dict:
|
|
filters = {
|
|
"reminder_type": reminder_type,
|
|
"status": status,
|
|
"receiver_user_id": receiver_user_id,
|
|
"page_no": page_no,
|
|
"page_size": page_size,
|
|
}
|
|
if current_user.get("role_code") == "salesman":
|
|
filters["receiver_user_id"] = current_user.get("user_id")
|
|
return success_payload(reminder_service.list_reminders(session, filters))
|
|
|
|
|
|
@router.get("/dashboard")
|
|
def reminder_dashboard(
|
|
session: Session = Depends(get_db_session),
|
|
current_user: dict = Depends(require_roles("salesman", "manager", "admin")),
|
|
) -> dict:
|
|
filters = {"page_no": 1, "page_size": 200}
|
|
if current_user.get("role_code") == "salesman":
|
|
filters["receiver_user_id"] = current_user.get("user_id")
|
|
reminders = reminder_service.list_reminders(session, filters)
|
|
return success_payload(
|
|
{
|
|
"summary": {
|
|
"total": reminders["total"],
|
|
"pending": len([item for item in reminders["list"] if item["status"] == "pending"]),
|
|
"read": len([item for item in reminders["list"] if item["status"] == "read"]),
|
|
},
|
|
"list": reminders["list"],
|
|
"checked_at": "",
|
|
}
|
|
)
|
|
|
|
|
|
@router.post("/{reminder_id}/read")
|
|
def read_reminder(
|
|
reminder_id: int,
|
|
session: Session = Depends(get_db_session),
|
|
current_user: dict = Depends(require_roles("salesman", "manager", "admin")),
|
|
) -> dict:
|
|
return success_payload(reminder_service.read_reminder(reminder_id, session, current_user))
|
|
|
|
|
|
@router.post("/arrears/check")
|
|
def check_arrears_reminders(
|
|
session: Session = Depends(get_db_session),
|
|
current_user: dict = Depends(require_roles("manager", "admin")),
|
|
) -> dict:
|
|
return success_payload(reminder_service.check_arrears(session))
|
|
|
|
|
|
@router.post("/inactive-customers/check")
|
|
def check_inactive_customer_reminders(
|
|
session: Session = Depends(get_db_session),
|
|
current_user: dict = Depends(require_roles("manager", "admin")),
|
|
) -> dict:
|
|
return success_payload(reminder_service.check_inactive_customers(session))
|
|
|
|
|
|
@router.post("/logistics-timeout/check")
|
|
def check_logistics_timeout_reminders(
|
|
session: Session = Depends(get_db_session),
|
|
current_user: dict = Depends(require_roles("manager", "admin")),
|
|
) -> dict:
|
|
return success_payload(reminder_service.check_logistics_timeout(session))
|
|
|
|
|
|
@router.post("/check-all")
|
|
def check_all_reminders(
|
|
session: Session = Depends(get_db_session),
|
|
current_user: dict = Depends(require_roles("manager", "admin")),
|
|
) -> dict:
|
|
return success_payload(reminder_service.check_all(session))
|