Merge pull request #3005 from Safelite/feature/CASH-2114

Feature/CASH-2114
This commit is contained in:
Chris 2026-01-13 08:43:45 -05:00 committed by GitHub
commit 7b5397cb5d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 59 additions and 8 deletions

View file

@ -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 };

View file

@ -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");

View file

@ -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;

View file

@ -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;