Merge pull request #3005 from Safelite/feature/CASH-2114
Feature/CASH-2114
This commit is contained in:
commit
7b5397cb5d
4 changed files with 59 additions and 8 deletions
|
|
@ -12,6 +12,7 @@ const partTypeStrings = {
|
||||||
SERVICE_PACKAGE_DISCOUNT: "SERVICE PACKAGE DISCOUNT",
|
SERVICE_PACKAGE_DISCOUNT: "SERVICE PACKAGE DISCOUNT",
|
||||||
QUOTE_PAGE_DISCOUNT: "QUOTE PAGE DISCOUNT",
|
QUOTE_PAGE_DISCOUNT: "QUOTE PAGE DISCOUNT",
|
||||||
DONATION: "DONATION",
|
DONATION: "DONATION",
|
||||||
|
WINDSHIELD: "WINDSHIELD",
|
||||||
};
|
};
|
||||||
|
|
||||||
export { partTypeStrings };
|
export { partTypeStrings };
|
||||||
|
|
|
||||||
|
|
@ -25,6 +25,8 @@ export default {
|
||||||
props: {
|
props: {
|
||||||
cmsWidgetName: String,
|
cmsWidgetName: String,
|
||||||
modelValue: Boolean,
|
modelValue: Boolean,
|
||||||
|
oemGlassPartPrice: Number,
|
||||||
|
aftermarketGlassPartPrice: Number,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
@ -36,7 +38,10 @@ export default {
|
||||||
return this.getCmsContent(this.cmsWidgetName, "HeaderText");
|
return this.getCmsContent(this.cmsWidgetName, "HeaderText");
|
||||||
},
|
},
|
||||||
bodyText() {
|
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() {
|
footerText() {
|
||||||
return this.getCmsContent(this.cmsWidgetName, "FooterText");
|
return this.getCmsContent(this.cmsWidgetName, "FooterText");
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,9 @@
|
||||||
<oemGlassQuestion
|
<oemGlassQuestion
|
||||||
cmsWidgetName="OemGlassQuestionWidget"
|
cmsWidgetName="OemGlassQuestionWidget"
|
||||||
v-if="offerOem && !isInsuranceSelected"
|
v-if="offerOem && !isInsuranceSelected"
|
||||||
v-model="isOemGlassSelected" />
|
v-model="isOemGlassSelected"
|
||||||
|
:oemGlassPartPrice="oemGlassPartPrice"
|
||||||
|
:aftermarketGlassPartPrice="aftermarketGlassPartPrice" />
|
||||||
|
|
||||||
<saveProgressModalQuestion
|
<saveProgressModalQuestion
|
||||||
modalWidgetName="SaveProgressModalWidget"
|
modalWidgetName="SaveProgressModalWidget"
|
||||||
|
|
@ -360,6 +362,18 @@ export default {
|
||||||
...quotePageDiscountParts,
|
...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
|
// 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 holdParentAccountNumber = store.getters.order.payment?.parentAccountNumber;
|
||||||
var holdBillToAccountNumber = store.getters.order.payment?.billToAccountNumber;
|
var holdBillToAccountNumber = store.getters.order.payment?.billToAccountNumber;
|
||||||
|
|
@ -422,9 +436,41 @@ export default {
|
||||||
vm.holdBillToAccountNumber = holdBillToAccountNumber;
|
vm.holdBillToAccountNumber = holdBillToAccountNumber;
|
||||||
vm.skipToInsurance = shouldSkipToInsurance;
|
vm.skipToInsurance = shouldSkipToInsurance;
|
||||||
vm.offerOem = offerOem;
|
vm.offerOem = offerOem;
|
||||||
vm.alternateGlassPartsForOem = alternateGlassPartsForOem; // oemParts
|
vm.alternateGlassPartsForOem = pricedAlternateGlassParts; // oemParts
|
||||||
vm.isOemGlassSelected = isOemGlassSelected;
|
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 || 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
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) {
|
if (revalidatePromoResponse) {
|
||||||
const revalidateAlerts = buildToastMessagesFromRevalidateOrValidatePromoResponse(
|
const revalidateAlerts = buildToastMessagesFromRevalidateOrValidatePromoResponse(
|
||||||
revalidatePromoResponse,
|
revalidatePromoResponse,
|
||||||
|
|
@ -943,11 +989,10 @@ export default {
|
||||||
return false;
|
return false;
|
||||||
},
|
},
|
||||||
swapOEMGlassPartsOnOrder() {
|
swapOEMGlassPartsOnOrder() {
|
||||||
const windshieldString = "WINDSHIELD";
|
|
||||||
this.lineItems.glassParts.forEach((part, index) => {
|
this.lineItems.glassParts.forEach((part, index) => {
|
||||||
if (part.partType === windshieldString) {
|
if (part.partType === partTypeStrings.WINDSHIELD) {
|
||||||
let altPartToUse = this.alternateGlassPartsForOem.find(
|
let altPartToUse = this.alternateGlassPartsForOem.find(
|
||||||
(altPart) => altPart.partType === windshieldString
|
(altPart) => altPart.partType === partTypeStrings.WINDSHIELD
|
||||||
);
|
);
|
||||||
if (altPartToUse) {
|
if (altPartToUse) {
|
||||||
this.lineItems.glassParts[index] = altPartToUse;
|
this.lineItems.glassParts[index] = altPartToUse;
|
||||||
|
|
|
||||||
|
|
@ -123,8 +123,8 @@ $body-color: $gray-600;
|
||||||
|
|
||||||
//Fonts
|
//Fonts
|
||||||
$font-family-sans-serif: UrbanistRegular, Arial, Helvetica, sans-serif;
|
$font-family-sans-serif: UrbanistRegular, Arial, Helvetica, sans-serif;
|
||||||
$font-family-monospace: UrbanistRegular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
|
$font-family-monospace:
|
||||||
monospace;
|
UrbanistRegular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;
|
||||||
// stylelint-enable value-keyword-case
|
// stylelint-enable value-keyword-case
|
||||||
$font-family-base: $font-family-sans-serif;
|
$font-family-base: $font-family-sans-serif;
|
||||||
$font-family-code: $font-family-monospace;
|
$font-family-code: $font-family-monospace;
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue