From 4d47b2730896fb5a9fc17a0f01ddd53b78f6859e Mon Sep 17 00:00:00 2001 From: Chloe Herd Date: Thu, 13 Jul 2023 15:15:06 -0400 Subject: [PATCH] Update quote page to use new package logic. --- .../service-package-question.vue | 276 ++++++------------ 1 file changed, 92 insertions(+), 184 deletions(-) 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 29e6a9a9e..51598631b 100644 --- a/src/layouts/quote/service-package-question/service-package-question.vue +++ b/src/layouts/quote/service-package-question/service-package-question.vue @@ -18,12 +18,17 @@ import { processIfStatements } from "@/helpers/cms-content-helper"; import { damageLocationsSelected as glassLocations } from "@/constants/damage-locations-selected"; import servicePackageRadio from "./service-package-radio/service-package-radio"; import { partTypeStrings } from "@/constants/part-type-strings"; - -const packageNames = { - TIER_ONE: "TierOne", - TIER_TWO: "TierTwo", - TIER_THREE: "TierThree", -}; +import { packageNames } from "@/constants/package-names"; +import { + shouldFrontWipersBeAvailable, + shouldRearWipersBeAvailable, + shouldRainDefenseBeAvailable, + getAvailablePackages, + getHighestRequiredTier, + getPackageContents, + containsLineItemWithPartType, + findLineItemsWithPartType, +} from "@/helpers/service-package-helper"; export default { name: "servicePackageQuestion", @@ -65,11 +70,17 @@ export default { if (!cmsAnswersContent) { return null; } - if (!this.shouldDisplayTierTwoPackage) { - cmsAnswersContent = cmsAnswersContent.filter( - (answer) => answer.Name != packageNames.TIER_TWO - ); - } + + const availablePackages = getAvailablePackages( + this.glassToReplace, + this.nullSafeAvailableLineItems, + this.isRepair + ); + + cmsAnswersContent = cmsAnswersContent.filter((answer) => + availablePackages.some((tier) => answer.Name === tier.packageName) + ); + const modifiedAnswers = cmsAnswersContent.map((answer) => ({ value: answer.Name, buttonLabel: this.getHeaderTextFromCms(answer.SubWidgetName), @@ -81,67 +92,56 @@ export default { return modifiedAnswers; }, isRecalibrationOnOrder() { - return this.lineItemsContainsPartType(partTypeStrings.RECALIBRATION); + return containsLineItemWithPartType( + partTypeStrings.RECALIBRATION, + this.nullSafeAvailableLineItems + ); }, frontWipersApplicableForTierTwo() { - const frontWipersAreAvailable = this.lineItemsContainsPartType( - partTypeStrings.FRONT_WIPER + return shouldFrontWipersBeAvailable( + this.glassToReplace, + this.nullSafeAvailableLineItems, + this.isRepair, + packageNames.TIER_TWO ); - const isRepair = this.$store.getters.order.damage.isRepair; - const glassToReplaceContainsWindshield = this.glassToReplaceContainsGlassLocation( - glassLocations.WINDSHIELD - ); - if (frontWipersAreAvailable) { - if (isRepair) { - return true; - } else { - if (glassToReplaceContainsWindshield) { - return true; - } else { - return false; - } - } - } else { - return false; - } }, rearWiperApplicableForTierTwo() { - const rearWiperIsAvailable = this.lineItemsContainsPartType(partTypeStrings.REAR_WIPER); - return ( - this.glassToReplaceContainsGlassLocation(glassLocations.REAR) && - rearWiperIsAvailable + return shouldRearWipersBeAvailable( + this.glassToReplace, + this.nullSafeAvailableLineItems, + this.isRepair, + packageNames.TIER_TWO ); }, frontWipersApplicableForTierThree() { - const frontWipersAreAvailable = this.lineItemsContainsPartType( - partTypeStrings.FRONT_WIPER + return shouldFrontWipersBeAvailable( + this.glassToReplace, + this.nullSafeAvailableLineItems, + this.isRepair, + packageNames.TIER_THREE ); - return frontWipersAreAvailable; }, rearWiperApplicableForTierThree() { - const rearWiperIsAvailable = this.lineItemsContainsPartType(partTypeStrings.REAR_WIPER); - const frontWipersAreAvailable = this.lineItemsContainsPartType( - partTypeStrings.FRONT_WIPER - ); - return ( - rearWiperIsAvailable && - (this.glassToReplaceContainsGlassLocation(glassLocations.REAR) || - !frontWipersAreAvailable) + return shouldRearWipersBeAvailable( + this.glassToReplace, + this.nullSafeAvailableLineItems, + this.isRepair, + packageNames.TIER_THREE ); }, rainDefenseApplicableForTierThree() { - if ( - this.rearWiperApplicableForTierTwo && - !this.frontWipersApplicableForTierTwo && - this.frontWipersApplicableForTierThree - ) { - return false; - } else { - return true; - } + return shouldRainDefenseBeAvailable( + this.glassToReplace, + this.nullSafeAvailableLineItems, + this.isRepair, + packageNames.TIER_THREE + ); }, - shouldDisplayTierTwoPackage() { - return this.frontWipersApplicableForTierTwo || this.rearWiperApplicableForTierTwo; + glassToReplace() { + return this.$store.getters.order.damage.glassToReplace; + }, + isRepair() { + return this.$store.getters.order.damage.isRepair; }, }, methods: { @@ -170,65 +170,31 @@ export default { : baseMixin.methods.getTierOnePackagePrice( baseMixin.methods.filterOutFees(this.nullSafeAvailableLineItems) ); - if (packageName === packageNames.TIER_TWO) { - priceFloat += this.getTierTwoPackageVapsPrice(); - } else if (packageName === packageNames.TIER_THREE) { - priceFloat += this.getTierThreePackageVapsPrice(); - } + + priceFloat += this.getVapsPrice(packageName); + return priceFloat; }, - getTierTwoPackageVapsPrice() { - let vapsPrice = 0; - const priceFrontWipers = this.frontWipersApplicableForTierTwo; - const priceRearWipers = this.rearWiperApplicableForTierTwo; - this.nullSafeAvailableLineItems.forEach((item) => { - if ( - (priceFrontWipers && - item.partType.toUpperCase() === partTypeStrings.FRONT_WIPER) || - (priceRearWipers && item.partType.toUpperCase() === partTypeStrings.REAR_WIPER) - ) { - vapsPrice += baseMixin.methods.getTotalLineItemPrice(item); - } + getVapsPrice(packageName) { + const vapsItems = this.getVapsLineItemsForSelectedPackage(packageName); + + let price = 0; + + vapsItems.forEach((item) => { + price += baseMixin.methods.getTotalLineItemPrice(item); }); - return vapsPrice; - }, - getTierThreePackageVapsPrice() { - let vapsPrice = 0; - const priceFrontWipers = this.frontWipersApplicableForTierThree; - const priceRearWipers = this.rearWiperApplicableForTierThree; - const priceRainDefense = this.rainDefenseApplicableForTierThree; - this.nullSafeAvailableLineItems.forEach((item) => { - if ( - (priceFrontWipers && - item.partType.toUpperCase() === partTypeStrings.FRONT_WIPER) || - (priceRearWipers && - item.partType.toUpperCase() === partTypeStrings.REAR_WIPER) || - (priceRainDefense && - item.partType.toUpperCase() === partTypeStrings.RAIN_DEFENSE) - ) { - vapsPrice += baseMixin.methods.getTotalLineItemPrice(item); - } - }); - return vapsPrice; + + return price; }, selectDefaultPackage() { - const vapsFromStore = this.$store.getters.lineItems.vaps; - let lowestTierForPackage = packageNames.TIER_ONE; - if (vapsFromStore?.length > 0) { - vapsFromStore.every((vapsItem) => { - let lowestTierForThisItem = this.getLowestTierForThisItem(vapsItem); - if (lowestTierForThisItem === packageNames.TIER_THREE) { - lowestTierForPackage = packageNames.TIER_THREE; - return false; - } else if (lowestTierForThisItem === packageNames.TIER_TWO) { - lowestTierForPackage = packageNames.TIER_TWO; - return true; - } else { - return true; - } - }); - } - this.selectedPackageName = lowestTierForPackage; + const vapsFromStore = this.$store.getters.lineItems.vaps ?? []; + + this.selectedPackageName = getHighestRequiredTier( + this.glassToReplace, + this.nullSafeAvailableLineItems, + this.isRepair, + vapsFromStore + ); }, allGlassPartsAndSupportingItemsHavePrices(lineItems) { if (lineItems?.glassParts) { @@ -254,63 +220,22 @@ export default { (lineItem.sellingPrice == null || lineItem.sellingPrice == 0) ); }, - getLowestTierForThisItem(vapsItem) { - let lowestTierForThisItem = null; - switch (vapsItem.partType) { - case partTypeStrings.FRONT_WIPER: - if (this.frontWipersApplicableForTierThree) { - lowestTierForThisItem = packageNames.TIER_THREE; - } - if (this.frontWipersApplicableForTierTwo) { - lowestTierForThisItem = packageNames.TIER_TWO; - } - break; - case partTypeStrings.REAR_WIPER: - if (this.rearWiperApplicableForTierThree) { - lowestTierForThisItem = packageNames.TIER_THREE; - } - if (this.rearWiperApplicableForTierTwo) { - lowestTierForThisItem = packageNames.TIER_TWO; - } - break; - case partTypeStrings.RAIN_DEFENSE: - if (this.rainDefenseApplicableForTierThree) { - lowestTierForThisItem = packageNames.TIER_THREE; - } - break; - } - return lowestTierForThisItem; - }, getVapsLineItemsForSelectedPackage(packageName) { - const vapsLineItemsForSelectedPackage = []; - if (packageName === packageNames.TIER_TWO) { - if (this.frontWipersApplicableForTierTwo) { - vapsLineItemsForSelectedPackage.push( - ...this.getLineItemsContainingPartType(partTypeStrings.FRONT_WIPER) - ); - } - if (this.rearWiperApplicableForTierTwo) { - vapsLineItemsForSelectedPackage.push( - ...this.getLineItemsContainingPartType(partTypeStrings.REAR_WIPER) - ); - } - } else if (packageName === packageNames.TIER_THREE) { - if (this.frontWipersApplicableForTierThree) { - vapsLineItemsForSelectedPackage.push( - ...this.getLineItemsContainingPartType(partTypeStrings.FRONT_WIPER) - ); - } - if (this.rearWiperApplicableForTierThree) { - vapsLineItemsForSelectedPackage.push( - ...this.getLineItemsContainingPartType(partTypeStrings.REAR_WIPER) - ); - } - if (this.rainDefenseApplicableForTierThree) { - vapsLineItemsForSelectedPackage.push( - ...this.getLineItemsContainingPartType(partTypeStrings.RAIN_DEFENSE) - ); - } - } + const packageContentTypes = getPackageContents( + this.glassToReplace, + this.nullSafeAvailableLineItems, + this.isRepair, + packageName + ); + + let vapsLineItemsForSelectedPackage = []; + + packageContentTypes.forEach((vapType) => { + vapsLineItemsForSelectedPackage.push( + ...findLineItemsWithPartType(vapType, this.nullSafeAvailableLineItems) + ); + }); + return vapsLineItemsForSelectedPackage; }, getCustomValueFromString(str) { @@ -331,23 +256,6 @@ export default { return null; } }, - getLineItemsContainingPartType(partType) { - const partTypeMatches = this.nullSafeAvailableLineItems.filter( - (lineItem) => lineItem.partType.toUpperCase() === partType - ); - return partTypeMatches; - }, - lineItemsContainsPartType(partType) { - const partTypeMatches = this.getLineItemsContainingPartType(partType); - return !!partTypeMatches.length; - }, - glassToReplaceContainsGlassLocation(glassLocation) { - const glassLocationMatches = - this.$store.getters.order.damage.glassToReplace?.filter( - (glassToReplace) => glassToReplace.glassLocation === glassLocation - ) ?? []; - return !!glassLocationMatches.length; - }, }, components: { buttonQuestion,