Setup wizard and tasks updates
- Setup wizard save improvements - Call server task updates - Task creation changes - Portal JS updates Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
parent
30c175bafe
commit
2023e1b5d9
4 changed files with 63 additions and 11 deletions
|
|
@ -129,11 +129,11 @@ try {
|
||||||
response.steps.append("Linked address to business");
|
response.steps.append("Linked address to business");
|
||||||
|
|
||||||
// Create default task types for the business
|
// Create default task types for the business
|
||||||
// 1. Call Server (notifications icon, purple)
|
// 1. Call Staff (notifications icon, purple)
|
||||||
// 2. Chat With Staff (chat icon, blue)
|
// 2. Chat With Staff (chat icon, blue)
|
||||||
// 3. Pay With Cash (payments icon, green)
|
// 3. Pay With Cash (payments icon, green)
|
||||||
defaultTaskTypes = [
|
defaultTaskTypes = [
|
||||||
{ name: "Call Server", icon: "notifications", color: "##9C27B0", description: "Request server assistance" },
|
{ name: "Call Staff", icon: "notifications", color: "##9C27B0", description: "Request staff assistance" },
|
||||||
{ name: "Chat With Staff", icon: "chat", color: "##2196F3", description: "Open a chat conversation" },
|
{ name: "Chat With Staff", icon: "chat", color: "##2196F3", description: "Open a chat conversation" },
|
||||||
{ name: "Pay With Cash", icon: "payments", color: "##4CAF50", description: "Request to pay with cash" }
|
{ name: "Pay With Cash", icon: "payments", color: "##4CAF50", description: "Request to pay with cash" }
|
||||||
];
|
];
|
||||||
|
|
@ -152,7 +152,31 @@ try {
|
||||||
sortOrder: { value: tt, cfsqltype: "cf_sql_integer" }
|
sortOrder: { value: tt, cfsqltype: "cf_sql_integer" }
|
||||||
}, { datasource: "payfrit" });
|
}, { datasource: "payfrit" });
|
||||||
}
|
}
|
||||||
response.steps.append("Created 3 default task types (Call Server, Chat With Staff, Pay With Cash)");
|
response.steps.append("Created 3 default task types (Call Staff, Chat With Staff, Pay With Cash)");
|
||||||
|
|
||||||
|
// Create default task categories for the business
|
||||||
|
defaultTaskCategories = [
|
||||||
|
{ name: "Service Point", color: "##F44336" }, // Red
|
||||||
|
{ name: "Kitchen", color: "##FF9800" }, // Orange
|
||||||
|
{ name: "Bar", color: "##9C27B0" }, // Purple
|
||||||
|
{ name: "Cleaning", color: "##4CAF50" }, // Green
|
||||||
|
{ name: "Management", color: "##2196F3" }, // Blue
|
||||||
|
{ name: "Delivery", color: "##00BCD4" }, // Cyan
|
||||||
|
{ name: "General", color: "##607D8B" } // Blue Grey
|
||||||
|
];
|
||||||
|
|
||||||
|
for (tc = 1; tc <= arrayLen(defaultTaskCategories); tc++) {
|
||||||
|
taskCat = defaultTaskCategories[tc];
|
||||||
|
queryTimed("
|
||||||
|
INSERT INTO TaskCategories (BusinessID, Name, Color)
|
||||||
|
VALUES (:businessID, :name, :color)
|
||||||
|
", {
|
||||||
|
businessID: { value: businessId, cfsqltype: "cf_sql_integer" },
|
||||||
|
name: { value: taskCat.name, cfsqltype: "cf_sql_varchar" },
|
||||||
|
color: { value: taskCat.color, cfsqltype: "cf_sql_varchar" }
|
||||||
|
}, { datasource: "payfrit" });
|
||||||
|
}
|
||||||
|
response.steps.append("Created 7 default task categories");
|
||||||
|
|
||||||
// Save business hours from structured schedule
|
// Save business hours from structured schedule
|
||||||
if (structKeyExists(biz, "hoursSchedule") && isArray(biz.hoursSchedule)) {
|
if (structKeyExists(biz, "hoursSchedule") && isArray(biz.hoursSchedule)) {
|
||||||
|
|
|
||||||
|
|
@ -164,7 +164,7 @@ try {
|
||||||
apiAbort({
|
apiAbort({
|
||||||
"OK": true,
|
"OK": true,
|
||||||
"TASK_ID": taskID,
|
"TASK_ID": taskID,
|
||||||
"MESSAGE": "Server has been notified"
|
"MESSAGE": "Staff has been notified"
|
||||||
});
|
});
|
||||||
|
|
||||||
} catch (any e) {
|
} catch (any e) {
|
||||||
|
|
|
||||||
|
|
@ -29,16 +29,43 @@ try {
|
||||||
userID = val(jsonData.UserID ?: 0);
|
userID = val(jsonData.UserID ?: 0);
|
||||||
message = jsonData.Message ?: "";
|
message = jsonData.Message ?: "";
|
||||||
|
|
||||||
// Get task type info for display
|
// Get task type info for display (including category)
|
||||||
taskTypeQuery = queryTimed("
|
taskTypeQuery = queryTimed("
|
||||||
SELECT Name, Color, Icon
|
SELECT Name, Color, Icon, TaskCategoryID
|
||||||
FROM tt_TaskTypes
|
FROM tt_TaskTypes
|
||||||
WHERE ID = :taskTypeID
|
WHERE ID = :taskTypeID
|
||||||
", { taskTypeID: taskTypeID }, { datasource: "payfrit" });
|
", { taskTypeID: taskTypeID }, { datasource: "payfrit" });
|
||||||
|
|
||||||
taskTitle = message;
|
taskTitle = message;
|
||||||
if (taskTypeQuery.recordCount && len(taskTypeQuery.Name)) {
|
categoryID = 0;
|
||||||
taskTitle = taskTypeQuery.Name;
|
if (taskTypeQuery.recordCount) {
|
||||||
|
if (len(trim(taskTypeQuery.Name))) {
|
||||||
|
taskTitle = taskTypeQuery.Name;
|
||||||
|
}
|
||||||
|
if (!isNull(taskTypeQuery.TaskCategoryID) && isNumeric(taskTypeQuery.TaskCategoryID) && taskTypeQuery.TaskCategoryID > 0) {
|
||||||
|
categoryID = taskTypeQuery.TaskCategoryID;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If no category from task type, look up or create default "Service" category
|
||||||
|
if (categoryID == 0) {
|
||||||
|
catQuery = queryTimed("
|
||||||
|
SELECT ID FROM TaskCategories
|
||||||
|
WHERE BusinessID = :businessID AND Name = 'Service'
|
||||||
|
LIMIT 1
|
||||||
|
", { businessID: businessID }, { datasource: "payfrit" });
|
||||||
|
|
||||||
|
if (catQuery.recordCount > 0) {
|
||||||
|
categoryID = catQuery.ID;
|
||||||
|
} else {
|
||||||
|
// Create the Service category
|
||||||
|
queryTimed("
|
||||||
|
INSERT INTO TaskCategories (BusinessID, Name, Color)
|
||||||
|
VALUES (:businessID, 'Service', '##FF9800')
|
||||||
|
", { businessID: businessID }, { datasource: "payfrit" });
|
||||||
|
catResult = queryTimed("SELECT LAST_INSERT_ID() as newID", {}, { datasource: "payfrit" });
|
||||||
|
categoryID = catResult.newID;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Use message as details
|
// Use message as details
|
||||||
|
|
@ -61,7 +88,7 @@ try {
|
||||||
:businessID,
|
:businessID,
|
||||||
:servicePointID,
|
:servicePointID,
|
||||||
:taskTypeID,
|
:taskTypeID,
|
||||||
0,
|
:categoryID,
|
||||||
:orderID,
|
:orderID,
|
||||||
:userID,
|
:userID,
|
||||||
:taskTitle,
|
:taskTitle,
|
||||||
|
|
@ -73,6 +100,7 @@ try {
|
||||||
businessID: businessID,
|
businessID: businessID,
|
||||||
servicePointID: servicePointID,
|
servicePointID: servicePointID,
|
||||||
taskTypeID: taskTypeID,
|
taskTypeID: taskTypeID,
|
||||||
|
categoryID: categoryID,
|
||||||
orderID: orderID,
|
orderID: orderID,
|
||||||
userID: userID,
|
userID: userID,
|
||||||
taskTitle: taskTitle,
|
taskTitle: taskTitle,
|
||||||
|
|
|
||||||
|
|
@ -3302,8 +3302,8 @@ const Portal = {
|
||||||
|
|
||||||
<div class="form-group">
|
<div class="form-group">
|
||||||
<label>Category</label>
|
<label>Category</label>
|
||||||
<select id="scheduledTaskCategory" class="form-input">
|
<select id="scheduledTaskCategory" class="form-input" required>
|
||||||
<option value="">None</option>
|
<option value="">Select a category...</option>
|
||||||
${categoryOptions}
|
${categoryOptions}
|
||||||
</select>
|
</select>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
Reference in a new issue