diff --git a/src/constants/cart-item-types.js b/src/constants/cart-item-types.js index 858aa1e8e..7db2ac312 100644 --- a/src/constants/cart-item-types.js +++ b/src/constants/cart-item-types.js @@ -7,6 +7,7 @@ const cartItemTypes = { RECYCLE_FEE: "RECYCLE FEE", MOBILE_FEE: "MOBILE FEE", PROMOS: "PROMOS", + EARLY_BIRD: "EARLY BIRD", }; export { cartItemTypes }; diff --git a/src/constants/part-type-strings.js b/src/constants/part-type-strings.js index 50d92832c..fd1f4e781 100644 --- a/src/constants/part-type-strings.js +++ b/src/constants/part-type-strings.js @@ -5,6 +5,8 @@ const partTypeStrings = { RECALIBRATION: "RECALIBRATION", RECYCLE_FEE: "RECYCLE FEE", MOBILE_FEE: "MOBILE FEE", + REPAIR_FEE: "REPAIR FEE", + EARLY_BIRD: "EARLY BIRD", }; export { partTypeStrings }; diff --git a/src/fmg-components/cart/cart.spec.js b/src/fmg-components/cart/cart.spec.js index bfe1dbb55..ae84083e6 100644 --- a/src/fmg-components/cart/cart.spec.js +++ b/src/fmg-components/cart/cart.spec.js @@ -268,7 +268,7 @@ describe("cart.vue", () => { kitPrice: 0, laborAmount: 34.98, partNumber: "MOBILE FEE", - partType: "REPLACE FEE", + partType: "MOBILE FEE", salesTax: 2.62, sellingPrice: 0, }, diff --git a/src/fmg-components/cart/cart.vue b/src/fmg-components/cart/cart.vue index ce43971d8..55516010f 100644 --- a/src/fmg-components/cart/cart.vue +++ b/src/fmg-components/cart/cart.vue @@ -33,7 +33,10 @@
-
+
{{ cartItem.name }}
- {{ recycleFeeCartItem.name }}{{ currencyFormatter.format(recycleFeeCartItem.subTotal) }} + + {{ currencyFormatter.format(recycleFeeCartItem.subTotal) }}
{{ mobileFeeCartItem.name }}{{ currencyFormatter.format(mobileFeeCartItem.subTotal) }}
+
+ {{ premiumAppointmentDiscountCartItem.name }} + + {{ + currencyFormatter.format(premiumAppointmentDiscountCartItem.subTotal) + }} +
+ +
{{ subtotalText }} { - if (cartItem == this.recycleFeeCartItem || cartItem == this.mobileFeeCartItem) { + if ( + cartItem == this.recycleFeeCartItem || + cartItem == this.mobileFeeCartItem || + cartItem == this.premiumAppointmentDiscountCartItem + ) { return; } @@ -470,8 +504,8 @@ export default { lineItems: [], }; - //recycleFeeLineItem.cartItemType = cartItem.cartItemType; - //cartItem.lineItems.push(recycleFeeLineItem); + recycleFeeLineItem.cartItemType = cartItem.cartItemType; + cartItem.lineItems.push(recycleFeeLineItem); cartItem.subTotal += (recycleFeeLineItem.kitPrice ?? 0) + @@ -490,7 +524,7 @@ export default { let cartItem = null; const mobileFeeLineItem = this.supportingItems.find( - (lineItem) => lineItem.partNumber == partTypeStrings.MOBILE_FEE + (lineItem) => lineItem.partType == partTypeStrings.MOBILE_FEE ); if (mobileFeeLineItem) { @@ -520,10 +554,11 @@ export default { otherSupportingItemsCartItem() { let cartItem = null; - const otherSupportingItemsLineItems = this.supportingItems.filter( - (lineItem) => - lineItem.partNumber != partTypeStrings.MOBILE_FEE && - lineItem.partNumber != partTypeStrings.RECYCLE_FEE + let otherSupportingItemsLineItems = baseMixin.methods.filterOutFees( + this.supportingItems + ); + otherSupportingItemsLineItems = otherSupportingItemsLineItems.filter( + (lineItem) => lineItem.partType != partTypeStrings.EARLY_BIRD ); if (otherSupportingItemsLineItems.length > 0) { @@ -552,6 +587,40 @@ export default { return cartItem; }, + premiumAppointmentDiscountCartItemName() { + return "Early bird appointment"; // TODO: get from CMS + }, + premiumAppointmentDiscountCartItem() { + let cartItem = null; + + const premiumAppointmentDiscountLineItem = this.supportingItems.find( + (lineItem) => lineItem.partType == partTypeStrings.EARLY_BIRD + ); + + if (premiumAppointmentDiscountLineItem) { + cartItem = { + name: this.premiumAppointmentDiscountCartItemName, + category: cartItemCategories.SUPPORTING_ITEMS, + cartItemType: cartItemTypes.EARLY_BIRD, + isDisplayed: true, + subTotal: 0, + salesTax: 0, + lineItems: [], + }; + + premiumAppointmentDiscountLineItem.cartItemType = cartItem.cartItemType; + cartItem.lineItems.push(premiumAppointmentDiscountLineItem); + + cartItem.subTotal += + (premiumAppointmentDiscountLineItem.kitPrice ?? 0) + + (premiumAppointmentDiscountLineItem.laborAmount ?? 0) + + (premiumAppointmentDiscountLineItem.sellingPrice ?? 0); + + cartItem.salesTax += premiumAppointmentDiscountLineItem.salesTax ?? 0; + } + + return cartItem; + }, removeLinkText() { return this.getCmsContent("RemoveCartItemTextWidget", "Text"); }, @@ -643,7 +712,7 @@ export default { align-items: center; span { display: flex; - width: 33.33333%; + font-size: 0.875rem; &:nth-child(2) { justify-content: flex-end; } @@ -673,6 +742,17 @@ export default { padding: 0; } } + // Custom order/wrap for nonpackaged Cart Items + .premium-appt-cart-item { + flex-wrap: wrap; + span { + display: flex; + justify-content: space-between; + } + a { + order: 3; + } + } } .vin-toggle { &:after { diff --git a/src/layouts/payment-method/payment-method.vue b/src/layouts/payment-method/payment-method.vue index 416946648..a457e81b5 100644 --- a/src/layouts/payment-method/payment-method.vue +++ b/src/layouts/payment-method/payment-method.vue @@ -13,10 +13,7 @@ cmsWidgetName="VehicleBannerWidget" :displayGenericVehicleImage="false" /> - +

{{ noPiaDisclaimer }} @@ -31,6 +28,8 @@ servicePackageOptionsCmsName="ServicePackageTitle" @cart-remove="cartRemove" /> +


+