procurement-vuex
Version:
Commerce vuex module
493 lines (467 loc) • 16.7 kB
JavaScript
import { snakeCase } from "lodash";
import humps from "lodash-humps";
import createHumps from "lodash-humps/lib/createHumps";
import { getField, updateField } from "vuex-map-fields";
import purchaseOrderService from "./purchase_order_snapshot.service";
const { doPurchaseOrderApplyChanges } = purchaseOrderService
const snakes = createHumps(snakeCase);
export default {
namespaced: true,
state: {
masterOne:null,
details:null,
shipments:null,
orderSnapshotObj: null,
items:null,
inProgress: false,
filteredItems: null,
originalItems: null,
poNumberList: [],
seasonList: [],
areaList: [],
zoneList: [],
itemsProcessingCount: { processed: 0, notProcessed: 0 },
originalSnapShotItems: [],
snapShotResponseItems: [],
orderItemList:[],
orderItemMasterList:[]
// filteredItems: [],
},
getters: {
getField,
},
mutations: {
updateField,
inProgress(state, yesOrNo) {
state.inProgress = yesOrNo;
},
setMasterOne(state, one) {
state.masterOne = one;
},
setSnapshotObj(state, one) {
state.orderSnapshotObj = one;
},
setOrderItemList(state, itemList){
state.orderItemList = itemList;
state.orderItemMasterList=JSON.stringify(itemList)
},
setDetails(state, details) {
state.details = details;
},
setItems(state, items) {
state.items = items
},
setSnapShotResponseItems(state, {items}){
state.snapShotResponseItems = items
},
setShipments(state, shipments) {
state.shipments = shipments
},
setProcessItemCount(state, flagObj) {
if (flagObj.isNewProcessed) {
state.itemsProcessingCount.processed += 1;
state.itemsProcessingCount.notProcessed -= 1;
} else {
state.itemsProcessingCount.processed -= 1;
state.itemsProcessingCount.notProcessed += 1;
}
},
setAndExpandItems(state, { details, items }) {
state.filteredItems = [];
if (
details.itemsFormat === "variant_size_color" &&
items
) { // expand
const list = items;
const dataList = [];
state.seasonList = [];
state.poNumberList = [];
state.areaList = [];
state.zoneList = [];
state.itemsProcessingCount = { processed: 0, notProcessed: 0 };
list.map((item) => {
if (item.icpData) {
if (
item.icpData.poNumber &&
state.poNumberList.indexOf(item.icpData.poNumber) === -1
){
state.poNumberList.push(item.icpData.poNumber);
}
if (
item.icpData.season &&
state.seasonList.indexOf(item.icpData.season) === -1
)
state.seasonList.push(item.icpData.season);
if (
item.icpData.area &&
state.areaList.indexOf(item.icpData.area) === -1
)
state.areaList.push(item.icpData.area);
if (
item.icpData.zoneCode &&
state.zoneList.indexOf(item.icpData.zone) === -1
)
state.zoneList.push(item.icpData.zoneCode);
}
if (item.variants) {
for (let i = 0; i < item.variants.length; i++) {
const isExist = localStorage.getItem(
item.id +
"_" +
item.variants[i].category +
"_" +
item.variants[i].size +
"_" +
item.variants[i].color
);
if (isExist === "true" || isExist === true) {
item.variants[i].processedItem = true;
state.itemsProcessingCount.processed += 1;
} else {
item.variants[i].processedItem = false;
state.itemsProcessingCount.notProcessed += 1;
}
item.variants[i].id = item.id;
item.variants[i].name = item.name;
item.variants[i].indexKey =
item.name +
"-" +
item.variants[i].color +
"-" +
item.variants[i].size +
"-" +
item.variants[i].category +
i;
item.variants[i].poNumber = item.icpData ? item.icpData.poNumber : '';
item.variants[i].season = item.icpData
? item.icpData.season
: [];
item.variants[i].area = item.icpData ? item.icpData.area : [];
item.variants[i].zoneCode = item.icpData
? item.icpData.zoneCode
: [];
item.variants[i].startDate = item.shipmentStartDate;
item.variants[i].endDate = item.shipmentCancelDate;
dataList.push(item.variants[i]);
// if (item.variants[i].qty > 0) {
// dataList.push(item.variants[i])
// }
// const checkVariantsQty = item.variants.filter((val) => val.qty > 0)
// if (checkVariantsQty.length === 0) {
// if (dataList.length > 0) {
// for (let j = 0;j < dataList.length;j++) {
// const checkDataExist = dataList.map((val) => val.id).includes(item.variants[i].id)
// if (dataList[j].id !== item.variants[i].id && item.variants[i].qty === '0' && !checkDataExist) {
// dataList.push(item.variants[i])
// }
// }
// } else {
// dataList.push(item.variants[i])
// }
// }
}
}
});
state.filteredItems = dataList;
state.originalItems = dataList;
}
if (
details.itemsFormat === "sku" &&
items
) {
state.filteredItems = items;
state.originalItems = items;
}
},
setSnapShotItems(state) {
if (
state.orderSnapshotObj &&
state.orderSnapshotObj.items &&
state.orderSnapshotObj.items.length
) {
state.filteredItems = [];
if (
state.orderSnapshotObj &&
state.orderSnapshotObj.details &&
state.orderSnapshotObj.details.itemsFormat === "variant_size_color" &&
state.orderSnapshotObj.items
) {
const list = state.orderSnapshotObj.items;
const dataList = [];
state.seasonList = [];
state.poNumberList = [];
state.areaList = [];
state.zoneList = [];
state.itemsProcessingCount = { processed: 0, notProcessed: 0 };
list.map((item) => {
if (item.icpData) {
if (
item.icpData.poNumber &&
state.poNumberList.indexOf(item.icpData.poNumber) === -1
){
state.poNumberList.push(item.icpData.poNumber);
}
if (
item.icpData.season &&
state.seasonList.indexOf(item.icpData.season) === -1
)
state.seasonList.push(item.icpData.season);
if (
item.icpData.area &&
state.areaList.indexOf(item.icpData.area) === -1
)
state.areaList.push(item.icpData.area);
if (
item.icpData.zoneCode &&
state.zoneList.indexOf(item.icpData.zone) === -1
)
state.zoneList.push(item.icpData.zoneCode);
}
if (item.variants) {
for (let i = 0; i < item.variants.length; i++) {
const isExist = localStorage.getItem(
item.id +
"_" +
item.variants[i].category +
"_" +
item.variants[i].size +
"_" +
item.variants[i].color
);
if (isExist === "true" || isExist === true) {
item.variants[i].processedItem = true;
state.itemsProcessingCount.processed += 1;
} else {
item.variants[i].processedItem = false;
state.itemsProcessingCount.notProcessed += 1;
}
item.variants[i].id = item.id;
item.variants[i].name = item.name;
item.variants[i].indexKey =
item.name +
"-" +
item.variants[i].color +
"-" +
item.variants[i].size +
"-" +
item.variants[i].category +
i;
item.variants[i].poNumber = item.icpData ? item.icpData.poNumber : [];
item.variants[i].season = item.icpData
? item.icpData.season
: [];
item.variants[i].area = item.icpData ? item.icpData.area : [];
item.variants[i].zoneCode = item.icpData
? item.icpData.zoneCode
: [];
item.variants[i].startDate =item.shipmentStartDateOld ? item.shipmentStartDateOld: item.shipmentStartDate;
item.variants[i].endDate = item.shipmentCancelDateOld ? item.shipmentCancelDateOld: item.shipmentCancelDate;
dataList.push(item.variants[i]);
}
}
});
state.filteredItems = dataList;
state.originalSnapShotItems = dataList;
}
if (
state.orderSnapshotObj &&
state.orderSnapshotObj.details &&
state.orderSnapshotObj.details.itemsFormat === "sku" &&
state.orderSnapshotObj.items
) {
state.filteredItems = state.orderSnapshotObj.items;
state.originalSnapShotItems = state.orderSnapshotObj.items;
}
}
},
searchSnapShotItems(state, filterObj) {
if (
filterObj.styleRef ||
filterObj.season ||
filterObj.poNumber ||
filterObj.area ||
filterObj.zone ||
filterObj.shipmentDates ||
filterObj.color ||
filterObj.processedItem
) {
state.filteredItems = state.originalSnapShotItems;
if (filterObj.styleRef) {
let items = [];
state.filteredItems.filter((variant) => {
if (
variant.name &&
variant.name
.toLowerCase()
.search(filterObj.styleRef.toLowerCase()) !== -1
)
items.push(variant);
});
state.filteredItems = items;
}
if (filterObj.poNumber) {
let items = [];
state.filteredItems.filter((variant) => {
if (
variant.poNumber &&
variant.poNumber
.toLowerCase()
.search(filterObj.poNumber.toLowerCase()) !== -1
)
items.push(variant);
});
state.filteredItems = items;
}
if (filterObj.color) {
let items = [];
state.filteredItems.filter((variant) => {
if (
variant.color &&
variant.color
.toLowerCase()
.search(filterObj.color.toLowerCase()) !== -1
)
items.push(variant);
});
state.filteredItems = items;
}
if (filterObj.area) {
let items = [];
state.filteredItems.filter((variant) => {
if (variant.area === filterObj.area) items.push(variant);
});
state.filteredItems = items;
}
if (filterObj.season) {
let items = [];
state.filteredItems.filter((variant) => {
if (variant.season === filterObj.season) items.push(variant);
});
state.filteredItems = items;
}
if (filterObj.zone) {
let items = [];
state.filteredItems.filter((variant) => {
if (variant.zoneCode === filterObj.zone) items.push(variant);
});
state.filteredItems = items;
}
if (filterObj.processedItem) {
if (filterObj.processedItem !== "all") {
state.itemsProcessingCount = { processed: 0, notProcessed: 0 };
let items = [];
state.filteredItems.filter((variant) => {
const isExist = localStorage.getItem(
variant.id +
"_" +
variant.category +
"_" +
variant.size +
"_" +
variant.color
);
if (isExist === "true" || isExist === true) {
variant.processedItem = true;
state.itemsProcessingCount.processed += 1;
} else {
variant.processedItem = false;
state.itemsProcessingCount.notProcessed += 1;
}
if (filterObj.processedItem == "processed") {
if (variant.processedItem) items.push(variant);
} else if (filterObj.processedItem == "not processed") {
if (!variant.processedItem) items.push(variant);
}
});
state.filteredItems = items;
}
}
if (filterObj.shipmentDates) {
let items = [];
state.filteredItems.filter((variant) => {
if (
variant.startDate === filterObj.shipmentDates[0] &&
variant.endDate === filterObj.shipmentDates[1]
)
items.push(variant);
});
state.filteredItems = items;
}
state.filteredItems = [...new Set(state.filteredItems)];
}
// filtered onlly current shipment window
else if (filterObj.currentShippingWindow) {
let items = [];
state.filteredItems.filter((variant) => {
if (
variant.startDate === filterObj.currentShippingWindow.shipmentStartDate &&
variant.endDate === filterObj.currentShippingWindow.shipmentCancelDate
)
items.push(variant);
});
state.filteredItems = items;
}
// send all items if no filter
else {
state.filteredItems = [];
state.filteredItems = state.originalSnapShotItems;
}
},
},
actions: {
fetchProcessingSnapshot: async ({ commit }, { purchaseOrderId,purchaseOrderChangesetId, specs }) => {
commit("inProgress", true);
try {
let snapshot = await doPurchaseOrderApplyChanges(
{ purchaseOrderId,purchaseOrderChangesetId,specs }
);
if (snapshot) {
commit("setSnapshotObj", humps(snapshot));
commit("setDetails", humps(snapshot.details));
commit("setMasterOne", humps(snapshot.details));
commit("setAndExpandItems", {details: humps(snapshot.details), items: humps(snapshot.items)});
commit("setOrderItemList", (snapshot.items));
commit("setShipments", humps(snapshot.shipments));
commit("setSnapShotResponseItems", {items: humps(snapshot.items)});
return humps(snapshot)
}
} catch (err) {
throw "error";
} finally {
commit("inProgress", false);
}
},
snapShotOrderItemsForFilter: ({ commit }, {}) => {
commit("setSnapShotItems");
},
searchSnapShotItems: (
{ commit },
{
season,
area,
zone,
styleRef,
shipmentDates,
color,
currentShippingWindow,
processedItem,
poNumber,
}
) => {
commit("searchSnapShotItems", {
season,
area,
zone,
styleRef,
shipmentDates,
color,
currentShippingWindow,
processedItem,
poNumber
});
},
changeProcessItemCount: ({ commit }, { isNewProcessed }) => {
commit("setProcessItemCount", { isNewProcessed });
}
}
};