Fix null/empty value handling in order APIs

Wrap numeric fields with val() to prevent "can't cast empty string to number"
errors when database values are null or empty strings.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
John Mizerek 2026-01-23 21:30:13 -08:00
parent 5f3f5a7345
commit 6727f42194
4 changed files with 67 additions and 67 deletions

View file

@ -105,20 +105,20 @@
<cfset rows = []> <cfset rows = []>
<cfloop query="qLI"> <cfloop query="qLI">
<cfset arrayAppend(rows, { <cfset arrayAppend(rows, {
"OrderLineItemID": qLI.OrderLineItemID, "OrderLineItemID": val(qLI.OrderLineItemID),
"OrderLineItemParentOrderLineItemID": qLI.OrderLineItemParentOrderLineItemID, "OrderLineItemParentOrderLineItemID": val(qLI.OrderLineItemParentOrderLineItemID),
"OrderLineItemOrderID": qLI.OrderLineItemOrderID, "OrderLineItemOrderID": val(qLI.OrderLineItemOrderID),
"OrderLineItemItemID": qLI.OrderLineItemItemID, "OrderLineItemItemID": val(qLI.OrderLineItemItemID),
"OrderLineItemStatusID": qLI.OrderLineItemStatusID, "OrderLineItemStatusID": val(qLI.OrderLineItemStatusID),
"OrderLineItemPrice": qLI.OrderLineItemPrice, "OrderLineItemPrice": val(qLI.OrderLineItemPrice),
"OrderLineItemQuantity": qLI.OrderLineItemQuantity, "OrderLineItemQuantity": val(qLI.OrderLineItemQuantity),
"OrderLineItemRemark": qLI.OrderLineItemRemark, "OrderLineItemRemark": qLI.OrderLineItemRemark ?: "",
"OrderLineItemIsDeleted": qLI.OrderLineItemIsDeleted, "OrderLineItemIsDeleted": val(qLI.OrderLineItemIsDeleted),
"OrderLineItemAddedOn": qLI.OrderLineItemAddedOn, "OrderLineItemAddedOn": qLI.OrderLineItemAddedOn,
"ItemName": qLI.ItemName, "ItemName": qLI.ItemName ?: "",
"ItemParentItemID": qLI.ItemParentItemID, "ItemParentItemID": val(qLI.ItemParentItemID),
"ItemParentName": qLI.ItemParentName, "ItemParentName": qLI.ItemParentName ?: "",
"ItemIsCheckedByDefault": qLI.ItemIsCheckedByDefault "ItemIsCheckedByDefault": val(qLI.ItemIsCheckedByDefault)
})> })>
</cfloop> </cfloop>
@ -126,24 +126,24 @@
"OK": true, "OK": true,
"ERROR": "", "ERROR": "",
"ORDER": { "ORDER": {
"OrderID": qOrder.OrderID, "OrderID": val(qOrder.OrderID),
"OrderUUID": qOrder.OrderUUID, "OrderUUID": qOrder.OrderUUID ?: "",
"OrderUserID": qOrder.OrderUserID, "OrderUserID": val(qOrder.OrderUserID),
"OrderBusinessID": qOrder.OrderBusinessID, "OrderBusinessID": val(qOrder.OrderBusinessID),
"OrderBusinessDeliveryMultiplier": qOrder.OrderBusinessDeliveryMultiplier, "OrderBusinessDeliveryMultiplier": val(qOrder.OrderBusinessDeliveryMultiplier),
"OrderTypeID": qOrder.OrderTypeID, "OrderTypeID": val(qOrder.OrderTypeID),
"OrderDeliveryFee": qOrder.OrderDeliveryFee, "OrderDeliveryFee": val(qOrder.OrderDeliveryFee),
"BusinessDeliveryFee": businessDeliveryFee, "BusinessDeliveryFee": val(businessDeliveryFee),
"BusinessOrderTypes": businessOrderTypesArray, "BusinessOrderTypes": businessOrderTypesArray,
"OrderStatusID": qOrder.OrderStatusID, "OrderStatusID": val(qOrder.OrderStatusID),
"OrderAddressID": qOrder.OrderAddressID, "OrderAddressID": val(qOrder.OrderAddressID),
"OrderPaymentID": qOrder.OrderPaymentID, "OrderPaymentID": val(qOrder.OrderPaymentID),
"OrderPaymentStatus": qOrder.OrderPaymentStatus, "OrderPaymentStatus": qOrder.OrderPaymentStatus ?: "",
"OrderRemarks": qOrder.OrderRemarks, "OrderRemarks": qOrder.OrderRemarks ?: "",
"OrderAddedOn": qOrder.OrderAddedOn, "OrderAddedOn": qOrder.OrderAddedOn,
"OrderLastEditedOn": qOrder.OrderLastEditedOn, "OrderLastEditedOn": qOrder.OrderLastEditedOn,
"OrderSubmittedOn": qOrder.OrderSubmittedOn, "OrderSubmittedOn": qOrder.OrderSubmittedOn,
"OrderServicePointID": qOrder.OrderServicePointID "OrderServicePointID": val(qOrder.OrderServicePointID)
}, },
"ORDERLINEITEMS": rows "ORDERLINEITEMS": rows
})> })>

View file

@ -103,14 +103,14 @@ try {
// First pass: create all items // First pass: create all items
for (row in qItems) { for (row in qItems) {
item = { item = {
"LineItemID": row.OrderLineItemID, "LineItemID": val(row.OrderLineItemID),
"ItemID": row.OrderLineItemItemID, "ItemID": val(row.OrderLineItemItemID),
"ParentLineItemID": row.OrderLineItemParentOrderLineItemID, "ParentLineItemID": val(row.OrderLineItemParentOrderLineItemID),
"ItemName": row.ItemName, "ItemName": row.ItemName ?: "",
"Quantity": row.OrderLineItemQuantity, "Quantity": val(row.OrderLineItemQuantity),
"UnitPrice": row.OrderLineItemPrice, "UnitPrice": val(row.OrderLineItemPrice),
"Remarks": row.OrderLineItemRemark, "Remarks": row.OrderLineItemRemark ?: "",
"IsDefault": (row.ItemIsCheckedByDefault == 1), "IsDefault": (val(row.ItemIsCheckedByDefault) == 1),
"Modifiers": [] "Modifiers": []
}; };
itemsById[row.OrderLineItemID] = item; itemsById[row.OrderLineItemID] = item;

View file

@ -69,22 +69,22 @@
<cfset var businessDeliveryFee = qBusiness.recordCount GT 0 ? qBusiness.BusinessDeliveryFlatFee : 0> <cfset var businessDeliveryFee = qBusiness.recordCount GT 0 ? qBusiness.BusinessDeliveryFlatFee : 0>
<cfset out.Order = { <cfset out.Order = {
"OrderID": qOrder.OrderID, "OrderID": val(qOrder.OrderID),
"OrderUUID": qOrder.OrderUUID, "OrderUUID": qOrder.OrderUUID ?: "",
"OrderUserID": qOrder.OrderUserID, "OrderUserID": val(qOrder.OrderUserID),
"OrderBusinessID": qOrder.OrderBusinessID, "OrderBusinessID": val(qOrder.OrderBusinessID),
"OrderBusinessDeliveryMultiplier": qOrder.OrderBusinessDeliveryMultiplier, "OrderBusinessDeliveryMultiplier": val(qOrder.OrderBusinessDeliveryMultiplier),
"OrderTypeID": qOrder.OrderTypeID, "OrderTypeID": val(qOrder.OrderTypeID),
"OrderDeliveryFee": qOrder.OrderDeliveryFee, "OrderDeliveryFee": val(qOrder.OrderDeliveryFee),
"BusinessDeliveryFee": businessDeliveryFee, "BusinessDeliveryFee": val(businessDeliveryFee),
"OrderStatusID": qOrder.OrderStatusID, "OrderStatusID": val(qOrder.OrderStatusID),
"OrderAddressID": qOrder.OrderAddressID, "OrderAddressID": val(qOrder.OrderAddressID),
"OrderPaymentID": qOrder.OrderPaymentID, "OrderPaymentID": val(qOrder.OrderPaymentID),
"OrderRemarks": qOrder.OrderRemarks, "OrderRemarks": qOrder.OrderRemarks ?: "",
"OrderAddedOn": qOrder.OrderAddedOn, "OrderAddedOn": qOrder.OrderAddedOn,
"OrderLastEditedOn": qOrder.OrderLastEditedOn, "OrderLastEditedOn": qOrder.OrderLastEditedOn,
"OrderSubmittedOn": qOrder.OrderSubmittedOn, "OrderSubmittedOn": qOrder.OrderSubmittedOn,
"OrderServicePointID": qOrder.OrderServicePointID "OrderServicePointID": val(qOrder.OrderServicePointID)
}> }>
<cfset var qLI = queryExecute( <cfset var qLI = queryExecute(
@ -117,20 +117,20 @@
<cfset var rows = []> <cfset var rows = []>
<cfloop query="qLI"> <cfloop query="qLI">
<cfset arrayAppend(rows, { <cfset arrayAppend(rows, {
"OrderLineItemID": qLI.OrderLineItemID, "OrderLineItemID": val(qLI.OrderLineItemID),
"OrderLineItemParentOrderLineItemID": qLI.OrderLineItemParentOrderLineItemID, "OrderLineItemParentOrderLineItemID": val(qLI.OrderLineItemParentOrderLineItemID),
"OrderLineItemOrderID": qLI.OrderLineItemOrderID, "OrderLineItemOrderID": val(qLI.OrderLineItemOrderID),
"OrderLineItemItemID": qLI.OrderLineItemItemID, "OrderLineItemItemID": val(qLI.OrderLineItemItemID),
"OrderLineItemStatusID": qLI.OrderLineItemStatusID, "OrderLineItemStatusID": val(qLI.OrderLineItemStatusID),
"OrderLineItemPrice": qLI.OrderLineItemPrice, "OrderLineItemPrice": val(qLI.OrderLineItemPrice),
"OrderLineItemQuantity": qLI.OrderLineItemQuantity, "OrderLineItemQuantity": val(qLI.OrderLineItemQuantity),
"OrderLineItemRemark": qLI.OrderLineItemRemark, "OrderLineItemRemark": qLI.OrderLineItemRemark ?: "",
"OrderLineItemIsDeleted": qLI.OrderLineItemIsDeleted, "OrderLineItemIsDeleted": val(qLI.OrderLineItemIsDeleted),
"OrderLineItemAddedOn": qLI.OrderLineItemAddedOn, "OrderLineItemAddedOn": qLI.OrderLineItemAddedOn,
"ItemName": qLI.ItemName, "ItemName": qLI.ItemName ?: "",
"ItemParentItemID": qLI.ItemParentItemID, "ItemParentItemID": val(qLI.ItemParentItemID),
"ItemParentName": qLI.ItemParentName, "ItemParentName": qLI.ItemParentName ?: "",
"ItemIsCheckedByDefault": qLI.ItemIsCheckedByDefault "ItemIsCheckedByDefault": val(qLI.ItemIsCheckedByDefault)
})> })>
</cfloop> </cfloop>

View file

@ -141,16 +141,16 @@ try {
} catch (any de) { completedAt = ""; } } catch (any de) { completedAt = ""; }
arrayAppend(orders, { arrayAppend(orders, {
"OrderID": row.OrderID, "OrderID": val(row.OrderID),
"OrderUUID": row.OrderUUID ?: "", "OrderUUID": row.OrderUUID ?: "",
"BusinessID": row.OrderBusinessID, "BusinessID": val(row.OrderBusinessID),
"BusinessName": row.BusinessName ?: "Unknown", "BusinessName": row.BusinessName ?: "Unknown",
"OrderTotal": round(total * 100) / 100, "OrderTotal": round(val(total) * 100) / 100,
"OrderStatusID": row.OrderStatusID, "OrderStatusID": val(row.OrderStatusID),
"StatusName": statusText, "StatusName": statusText,
"OrderTypeID": row.OrderTypeID ?: 0, "OrderTypeID": val(row.OrderTypeID),
"TypeName": row.OrderTypeName ?: "Unknown", "TypeName": row.OrderTypeName ?: "Unknown",
"ItemCount": itemCount, "ItemCount": val(itemCount),
"CreatedAt": createdAt, "CreatedAt": createdAt,
"CompletedAt": completedAt "CompletedAt": completedAt
}); });