JavaScript coding of three tier discount levels

Avatar

Avatar

lewiso69254278

Avatar

lewiso69254278

lewiso69254278

14-10-2019

Hello,

I have scripted for a three tiered discount order form, which, works with the following code:

if (xfa.resolveNode("subTotal.numTotalUnits").rawValue < xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold1").rawValue){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subBelow.numUnitBelow").rawValue;

}

else if (xfa.resolveNode("subTotal.numTotalUnits").rawValue >= xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold1").rawValue && xfa.resolveNode("subTotal.numTotalUnits").rawValue < xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold2").rawValue){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount1").rawValue;

}

else if (xfa.resolveNode("subTotal.numTotalUnits").rawValue >= xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold2").rawValue && xfa.resolveNode("subTotal.numTotalUnits").rawValue < xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold3").rawValue){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount2").rawValue;

}

else if (xfa.resolveNode("subTotal.numTotalUnits").rawValue >= xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold3").rawValue){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount3").rawValue;

}

However, the issue is that while the code above works, it only works when there are three discount levels and at that time calculates appropriately.

The three discount levels would not apply to all items ordered, therefore; I need a method to only calculate if the subsequent discount level is entered in the field.

I have tried null verification checks, however, I am not able to get it working. The null verification check should only be on the subsequent discount level, and, if present the next level needs to be checked prior to attempting a verification of the TotalUnits.

Any help would, of course, be very welcome.

Thank you in advance,

Lewis

Accepted Solutions (1)

Accepted Solutions (1)

Avatar

Avatar

_Bruce_Robertson

MVP

Total Posts

1.8K

Likes

268

Correct Answer

372

Avatar

_Bruce_Robertson

MVP

Total Posts

1.8K

Likes

268

Correct Answer

372
_Bruce_Robertson
MVP

16-10-2019

Hi Lewis,

Sounds like you do need a null test, maybe something like;

var numTotalUnits = xfa.resolveNode("subTotal.numTotalUnits");

var numThreshold1 = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold1");

var numThreshold2 = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold2");

var numThreshold3 = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold3");

if (numTotalUnits.rawValue < numThreshold1.rawValue){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subBelow.numRegularPrice").rawValue;

}

else if (!numThreshold2.isNull && (numTotalUnits.rawValue >= numThreshold1.rawValue && numTotalUnits.rawValue < numThreshold2.rawValue)){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount1").rawValue;

}

else if (!numThreshold2.isNull && !numThreshold3.isNull && (numTotalUnits.rawValue >= numThreshold2.rawValue && numTotalUnits.rawValue < numThreshold3.rawValue)){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount2").rawValue;

}

else if (!numThreshold3.isNull && (numTotalUnits.rawValue >= numThreshold3.rawValue)){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount3").rawValue;

}

Regards

Bruce

Answers (3)

Answers (3)

Avatar

Avatar

lewiso69254278

Avatar

lewiso69254278

lewiso69254278

22-10-2019

Spoke too soon, had to make amendments to the code, need it to trigger based on the three tiers, have this so far:

var numTotalUnits = xfa.resolveNode("subTotal.numTotalUnits");

var numThreshold1 = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold1");

var numThreshold2 = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold2");

var numThreshold3 = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold3");

var numRegularPrice = xfa.resolveNode("this.parent.parent.parent.subControls.subBelow.numRegularPrice");

var numDiscount1 = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount1");

var numDiscount2 = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount2");

var numDiscount3 = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount3");

if (numThreshold1.rawValue == null || numThreshold1.rawValue == ""){

this.rawValue = numRegularPrice.rawValue;

}

else if (numThreshold1.rawValue != null && numDiscount1.rawValue != null && numThreshold2.rawValue == null || numThreshold2.rawValue == "" && numDiscount2.rawValue == null || numDiscount2.rawValue == "" && (numTotalUnits.rawValue < numThreshold1.rawValue)){

this.rawValue = numRegularPrice.rawValue;

}

else if (numThreshold1.rawValue != null && numDiscount1.rawValue != null && numThreshold2.rawValue == null || numThreshold2.rawValue == "" && numDiscount2.rawValue == null || numDiscount2.rawValue == "" && (numTotalUnits.rawValue >= numThreshold1.rawValue)){

this.rawValue = numDiscount1.rawValue;

}

else if (numThreshold1.rawValue != null && numDiscount1.rawValue != null && numThreshold2.rawValue != null && numDiscount2.rawValue != null && numThreshold3.rawValue == null || numThreshold3.rawValue == "" && numDiscount3.rawValue == null || numDiscount3.rawValue == "" && (numTotalUnits.rawValue >= numThreshold1.rawValue && numTotalUnits.rawValue < numThreshold2.rawValue)){

this.rawVaue = numDiscount1.rawValue;

}

else if (numThreshold1.rawValue != null && numDiscount1.rawValue != null && numThreshold2.rawValue != null && numDiscount2.rawValue != null && numThreshold3.rawValue == null || numThreshold3.rawValue == "" && numDiscount3.rawValue == null || numDiscount3.rawValue == "" && (numTotalUnits.rawValue >= numThreshold2.rawValue)){

this.rawValue = numDiscount2.rawValue;

}

else if (numThreshold1.rawValue != null && numDiscount1.rawValue != null && numThreshold2.rawValue != null && numDiscount2.rawValue != null && numThreshold3.rawValue != null && numDiscount3.rawValue != null && (numTotalUnits.rawValue >= numThreshold2.rawValue && numTotalUnits.rawValue < numThreshold3.rawValue)){

this.rawValue = numDiscount2.rawValue;

}

else if (numThreshold1.rawValue != null && numDiscount1.rawValue != null && numThreshold2.rawValue != null && numDiscount2.rawValue != null && numThreshold3.rawValue != null && numDiscount3.rawValue != null && (numTotalUnits.rawValue >= numThreshold3.rawValue)){

this.rawValue = numDiscount3.rawValue;

}

So, in the above I need it to trigger after verifying each trigger level and as the discounts change.

The above seems to work well when all three are populated, but, does not work completely as expected for when the discounts are of only 2 levels or 1 level.

Any additional assistance is greatly appreciated.

Lewis

Avatar

Avatar

lewiso69254278

Avatar

lewiso69254278

lewiso69254278

16-10-2019

Worked like a charm.

Thank you,

Lewis

Avatar

Avatar

lewiso69254278

Avatar

lewiso69254278

lewiso69254278

15-10-2019

I have modified slightly the code with a name change to a field in order to better display the requirement:

if (xfa.resolveNode("subTotal.numTotalUnits").rawValue < xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold1").rawValue){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subBelow.numRegularPrice").rawValue;

}

else if (xfa.resolveNode("subTotal.numTotalUnits").rawValue >= xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold1").rawValue && xfa.resolveNode("subTotal.numTotalUnits").rawValue < xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold2").rawValue){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount1").rawValue;

}

else if (xfa.resolveNode("subTotal.numTotalUnits").rawValue >= xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold2").rawValue && xfa.resolveNode("subTotal.numTotalUnits").rawValue < xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold3").rawValue){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount2").rawValue;

}

else if (xfa.resolveNode("subTotal.numTotalUnits").rawValue >= xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numThreshold3").rawValue){

this.rawValue = xfa.resolveNode("this.parent.parent.parent.subControls.subVolume.numDiscount3").rawValue;

}

You will notice within the first "if" statement the value is now set to "numRegularPrice".

Any help would be well received.

Thank you,

Lewis