Merge branch 'develop' into feature/CSR-1388-tech-review-changes

This commit is contained in:
Leah Schumann 2023-11-14 10:40:11 -05:00
commit eda0eb7d06
5 changed files with 68 additions and 23 deletions

View file

@ -1,6 +1,6 @@
<template> <template>
<div class="cart"> <div class="cart">
<div> <div class="px-0">
<div <div
class="row vin-toggle flex align-items-center py-4" class="row vin-toggle flex align-items-center py-4"
:class="[isExpanded ? 'expanded' : '']" :class="[isExpanded ? 'expanded' : '']"
@ -48,7 +48,7 @@
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="#!"
@ -65,6 +65,10 @@
<span>{{ salesTaxText }}</span <span>{{ salesTaxText }}</span
><span>{{ getFormattedAmount("", salesTax) }}</span> ><span>{{ getFormattedAmount("", salesTax) }}</span>
</div> </div>
<div v-if="showAsPaid" class="amount-paid">
<span>{{ amountPaidText }}</span
><span>{{ getFormattedAmount("", amountPaid) }}</span>
</div>
<div class="amount-due"> <div class="amount-due">
<span>{{ amountDueText }}</span <span>{{ amountDueText }}</span
><span>{{ getFormattedAmount("", amountDue) }}</span> ><span>{{ getFormattedAmount("", amountDue) }}</span>
@ -105,6 +109,7 @@ export default {
availableVaps: Object, availableVaps: Object,
allowItemRemoval: Boolean, allowItemRemoval: Boolean,
recyclingModalCmsWidgetName: String, recyclingModalCmsWidgetName: String,
showAsPaid: Boolean,
}, },
data() { data() {
return { return {
@ -317,7 +322,6 @@ export default {
} }
} }
}); });
return nonpackageCartItems; return nonpackageCartItems;
}, },
frontWiperCartItemName() { frontWiperCartItemName() {
@ -668,6 +672,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");
}, },
@ -689,6 +696,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;
}, },
}, },
@ -710,6 +726,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;
@ -733,6 +751,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;
@ -796,7 +815,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 {
@ -823,7 +843,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 {
@ -833,6 +853,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;
} }
} }
} }

View file

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

View file

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

View file

@ -30,12 +30,13 @@
recyclingModalCmsWidgetName="RecycleModal" /> recyclingModalCmsWidgetName="RecycleModal" />
<promoModalQuestion <promoModalQuestion
class="pb-2"
v-model="lineItems" v-model="lineItems"
:availableVaps="availableVaps" :availableVaps="availableVaps"
linkWidgetName="PromoLinkWidget" linkWidgetName="PromoLinkWidget"
modalWidgetName="PromoModalWidget" /> modalWidgetName="PromoModalWidget" />
<hr class="mt-5 mb-0" /> <hr class="mb-5" />
<div> <div>
<alert <alert
@ -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,

View file

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