CASH-2114: Price OEM parts and show price difference on page
This commit is contained in:
parent
ef07dfdd8a
commit
9f3fb0144f
3 changed files with 56 additions and 6 deletions
|
|
@ -12,6 +12,7 @@ const partTypeStrings = {
|
|||
SERVICE_PACKAGE_DISCOUNT: "SERVICE PACKAGE DISCOUNT",
|
||||
QUOTE_PAGE_DISCOUNT: "QUOTE PAGE DISCOUNT",
|
||||
DONATION: "DONATION",
|
||||
WINDSHIELD: "WINDSHIELD",
|
||||
};
|
||||
|
||||
export { partTypeStrings };
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ export default {
|
|||
props: {
|
||||
cmsWidgetName: String,
|
||||
modelValue: Boolean,
|
||||
oemGlassPartPrice: Number,
|
||||
aftermarketGlassPartPrice: Number,
|
||||
},
|
||||
data() {
|
||||
return {
|
||||
|
|
@ -36,7 +38,10 @@ export default {
|
|||
return this.getCmsContent(this.cmsWidgetName, "HeaderText");
|
||||
},
|
||||
bodyText() {
|
||||
return this.getCmsContent(this.cmsWidgetName, "BodyText");
|
||||
let priceDifference = this.oemGlassPartPrice - this.aftermarketGlassPartPrice;
|
||||
let bodyText = this.getCmsContent(this.cmsWidgetName, "BodyText");
|
||||
bodyText = bodyText.replace("{custom:OEMGLASSPRICE}", "$" + priceDifference.toFixed(2));
|
||||
return bodyText;
|
||||
},
|
||||
footerText() {
|
||||
return this.getCmsContent(this.cmsWidgetName, "FooterText");
|
||||
|
|
|
|||
|
|
@ -89,7 +89,9 @@
|
|||
<oemGlassQuestion
|
||||
cmsWidgetName="OemGlassQuestionWidget"
|
||||
v-if="offerOem && !isInsuranceSelected"
|
||||
v-model="isOemGlassSelected" />
|
||||
v-model="isOemGlassSelected"
|
||||
:oemGlassPartPrice="oemGlassPartPrice"
|
||||
:aftermarketGlassPartPrice="aftermarketGlassPartPrice" />
|
||||
|
||||
<saveProgressModalQuestion
|
||||
modalWidgetName="SaveProgressModalWidget"
|
||||
|
|
@ -360,6 +362,18 @@ export default {
|
|||
...quotePageDiscountParts,
|
||||
];
|
||||
|
||||
let pricedAlternateGlassParts = null;
|
||||
if (alternateGlassPartsForOem && alternateGlassPartsForOem.length > 0) {
|
||||
pricedAlternateGlassParts = await baseMixin.methods.dispatchStoreActionWithLogging(
|
||||
storeActions.PRICE_ORDER_ITEMS_AND_SAVE_SERVER_DATA,
|
||||
{
|
||||
availableLineItems: alternateGlassPartsForOem,
|
||||
},
|
||||
"quote",
|
||||
false
|
||||
);
|
||||
}
|
||||
|
||||
// When calling pricing from the quote page, always use the cash parent account but save the existing one in case it's unverified insurance navigating backwards
|
||||
var holdParentAccountNumber = store.getters.order.payment?.parentAccountNumber;
|
||||
var holdBillToAccountNumber = store.getters.order.payment?.billToAccountNumber;
|
||||
|
|
@ -422,9 +436,40 @@ export default {
|
|||
vm.holdBillToAccountNumber = holdBillToAccountNumber;
|
||||
vm.skipToInsurance = shouldSkipToInsurance;
|
||||
vm.offerOem = offerOem;
|
||||
vm.alternateGlassPartsForOem = alternateGlassPartsForOem; // oemParts
|
||||
vm.alternateGlassPartsForOem = pricedAlternateGlassParts; // oemParts
|
||||
vm.isOemGlassSelected = isOemGlassSelected;
|
||||
|
||||
const getOEMGlassPartPrice = () => {
|
||||
let price = 0;
|
||||
if (vm.alternateGlassPartsForOem) {
|
||||
let oemGlassPart = vm.isOemGlassSelected
|
||||
? vm.lineItems.glassParts
|
||||
: vm.alternateGlassPartsForOem;
|
||||
if (oemGlassPart) {
|
||||
price = oemGlassPart.find(
|
||||
(altPart) => altPart.partType === partTypeStrings.WINDSHIELD
|
||||
)?.sellingPrice;
|
||||
}
|
||||
}
|
||||
return price;
|
||||
};
|
||||
const getAftermarketGlassPartPrice = () => {
|
||||
let price = 0;
|
||||
if (vm.alternateGlassPartsForOem) {
|
||||
let aftermarketGlassPart = vm.isOemGlassSelected
|
||||
? vm.alternateGlassPartsForOem
|
||||
: vm.lineItems.glassParts;
|
||||
if (aftermarketGlassPart) {
|
||||
price = aftermarketGlassPart.find(
|
||||
(altPart) => altPart.partType === partTypeStrings.WINDSHIELD
|
||||
)?.sellingPrice;
|
||||
}
|
||||
}
|
||||
return price;
|
||||
};
|
||||
vm.oemGlassPartPrice = getOEMGlassPartPrice();
|
||||
vm.aftermarketGlassPartPrice = getAftermarketGlassPartPrice();
|
||||
|
||||
if (revalidatePromoResponse) {
|
||||
const revalidateAlerts = buildToastMessagesFromRevalidateOrValidatePromoResponse(
|
||||
revalidatePromoResponse,
|
||||
|
|
@ -943,11 +988,10 @@ export default {
|
|||
return false;
|
||||
},
|
||||
swapOEMGlassPartsOnOrder() {
|
||||
const windshieldString = "WINDSHIELD";
|
||||
this.lineItems.glassParts.forEach((part, index) => {
|
||||
if (part.partType === windshieldString) {
|
||||
if (part.partType === partTypeStrings.WINDSHIELD) {
|
||||
let altPartToUse = this.alternateGlassPartsForOem.find(
|
||||
(altPart) => altPart.partType === windshieldString
|
||||
(altPart) => altPart.partType === partTypeStrings.WINDSHIELD
|
||||
);
|
||||
if (altPartToUse) {
|
||||
this.lineItems.glassParts[index] = altPartToUse;
|
||||
|
|
|
|||
Loading…
Reference in a new issue