I have an eReceipt issue. I am able to get the nested loop to work to display the promo amounts and descriptions when there is only one promo per item purchased. Where I am stuck is trying to add a third loop to account for the scenario where there are multiple promos PER item. How and where would I add this additional loop? Here is an XML sample and below that is my current code. Thank you!
<eReceiptPOS xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<receiptHeader>
<storeAddress>2901 W AGUA FRIA FWY</storeAddress>
<storeCity>PHOENIX</storeCity>
<storeState>AZ</storeState>
<storePostalCode>85027</storePostalCode>
<storePhoneNumber>6234929045</storePhoneNumber>
</receiptHeader>
<receiptLine>
<transactionType>Sale</transactionType>
<itemUPC>40051521661</itemUPC>
<itemDescription>Top Dog PLUS</itemDescription>
<itemQuantity>1</itemQuantity>
<itemPriceCharged>0.00</itemPriceCharged>
<itemRequiresReturnReceipt>false</itemRequiresReturnReceipt>
<itemRegularPrice>23.00</itemRegularPrice>
<itemPromo>
<itemPromoDescription>10% Off Military Discount Tuesday</itemPromoDescription>
<itemPromoAmount>2.30</itemPromoAmount>
</itemPromo>
<itemLoyaltyPoints>20.70</itemLoyaltyPoints>
<itemAllPromosTotalAmout>23.00</itemAllPromosTotalAmout>
<itemReturnPrice>0.0</itemReturnPrice>
<isDonation>false</isDonation>
<itemNonTaxable>true</itemNonTaxable>
<itemReceiptedReturn>false</itemReceiptedReturn>
</receiptLine>
<receiptLine>
<transactionType>Sale</transactionType>
<itemUPC>40050137741</itemUPC>
<itemDescription>Top Dog</itemDescription>
<itemQuantity>1</itemQuantity>
<itemPriceCharged>0.00</itemPriceCharged>
<itemRequiresReturnReceipt>false</itemRequiresReturnReceipt>
<itemRegularPrice>18.00</itemRegularPrice>
<itemPromo>
<itemPromoDescription>10% Off Military Discount Tuesday</itemPromoDescription>
<itemPromoAmount>1.80</itemPromoAmount>
</itemPromo>
<itemLoyaltyPoints>16.20</itemLoyaltyPoints>
<itemAllPromosTotalAmout>18.00</itemAllPromosTotalAmout>
<itemReturnPrice>0.0</itemReturnPrice>
<isDonation>false</isDonation>
<itemNonTaxable>true</itemNonTaxable>
<itemReceiptedReturn>false</itemReceiptedReturn>
</receiptLine>
<receiptLine>
<transactionType>Sale</transactionType>
<itemUPC>40050067261</itemUPC>
<itemDescription>AUSTRALIAN CATTLE DOG B&T</itemDescription>
<itemQuantity>1</itemQuantity>
<itemPriceCharged>0.00</itemPriceCharged>
<itemRequiresReturnReceipt>false</itemRequiresReturnReceipt>
<itemRegularPrice>44.00</itemRegularPrice>
<itemPromo>
<itemPromoDescription>Weekday Discount</itemPromoDescription>
<itemPromoAmount>5.00</itemPromoAmount>
</itemPromo>
<itemPromo>
<itemPromoDescription>10% Off Military Discount Tuesday</itemPromoDescription>
<itemPromoAmount>3.90</itemPromoAmount>
</itemPromo>
<itemLoyaltyPoints>35.10</itemLoyaltyPoints>
<itemAllPromosTotalAmout>44.00</itemAllPromosTotalAmout>
<itemReturnPrice>0.0</itemReturnPrice>
<isDonation>false</isDonation>
<itemNonTaxable>true</itemNonTaxable>
<itemReceiptedReturn>false</itemReceiptedReturn>
</receiptLine>
<receiptSummary>
<subTotalAmount>0.00</subTotalAmount>
<taxableAmount>0.0</taxableAmount>
<nonTaxableAmount>0.0</nonTaxableAmount>
<taxRate>0.0</taxRate>
<taxUSAmount>0.0</taxUSAmount>
<totalAmount>0.00</totalAmount>
<tenderedAmount>0</tenderedAmount>
<tenderType>Treats account</tenderType>
<paymentCardNumberMasked>1344808369</paymentCardNumberMasked>
<cashChangeDue>0</cashChangeDue>
<totalItemsSold>3</totalItemsSold>
<totalItemsReturned>0</totalItemsReturned>
<feeCdafc>0</feeCdafc>
<feePifRsf>0</feePifRsf>
</receiptSummary>
<receiptSaleDetails>
<receiptValidFrom>2021-09-17T08:39:37.0741524</receiptValidFrom>
<storeNumber>0133</storeNumber>
<tillNumber>111</tillNumber>
<transactionNumber>70026462</transactionNumber>
<transactionDateTime>2021-07-19T08:39:37.0741524</transactionDateTime>
</receiptSaleDetails>
<receiptSavingDetails>
<loyaltyPromoSavingsTotal>85.00</loyaltyPromoSavingsTotal>
<treatPoints>70.00</treatPoints>
<totalSavingsPercent>100.00 %</totalSavingsPercent>
<totalSavingsAmount>85.00</totalSavingsAmount>
<totalRedemptionValue>9925.00</totalRedemptionValue>
</receiptSavingDetails>
<receiptLoyaltyDetails>
<loyaltyID>1344808369</loyaltyID>
<basePointsEarned>0</basePointsEarned>
<bonusPointsEarned>0</bonusPointsEarned>
<pointsRedeemed>28800</pointsRedeemed>
<pointsBalance>3970820</pointsBalance>
<pointsExpirationDate xsi:nil="true" />
</receiptLoyaltyDetails>
</eReceiptPOS>
Code:
%%[
set @itemNodes = BuildRowsetFromXML(@xml,"eReceiptPOS/receiptLine",0)
set @itemRowCount = rowcount(@itemNodes)
if @itemRowCount > 0 THEN
FOR @i = 1 to @itemRowCount DO
set @itemNodePath = concat("/eReceiptPOS/receiptLine[",@i,"]/")
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemUPC'),0)) > 0 then
set @itemUPC = Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemUPC"),0),1),'Value')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemDescription'),0)) > 0 then
set @itemDesc = Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemDescription"),0),1),'Value')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemRegularPrice'),0)) > 0 then
set @itemRegularPrice = FormatNumber(Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemRegularPrice"),0),1),'Value'),'C2')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemReturnPrice'),0)) > 0 then
set @itemReturnPrice = FormatNumber(Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemReturnPrice"),0),1),'Value'), 'C2')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemPriceCharged'),0)) > 0 then
set @itemPriceCharged = FormatNumber(Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemPriceCharged"),0),1),'Value'), 'C2')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemQuantity'),0)) > 0 then
SET @itemQuantity = Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemQuantity"),0),1),'Value')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemRegularPrice'),0)) > 0 AND not empty(@itemQuantity) then
SET @itemMultipliedPrice = Format(Multiply(@itemQuantity, Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemRegularPrice"),0),1),'Value')), 'C2')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemLoyaltySavings'), 0)) > 0 THEN
SET @itemLoyaltySavings = Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemLoyaltySavings"),0),1),'Value')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemLoyaltyPoints'), 0)) > 0 THEN
SET @treatsPointsDiscount = Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemLoyaltyPoints"),0),1),'Value')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemEmployeeDiscountAmount'), 0)) > 0 THEN
SET @itemEmployeeDiscountAmount = Format(Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemEmployeeDiscountAmount"),0),1),'Value'), 'C2')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemCouponAmount'), 0)) > 0 THEN
SET @itemCouponAmount = Format(Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemCouponAmount"),0),1),'Value'),'C2')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemDiscountReasonCode'), 0)) > 0 THEN
SET @itemDiscountReasonCode = Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemDiscountReasonCode"),0),1),'Value')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemDiscountAmount'), 0)) > 0 THEN
SET @itemDiscountAmount = Format(Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemDiscountAmount"),0),1),'Value'),'C2')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemGiftCardLast4Number'), 0)) > 0 THEN
set @itemGiftCardLast4Number = Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemGiftCardLast4Number"),0),1),'Value')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemPrescriptionCardNumber'), 0)) > 0 THEN
set @itemPrescriptionCardNumber = Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemPrescriptionCardNumber"),0),1),'Value')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemNodePath,'/itemTrainingDate'), 0)) > 0 THEN
set @itemTrainingDate = Format(Field(Row(BuildRowsetFromXML(@xml,concat(@itemNodePath,"itemTrainingDate"),0),1),'Value'),'MM/dd/yyyy')
ENDIF
]%%
%%[IF not empty(@itemUPC) or not empty(@itemDesc) or not empty(@itemPriceCharged) then]%%
%%[if not empty(@itemUPC) then]%%
%%=v(@itemUPC)=%%
%%[ENDIF]%%
%%[if not empty(@itemDesc) then]%%
<br> %%=v(@itemDesc)=%%
%%[endif]%%
%%[IF not empty(@itemPriceCharged) then]%%
%%=v(@itemPriceCharged)=%%
%%[endif]%%
%%[ENDIF]%%
%%[IF not empty(@itemQuantity) AND not empty(@itemRegularPrice) then]%%
reg. price (%%=v(@itemQuantity)=%% @ %%=v(@itemRegularPrice)=%%)
%%=v(@itemMultipliedPrice)=%%
%%[endif]%%
%%[IF not empty(@itemDiscountReasonCode) OR not empty(@itemDiscountAmount) THEN]%%]
%%=concat('(',Format(@itemDiscountAmount, 'C2'),')')=%%
%%[ENDIF]%%
%%[IF not empty(@itemLoyaltySavings) THEN]%%
treats savings
%%=concat('(',Format(@itemLoyaltySavings, 'C2'),')')=%%
%%[ENDIF]%%
%%[IF not empty(@treatsPointsDiscount) THEN]%%
treats points
%%=concat('(',Format(@treatsPointsDiscount, 'C2'),')')=%%
%%[ENDIF]%%
%%[IF not empty(@itemEmployeeDiscountAmount) THEN]%%
associate discount
%%=concat('(',Format(@itemEmployeeDiscountAmount, 'C2'),')')=%%
%%[ENDIF]%%
%%[IF not empty(@itemCouponAmount) THEN]%%
coupon amount]
%%=concat('(',Format(@itemCouponAmount, 'C2'),')')=%%
%%[ENDIF]%%
%%[
set @itemPromoNodes = BuildRowsetFromXML(@xml,"eReceiptPOS/receiptLine/itemPromo",0)
set @itemPromoRowCount = rowcount(@itemPromoNodes)
if @itemPromoRowCount > 0 THEN
FOR @j = 1 to @itemPromoRowCount DO
set @itemPromoNodePath = concat("/eReceiptPOS/receiptLine[",@i,"]/itemPromo/")
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemPromoNodePath,'itemPromoAmount'), 0)) > 0 THEN
SET @itemPromoAmount = Field(Row(BuildRowsetFromXML(@xml,concat(@itemPromoNodePath,"itemPromoAmount"),0),1),'Value')
ENDIF
IF rowCount(BuildRowsetFromXML(@xml,concat(@itemPromoNodePath,'itemPromoDescription'), 0)) > 0 THEN
SET @itemPromoDescription = Field(Row(BuildRowsetFromXML(@xml,concat(@itemPromoNodePath,"itemPromoDescription"),0),1),'Value')
ENDIF
next @j endif
]%%
%%[IF not empty(@itemPromoAmount) AND not empty(@itemPromoDescription) THEN]%%
%%=v(@itemPromoDescription)=%%
%%=concat('(',Format(@itemPromoAmount, 'C2'),')')=%%
%%[ENDIF]%%
%%[if not empty(@itemGiftCardLast4Number) then]%%
gift card
%%=v(@itemGiftCardLast4Number)=%%
%%[endif]%%
%%[if not empty(@itemPrescriptionCardNumber) then]%%
%%=v(@itemPrescriptionCardNumber)=%%
%%[endif]%%
%%[if not empty(@itemTrainingDate) then]%%
training date
%%=v(@itemTrainingDate)=%%
%%[endif]%%
%%[if not empty(@itemReturnprice) then]%%
return price
%%=v(@itemReturnPrice)=%% each
%%[endif]%%
%%[next @i endif]%%
@adam-spriggs