From cf86fcae23cea37884ac9d14d0baef7991619c31 Mon Sep 17 00:00:00 2001 From: Scott Kiener Date: Mon, 13 Feb 2023 15:30:36 -0500 Subject: [PATCH] CSR-1168 | Change how we determine if a package has been selected --- src/layouts/quote/quote.vue | 13 +++++++-- .../service-package-question.vue | 27 +++++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) diff --git a/src/layouts/quote/quote.vue b/src/layouts/quote/quote.vue index 21f5753bb..ecc5d5d32 100644 --- a/src/layouts/quote/quote.vue +++ b/src/layouts/quote/quote.vue @@ -103,12 +103,12 @@ export default { ]; const resultMap = await settleAllPromises(promiseResultMap); - const glassParts = store.getters.order.lineItems.glassParts ?? []; + const clonedGlassParts = store.getters.order.lineItems.glassParts ? JSON.parse(JSON.stringify(store.getters.order.lineItems.glassParts)) : []; const availableLineItems = [ resultMap.rainDefense, ...resultMap.supportingItems, ...resultMap.wipers, - ...glassParts, + ...clonedGlassParts, ]; const pricingResults = await baseMixin.methods.dispatchStoreAction( @@ -120,6 +120,7 @@ export default { // Call the "next" function to complete the transition to this page. next((vm) => { vm.setCmsContent(resultMap.cmsContent); + vm.pricedGlassParts = clonedGlassParts; vm.supportingItems = resultMap.supportingItems; vm.availableLineItems = pricingResults; vm.isInsuranceSelected = vm.getDefaultIsInsuranceSelectedValue(vm.availableLineItems); @@ -131,6 +132,7 @@ export default { selectedVaps: null, availableLineItems: null, supportingItems: null, + pricedGlassParts: null }; }, methods: { @@ -183,6 +185,13 @@ export default { if (this.$store.getters.order.accountNumber != applicationConfig.CASH_ACCOUNT_NUMBER) { this.supportingItems = this.filterOutFees(this.supportingItems); } + if(this.pricedGlassParts.length > 0) { + this.dispatchStoreAction( + this.storeActions.SAVE_GLASS_PARTS, + this.pricedGlassParts, + false + ); + } this.dispatchStoreAction( this.storeActions.SAVE_SUPPORTING_ITEMS, this.supportingItems, diff --git a/src/layouts/quote/service-package-question/service-package-question.vue b/src/layouts/quote/service-package-question/service-package-question.vue index 796da19e9..820c988ee 100644 --- a/src/layouts/quote/service-package-question/service-package-question.vue +++ b/src/layouts/quote/service-package-question/service-package-question.vue @@ -42,9 +42,10 @@ export default { }, watch: { availableLineItems() { - if (this.$store.getters.lineItems.vaps) { + if (this.allGlassPartsAndSupportingItemsHavePrices(this.$store.getters.lineItems)) { this.selectDefaultPackage(); } + }, selectedPackageName(newValue) { const VapsProductsInSelectedPackage = this.getVapsLineItemsForSelectedPackage(newValue); @@ -212,7 +213,7 @@ export default { selectDefaultPackage() { const vapsFromStore = this.$store.getters.lineItems.vaps; let lowestTierForPackage = packageNames.TIER_ONE; - if (vapsFromStore.length > 0) { + if (vapsFromStore?.length > 0) { vapsFromStore.every((vapsItem) => { let lowestTierForThisItem = this.getLowestTierForThisItem(vapsItem); if (lowestTierForThisItem === packageNames.TIER_THREE) { @@ -228,6 +229,28 @@ export default { } this.selectedPackageName = lowestTierForPackage; }, + allGlassPartsAndSupportingItemsHavePrices(lineItems) { + if (lineItems?.glassParts) { + for (let i = 0; i < lineItems.glassParts.length; i++) { + if (this.priceIsNullOrZero(lineItems.glassParts[i])) { + return false; + } + } + } + if (lineItems?.supportingItems) { + for (let i = 0; i < lineItems.supportingItems.length; i++) { + if (this.priceIsNullOrZero(lineItems.supportingItems[i])) { + return false; + } + } + } + return true; + }, + priceIsNullOrZero(lineItem) { + return (lineItem.kitPrice == null || lineItem.kitPrice == 0) && + (lineItem.laborAmount == null || lineItem.laborAmount == 0) && + (lineItem.sellingPrice == null || lineItem.sellingPrice == 0); + }, getLowestTierForThisItem(vapsItem) { let lowestTierForThisItem = null; switch (vapsItem.partType) {