338 lines
10 KiB
QBasic
338 lines
10 KiB
QBasic
PARAM action AS STRING
|
|
PARAM case_data AS OBJECT
|
|
|
|
user_id = GET "session.user_id"
|
|
case_id = GET "session.case_id"
|
|
contact_id = GET "session.contact_id"
|
|
current_time = FORMAT NOW() AS "YYYY-MM-DD HH:mm:ss"
|
|
|
|
IF action = "create" THEN
|
|
subject = GET "case_data.subject"
|
|
description = GET "case_data.description"
|
|
priority = GET "case_data.priority"
|
|
|
|
IF subject = "" THEN
|
|
TALK "What is the issue you're experiencing?"
|
|
subject = HEAR
|
|
END IF
|
|
|
|
IF description = "" THEN
|
|
TALK "Please describe the issue in detail:"
|
|
description = HEAR
|
|
END IF
|
|
|
|
IF priority = "" THEN
|
|
TALK "How urgent is this? (low/medium/high/critical)"
|
|
priority = HEAR
|
|
END IF
|
|
|
|
case_number = "CS-" + FORMAT NOW() AS "YYYYMMDD" + "-" + FORMAT RANDOM(1000, 9999)
|
|
|
|
new_case = CREATE OBJECT
|
|
SET new_case.id = FORMAT GUID()
|
|
SET new_case.case_number = case_number
|
|
SET new_case.subject = subject
|
|
SET new_case.description = description
|
|
SET new_case.status = "new"
|
|
SET new_case.priority = priority
|
|
SET new_case.contact_id = contact_id
|
|
SET new_case.created_at = current_time
|
|
SET new_case.assigned_to = user_id
|
|
|
|
SAVE_FROM_UNSTRUCTURED "cases", FORMAT new_case AS JSON
|
|
|
|
SET "session.case_id" = new_case.id
|
|
REMEMBER "case_" + new_case.id = new_case
|
|
|
|
TALK "Case " + case_number + " created successfully."
|
|
|
|
IF priority = "critical" OR priority = "high" THEN
|
|
notification = "URGENT: New " + priority + " priority case: " + case_number + " - " + subject
|
|
SEND MAIL "support-manager@company.com", "Urgent Case", notification
|
|
|
|
CREATE_TASK "Resolve case " + case_number + " immediately", "critical", user_id
|
|
ELSE
|
|
CREATE_TASK "Review case " + case_number, priority, user_id
|
|
END IF
|
|
|
|
activity = CREATE OBJECT
|
|
SET activity.type = "case_created"
|
|
SET activity.case_id = new_case.id
|
|
SET activity.description = "Case created: " + subject
|
|
SET activity.created_at = current_time
|
|
|
|
SAVE_FROM_UNSTRUCTURED "activities", FORMAT activity AS JSON
|
|
|
|
END IF
|
|
|
|
IF action = "update_status" THEN
|
|
IF case_id = "" THEN
|
|
TALK "Enter case number:"
|
|
case_number = HEAR
|
|
case = FIND "cases", "case_number = '" + case_number + "'"
|
|
IF case != NULL THEN
|
|
case_id = case.id
|
|
ELSE
|
|
TALK "Case not found."
|
|
EXIT
|
|
END IF
|
|
END IF
|
|
|
|
case = FIND "cases", "id = '" + case_id + "'"
|
|
|
|
IF case = NULL THEN
|
|
TALK "Case not found."
|
|
EXIT
|
|
END IF
|
|
|
|
TALK "Current status: " + case.status
|
|
TALK "Select new status:"
|
|
TALK "1. New"
|
|
TALK "2. In Progress"
|
|
TALK "3. Waiting on Customer"
|
|
TALK "4. Waiting on Vendor"
|
|
TALK "5. Escalated"
|
|
TALK "6. Resolved"
|
|
TALK "7. Closed"
|
|
|
|
status_choice = HEAR
|
|
|
|
new_status = ""
|
|
IF status_choice = "1" THEN
|
|
new_status = "new"
|
|
ELSE IF status_choice = "2" THEN
|
|
new_status = "in_progress"
|
|
ELSE IF status_choice = "3" THEN
|
|
new_status = "waiting_customer"
|
|
ELSE IF status_choice = "4" THEN
|
|
new_status = "waiting_vendor"
|
|
ELSE IF status_choice = "5" THEN
|
|
new_status = "escalated"
|
|
ELSE IF status_choice = "6" THEN
|
|
new_status = "resolved"
|
|
ELSE IF status_choice = "7" THEN
|
|
new_status = "closed"
|
|
END IF
|
|
|
|
old_status = case.status
|
|
case.status = new_status
|
|
case.updated_at = current_time
|
|
|
|
IF new_status = "resolved" OR new_status = "closed" THEN
|
|
case.resolved_at = current_time
|
|
|
|
TALK "Please provide resolution details:"
|
|
resolution = HEAR
|
|
case.resolution = resolution
|
|
END IF
|
|
|
|
IF new_status = "escalated" THEN
|
|
TALK "Reason for escalation:"
|
|
escalation_reason = HEAR
|
|
case.escalation_reason = escalation_reason
|
|
|
|
notification = "Case Escalated: " + case.case_number + " - " + case.subject + "\nReason: " + escalation_reason
|
|
SEND MAIL "support-manager@company.com", "Case Escalation", notification
|
|
END IF
|
|
|
|
SAVE_FROM_UNSTRUCTURED "cases", FORMAT case AS JSON
|
|
|
|
activity = CREATE OBJECT
|
|
SET activity.type = "status_change"
|
|
SET activity.case_id = case_id
|
|
SET activity.description = "Status changed from " + old_status + " to " + new_status
|
|
SET activity.created_at = current_time
|
|
|
|
SAVE_FROM_UNSTRUCTURED "activities", FORMAT activity AS JSON
|
|
|
|
TALK "Case status updated to " + new_status
|
|
|
|
IF new_status = "resolved" THEN
|
|
contact = FIND "contacts", "id = '" + case.contact_id + "'"
|
|
IF contact != NULL AND contact.email != "" THEN
|
|
subject = "Case " + case.case_number + " Resolved"
|
|
message = "Your case has been resolved.\n\nResolution: " + resolution + "\n\nThank you for your patience."
|
|
SEND MAIL contact.email, subject, message
|
|
END IF
|
|
END IF
|
|
|
|
END IF
|
|
|
|
IF action = "add_note" THEN
|
|
IF case_id = "" THEN
|
|
TALK "Enter case number:"
|
|
case_number = HEAR
|
|
case = FIND "cases", "case_number = '" + case_number + "'"
|
|
IF case != NULL THEN
|
|
case_id = case.id
|
|
ELSE
|
|
TALK "Case not found."
|
|
EXIT
|
|
END IF
|
|
END IF
|
|
|
|
TALK "Enter your note:"
|
|
note_text = HEAR
|
|
|
|
note = CREATE OBJECT
|
|
SET note.id = FORMAT GUID()
|
|
SET note.entity_type = "case"
|
|
SET note.entity_id = case_id
|
|
SET note.body = note_text
|
|
SET note.created_by = user_id
|
|
SET note.created_at = current_time
|
|
|
|
SAVE_FROM_UNSTRUCTURED "notes", FORMAT note AS JSON
|
|
|
|
TALK "Note added to case."
|
|
|
|
END IF
|
|
|
|
IF action = "search" THEN
|
|
TALK "Search by:"
|
|
TALK "1. Case Number"
|
|
TALK "2. Subject"
|
|
TALK "3. Contact Email"
|
|
TALK "4. Status"
|
|
|
|
search_type = HEAR
|
|
|
|
IF search_type = "1" THEN
|
|
TALK "Enter case number:"
|
|
search_term = HEAR
|
|
cases = FIND "cases", "case_number = '" + search_term + "'"
|
|
ELSE IF search_type = "2" THEN
|
|
TALK "Enter subject keywords:"
|
|
search_term = HEAR
|
|
cases = FIND "cases", "subject LIKE '%" + search_term + "%'"
|
|
ELSE IF search_type = "3" THEN
|
|
TALK "Enter contact email:"
|
|
search_term = HEAR
|
|
contact = FIND "contacts", "email = '" + search_term + "'"
|
|
IF contact != NULL THEN
|
|
cases = FIND "cases", "contact_id = '" + contact.id + "'"
|
|
END IF
|
|
ELSE IF search_type = "4" THEN
|
|
TALK "Enter status (new/in_progress/resolved/closed):"
|
|
search_term = HEAR
|
|
cases = FIND "cases", "status = '" + search_term + "'"
|
|
END IF
|
|
|
|
IF cases = NULL THEN
|
|
TALK "No cases found."
|
|
ELSE
|
|
TALK "Found cases:"
|
|
FOR EACH case IN cases DO
|
|
TALK case.case_number + " - " + case.subject + " (" + case.status + ")"
|
|
END FOR
|
|
END IF
|
|
|
|
END IF
|
|
|
|
IF action = "sla_check" THEN
|
|
cases = FIND "cases", "status != 'closed' AND status != 'resolved'"
|
|
|
|
breached_count = 0
|
|
warning_count = 0
|
|
|
|
FOR EACH case IN cases DO
|
|
hours_open = HOURS_BETWEEN(case.created_at, current_time)
|
|
|
|
sla_hours = 24
|
|
IF case.priority = "critical" THEN
|
|
sla_hours = 2
|
|
ELSE IF case.priority = "high" THEN
|
|
sla_hours = 4
|
|
ELSE IF case.priority = "medium" THEN
|
|
sla_hours = 8
|
|
END IF
|
|
|
|
IF hours_open > sla_hours THEN
|
|
breached_count = breached_count + 1
|
|
|
|
notification = "SLA BREACH: Case " + case.case_number + " - Open for " + hours_open + " hours"
|
|
SEND MAIL "support-manager@company.com", "SLA Breach Alert", notification
|
|
|
|
case.sla_breached = true
|
|
SAVE_FROM_UNSTRUCTURED "cases", FORMAT case AS JSON
|
|
|
|
ELSE IF hours_open > sla_hours * 0.8 THEN
|
|
warning_count = warning_count + 1
|
|
END IF
|
|
END FOR
|
|
|
|
TALK "SLA Status:"
|
|
TALK "Breached: " + breached_count + " cases"
|
|
TALK "Warning: " + warning_count + " cases"
|
|
|
|
IF breached_count > 0 THEN
|
|
CREATE_TASK "Review SLA breached cases immediately", "critical", user_id
|
|
END IF
|
|
|
|
END IF
|
|
|
|
IF action = "daily_report" THEN
|
|
new_cases = FIND "cases", "DATE(created_at) = DATE('" + current_time + "')"
|
|
resolved_cases = FIND "cases", "DATE(resolved_at) = DATE('" + current_time + "')"
|
|
open_cases = FIND "cases", "status != 'closed' AND status != 'resolved'"
|
|
|
|
new_count = 0
|
|
resolved_count = 0
|
|
open_count = 0
|
|
|
|
FOR EACH case IN new_cases DO
|
|
new_count = new_count + 1
|
|
END FOR
|
|
|
|
FOR EACH case IN resolved_cases DO
|
|
resolved_count = resolved_count + 1
|
|
END FOR
|
|
|
|
FOR EACH case IN open_cases DO
|
|
open_count = open_count + 1
|
|
END FOR
|
|
|
|
report = "DAILY CASE REPORT - " + current_time + "\n"
|
|
report = report + "================================\n"
|
|
report = report + "New Cases Today: " + new_count + "\n"
|
|
report = report + "Resolved Today: " + resolved_count + "\n"
|
|
report = report + "Currently Open: " + open_count + "\n\n"
|
|
|
|
report = report + "Open Cases by Priority:\n"
|
|
|
|
critical_cases = FIND "cases", "status != 'closed' AND status != 'resolved' AND priority = 'critical'"
|
|
high_cases = FIND "cases", "status != 'closed' AND status != 'resolved' AND priority = 'high'"
|
|
medium_cases = FIND "cases", "status != 'closed' AND status != 'resolved' AND priority = 'medium'"
|
|
low_cases = FIND "cases", "status != 'closed' AND status != 'resolved' AND priority = 'low'"
|
|
|
|
critical_count = 0
|
|
high_count = 0
|
|
medium_count = 0
|
|
low_count = 0
|
|
|
|
FOR EACH case IN critical_cases DO
|
|
critical_count = critical_count + 1
|
|
END FOR
|
|
|
|
FOR EACH case IN high_cases DO
|
|
high_count = high_count + 1
|
|
END FOR
|
|
|
|
FOR EACH case IN medium_cases DO
|
|
medium_count = medium_count + 1
|
|
END FOR
|
|
|
|
FOR EACH case IN low_cases DO
|
|
low_count = low_count + 1
|
|
END FOR
|
|
|
|
report = report + "Critical: " + critical_count + "\n"
|
|
report = report + "High: " + high_count + "\n"
|
|
report = report + "Medium: " + medium_count + "\n"
|
|
report = report + "Low: " + low_count + "\n"
|
|
|
|
SEND MAIL "support-manager@company.com", "Daily Case Report", report
|
|
|
|
TALK "Daily report sent to management."
|
|
|
|
END IF
|