GetShiftsPerUser

Retrieves the number of on-call hours per user.

python · Shift Management

Source

import demistomock as demisto
from CommonServerPython import *

from CommonServerUserPython import *

HOURS_DAYS_HEADER = "Hours / Days"
SUNDAY_HEADER = "Sunday"
MONDAY_HEADER = "Monday"
TUESDAY_HEADER = "Tuesday"
WEDNESDAY_HEADER = "Wednesday"
THURSDAY_HEADER = "Thursday"
FRIDAY_HEADER = "Friday"
SATURDAY_HEADER = "Saturday"

DAY_NUM_TO_DAY_HEADER = {
    0: SUNDAY_HEADER,
    1: MONDAY_HEADER,
    2: TUESDAY_HEADER,
    3: WEDNESDAY_HEADER,
    4: THURSDAY_HEADER,
    5: FRIDAY_HEADER,
    6: SATURDAY_HEADER,
}


def time_fix(t):
    # If the time is a single number padd it with zeros
    if t // 10 < 1:
        return "0" + str(t)
    return str(t)


def main():
    user_id = demisto.args().get("userId", False)
    if not user_id:
        get_users_res: list = demisto.executeCommand("getUsers", {"current": True})
        if is_error(get_users_res):
            return_error(f"Failed to get users: {get_error(get_users_res)!s}")
        contents = get_users_res[0]
        if contents and len(contents.get("Contents")) == 1:
            user_id = contents.get("Contents")[0].get("id")
        else:
            return_error("Failed to get users: User object is empty")

    get_roles_response: list = demisto.executeCommand("getRoles", {})
    if is_error(get_roles_response):
        return_error(f"Failed to get roles: {get_error(get_roles_response)!s}")

    get_users_response: list = demisto.executeCommand("getUsers", {})
    if is_error(get_users_response):
        return_error(f"Failed to get users: {get_error(get_users_response)!s}")

    users = get_users_response[0]["Contents"]
    user = [u for u in users if u.get("id", False) == user_id]
    if len(user) == 0:
        return_error(f"Failed to find user: {user_id!s}")

    user = user[0]
    user_roles = user.get("allRoles", [])
    if len(user_roles) == 0:
        demisto.error(f"Failed to find roles for user: {user_id!s}")
        demisto.results([])

    roles = get_roles_response[0]["Contents"]
    shifts_of_user = [r.get("shifts") for r in roles if r.get("shifts", False) and r.get("name") in user_roles]
    if len(shifts_of_user) == 0:
        demisto.error(f"Failed to find shifts for user: {user_id!s}")
        demisto.results([])

    shifts_of_user = [s for rshifts in shifts_of_user for s in rshifts]

    shifts_of_user_readable = []
    for s in shifts_of_user:
        from_day = DAY_NUM_TO_DAY_HEADER[s.get("fromDay")]
        from_hour = time_fix(s.get("fromHour"))
        from_minute = time_fix(s.get("fromMinute"))
        to_day = DAY_NUM_TO_DAY_HEADER[s.get("toDay")]
        to_hour = time_fix(s.get("toHour"))
        to_minute = time_fix(s.get("toMinute"))
        shifts_of_user_readable.append([f"{from_day} {from_hour}:{from_minute}", f"{to_day} {to_hour}:{to_minute}"])

    HEADERS = ["Start", "End"]

    shifts_table = [
        {
            HEADERS[0]: shift[0],
            HEADERS[1]: shift[1],
        }
        for shift in shifts_of_user_readable
    ]

    widget = TextWidget(text=tableToMarkdown(name=f'{user.get("name", user_id)}\'s Shifts', t=shifts_table, headers=HEADERS))
    return_results(widget)


if __name__ in ("__builtin__", "builtins", "__main__"):
    main()

README

Retrieves the number of on-call hours per user.

Script Data


Name Description
Script Type python3
Tags Shift Management, widget
Cortex XSOAR Version 5.5.0

Inputs


Argument Name Description
userId The user ID for whom to get the number of on-call hours for the shift (e.g. johndoe).

Outputs


There are no outputs for this script.