Keep deselected inverted defaults in cart with Quantity=0

For inverted groups, when user deselects a default item, keep it in cart
with Quantity=0 instead of deleting. This allows cart to display "NO X".

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
John Pinkyfloyd 2026-03-08 23:05:44 -07:00
parent f57d249fee
commit 503754e248

View file

@ -457,15 +457,51 @@
<cfset attachDefaultChildren(OrderID, qExisting.ID, ItemID)> <cfset attachDefaultChildren(OrderID, qExisting.ID, ItemID)>
<cfset arrayAppend(request.attachDebug, "AFTER attachDefaultChildren call")> <cfset arrayAppend(request.attachDebug, "AFTER attachDefaultChildren call")>
<cfelse> <cfelse>
<cfset queryTimed( <!--- Deselecting: check if this is a default from an inverted group --->
" <!--- If so, keep it with Quantity=0 for "NO X" display; otherwise delete --->
UPDATE OrderLineItems <cfset var isInvertedDefault = false>
SET IsDeleted = b'1' <cfif qItem.recordCount GT 0>
WHERE ID = ? <cfset var qParentItem = queryTimed(
", "SELECT IsInvertedGroup FROM Items WHERE ID = ? LIMIT 1",
[ { value = qExisting.ID, cfsqltype = "cf_sql_integer" } ], [ { value = qItem.ParentItemID, cfsqltype = "cf_sql_integer" } ],
{ datasource = "payfrit" } { datasource = "payfrit" }
)> )>
<cfif qParentItem.recordCount GT 0 AND val(qParentItem.IsInvertedGroup) EQ 1>
<!--- Check if item was a default --->
<cfset var qItemDefault = queryTimed(
"SELECT IsCheckedByDefault FROM Items WHERE ID = ? LIMIT 1",
[ { value = ItemID, cfsqltype = "cf_sql_integer" } ],
{ datasource = "payfrit" }
)>
<cfif qItemDefault.recordCount GT 0 AND val(qItemDefault.IsCheckedByDefault) EQ 1>
<cfset isInvertedDefault = true>
</cfif>
</cfif>
</cfif>
<cfif isInvertedDefault>
<!--- Keep in cart with Quantity=0 for "NO X" display --->
<cfset queryTimed(
"
UPDATE OrderLineItems
SET Quantity = 0, IsDeleted = b'0'
WHERE ID = ?
",
[ { value = qExisting.ID, cfsqltype = "cf_sql_integer" } ],
{ datasource = "payfrit" }
)>
<cfelse>
<!--- Normal deselect: mark as deleted --->
<cfset queryTimed(
"
UPDATE OrderLineItems
SET IsDeleted = b'1'
WHERE ID = ?
",
[ { value = qExisting.ID, cfsqltype = "cf_sql_integer" } ],
{ datasource = "payfrit" }
)>
</cfif>
</cfif> </cfif>
<cfelse> <cfelse>
<!--- Insert new if selecting, otherwise no-op ---> <!--- Insert new if selecting, otherwise no-op --->