Fix cart item lookup to use orderLineItemId directly

- Add IsDeleted=0 filter to existing item search query
- Add support for OrderLineItemID parameter for direct item targeting
- Fixes duplicate items being created on quantity increment
- Fixes item deletion not working due to finding wrong/deleted records

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
John Pinkyfloyd 2026-03-09 09:25:20 -07:00
parent fc9bbd78be
commit 50307efa8d

View file

@ -288,6 +288,7 @@
<cfset OrderID = val( structKeyExists(data,"OrderID") ? data.OrderID : 0 )> <cfset OrderID = val( structKeyExists(data,"OrderID") ? data.OrderID : 0 )>
<cfset ParentLineItemID = val( structKeyExists(data,"ParentOrderLineItemID") ? data.ParentOrderLineItemID : 0 )> <cfset ParentLineItemID = val( structKeyExists(data,"ParentOrderLineItemID") ? data.ParentOrderLineItemID : 0 )>
<cfset OrderLineItemID = val( structKeyExists(data,"OrderLineItemID") ? data.OrderLineItemID : 0 )>
<cfset OriginalItemID = structKeyExists(data,"ItemID") ? data.ItemID : 0> <cfset OriginalItemID = structKeyExists(data,"ItemID") ? data.ItemID : 0>
<cfset ItemID = val(OriginalItemID)> <cfset ItemID = val(OriginalItemID)>
@ -399,10 +400,27 @@
</cfif> </cfif>
</cfif> </cfif>
<!--- Find existing line item (by order, parent LI, item) - unless ForceNew is set ---> <!--- Find existing line item - by direct ID if provided, otherwise by order/parent/item --->
<cfif ForceNew> <cfif ForceNew>
<!--- ForceNew: Skip existing lookup, will always create new line item ---> <!--- ForceNew: Skip existing lookup, will always create new line item --->
<cfset qExisting = queryNew("ID", "integer")> <cfset qExisting = queryNew("ID", "integer")>
<cfelseif OrderLineItemID GT 0>
<!--- Direct lookup by OrderLineItemID --->
<cfset qExisting = queryTimed(
"
SELECT ID
FROM OrderLineItems
WHERE ID = ?
AND OrderID = ?
AND IsDeleted = 0
LIMIT 1
",
[
{ value = OrderLineItemID, cfsqltype = "cf_sql_integer" },
{ value = OrderID, cfsqltype = "cf_sql_integer" }
],
{ datasource = "payfrit" }
)>
<cfelse> <cfelse>
<cfset qExisting = queryTimed( <cfset qExisting = queryTimed(
" "
@ -411,6 +429,7 @@
WHERE OrderID = ? WHERE OrderID = ?
AND ParentOrderLineItemID = ? AND ParentOrderLineItemID = ?
AND ItemID = ? AND ItemID = ?
AND IsDeleted = 0
LIMIT 1 LIMIT 1
", ",
[ [