diff --git a/api/tabs/addOrder.cfm b/api/tabs/addOrder.cfm index 3ebbe12..dc69d1c 100644 --- a/api/tabs/addOrder.cfm +++ b/api/tabs/addOrder.cfm @@ -24,7 +24,7 @@ try { // Get tab qTab = queryTimed(" SELECT t.ID, t.StatusID, t.BusinessID, t.OwnerUserID, t.AuthAmountCents, t.RunningTotalCents, - b.TabApprovalRequired, b.TabAutoIncreaseThreshold + t.ApprovalMode, b.TabApprovalRequired, b.TabAutoIncreaseThreshold FROM Tabs t JOIN Businesses b ON b.ID = t.BusinessID WHERE t.ID = :tabID LIMIT 1 @@ -72,9 +72,12 @@ try { taxRate = val(qBizTax.TaxRate); taxCents = round(subtotalCents * taxRate); - // Determine approval status + // Determine approval status: per-tab ApprovalMode overrides business default approvalStatus = "approved"; - if (!isOwner && qTab.TabApprovalRequired == 1) { + requiresApproval = len(trim(qTab.ApprovalMode)) && isNumeric(qTab.ApprovalMode) + ? val(qTab.ApprovalMode) == 1 + : qTab.TabApprovalRequired == 1; + if (!isOwner && requiresApproval) { approvalStatus = "pending"; } diff --git a/api/tabs/getActive.cfm b/api/tabs/getActive.cfm index cbd1ff2..fff6b58 100644 --- a/api/tabs/getActive.cfm +++ b/api/tabs/getActive.cfm @@ -19,7 +19,7 @@ try { qTab = queryTimed(" SELECT t.ID, t.UUID, t.BusinessID, t.OwnerUserID, t.ServicePointID, t.StatusID, t.AuthAmountCents, t.RunningTotalCents, - t.OpenedOn, t.LastActivityOn, t.PaymentStatus, + t.OpenedOn, t.LastActivityOn, t.PaymentStatus, t.ApprovalMode, b.Name AS BusinessName, b.TabApprovalRequired, tm.RoleID, sp.Name AS ServicePointName, @@ -73,7 +73,9 @@ try { "MemberCount": qMembers.MemberCount, "PendingOrderCount": pendingCount, "IsOwner": qTab.RoleID == 1, - "ApprovalRequired": qTab.TabApprovalRequired == 1 + "ApprovalRequired": len(trim(qTab.ApprovalMode)) && isNumeric(qTab.ApprovalMode) + ? val(qTab.ApprovalMode) == 1 + : qTab.TabApprovalRequired == 1 } }); diff --git a/api/tabs/open.cfm b/api/tabs/open.cfm index b69ec8a..91b9a48 100644 --- a/api/tabs/open.cfm +++ b/api/tabs/open.cfm @@ -32,6 +32,7 @@ try { authAmount = val(requestData.AuthAmount ?: 0); } servicePointID = val(requestData.ServicePointID ?: 0); + approvalMode = structKeyExists(requestData, "ApprovalMode") ? val(requestData.ApprovalMode) : javaCast("null", ""); if (userID == 0) apiAbort({ "OK": false, "ERROR": "missing_UserID" }); if (businessID == 0) apiAbort({ "OK": false, "ERROR": "missing_BusinessID" }); @@ -147,8 +148,8 @@ try { // Insert tab queryTimed(" INSERT INTO Tabs (UUID, BusinessID, OwnerUserID, ServicePointID, StatusID, - AuthAmountCents, StripePaymentIntentID, StripeCustomerID, OpenedOn, LastActivityOn) - VALUES (:uuid, :bizID, :userID, :spID, 1, :authCents, :piID, :custID, NOW(), NOW()) + AuthAmountCents, StripePaymentIntentID, StripeCustomerID, ApprovalMode, OpenedOn, LastActivityOn) + VALUES (:uuid, :bizID, :userID, :spID, 1, :authCents, :piID, :custID, :approvalMode, NOW(), NOW()) ", { uuid: { value: tabUUID, cfsqltype: "cf_sql_varchar" }, bizID: { value: businessID, cfsqltype: "cf_sql_integer" }, @@ -156,7 +157,8 @@ try { spID: { value: servicePointID > 0 ? servicePointID : javaCast("null", ""), cfsqltype: "cf_sql_integer", null: servicePointID <= 0 }, authCents: { value: authAmountCents, cfsqltype: "cf_sql_integer" }, piID: { value: piData.id, cfsqltype: "cf_sql_varchar" }, - custID: { value: stripeCustomerId, cfsqltype: "cf_sql_varchar" } + custID: { value: stripeCustomerId, cfsqltype: "cf_sql_varchar" }, + approvalMode: { value: isNull(approvalMode) ? javaCast("null", "") : approvalMode, cfsqltype: "cf_sql_tinyint", null: isNull(approvalMode) } }); // Get the tab ID