Cart now calculating tax, there may be other issues in the cart that may effect calculation
This commit is contained in:
parent
1e20dd96d5
commit
cb01a42341
6 changed files with 96 additions and 48 deletions
|
|
@ -91,11 +91,11 @@ export default {
|
||||||
answer.SubText = "+$" + this.wipersPrice;
|
answer.SubText = "+$" + this.wipersPrice;
|
||||||
answers.push(answer);
|
answers.push(answer);
|
||||||
}
|
}
|
||||||
if (this.showAddRainDefense) {
|
// if (this.showAddRainDefense) {
|
||||||
const answer = getAnswer("ADD RAIN DEFENSE", this.answersCmsData);
|
// const answer = getAnswer("ADD RAIN DEFENSE", this.answersCmsData);
|
||||||
answer.SubText = "+$" + this.rainDefensePrice;
|
// answer.SubText = "+$" + this.rainDefensePrice;
|
||||||
answers.push(answer);
|
// answers.push(answer);
|
||||||
}
|
// }
|
||||||
|
|
||||||
return answers;
|
return answers;
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -7,12 +7,12 @@
|
||||||
@click="toggleClass()">
|
@click="toggleClass()">
|
||||||
<div class="col d-flex justify-content-between">
|
<div class="col d-flex justify-content-between">
|
||||||
<span class="label">Amount Due</span
|
<span class="label">Amount Due</span
|
||||||
><span class="label amount-due">{{ amountDue }}</span>
|
><span class="label amount-due">{{ currencyFormatter.format(amountDue) }}</span>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="price-table">
|
<div class="price-table">
|
||||||
<div class="service-type" :class="{ packageWithVAPS: packageWithVAPS }">
|
<div class="service-type" :class="{ packageWithVAPS: packageWithVAPS }">
|
||||||
<textBlock :cmsWidgetName="packageNameWidget" /><span>{{ packagePrice }}</span>
|
<textBlock :cmsWidgetName="packageNameWidget" /><span>{{ currencyFormatter.format(packagePrice) }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div
|
<div
|
||||||
v-for="(lineItem, i) in displayedPackageLineItems"
|
v-for="(lineItem, i) in displayedPackageLineItems"
|
||||||
|
|
@ -22,7 +22,7 @@
|
||||||
<textLink
|
<textLink
|
||||||
ref="removeLink"
|
ref="removeLink"
|
||||||
linkType="text"
|
linkType="text"
|
||||||
text="showMoreShopsLinkText"
|
text="removeLinkText"
|
||||||
href="#!"
|
href="#!"
|
||||||
@click-event="removeItem(lineItem)" />
|
@click-event="removeItem(lineItem)" />
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -35,7 +35,7 @@
|
||||||
<textLink
|
<textLink
|
||||||
ref="removeLink"
|
ref="removeLink"
|
||||||
linkType="text"
|
linkType="text"
|
||||||
text="showMoreShopsLinkText"
|
text="removeLinkText"
|
||||||
href="#!"
|
href="#!"
|
||||||
@click-event="removeItem(lineItem)" />
|
@click-event="removeItem(lineItem)" />
|
||||||
<span>{{ lineItem.price }}</span>
|
<span>{{ lineItem.price }}</span>
|
||||||
|
|
@ -45,9 +45,15 @@
|
||||||
><span>{{ recycleFee }}</span>
|
><span>{{ recycleFee }}</span>
|
||||||
</div>
|
</div>
|
||||||
<!-- Sub total, sales tax, total columns -->
|
<!-- Sub total, sales tax, total columns -->
|
||||||
<div class="sub-total"><span>Subtotal</span><span>$320</span></div>
|
<div class="sub-total">
|
||||||
<div class="sales-tax"><span>Sales tax</span><span>$1</span></div>
|
<span>Subtotal</span><span>{{ currencyFormatter.format(subTotal) }}</span>
|
||||||
<div class="amount-due"><span>Amount due</span><span>$321</span></div>
|
</div>
|
||||||
|
<div class="sales-tax">
|
||||||
|
<span>Sales tax</span><span>{{ currencyFormatter.format(salesTax) }}</span>
|
||||||
|
</div>
|
||||||
|
<div class="amount-due">
|
||||||
|
<span>Amount due</span><span>{{ currencyFormatter.format(amountDue) }}</span>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
@ -76,28 +82,16 @@ export default {
|
||||||
return {
|
return {
|
||||||
isActive: false,
|
isActive: false,
|
||||||
packageWithVAPS: false,
|
packageWithVAPS: false,
|
||||||
amountDue: this.getAmountDue(),
|
currencyFormatter: new Intl.NumberFormat("en-US", {
|
||||||
|
style: "currency",
|
||||||
|
currency: "USD",
|
||||||
|
}),
|
||||||
};
|
};
|
||||||
},
|
},
|
||||||
methods: {
|
methods: {
|
||||||
toggleClass: function (event) {
|
toggleClass: function (event) {
|
||||||
this.isActive = !this.isActive;
|
this.isActive = !this.isActive;
|
||||||
},
|
},
|
||||||
getPackagePriceString(packageName) {
|
|
||||||
const formattedPriceFloat = parseFloat(this.getPackagePrice(packageName)).toFixed(2);
|
|
||||||
return (this.isInsuranceSelected ? "As little as $" : "$") + formattedPriceFloat;
|
|
||||||
},
|
|
||||||
getPackagePrice(packageName) {
|
|
||||||
let priceFloat = this.isInsuranceSelected
|
|
||||||
? 0
|
|
||||||
: baseMixin.methods.getTierOnePackagePrice(
|
|
||||||
baseMixin.methods.filterOutFees(this.availableLineItems)
|
|
||||||
);
|
|
||||||
|
|
||||||
priceFloat += this.getVapsPrice(packageName);
|
|
||||||
|
|
||||||
return priceFloat;
|
|
||||||
},
|
|
||||||
getVapsPrice(packageName) {
|
getVapsPrice(packageName) {
|
||||||
const vapsItems = this.getVapsLineItemsForSelectedPackage(packageName);
|
const vapsItems = this.getVapsLineItemsForSelectedPackage(packageName);
|
||||||
|
|
||||||
|
|
@ -157,19 +151,24 @@ export default {
|
||||||
this.isRepair,
|
this.isRepair,
|
||||||
this.vaps
|
this.vaps
|
||||||
);
|
);
|
||||||
|
|
||||||
return tier;
|
return tier;
|
||||||
},
|
},
|
||||||
packagePrice() {
|
packagePrice() {
|
||||||
let packagePriceString;
|
let packagePrice = this.isInsuranceSelected
|
||||||
if (this.packageLevel.length > 0) {
|
? 0
|
||||||
packagePriceString = this.getPackagePriceString(this.packageLevel);
|
: baseMixin.methods.getTierOnePackagePrice(
|
||||||
}
|
baseMixin.methods.filterOutFees(this.availableLineItems)
|
||||||
return packagePriceString;
|
);
|
||||||
// return (packagePriceString.length > 0) ? packagePriceString : "Test String";
|
|
||||||
|
packagePrice += this.getVapsPrice(this.packageLevel);
|
||||||
|
|
||||||
|
return packagePrice;
|
||||||
},
|
},
|
||||||
displayedPackageLineItems() {
|
displayedPackageLineItems() {
|
||||||
const displayedPackageLineItems = [];
|
const displayedPackageLineItems = [];
|
||||||
const packageLineItems = this.getVapsLineItemsForSelectedPackage(this.packageLevel);
|
const packageLineItems = this.getVapsLineItemsForSelectedPackage(this.packageLevel);
|
||||||
|
|
||||||
// TODO Determine if we could get the same list from this.lineItems?
|
// TODO Determine if we could get the same list from this.lineItems?
|
||||||
packageLineItems?.forEach((item) => {
|
packageLineItems?.forEach((item) => {
|
||||||
let price = item.sellingPrice + item.kitPrice + item.laborAmount;
|
let price = item.sellingPrice + item.kitPrice + item.laborAmount;
|
||||||
|
|
@ -181,6 +180,7 @@ export default {
|
||||||
};
|
};
|
||||||
displayedPackageLineItems.push(packageLineItem);
|
displayedPackageLineItems.push(packageLineItem);
|
||||||
});
|
});
|
||||||
|
|
||||||
return displayedPackageLineItems;
|
return displayedPackageLineItems;
|
||||||
},
|
},
|
||||||
displayedNonPackageLineItems() {
|
displayedNonPackageLineItems() {
|
||||||
|
|
@ -229,6 +229,9 @@ export default {
|
||||||
const supportingItems = this.lineItems?.supportingItems;
|
const supportingItems = this.lineItems?.supportingItems;
|
||||||
return supportingItems?.length > 0 ? supportingItems : [];
|
return supportingItems?.length > 0 ? supportingItems : [];
|
||||||
},
|
},
|
||||||
|
removeLinkText() {
|
||||||
|
return "Remove"; // TODO: get from CMS
|
||||||
|
},
|
||||||
recycleLabel() {
|
recycleLabel() {
|
||||||
return "Recycling";
|
return "Recycling";
|
||||||
},
|
},
|
||||||
|
|
@ -244,6 +247,28 @@ export default {
|
||||||
// }
|
// }
|
||||||
return true;
|
return true;
|
||||||
},
|
},
|
||||||
|
subTotal() {
|
||||||
|
let subTotal = 0;
|
||||||
|
|
||||||
|
this.lineItems.forEach((lineItem) => {
|
||||||
|
subTotal += (lineItem.kitPrice ?? 0) +
|
||||||
|
(lineItem.laborAmount ?? 0) +
|
||||||
|
(lineItem.sellingPrice ?? 0);
|
||||||
|
});
|
||||||
|
|
||||||
|
return subTotal;
|
||||||
|
},
|
||||||
|
salesTax() {
|
||||||
|
let salesTax = 0;
|
||||||
|
this.lineItems.forEach((lineItem) => {
|
||||||
|
salesTax += lineItem.salesTax;
|
||||||
|
});
|
||||||
|
|
||||||
|
return salesTax;
|
||||||
|
},
|
||||||
|
amountDue() {
|
||||||
|
return this.subTotal + this.salesTax;
|
||||||
|
},
|
||||||
},
|
},
|
||||||
components: {
|
components: {
|
||||||
textBlock,
|
textBlock,
|
||||||
|
|
|
||||||
|
|
@ -39,12 +39,14 @@ export function getAvailablePackages(glassToReplace, availableLineItems, isRepai
|
||||||
isRepair,
|
isRepair,
|
||||||
packageNames.TIER_ONE
|
packageNames.TIER_ONE
|
||||||
);
|
);
|
||||||
|
|
||||||
let tierTwoVaps = getPackageContents(
|
let tierTwoVaps = getPackageContents(
|
||||||
glassToReplace,
|
glassToReplace,
|
||||||
availableLineItems,
|
availableLineItems,
|
||||||
isRepair,
|
isRepair,
|
||||||
packageNames.TIER_TWO
|
packageNames.TIER_TWO
|
||||||
);
|
);
|
||||||
|
|
||||||
let tierThreeVaps = getPackageContents(
|
let tierThreeVaps = getPackageContents(
|
||||||
glassToReplace,
|
glassToReplace,
|
||||||
availableLineItems,
|
availableLineItems,
|
||||||
|
|
@ -87,9 +89,11 @@ export function getPackageContents(glassToReplace, availableLineItems, isRepair,
|
||||||
if (shouldFrontWipersBeAvailable(glassToReplace, availableLineItems, isRepair, targetTier)) {
|
if (shouldFrontWipersBeAvailable(glassToReplace, availableLineItems, isRepair, targetTier)) {
|
||||||
vaps.push(partTypeStrings.FRONT_WIPER);
|
vaps.push(partTypeStrings.FRONT_WIPER);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldRearWipersBeAvailable(glassToReplace, availableLineItems, isRepair, targetTier)) {
|
if (shouldRearWipersBeAvailable(glassToReplace, availableLineItems, isRepair, targetTier)) {
|
||||||
vaps.push(partTypeStrings.REAR_WIPER);
|
vaps.push(partTypeStrings.REAR_WIPER);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (shouldRainDefenseBeAvailable(glassToReplace, availableLineItems, isRepair, targetTier)) {
|
if (shouldRainDefenseBeAvailable(glassToReplace, availableLineItems, isRepair, targetTier)) {
|
||||||
vaps.push(partTypeStrings.RAIN_DEFENSE);
|
vaps.push(partTypeStrings.RAIN_DEFENSE);
|
||||||
}
|
}
|
||||||
|
|
@ -107,6 +111,7 @@ export function shouldFrontWipersBeAvailable(
|
||||||
partTypeStrings.FRONT_WIPER,
|
partTypeStrings.FRONT_WIPER,
|
||||||
availableLineItems
|
availableLineItems
|
||||||
);
|
);
|
||||||
|
|
||||||
const isFrontWindshieldTask =
|
const isFrontWindshieldTask =
|
||||||
isRepair || containsGlassPieceWithLocation(glassLocations.WINDSHIELD, glassToReplace);
|
isRepair || containsGlassPieceWithLocation(glassLocations.WINDSHIELD, glassToReplace);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -96,7 +96,6 @@ export default {
|
||||||
null,
|
null,
|
||||||
"payment-method"
|
"payment-method"
|
||||||
);
|
);
|
||||||
console.log("rainDefensePromise: ", rainDefensePromise);
|
|
||||||
|
|
||||||
const supportingItemsPromise = baseMixin.methods.dispatchStoreActionWithLogging(
|
const supportingItemsPromise = baseMixin.methods.dispatchStoreActionWithLogging(
|
||||||
storeActions.GET_SUPPORTING_ITEMS,
|
storeActions.GET_SUPPORTING_ITEMS,
|
||||||
|
|
@ -125,7 +124,7 @@ export default {
|
||||||
|
|
||||||
const resultMap = await settleAllPromises(promiseResultMap);
|
const resultMap = await settleAllPromises(promiseResultMap);
|
||||||
|
|
||||||
const glassParts = (await store.getters.order.lineItems.glassParts) ?? [];
|
const glassParts = store.getters.order.lineItems.glassParts ?? [];
|
||||||
|
|
||||||
const availableLineItems = [
|
const availableLineItems = [
|
||||||
resultMap.rainDefense,
|
resultMap.rainDefense,
|
||||||
|
|
@ -142,7 +141,24 @@ export default {
|
||||||
"payment-method",
|
"payment-method",
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
const lineItems = store.getters.lineItems;
|
|
||||||
|
const lineItems = store.getters.order.lineItems;
|
||||||
|
|
||||||
|
const combinedLineItems = [...glassParts, ...lineItems.supportingItems, ...lineItems.vaps];
|
||||||
|
|
||||||
|
const taxedLineItems = await baseMixin.methods.dispatchStoreActionWithLogging(
|
||||||
|
storeActions.TAX_ORDER_ITEMS_AND_SAVE_SERVER_DATA,
|
||||||
|
{
|
||||||
|
billToAccountNumber: "87291",
|
||||||
|
providerNumber: store.getters.order.serviceLocation.provider.providerNumber,
|
||||||
|
appointmentType: store.getters.order.serviceLocation.appointmentType,
|
||||||
|
serviceLocationState: store.getters.order.serviceLocation.state,
|
||||||
|
serviceLocationZipCode: store.getters.order.serviceLocation.zipCode,
|
||||||
|
pricedLineItems: combinedLineItems,
|
||||||
|
},
|
||||||
|
"payment-method",
|
||||||
|
false
|
||||||
|
);
|
||||||
|
|
||||||
const cartItems = [...glassParts, ...lineItems.supportingItems, ...lineItems.vaps]; // TOBEREMOVED BY AJC IN CSR-1384
|
const cartItems = [...glassParts, ...lineItems.supportingItems, ...lineItems.vaps]; // TOBEREMOVED BY AJC IN CSR-1384
|
||||||
|
|
||||||
|
|
@ -152,7 +168,7 @@ export default {
|
||||||
|
|
||||||
vm.setCmsContent(resultMap.cmsContent);
|
vm.setCmsContent(resultMap.cmsContent);
|
||||||
vm.availableLineItems = pricedAvailableLineItems;
|
vm.availableLineItems = pricedAvailableLineItems;
|
||||||
vm.lineItems = lineItems;
|
vm.lineItems = taxedLineItems;
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
data() {
|
data() {
|
||||||
|
|
|
||||||
|
|
@ -88,6 +88,7 @@ export default {
|
||||||
lineItem.partType != partTypeStrings.RAIN_DEFENSE
|
lineItem.partType != partTypeStrings.RAIN_DEFENSE
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
let totalPrice = this.getTotalPriceOfAllLineItemsAndChildParts(lineItemsToPrice);
|
let totalPrice = this.getTotalPriceOfAllLineItemsAndChildParts(lineItemsToPrice);
|
||||||
return totalPrice;
|
return totalPrice;
|
||||||
},
|
},
|
||||||
|
|
|
||||||
|
|
@ -2115,14 +2115,13 @@ export const actions = {
|
||||||
pageNameToLog,
|
pageNameToLog,
|
||||||
}
|
}
|
||||||
) {
|
) {
|
||||||
const flattenedLineItemsWithChildParts =
|
// const flattenedLineItemsWithChildParts =
|
||||||
getFlattenedArrayOfLineItemsWithChildParts(pricedLineItems);
|
// getFlattenedArrayOfLineItemsWithChildParts(pricedLineItems);
|
||||||
|
const lineItemsWithOnlyPriceInfo = pricedLineItems.map((lineItem) => ({
|
||||||
const lineItemsWithOnlyPriceInfo = flattenedLineItemsWithChildParts.map((lineItem) => ({
|
|
||||||
partNumber: lineItem.partNumber,
|
partNumber: lineItem.partNumber,
|
||||||
laborAmount: lineItem.laborAmount,
|
laborAmount: lineItem.laborAmount ?? 0,
|
||||||
kitPrice: lineItem.kitPrice,
|
kitPrice: lineItem.kitPrice ?? 0,
|
||||||
sellingPrice: lineItem.sellingPrice,
|
sellingPrice: lineItem.sellingPrice ?? 0,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const pricedLineItemsFormattedForRequest =
|
const pricedLineItemsFormattedForRequest =
|
||||||
|
|
@ -2470,13 +2469,15 @@ function addPricesToLineItems(lineItems, pricingLineItems) {
|
||||||
lineItem.laborAmount = pricedLineItem.laborAmount;
|
lineItem.laborAmount = pricedLineItem.laborAmount;
|
||||||
lineItem.sellingPrice = pricedLineItem.sellingPrice;
|
lineItem.sellingPrice = pricedLineItem.sellingPrice;
|
||||||
lineItem.kitPrice = pricedLineItem.kitPrice;
|
lineItem.kitPrice = pricedLineItem.kitPrice;
|
||||||
|
lineItem.salesTax = pricedLineItem.salesTax;
|
||||||
});
|
});
|
||||||
|
|
||||||
return pricedLineItems;
|
return pricedLineItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
function addTaxesToPricedLineItems(lineItems, taxingLineItems) {
|
function addTaxesToPricedLineItems(lineItems, taxingLineItems) {
|
||||||
lineItems.forEach((lineItem) => {
|
const taxedLineItems = deepClone(lineItems);
|
||||||
|
taxedLineItems.forEach((lineItem) => {
|
||||||
let lineItemIndex = taxingLineItems.findIndex(
|
let lineItemIndex = taxingLineItems.findIndex(
|
||||||
(taxingLineItem) => taxingLineItem.partNumber === lineItem.partNumber
|
(taxingLineItem) => taxingLineItem.partNumber === lineItem.partNumber
|
||||||
);
|
);
|
||||||
|
|
@ -2486,10 +2487,10 @@ function addTaxesToPricedLineItems(lineItems, taxingLineItems) {
|
||||||
}
|
}
|
||||||
|
|
||||||
let taxedLineItem = taxingLineItems.splice(lineItemIndex, 1)[0];
|
let taxedLineItem = taxingLineItems.splice(lineItemIndex, 1)[0];
|
||||||
lineItem.SalesTax = taxedLineItem.SalesTax;
|
lineItem.salesTax = taxedLineItem.salesTax;
|
||||||
});
|
});
|
||||||
|
|
||||||
return lineItems;
|
return taxedLineItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
function getArrayOfAllLineItems(lineItems) {
|
function getArrayOfAllLineItems(lineItems) {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue