Files
ihrm/whatsapp/flows.py
2025-12-19 00:32:47 +05:30

885 lines
38 KiB
Python

import json
from asset.models import AssetCategory
from base.models import Department, EmployeeShift, JobPosition, Tags, WorkType
from employee.models import Employee
from helpdesk.models import TicketType
from leave.models import LeaveType
def get_asset_category_flow_json():
flow_json = {
"version": "5.0",
"screens": [
{
"id": "screen_one",
"title": "Asset Request",
"terminal": True,
"data": {
"asset_categories": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string"},
"title": {"type": "string"},
},
"required": ["id", "title"],
},
"__example__": [
{"id": "1", "title": "Laptops"},
{"id": "2", "title": "Bags"},
],
}
},
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "flow_path",
"children": [
{
"type": "Dropdown",
"label": "Asset Category",
"required": True,
"name": "asset_category",
"data-source": "${data.asset_categories}",
},
{
"type": "TextArea",
"label": "Description",
"required": True,
"name": "description",
},
{
"type": "Footer",
"label": "Save",
"on-click-action": {
"name": "complete",
"payload": {
"asset_category": "${form.asset_category}",
"description": "${form.description}",
"type": "asset_request",
},
},
},
],
}
],
},
}
],
}
return flow_json
def get_attendance_request_json():
flow_json = {
"version": "5.0",
"screens": [
{
"id": "screen_one",
"title": "Attendance Request 1 of 2",
"data": {
"shift": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string"},
"title": {"type": "string"},
},
"required": ["id", "title"],
},
"__example__": [
{"id": "1", "title": "Regular Shift"},
{"id": "2", "title": "Morning Shift"},
{"id": "3", "title": "Night Shift"},
],
},
"work_type": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string"},
"title": {"type": "string"},
},
"required": ["id", "title"],
},
"__example__": [
{"id": "1", "title": "WFH"},
{"id": "2", "title": "WFO"},
],
},
},
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "flow_path",
"children": [
{
"type": "DatePicker",
"label": "Attendance Date",
"required": True,
"name": "attendance_date",
},
{
"type": "Dropdown",
"label": "Shift",
"required": True,
"name": "shift",
"data-source": "${data.shift}",
},
{
"type": "Dropdown",
"label": "Work Type",
"required": True,
"name": "work_type",
"data-source": "${data.work_type}",
},
{
"type": "TextArea",
"label": "Request Description",
"required": True,
"name": "description",
},
{
"type": "Footer",
"label": "Continue",
"on-click-action": {
"name": "navigate",
"next": {
"type": "screen",
"name": "screen_two",
},
"payload": {
"attendance_date": "${form.attendance_date}",
"shift": "${form.shift}",
"work_type": "${form.work_type}",
"description": "${form.description}",
},
},
},
],
}
],
},
},
{
"id": "screen_two",
"title": "Attendance Request 2 of 2",
"data": {
"attendance_date": {"type": "string", "__example__": "Example"},
"shift": {"type": "string", "__example__": "Example"},
"work_type": {"type": "string", "__example__": "Example"},
"description": {"type": "string", "__example__": "Example"},
},
"terminal": True,
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "flow_path",
"children": [
{
"type": "DatePicker",
"label": "Check In Date",
"required": True,
"name": "check_in_date",
},
{
"type": "TextInput",
"label": "Check In Time",
"name": "check_in_time",
"required": True,
"input-type": "text",
"helper-text": "Check in time in HH:MM:SS (24 HRS format)",
},
{
"type": "DatePicker",
"label": "Check Out Date",
"required": True,
"name": "check_out_date",
},
{
"type": "TextInput",
"label": "Check Out Time",
"name": "check_out_time",
"required": True,
"input-type": "text",
"helper-text": "Check out time in HH:MM:SS (24 HRS format)",
},
{
"type": "TextInput",
"label": "Worked Hours",
"name": "worked_hours",
"required": True,
"input-type": "text",
"helper-text": "Worked hours in HH:MM",
},
{
"type": "TextInput",
"label": "Minimum Hours",
"name": "minimum_hours",
"required": True,
"input-type": "text",
"helper-text": "Minimum hours in HH:MM",
},
{
"type": "Footer",
"label": "Continue",
"on-click-action": {
"name": "complete",
"payload": {
"check_in_date": "${form.check_in_date}",
"check_in_time": "${form.check_in_time}",
"check_out_date": "${form.check_out_date}",
"check_out_time": "${form.check_out_time}",
"worked_hours": "${form.worked_hours}",
"minimum_hours": "${form.minimum_hours}",
"attendance_date": "${data.attendance_date}",
"shift": "${data.shift}",
"work_type": "${data.work_type}",
"description": "${data.description}",
"type": "attendance_request",
},
},
},
],
}
],
},
},
],
}
return flow_json
def get_shift_request_json():
flow_json = {
"version": "5.0",
"screens": [
{
"id": "screen_one",
"title": "Shift Request",
"terminal": True,
"data": {
"shift": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string"},
"title": {"type": "string"},
},
"required": ["id", "title"],
},
"__example__": [
{"id": "1", "title": "Regular Shift"},
{"id": "2", "title": "Morning Shift"},
{"id": "3", "title": "Night Shift"},
],
}
},
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "flow_path",
"children": [
{
"type": "Dropdown",
"label": "Shift",
"name": "shift",
"required": True,
"data-source": "${data.shift}",
},
{
"type": "DatePicker",
"label": "Requested Date",
"name": "requested_date",
"required": True,
},
{
"type": "DatePicker",
"label": "Requested Till",
"name": "requested_till",
"required": True,
},
{
"type": "TextArea",
"label": "Description",
"name": "description",
"required": True,
},
{
"type": "OptIn",
"label": "permentent request",
"name": "permenent_request",
"required": False,
},
{
"type": "Footer",
"label": "Save",
"on-click-action": {
"name": "complete",
"payload": {
"shift": "${form.shift}",
"requested_date": "${form.requested_date}",
"requested_till": "${form.requested_till}",
"description": "${form.description}",
"permanent": "${form.permenent_request}",
"type": "shift_request",
},
},
},
],
}
],
},
}
],
}
return flow_json
def get_work_type_request_json():
flow_json = {
"version": "5.0",
"screens": [
{
"id": "screen_one",
"title": "Work Type Request",
"terminal": True,
"data": {
"work_type": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string"},
"title": {"type": "string"},
},
"required": ["id", "title"],
},
"__example__": [
{"id": "1", "title": "WFO"},
{"id": "2", "title": "WFH"},
],
}
},
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "flow_path",
"children": [
{
"type": "Dropdown",
"label": "work type",
"required": True,
"name": "work_type",
"data-source": "${data.work_type}",
},
{
"type": "DatePicker",
"label": "Requested date",
"required": True,
"name": "request_date",
},
{
"type": "DatePicker",
"label": "requested till",
"required": True,
"name": "requested_till",
},
{
"type": "TextArea",
"label": "description",
"required": True,
"name": "description",
},
{
"type": "OptIn",
"label": "permentent request",
"required": False,
"name": "permenent_request",
},
{
"type": "Footer",
"label": "Save",
"on-click-action": {
"name": "complete",
"payload": {
"work_type": "${form.work_type}",
"requested_date": "${form.request_date}",
"requested_till": "${form.requested_till}",
"description": "${form.description}",
"permenent_request": "${form.permenent_request}",
"type": "work_type",
},
},
},
],
}
],
},
}
],
}
return flow_json
def get_leave_request_json():
flow_json = {
"version": "5.0",
"screens": [
{
"id": "screen_one",
"title": "Leave request",
"terminal": True,
"data": {
"leave_types": {
"type": "array",
"items": {
"type": "object",
"properties": {
"id": {"type": "string"},
"title": {"type": "string"},
},
"required": ["id", "title"],
},
"__example__": [
{"id": "1", "title": "Casual Leave"},
{"id": "2", "title": "Sick Leave"},
{"id": "3", "title": "Paid Leave"},
],
}
},
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "flow_path",
"children": [
{
"type": "Dropdown",
"label": "Leave type",
"required": True,
"name": "leave_type",
"data-source": "${data.leave_types}",
},
{
"type": "DatePicker",
"label": "Start Date",
"required": True,
"name": "start_date",
},
{
"type": "Dropdown",
"label": "Start Date breakdown",
"required": True,
"name": "start_date_breakdown",
"data-source": [
{"id": "full_day", "title": "Full day"},
{"id": "first_half", "title": "First half"},
{"id": "second_half", "title": "Second Half"},
],
},
{
"type": "DatePicker",
"label": "End Date",
"required": True,
"name": "end_date",
},
{
"type": "Dropdown",
"label": "End Date Breakdown",
"required": True,
"name": "end_date_breakdown",
"data-source": [
{"id": "full_day", "title": "Full Day"},
{"id": "first_half", "title": "First Half"},
{"id": "second_half", "title": "Second Half"},
],
},
{
"type": "DocumentPicker",
"name": "document_picker",
"label": "Upload photos",
"description": "Please attach images about the received items",
"max-file-size-kb": 10240,
"max-uploaded-documents": 1,
},
{
"type": "TextArea",
"label": "Description",
"required": True,
"name": "description",
},
{
"type": "Footer",
"label": "Save",
"on-click-action": {
"name": "complete",
"payload": {
"leave_type": "${form.leave_type}",
"start_date": "${form.start_date}",
"start_date_breakdown": "${form.start_date_breakdown}",
"end_date": "${form.end_date}",
"end_date_breakdown": "${form.end_date_breakdown}",
"description": "${form.description}",
"document_picker": "${form.document_picker}",
"type": "leave_request",
},
},
},
],
}
],
},
}
],
}
return flow_json
def get_reimbursement_request_json():
flow_json = {
"version": "5.0",
"screens": [
{
"id": "screen_one",
"title": "Reimbursements",
"data": {},
"terminal": True,
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "flow_path",
"children": [
{
"type": "TextInput",
"label": "Title",
"name": "title",
"required": True,
"input-type": "text",
},
{
"type": "DatePicker",
"label": "Allowance on",
"required": True,
"name": "allowance_date",
},
{
"type": "TextInput",
"label": "Amount",
"name": "amount",
"required": True,
"input-type": "number",
},
{
"type": "DocumentPicker",
"name": "document_picker",
"label": "Upload photos",
"description": "Please attach images about the received items",
"max-file-size-kb": 10240,
"max-uploaded-documents": 10,
},
{
"type": "TextArea",
"label": "description",
"required": True,
"name": "description",
},
{
"type": "Footer",
"label": "Save",
"on-click-action": {
"name": "complete",
"payload": {
"title": "${form.title}",
"allowance_date": "${form.allowance_date}",
"document_picker": "${form.document_picker}",
"amount": "${form.amount}",
"description": "${form.description}",
"type": "reimbursement",
},
},
},
],
}
],
},
}
],
}
return flow_json
def get_bonus_point_json():
flow_json = {
"version": "5.0",
"screens": [
{
"id": "screen_one",
"title": "Bonus Point",
"data": {},
"terminal": True,
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "flow_path",
"children": [
{
"type": "TextInput",
"label": "Title",
"name": "title",
"required": True,
"input-type": "text",
},
{
"type": "DatePicker",
"label": "Allowance on",
"required": True,
"name": "allowance_on",
},
{
"type": "TextInput",
"label": "Bonus Points",
"name": "bonus_point",
"required": True,
"input-type": "number",
},
{
"type": "TextArea",
"label": "description",
"required": True,
"name": "description",
},
{
"type": "Footer",
"label": "Save",
"on-click-action": {
"name": "complete",
"payload": {
"title": "${form.title}",
"allowance_on": "${form.allowance_on}",
"bonus_point": "${form.bonus_point}",
"description": "${form.description}",
"type": "bonus_point",
},
},
},
],
}
],
},
}
],
}
return flow_json
def get_ticket_json():
ticket_type_data = [
{"id": str(ticket_type.id), "title": ticket_type.title}
for ticket_type in TicketType.objects.all()
]
priority_data = [
{"id": "low", "title": "Low"},
{"id": "medium", "title": "Medium"},
{"id": "high", "title": "High"},
]
assigning_type_data = [
{"id": "department", "title": "Department"},
{"id": "job_position", "title": "Job Position"},
{"id": "individual", "title": "Individual"},
]
department_data = [
{"id": str(department.id), "title": department.department}
for department in Department.objects.all()
]
job_position_data = [
{"id": str(job_position.id), "title": job_position.job_position}
for job_position in JobPosition.objects.all()
]
individual_data = [
{"id": str(individual.id), "title": individual.get_full_name()}
for individual in Employee.objects.all()
]
tags_data = [{"id": str(tag.id), "title": tag.title} for tag in Tags.objects.all()]
flow_json = {
"version": "5.0",
"screens": [
{
"id": "screen_one",
"title": "Raise Ticket 1 of 2",
"data": {},
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "flow_path",
"children": [
{
"type": "TextInput",
"name": "title",
"label": "Title",
"required": True,
"input-type": "text",
},
{
"type": "Dropdown",
"label": "Ticket Type",
"required": True,
"name": "ticket_type",
"data-source": ticket_type_data,
},
{
"type": "Dropdown",
"label": "Priority",
"required": True,
"name": "priority",
"data-source": priority_data,
},
{
"type": "TextArea",
"label": "description",
"required": True,
"name": "description",
},
{
"type": "Footer",
"label": "Continue",
"on-click-action": {
"name": "navigate",
"next": {
"type": "screen",
"name": "screen_quhode",
},
"payload": {
"title": "${form.title}",
"ticket_type": "${form.ticket_type}",
"priority": "${form.priority}",
"description": "${form.description}",
},
},
},
],
}
],
},
},
{
"id": "screen_two",
"title": "Raise Ticket 2 of 2",
"data": {
"title": {
"type": "string",
"__example__": "Example",
},
"ticket_type": {"type": "string", "__example__": "Example"},
"priority": {"type": "string", "__example__": "Example"},
"description": {"type": "string", "__example__": "Example"},
},
"terminal": True,
"layout": {
"type": "SingleColumnLayout",
"children": [
{
"type": "Form",
"name": "flow_path",
"children": [
{
"type": "Dropdown",
"label": "Assigning Type",
"required": True,
"name": "assigning_type",
"data-source": assigning_type_data,
},
{
"type": "Dropdown",
"label": "Forward To",
"required": True,
"name": "forward_to",
"data-source": [
{"id": "0_Option_1", "title": "Option 1"},
{"id": "1_Option_2", "title": "Option 2"},
],
},
{
"type": "DatePicker",
"label": "Deadline",
"required": True,
"name": "deadline",
},
{
"type": "Dropdown",
"label": "Tags",
"required": False,
"name": "tags",
"data-source": tags_data,
},
{
"type": "Footer",
"label": "Save",
"on-click-action": {
"name": "complete",
"payload": {
"screen_1_Dropdown_0": "${form.assigning_type}",
"screen_1_Dropdown_1": "${form.forward_to}",
"screen_1_DatePicker_2": "${form.deadline}",
"screen_1_Dropdown_3": "${form.tags}",
"title": "${data.title}",
"ticket_type": "${data.ticket_type}",
"priority": "${data.priority}",
"description": "${data.description}",
"type": "ticket",
},
},
},
],
}
],
},
},
],
}
return json.dumps(flow_json)