CSR-1689: add cart to confirmation page
This commit is contained in:
parent
c1e4f0a3d7
commit
86c8f62e8b
5 changed files with 73 additions and 24 deletions
|
|
@ -1,5 +1,5 @@
|
||||||
<template>
|
<template>
|
||||||
<div class="cart mb-5">
|
<div class="cart">
|
||||||
<div class="px-0">
|
<div class="px-0">
|
||||||
<div
|
<div
|
||||||
class="row vin-toggle flex align-items-center"
|
class="row vin-toggle flex align-items-center"
|
||||||
|
|
@ -47,11 +47,14 @@
|
||||||
href="#!"
|
href="#!"
|
||||||
@click-event="removeItem(cartItem.cartItemType, cartItem.category)" />
|
@click-event="removeItem(cartItem.cartItemType, cartItem.category)" />
|
||||||
<textLink
|
<textLink
|
||||||
v-else-if="cartItem == recycleFeeCartItem"
|
v-else-if="cartItem == recycleFeeCartItem && recyclingModalCmsWidgetName"
|
||||||
linkType="text"
|
linkType="text"
|
||||||
:text="recycleFeeCartItem.name"
|
:text="recycleFeeCartItem.name"
|
||||||
href="#!"
|
href="#!"
|
||||||
@click-event="openModal(recyclingModalCmsWidgetName)" />
|
@click-event="openModal(recyclingModalCmsWidgetName)" />
|
||||||
|
<span v-else-if="cartItem == recycleFeeCartItem">{{
|
||||||
|
recycleFeeCartItem.name
|
||||||
|
}}</span>
|
||||||
<span>{{ currencyFormatter.format(cartItem.subTotal) }}</span>
|
<span>{{ currencyFormatter.format(cartItem.subTotal) }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
|
@ -64,6 +67,10 @@
|
||||||
<span>{{ salesTaxText }}</span
|
<span>{{ salesTaxText }}</span
|
||||||
><span>{{ currencyFormatter.format(salesTax) }}</span>
|
><span>{{ currencyFormatter.format(salesTax) }}</span>
|
||||||
</div>
|
</div>
|
||||||
|
<div v-if="showAsPaid" class="amount-paid">
|
||||||
|
<span>{{ amountPaidText }}</span
|
||||||
|
><span>{{ currencyFormatter.format(amountPaid) }}</span>
|
||||||
|
</div>
|
||||||
<div class="amount-due">
|
<div class="amount-due">
|
||||||
<span>{{ amountDueText }}</span
|
<span>{{ amountDueText }}</span
|
||||||
><span>{{ currencyFormatter.format(amountDue) }}</span>
|
><span>{{ currencyFormatter.format(amountDue) }}</span>
|
||||||
|
|
@ -103,6 +110,7 @@ export default {
|
||||||
availableVaps: Object,
|
availableVaps: Object,
|
||||||
allowItemRemoval: Boolean,
|
allowItemRemoval: Boolean,
|
||||||
recyclingModalCmsWidgetName: String,
|
recyclingModalCmsWidgetName: String,
|
||||||
|
showAsPaid: Boolean,
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
return {
|
return {
|
||||||
|
|
@ -327,7 +335,6 @@ export default {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
return nonpackageCartItems;
|
return nonpackageCartItems;
|
||||||
},
|
},
|
||||||
frontWiperCartItemName() {
|
frontWiperCartItemName() {
|
||||||
|
|
@ -382,6 +389,7 @@ export default {
|
||||||
category: cartItemCategories.VAPS,
|
category: cartItemCategories.VAPS,
|
||||||
cartItemType: cartItemTypes.REAR_WIPERS,
|
cartItemType: cartItemTypes.REAR_WIPERS,
|
||||||
isDisplayed: true,
|
isDisplayed: true,
|
||||||
|
isRemovable: true,
|
||||||
subTotal: 0,
|
subTotal: 0,
|
||||||
salesTax: 0,
|
salesTax: 0,
|
||||||
lineItems: [],
|
lineItems: [],
|
||||||
|
|
@ -627,6 +635,9 @@ export default {
|
||||||
amountDueText() {
|
amountDueText() {
|
||||||
return this.getCmsContent("AmountDueTextWidget", "Text");
|
return this.getCmsContent("AmountDueTextWidget", "Text");
|
||||||
},
|
},
|
||||||
|
amountPaidText() {
|
||||||
|
return this.getCmsContent("AmountPaidTextWidget", "Text");
|
||||||
|
},
|
||||||
subtotalText() {
|
subtotalText() {
|
||||||
return this.getCmsContent("SubtotalTextWidget", "Text");
|
return this.getCmsContent("SubtotalTextWidget", "Text");
|
||||||
},
|
},
|
||||||
|
|
@ -648,6 +659,15 @@ export default {
|
||||||
return salesTax;
|
return salesTax;
|
||||||
},
|
},
|
||||||
amountDue() {
|
amountDue() {
|
||||||
|
if (this.showAsPaid) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return this.subTotal + this.salesTax;
|
||||||
|
},
|
||||||
|
amountPaid() {
|
||||||
|
if (!this.showAsPaid) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
return this.subTotal + this.salesTax;
|
return this.subTotal + this.salesTax;
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
@ -669,6 +689,8 @@ export default {
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.cart {
|
.cart {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
|
||||||
h5 {
|
h5 {
|
||||||
border-bottom: 1px solid $gray-500;
|
border-bottom: 1px solid $gray-500;
|
||||||
color: $black;
|
color: $black;
|
||||||
|
|
@ -692,6 +714,7 @@ export default {
|
||||||
max-height: 0;
|
max-height: 0;
|
||||||
transition: all 350ms ease-in;
|
transition: all 350ms ease-in;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
|
||||||
div {
|
div {
|
||||||
display: flex;
|
display: flex;
|
||||||
justify-content: space-between;
|
justify-content: space-between;
|
||||||
|
|
@ -755,7 +778,8 @@ export default {
|
||||||
}
|
}
|
||||||
.sub-total,
|
.sub-total,
|
||||||
.sales-tax,
|
.sales-tax,
|
||||||
.amount-due {
|
.amount-due,
|
||||||
|
.amount-paid {
|
||||||
font-weight: 500;
|
font-weight: 500;
|
||||||
}
|
}
|
||||||
.sub-total {
|
.sub-total {
|
||||||
|
|
@ -782,7 +806,7 @@ export default {
|
||||||
display: inline-flex;
|
display: inline-flex;
|
||||||
position: relative;
|
position: relative;
|
||||||
right: 0.75rem;
|
right: 0.75rem;
|
||||||
margin: 1rem 0 1rem 1rem;
|
margin: 0.5rem 0 0.5rem 1rem;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
}
|
}
|
||||||
&.expanded:after {
|
&.expanded:after {
|
||||||
|
|
@ -792,6 +816,7 @@ export default {
|
||||||
max-height: 650px;
|
max-height: 650px;
|
||||||
transition: all 350ms ease-in;
|
transition: all 350ms ease-in;
|
||||||
overflow: hidden;
|
overflow: hidden;
|
||||||
|
padding-top: 1rem;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,9 @@ beforeEach(() => {
|
||||||
damage: {
|
damage: {
|
||||||
isRepair: false,
|
isRepair: false,
|
||||||
},
|
},
|
||||||
|
payment: {
|
||||||
|
isPia: true,
|
||||||
|
},
|
||||||
referralNumber: "1234567",
|
referralNumber: "1234567",
|
||||||
vehicle: {
|
vehicle: {
|
||||||
year: "2004",
|
year: "2004",
|
||||||
|
|
@ -113,6 +116,7 @@ beforeEach(() => {
|
||||||
emailAddress: "test@test.com",
|
emailAddress: "test@test.com",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
damage: {},
|
||||||
payment: {
|
payment: {
|
||||||
isInsurance: true,
|
isInsurance: true,
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,15 @@
|
||||||
|
|
||||||
<div class="appoinmenttext" v-html="AppointmentWordingText"></div>
|
<div class="appoinmenttext" v-html="AppointmentWordingText"></div>
|
||||||
</div>
|
</div>
|
||||||
|
<hr />
|
||||||
|
<cart
|
||||||
|
:damage="damageInfo"
|
||||||
|
:availableVaps="vaps"
|
||||||
|
:allowItemRemoval="false"
|
||||||
|
v-model="lineItems"
|
||||||
|
:showAsPaid="isPia"
|
||||||
|
servicePackageOptionsCmsName="ServicePackageTitle" />
|
||||||
|
<hr class="mb-5" />
|
||||||
<div class="emailtext" v-html="ConfirmationEmailText"></div>
|
<div class="emailtext" v-html="ConfirmationEmailText"></div>
|
||||||
<navbar
|
<navbar
|
||||||
cmsWidgetName="FunnelFooterWidget"
|
cmsWidgetName="FunnelFooterWidget"
|
||||||
|
|
@ -57,19 +66,21 @@ import funnelHeader from "@/fmg-components/funnel-header/funnel-header";
|
||||||
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
import vehicleBanner from "@/fmg-components/vehicle-banner/vehicle-banner";
|
||||||
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
import navbar from "@/fmg-components/nav-bar/nav-bar";
|
||||||
import addToCalendar from "@/layouts/confirmation/add-to-calendar/add-to-calendar";
|
import addToCalendar from "@/layouts/confirmation/add-to-calendar/add-to-calendar";
|
||||||
|
import cart from "@/fmg-components/cart/cart";
|
||||||
|
|
||||||
//Supporting files
|
//Supporting files
|
||||||
import baseMixin from "@/mixins/base-mixin.js";
|
import baseMixin from "@/mixins/base-mixin.js";
|
||||||
|
import store from "@/store";
|
||||||
import { storeActions } from "@/constants/store-actions";
|
import { storeActions } from "@/constants/store-actions";
|
||||||
import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
|
import { fetchCmsContentForPage } from "@/helpers/cms-content-helper";
|
||||||
import { AppointmentTypeStrings } from "@/constants/schedule-constants";
|
import { AppointmentTypeStrings } from "@/constants/schedule-constants";
|
||||||
import { settleAllPromises } from "@/helpers/layout-helper";
|
import { settleAllPromises } from "@/helpers/layout-helper";
|
||||||
import { applicationConfig } from "@/constants/application-config.js";
|
import { applicationConfig } from "@/constants/application-config.js";
|
||||||
import { convertDateStringToDate } from "@/layouts/schedule/helpers/schedule-helper";
|
import { convertDateStringToDate } from "@/layouts/schedule/helpers/schedule-helper";
|
||||||
|
import { deepClone } from "@/helpers/object-helper";
|
||||||
import { Form } from "vee-validate";
|
import { Form } from "vee-validate";
|
||||||
import store from "@/store";
|
|
||||||
|
|
||||||
import { get12HourTimeFormat, get12HourTimeMobileFormat } from "@/helpers/date-helper";
|
import { get12HourTimeFormat, get12HourTimeMobileFormat } from "@/helpers/date-helper";
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
name: "confirmation",
|
name: "confirmation",
|
||||||
async beforeRouteEnter(to, from, next) {
|
async beforeRouteEnter(to, from, next) {
|
||||||
|
|
@ -87,11 +98,21 @@ export default {
|
||||||
];
|
];
|
||||||
|
|
||||||
const resultMap = await settleAllPromises(promiseResultMap);
|
const resultMap = await settleAllPromises(promiseResultMap);
|
||||||
|
const lineItemsFromStore = deepClone(store.getters.order.lineItems);
|
||||||
|
|
||||||
// Call the "next" function to complete the transition to this page.
|
// Call the "next" function to complete the transition to this page.
|
||||||
next((vm) => {
|
next((vm) => {
|
||||||
vm.setCmsContent(resultMap.cmsContent);
|
vm.setCmsContent(resultMap.cmsContent);
|
||||||
|
vm.lineItems = lineItemsFromStore;
|
||||||
|
vm.vaps = lineItemsFromStore.vaps;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
data() {
|
||||||
|
return {
|
||||||
|
lineItems: [],
|
||||||
|
vaps: [],
|
||||||
|
};
|
||||||
|
},
|
||||||
computed: {
|
computed: {
|
||||||
ScheduleConfirmationText() {
|
ScheduleConfirmationText() {
|
||||||
return this.getCmsContent("ScheduleConfirmationWidget", "BodyText");
|
return this.getCmsContent("ScheduleConfirmationWidget", "BodyText");
|
||||||
|
|
@ -209,6 +230,12 @@ export default {
|
||||||
vehicleBannerImageUrl() {
|
vehicleBannerImageUrl() {
|
||||||
return store.getters.submittedOrder?.vehicle.imageUrl;
|
return store.getters.submittedOrder?.vehicle.imageUrl;
|
||||||
},
|
},
|
||||||
|
damageInfo() {
|
||||||
|
return store.getters.damage;
|
||||||
|
},
|
||||||
|
isPia() {
|
||||||
|
return store.getters.submittedOrder?.payment.isPia;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
arePagePrerequisitesValid() {
|
arePagePrerequisitesValid() {
|
||||||
|
|
@ -258,12 +285,14 @@ export default {
|
||||||
navbar,
|
navbar,
|
||||||
vehicleBanner,
|
vehicleBanner,
|
||||||
addToCalendar,
|
addToCalendar,
|
||||||
|
cart,
|
||||||
},
|
},
|
||||||
};
|
};
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<style lang="scss">
|
<style lang="scss">
|
||||||
.main {
|
.main {
|
||||||
|
margin-bottom: 1.5rem;
|
||||||
padding: 1rem 1.5rem 1.5rem;
|
padding: 1rem 1.5rem 1.5rem;
|
||||||
box-shadow: 0 3px 10px rgb(0 0 0 / 0.2);
|
box-shadow: 0 3px 10px rgb(0 0 0 / 0.2);
|
||||||
border-radius: 5px;
|
border-radius: 5px;
|
||||||
|
|
@ -336,7 +365,7 @@ export default {
|
||||||
}
|
}
|
||||||
|
|
||||||
.emailtext {
|
.emailtext {
|
||||||
padding: 1.5rem 0 0;
|
padding: 0.5rem 0 0;
|
||||||
|
|
||||||
p {
|
p {
|
||||||
font-size: 0.875rem;
|
font-size: 0.875rem;
|
||||||
|
|
|
||||||
|
|
@ -29,14 +29,15 @@
|
||||||
servicePackageOptionsCmsName="ServicePackageTitle"
|
servicePackageOptionsCmsName="ServicePackageTitle"
|
||||||
recyclingModalCmsWidgetName="RecycleModal" />
|
recyclingModalCmsWidgetName="RecycleModal" />
|
||||||
|
|
||||||
<hr class="my-5" />
|
|
||||||
<promoModalQuestion
|
<promoModalQuestion
|
||||||
class="pb-3"
|
class="pb-2"
|
||||||
v-model="lineItems"
|
v-model="lineItems"
|
||||||
:availableVaps="availableVaps"
|
:availableVaps="availableVaps"
|
||||||
linkWidgetName="PromoLinkWidget"
|
linkWidgetName="PromoLinkWidget"
|
||||||
modalWidgetName="PromoModalWidget" />
|
modalWidgetName="PromoModalWidget" />
|
||||||
|
|
||||||
|
<hr class="mb-5" />
|
||||||
|
|
||||||
<div>
|
<div>
|
||||||
<alert
|
<alert
|
||||||
ref="piaErrorAlert"
|
ref="piaErrorAlert"
|
||||||
|
|
@ -409,7 +410,6 @@ export default {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE);
|
this.dispatchStoreAction(storeActions.RESET_SAVE_SESSION_PROMISE);
|
||||||
this.$router.navigateWithoutSaving(
|
this.$router.navigateWithoutSaving(
|
||||||
this.navigationScenarios.CLICKED_PAY_NOW,
|
this.navigationScenarios.CLICKED_PAY_NOW,
|
||||||
|
|
|
||||||
|
|
@ -26,13 +26,13 @@
|
||||||
|
|
||||||
<cart
|
<cart
|
||||||
:damage="damageInfo"
|
:damage="damageInfo"
|
||||||
:availableLineItems="availableLineItems"
|
:availableVaps="availableVaps"
|
||||||
:allowItemRemoval="false"
|
:allowItemRemoval="false"
|
||||||
v-model="lineItems"
|
v-model="lineItems"
|
||||||
servicePackageOptionsCmsName="ServicePackageTitle"
|
servicePackageOptionsCmsName="ServicePackageTitle"
|
||||||
recyclingModalCmsWidgetName="RecycleModal" />
|
recyclingModalCmsWidgetName="RecycleModal" />
|
||||||
|
|
||||||
<hr />
|
<hr class="mb-5" />
|
||||||
|
|
||||||
<paymentSwitch
|
<paymentSwitch
|
||||||
cmsWidgetName="PaymentMethodWidget"
|
cmsWidgetName="PaymentMethodWidget"
|
||||||
|
|
@ -267,12 +267,6 @@ export default {
|
||||||
"payment"
|
"payment"
|
||||||
);
|
);
|
||||||
|
|
||||||
const supportingItemsPromise = baseMixin.methods.dispatchStoreActionWithLogging(
|
|
||||||
storeActions.GET_SUPPORTING_ITEMS,
|
|
||||||
null,
|
|
||||||
"payment"
|
|
||||||
);
|
|
||||||
|
|
||||||
// TODO: Data fetching Promise declarations
|
// TODO: Data fetching Promise declarations
|
||||||
|
|
||||||
const promiseResultMap = [
|
const promiseResultMap = [
|
||||||
|
|
@ -292,10 +286,6 @@ export default {
|
||||||
resultKey: "rainDefense",
|
resultKey: "rainDefense",
|
||||||
promise: rainDefensePromise,
|
promise: rainDefensePromise,
|
||||||
},
|
},
|
||||||
{
|
|
||||||
resultKey: "supportingItems",
|
|
||||||
promise: supportingItemsPromise,
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
|
|
||||||
const resultMap = await settleAllPromises(promiseResultMap);
|
const resultMap = await settleAllPromises(promiseResultMap);
|
||||||
|
|
@ -363,6 +353,7 @@ export default {
|
||||||
taxedVaps,
|
taxedVaps,
|
||||||
lineItems
|
lineItems
|
||||||
);
|
);
|
||||||
|
lineItems.vaps = lineItems.vaps ?? [];
|
||||||
lineItems.vaps.push(...vapsToAddToCart);
|
lineItems.vaps.push(...vapsToAddToCart);
|
||||||
|
|
||||||
// Call the "next" function to complete the transition to this page.
|
// Call the "next" function to complete the transition to this page.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue