Merge pull request #1401 from Safelite/feature/CSR-1395-sales-tax-store-methods
Feature/csr 1395 sales tax store methods
This commit is contained in:
commit
5b6474fa48
3 changed files with 91 additions and 0 deletions
|
|
@ -138,6 +138,10 @@ const endpoints = {
|
||||||
url: "/price/api/v1/price/order-items",
|
url: "/price/api/v1/price/order-items",
|
||||||
method: "GET",
|
method: "GET",
|
||||||
},
|
},
|
||||||
|
TaxOrderItems: {
|
||||||
|
url: "/price/api/v1/price/taxed-order-items",
|
||||||
|
method: "GET",
|
||||||
|
},
|
||||||
LogExperimentExposureIfAssigned: {
|
LogExperimentExposureIfAssigned: {
|
||||||
url: "/experiments/api/v1/experiments/log-exposure",
|
url: "/experiments/api/v1/experiments/log-exposure",
|
||||||
method: "POST",
|
method: "POST",
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,7 @@ const storeActions = {
|
||||||
UPDATE_STORE_WITH_SAVE_SESSION_RESPONSE: "updateStoreWithSaveSessionResponse",
|
UPDATE_STORE_WITH_SAVE_SESSION_RESPONSE: "updateStoreWithSaveSessionResponse",
|
||||||
VALIDATE_ZIP: "validateZip",
|
VALIDATE_ZIP: "validateZip",
|
||||||
PRICE_ORDER_ITEMS_AND_SAVE_SERVER_DATA: "priceOrderItemsAndSaveServerData",
|
PRICE_ORDER_ITEMS_AND_SAVE_SERVER_DATA: "priceOrderItemsAndSaveServerData",
|
||||||
|
TAX_ORDER_ITEMS_AND_SAVE_SERVER_DATA: "taxOrderItemsAndSaveServerData",
|
||||||
LOG_EXPERIMENT_EXPOSURE: "logExperimentExposure",
|
LOG_EXPERIMENT_EXPOSURE: "logExperimentExposure",
|
||||||
LOG_PAGE_VIEW: "logPageView",
|
LOG_PAGE_VIEW: "logPageView",
|
||||||
LOG_CUSTOM_EVENT: "logCustomEvent",
|
LOG_CUSTOM_EVENT: "logCustomEvent",
|
||||||
|
|
|
||||||
|
|
@ -2027,14 +2027,18 @@ export const actions = {
|
||||||
const zipCodeToUse = serviceZipCode
|
const zipCodeToUse = serviceZipCode
|
||||||
? serviceZipCode
|
? serviceZipCode
|
||||||
: context.getters.order.serviceLocation.zipCode;
|
: context.getters.order.serviceLocation.zipCode;
|
||||||
|
|
||||||
const ctuToUse = serviceZipCodeCtu
|
const ctuToUse = serviceZipCodeCtu
|
||||||
? serviceZipCodeCtu
|
? serviceZipCodeCtu
|
||||||
: context.getters.order.serviceLocation.zipCodeCtu;
|
: context.getters.order.serviceLocation.zipCodeCtu;
|
||||||
|
|
||||||
const flattenedLineItemsWithChildParts =
|
const flattenedLineItemsWithChildParts =
|
||||||
getFlattenedArrayOfLineItemsWithChildParts(availableLineItems);
|
getFlattenedArrayOfLineItemsWithChildParts(availableLineItems);
|
||||||
|
|
||||||
const lineItemsWithOnlyPartNumbers = flattenedLineItemsWithChildParts.map((lineItem) => ({
|
const lineItemsWithOnlyPartNumbers = flattenedLineItemsWithChildParts.map((lineItem) => ({
|
||||||
partNumber: lineItem.partNumber,
|
partNumber: lineItem.partNumber,
|
||||||
}));
|
}));
|
||||||
|
|
||||||
const availableLineItemsFormattedForRequest =
|
const availableLineItemsFormattedForRequest =
|
||||||
buildQueryStringParameterFromArrayOfComplexObjects(
|
buildQueryStringParameterFromArrayOfComplexObjects(
|
||||||
lineItemsWithOnlyPartNumbers,
|
lineItemsWithOnlyPartNumbers,
|
||||||
|
|
@ -2073,6 +2077,68 @@ export const actions = {
|
||||||
return pricedLineItems;
|
return pricedLineItems;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Tax order actions
|
||||||
|
async taxOrderItemsAndSaveServerData(
|
||||||
|
context,
|
||||||
|
{
|
||||||
|
payload: {
|
||||||
|
billToAccountNumber,
|
||||||
|
providerNumber,
|
||||||
|
appointmentType,
|
||||||
|
serviceLocationState,
|
||||||
|
serviceLocationZipCode,
|
||||||
|
pricedLineItems,
|
||||||
|
},
|
||||||
|
pageNameToLog,
|
||||||
|
}
|
||||||
|
) {
|
||||||
|
const flattenedLineItemsWithChildParts =
|
||||||
|
getFlattenedArrayOfLineItemsWithChildParts(pricedLineItems);
|
||||||
|
|
||||||
|
const lineItemsWithOnlyPriceInfo = flattenedLineItemsWithChildParts.map((lineItem) => ({
|
||||||
|
partNumber: lineItem.partNumber,
|
||||||
|
laborAmount: lineItem.laborAmount,
|
||||||
|
kitPrice: lineItem.kitPrice,
|
||||||
|
sellingPrice: lineItem.sellingPrice,
|
||||||
|
}));
|
||||||
|
|
||||||
|
const pricedLineItemsFormattedForRequest =
|
||||||
|
buildQueryStringParameterFromArrayOfComplexObjects(
|
||||||
|
lineItemsWithOnlyPriceInfo,
|
||||||
|
"lineItems"
|
||||||
|
);
|
||||||
|
|
||||||
|
let queryString =
|
||||||
|
`ParentAccountNumber=${applicationConfig.CASH_PARENT_ACCOUNT_NUMBER}` +
|
||||||
|
`&BillToAccountNumber=${billToAccountNumber}` +
|
||||||
|
`&ProviderNumber=${providerNumber}` +
|
||||||
|
`&AppointmentType=${appointmentType}` +
|
||||||
|
`&ServiceLocation.State=${serviceLocationState}` +
|
||||||
|
`&ServiceLocation.ZipCode=${serviceLocationZipCode}` +
|
||||||
|
`&${pricedLineItemsFormattedForRequest}`;
|
||||||
|
|
||||||
|
const lineItemServerData = context.getters.order.lineItems.serverData;
|
||||||
|
if (lineItemServerData) {
|
||||||
|
queryString += `&ServerData=${encodeURIComponent(lineItemServerData)}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const response = await globalMethods.callHttpClient({
|
||||||
|
method: endpoints.TaxOrderItems.method,
|
||||||
|
endpoint: `${endpoints.TaxOrderItems.url}?${queryString}`,
|
||||||
|
logApiCall: true,
|
||||||
|
pageNameToLog: pageNameToLog,
|
||||||
|
});
|
||||||
|
|
||||||
|
context.commit(storeMutations.UPDATE_LINE_ITEMS_SERVER_DATA, response.data.serverData);
|
||||||
|
|
||||||
|
const taxedLineItems = addTaxesToPricedLineItems(
|
||||||
|
pricedLineItems,
|
||||||
|
response.data.taxedLineItems
|
||||||
|
);
|
||||||
|
|
||||||
|
return taxedLineItems;
|
||||||
|
},
|
||||||
|
|
||||||
// Misc order actions
|
// Misc order actions
|
||||||
saveSchedule(context, scheduleInfo) {
|
saveSchedule(context, scheduleInfo) {
|
||||||
context.commit(storeMutations.UPDATE_SCHEDULE, scheduleInfo);
|
context.commit(storeMutations.UPDATE_SCHEDULE, scheduleInfo);
|
||||||
|
|
@ -2283,17 +2349,37 @@ function addPricesToLineItems(lineItems, pricingLineItems) {
|
||||||
let lineItemIndex = pricingLineItems.findIndex(
|
let lineItemIndex = pricingLineItems.findIndex(
|
||||||
(pricingLineItem) => pricingLineItem.partNumber === lineItem.partNumber
|
(pricingLineItem) => pricingLineItem.partNumber === lineItem.partNumber
|
||||||
);
|
);
|
||||||
|
|
||||||
if (lineItem.childParts) {
|
if (lineItem.childParts) {
|
||||||
addPricesToLineItems(lineItem.childParts, pricingLineItems);
|
addPricesToLineItems(lineItem.childParts, pricingLineItems);
|
||||||
}
|
}
|
||||||
|
|
||||||
let pricedLineItem = pricingLineItems.splice(lineItemIndex, 1)[0];
|
let pricedLineItem = pricingLineItems.splice(lineItemIndex, 1)[0];
|
||||||
lineItem.laborAmount = pricedLineItem.laborAmount;
|
lineItem.laborAmount = pricedLineItem.laborAmount;
|
||||||
lineItem.sellingPrice = pricedLineItem.sellingPrice;
|
lineItem.sellingPrice = pricedLineItem.sellingPrice;
|
||||||
lineItem.kitPrice = pricedLineItem.kitPrice;
|
lineItem.kitPrice = pricedLineItem.kitPrice;
|
||||||
});
|
});
|
||||||
|
|
||||||
return pricedLineItems;
|
return pricedLineItems;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function addTaxesToPricedLineItems(lineItems, taxingLineItems) {
|
||||||
|
lineItems.forEach((lineItem) => {
|
||||||
|
let lineItemIndex = taxingLineItems.findIndex(
|
||||||
|
(taxingLineItem) => taxingLineItem.partNumber === lineItem.partNumber
|
||||||
|
);
|
||||||
|
|
||||||
|
if (lineItem.childParts) {
|
||||||
|
addTaxesToPricedLineItems(lineItem.childParts, taxingLineItems);
|
||||||
|
}
|
||||||
|
|
||||||
|
let taxedLineItem = taxingLineItems.splice(lineItemIndex, 1)[0];
|
||||||
|
lineItem.SalesTax = taxedLineItem.SalesTax;
|
||||||
|
});
|
||||||
|
|
||||||
|
return lineItems;
|
||||||
|
}
|
||||||
|
|
||||||
function getFlattenedArrayOfLineItemsWithChildParts(lineItems) {
|
function getFlattenedArrayOfLineItemsWithChildParts(lineItems) {
|
||||||
let flattenedArray = [];
|
let flattenedArray = [];
|
||||||
lineItems?.forEach((lineItem) => {
|
lineItems?.forEach((lineItem) => {
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue