File size: 2,384 Bytes
fa5d0ef
 
 
 
a7c1c74
 
 
 
 
 
 
 
 
 
 
 
 
fea9527
fa5d0ef
 
 
a7c1c74
 
 
fa5d0ef
 
a7c1c74
 
 
 
 
 
 
 
fa5d0ef
 
 
a7c1c74
 
fa5d0ef
 
 
 
 
fea9527
fa5d0ef
 
 
 
 
 
a7c1c74
fa5d0ef
 
 
 
a7c1c74
 
 
 
 
 
 
 
 
 
fa5d0ef
a7c1c74
fa5d0ef
 
 
 
 
 
 
fea9527
fa5d0ef
 
a7c1c74
fa5d0ef
a7c1c74
fa5d0ef
 
 
 
 
 
 
fea9527
fa5d0ef
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
from src.notifications.service import get_user_device_tokens
from src.notifications.fcm import send_fcm


def ensure_list(value):
    """
    Makes sure the value is always a list.
    - If it's already a list/tuple/set -> convert to list and return
    - If it's None -> return empty list
    - Otherwise -> wrap single value in a list
    """
    if value is None:
        return []
    if isinstance(value, (list, tuple, set)):
        return list(value)
    return [value]


# -------------------------------
# SEND TO MENTOR + LEAD
# -------------------------------
async def send_leave_request_notification(session, user, leave, mentor_ids, lead_ids):
    mentor_ids = ensure_list(mentor_ids)
    lead_ids = ensure_list(lead_ids)

    tokens = []

    for mentor_id in mentor_ids:
        tokens += await get_user_device_tokens(session, mentor_id)

    for lead_id in lead_ids:
        tokens += await get_user_device_tokens(session, lead_id)

    tokens = list(set(tokens))

    await send_fcm(
        tokens,
        "New Leave Request",
        f"{user.user_name} requested leave",
        {
            "type": "leave_request",
            "screen": "MentorApproval",
            "leave_id": str(leave.id),
        },
        priority="high",
    )


# -------------------------------
# SEND TO USER + TEAM LEAD
# -------------------------------
async def send_leave_status_notification(session, leave, mentor_name, lead_ids):
    title = f"Leave {leave.status}"
    body = f"Your leave was {leave.status.lower()} by {mentor_name}"

    # Send to USER
    user_tokens = await get_user_device_tokens(session, leave.user_id)

    # Send to TEAM LEADS
    lead_tokens = []
    for lead_id in lead_ids:
        lead_tokens += await get_user_device_tokens(session, lead_id)

    lead_tokens = list(set(lead_tokens))

    # 1) Notify user
    await send_fcm(
        user_tokens,
        title,
        body,
        {
            "type": "leave_status",
            "screen": "LeaveDetails",
            "leave_id": str(leave.id),
        },
        priority="high",
    )

    # 2) Notify all leads
    await send_fcm(
        lead_tokens,
        title,
        f"Leave {leave.status} for user {leave.user_id}",
        {
            "type": "lead_update",
            "screen": "LeaveDetails",
            "leave_id": str(leave.id),
        },
        priority="high",
    )