149 lines
5.3 KiB
QBasic
149 lines
5.3 KiB
QBasic
|
|
' =============================================================================
|
||
|
|
' Activity Tracking Dialog - CRM Template
|
||
|
|
' Microsoft Dynamics CRM-style Activity Management
|
||
|
|
' =============================================================================
|
||
|
|
' This dialog handles logging and tracking of customer activities:
|
||
|
|
' - Phone Calls
|
||
|
|
' - Emails
|
||
|
|
' - Meetings/Appointments
|
||
|
|
' - Tasks
|
||
|
|
' - Notes
|
||
|
|
' =============================================================================
|
||
|
|
|
||
|
|
TALK "Activity Tracking - Log and manage customer interactions"
|
||
|
|
|
||
|
|
HEAR activity_type AS TEXT WITH "Select activity type: (call, email, meeting, task, note)"
|
||
|
|
|
||
|
|
SELECT CASE LCASE(activity_type)
|
||
|
|
CASE "call", "phone", "1"
|
||
|
|
CALL "log-call.bas"
|
||
|
|
|
||
|
|
CASE "email", "2"
|
||
|
|
CALL "log-email-activity.bas"
|
||
|
|
|
||
|
|
CASE "meeting", "appointment", "3"
|
||
|
|
CALL "log-meeting.bas"
|
||
|
|
|
||
|
|
CASE "task", "4"
|
||
|
|
CALL "log-task.bas"
|
||
|
|
|
||
|
|
CASE "note", "5"
|
||
|
|
CALL "log-note.bas"
|
||
|
|
|
||
|
|
CASE ELSE
|
||
|
|
TALK "I will help you log a general activity."
|
||
|
|
|
||
|
|
HEAR regarding_type AS TEXT WITH "What does this activity relate to? (lead, contact, account, opportunity)"
|
||
|
|
HEAR regarding_id AS TEXT WITH "Enter the record ID or name:"
|
||
|
|
|
||
|
|
SELECT CASE LCASE(regarding_type)
|
||
|
|
CASE "lead"
|
||
|
|
record = FIND "leads" WHERE id = regarding_id OR name LIKE regarding_id FIRST
|
||
|
|
CASE "contact"
|
||
|
|
record = FIND "contacts" WHERE id = regarding_id OR full_name LIKE regarding_id FIRST
|
||
|
|
CASE "account"
|
||
|
|
record = FIND "accounts" WHERE id = regarding_id OR name LIKE regarding_id FIRST
|
||
|
|
CASE "opportunity"
|
||
|
|
record = FIND "opportunities" WHERE id = regarding_id OR name LIKE regarding_id FIRST
|
||
|
|
END SELECT
|
||
|
|
|
||
|
|
IF record IS NULL THEN
|
||
|
|
TALK "Record not found. Please verify the ID or name."
|
||
|
|
EXIT
|
||
|
|
END IF
|
||
|
|
|
||
|
|
TALK "Record found: " + record.name
|
||
|
|
|
||
|
|
HEAR subject AS TEXT WITH "Activity subject:"
|
||
|
|
HEAR description AS TEXT WITH "Activity description (details of the interaction):"
|
||
|
|
HEAR duration AS INTEGER WITH "Duration in minutes:" DEFAULT 30
|
||
|
|
HEAR outcome AS TEXT WITH "Outcome (completed, pending, cancelled):" DEFAULT "completed"
|
||
|
|
|
||
|
|
activity_id = "ACT-" + FORMAT(NOW(), "YYYYMMDDHHmmss") + "-" + RANDOM(1000, 9999)
|
||
|
|
|
||
|
|
INSERT INTO "activities" VALUES {
|
||
|
|
"id": activity_id,
|
||
|
|
"activity_type": "general",
|
||
|
|
"subject": subject,
|
||
|
|
"description": description,
|
||
|
|
"regarding_type": regarding_type,
|
||
|
|
"regarding_id": record.id,
|
||
|
|
"regarding_name": record.name,
|
||
|
|
"duration_minutes": duration,
|
||
|
|
"outcome": outcome,
|
||
|
|
"status": "completed",
|
||
|
|
"owner_id": GET SESSION "user_id",
|
||
|
|
"owner_name": GET SESSION "user_name",
|
||
|
|
"created_at": NOW(),
|
||
|
|
"activity_date": NOW()
|
||
|
|
}
|
||
|
|
|
||
|
|
RECORD METRIC "crm_activities" WITH activity_type = "general", outcome = outcome
|
||
|
|
|
||
|
|
TALK "Activity logged successfully."
|
||
|
|
TALK "Activity ID: " + activity_id
|
||
|
|
END SELECT
|
||
|
|
|
||
|
|
' Show recent activities for context
|
||
|
|
HEAR show_recent AS BOOLEAN WITH "Would you like to see recent activities?"
|
||
|
|
|
||
|
|
IF show_recent THEN
|
||
|
|
HEAR filter_type AS TEXT WITH "Filter by: (all, lead, contact, account, opportunity)" DEFAULT "all"
|
||
|
|
|
||
|
|
IF filter_type = "all" THEN
|
||
|
|
recent = FIND "activities" ORDER BY activity_date DESC LIMIT 10
|
||
|
|
ELSE
|
||
|
|
recent = FIND "activities" WHERE regarding_type = filter_type ORDER BY activity_date DESC LIMIT 10
|
||
|
|
END IF
|
||
|
|
|
||
|
|
IF COUNT(recent) = 0 THEN
|
||
|
|
TALK "No recent activities found."
|
||
|
|
ELSE
|
||
|
|
TALK "Recent Activities:"
|
||
|
|
TALK ""
|
||
|
|
|
||
|
|
FOR EACH act IN recent
|
||
|
|
date_str = FORMAT(act.activity_date, "MMM DD, YYYY HH:mm")
|
||
|
|
TALK act.activity_type + " - " + act.subject
|
||
|
|
TALK " Regarding: " + act.regarding_name + " (" + act.regarding_type + ")"
|
||
|
|
TALK " Date: " + date_str + " | Duration: " + act.duration_minutes + " min"
|
||
|
|
TALK " Status: " + act.status
|
||
|
|
TALK ""
|
||
|
|
NEXT
|
||
|
|
END IF
|
||
|
|
END IF
|
||
|
|
|
||
|
|
' Activity analytics summary
|
||
|
|
HEAR show_summary AS BOOLEAN WITH "Would you like to see activity summary?"
|
||
|
|
|
||
|
|
IF show_summary THEN
|
||
|
|
HEAR summary_period AS TEXT WITH "Period: (today, week, month)" DEFAULT "week"
|
||
|
|
|
||
|
|
SELECT CASE summary_period
|
||
|
|
CASE "today"
|
||
|
|
start_date = TODAY()
|
||
|
|
CASE "week"
|
||
|
|
start_date = DATEADD(TODAY(), -7, "day")
|
||
|
|
CASE "month"
|
||
|
|
start_date = DATEADD(TODAY(), -30, "day")
|
||
|
|
END SELECT
|
||
|
|
|
||
|
|
activities = FIND "activities" WHERE activity_date >= start_date
|
||
|
|
|
||
|
|
call_count = COUNT(FILTER(activities, "activity_type = 'call'"))
|
||
|
|
email_count = COUNT(FILTER(activities, "activity_type = 'email'"))
|
||
|
|
meeting_count = COUNT(FILTER(activities, "activity_type = 'meeting'"))
|
||
|
|
task_count = COUNT(FILTER(activities, "activity_type = 'task'"))
|
||
|
|
total_duration = SUM(activities, "duration_minutes")
|
||
|
|
|
||
|
|
TALK "Activity Summary for " + summary_period
|
||
|
|
TALK ""
|
||
|
|
TALK "Calls: " + call_count
|
||
|
|
TALK "Emails: " + email_count
|
||
|
|
TALK "Meetings: " + meeting_count
|
||
|
|
TALK "Tasks: " + task_count
|
||
|
|
TALK ""
|
||
|
|
TALK "Total Activities: " + COUNT(activities)
|
||
|
|
TALK "Total Time: " + FORMAT(total_duration / 60, "#.#") + " hours"
|
||
|
|
END IF
|