procurement-vuex
Version:
Commerce vuex module
313 lines (304 loc) • 14.4 kB
JavaScript
import { snakeCase } from 'lodash';
import humps from 'lodash-humps';
import createHumps from 'lodash-humps/lib/createHumps';
import { formateDateToMDYFormat } from './common.service';
const snakes = createHumps(snakeCase)
import purchaseOrderService from './purchase_order.service';
import purchaseOrderItemService from './purchase_order_item.service';
const { doFetchList, doFetchListForCsvExport, doFetchOrderListByIds,doFetchProcurementReport,doFetchLogisticsTrackerList,doFetchTemplatesList } = purchaseOrderService
const { doFetchItemsByIds } = purchaseOrderItemService
export default {
namespaced: true,
state: {
list: [],
purchaseOrdersWithBrands:[],
itemsWthBrandsList:[],
selected: [],
recordsCount: 0,
inProgress: false,
error: null,
reportInProgress: true,
report: {},
logisticsTracker:[],
logisticsTrackerDatesList:[]
},
mutations: {
inProgress(state, yesOrNo) {
state.inProgress = yesOrNo
},
setList(state, list) {
state.selected = [];
for (let i in state.list) {
state.selected.push(false);
state.selected[i] = false;
}
state.list = list;
},
setItemsWthBrandsList(state, list) {
state.itemsWthBrandsList = list;
},
setListCount(state, number) {
state.recordsCount = number;
},
setPurchaseOrderWithBrands(state, list) {
state.purchaseOrdersWithBrands = list;
},
setReportInProgress(state, yesOrNo) {
state.reportInProgress = yesOrNo
},
setProcurementReport(state, aReport) {
state.report = aReport
},
setLogisticsTrackerList(state,list){
state.logisticsTracker=list
if(list.length > 0)
{
state.logisticsTrackerDatesList = state.logisticsTracker.map( stu => formateDateToMDYFormat(stu.shipmentStartDate) +'~'+ formateDateToMDYFormat(stu.shipmentCancelDate));
}
else{
state.logisticsTrackerDatesList=[];
}
}
},
actions: {
fetchList: async ({ commit, dispatch,rootState}, { appId, emailLike, poNumberLike,purchaserBusinessEntityId, sortByDate,pageNumber, limit,recursive }) => {
commit('inProgress', true);
try {
let offset = (pageNumber - 1) * limit;
const response = await doFetchList({ appId, emailLike,poNumberLike, purchaserBusinessEntityId, sortByDate, limit, offset });
if (response.range != null) {
let recordsCount = response.range.split("/");
commit('setListCount', Number(recordsCount[1]));
const list = await response.data;
if (list) {
commit('setList', humps((list)));
commit('inProgress', false);
return humps(list)
} else
commit('setList', []);
commit('inProgress', false);
if (recursive && list.length && (!rootState.businessEntityOne.one || list[0].purchaser_business_entity_id !== rootState.businessEntityOne.one.id) ) {
dispatch('businessEntityOne/fetchOne', {
businessEntityId: purchaserBusinessEntityId,
appId: appId
}, { root: true })
}
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
fetchItemsWthBrandsList : async ({ commit }, { appId, emailLike,purchaserBusinessEntityId, sortByDate, pageNumber, limit }) => {
commit('inProgress', true);
try {
let offset = (pageNumber - 1) * limit;
const response = await doFetchList({ appId, emailLike, purchaserBusinessEntityId,sortByDate, limit, offset });
if (response.range != null) {
let recordsCount = response.range.split("/");
commit('setListCount', Number(recordsCount[1]));
const list = await response.data;
if (list) {
const purchaseIds = list.map((item) => {
return item.id
})
if (purchaseIds) {
const ids = purchaseIds.join()
let purchaseItemsList = await doFetchItemsByIds({ ids })
const dataList = list.map((item) => {
let newRec = {}
let brandsList = []
for (let j = 0; j < purchaseItemsList.length; j++) {
if (item.id === purchaseItemsList[j].purchase_order_id) {
brandsList.push(purchaseItemsList[j].brand.name)
}
}
newRec = Object.assign({}, item, { brands: [...new Set(brandsList)] })
return newRec
}).filter((item)=>item.brands.length > 0)
commit('setItemsWthBrandsList', humps((dataList)));
commit('inProgress', false)
}
} else
commit('setItemsWthBrandsList', []);
commit('inProgress', false)
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
fetchPurchaseOrdersWthBrandsForCsv : async ({ commit, dispatch }, { appId, purchaserBusinessEntityId, sortByDate }) => {
commit('inProgress', true);
try {
const response = await doFetchListForCsvExport({ appId, purchaserBusinessEntityId,sortByDate });
if (response.range != null) {
const list = await response.data;
if (list) {
// let brandIds = []
// list.filter((item) => {
// if(item.metadata.brand_id && typeof item.metadata.brand_id !== 'object')
// brandIds.push(item.metadata.brand_id)
// })
// const unqBrandIds = [...new Set(brandIds)]
// if (unqBrandIds) {
// const ids = unqBrandIds.join()
// let brandList = await dispatch('brandList/fetchBrandListByIds', {
// appId:appId,brandIds:ids,nameLike:'',pageNumber:1, limit:unqBrandIds.length
// }, { root: true })
// const dataList = list.map((item) => {
// let newRec = {}
// let brands = []
// for (let j = 0; j < brandList.length; j++) {
// if (item.metadata.brand_id === brandList[j].id) {
// brands.push(brandList[j].name)
// }
// }
// newRec = Object.assign({}, item, { brands: [...new Set(brands)] })
// return newRec
// })
// commit('setPurchaseOrderWithBrands', humps((dataList)));
commit('inProgress', false)
return humps(list)
// }
}
// else
// commit('setPurchaseOrderWithBrands', []);
commit('inProgress', false)
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
fetchPurchaseOrdersWthBrands : async ({ commit }, { appId, poNumberLike,purchaserBusinessEntityId, filterByStatus,filterByBrand, filterBySeason,filterByRetailteam, sortByDate, sortByFieldName, pageNumber, limit, filterByCurrency, filterBySalesagentBusinessEntityId, filterByProviderBusinessEntityId,seasonType,filterByOrdersProcessingState }) => {
commit('inProgress', true);
try {
let offset = (pageNumber - 1) * limit;
const response = await doFetchList({ appId, poNumberLike, purchaserBusinessEntityId,filterByStatus,filterByBrand, filterBySeason,filterByRetailteam,sortByDate, sortByFieldName, limit, offset, filterByCurrency,filterBySalesagentBusinessEntityId, filterByProviderBusinessEntityId,seasonType,filterByOrdersProcessingState });
if (response.range != null) {
let recordsCount = response.range.split("/");
commit('setListCount', Number(recordsCount[1]));
const list = await response.data;
if (list) {
// let brandIds = []
// list.filter((item) => {
// if(item.metadata.brand_id && typeof item.metadata.brand_id !== 'object')
// brandIds.push(item.metadata.brand_id)
// })
// const unqBrandIds = [...new Set(brandIds)]
// if (unqBrandIds) {
// const ids = unqBrandIds.join()
// let brandList = await dispatch('brandList/fetchBrandListByIds', {
// appId:appId,brandIds:ids,nameLike:'',pageNumber:1, limit:unqBrandIds.length
// }, { root: true })
// const dataList = list.map((item) => {
// let newRec = {}
// let brands = []
// for (let j = 0; j < brandList.length; j++) {
// if (item.metadata.brand_id === brandList[j].id) {
// brands.push(brandList[j].name)
// }
// }
// newRec = Object.assign({}, item, { brands: [...new Set(brands)] })
// return newRec
// })
commit('inProgress', false)
commit('setPurchaseOrderWithBrands', humps((list)));
return humps(list)
}
} else
commit('setPurchaseOrderWithBrands', []);
commit('inProgress', false)
// }
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
fetchOrderListByIds: async ({ commit }, { appId, orderIds, pageNumber, limit }) => {
commit('inProgress', true);
try {
let offset = (pageNumber - 1) * limit;
const response = await doFetchOrderListByIds({ appId, orderIds, limit, offset });
if (response.range != null) {
let recordsCount = response.range.split("/");
commit('setListCount', Number(recordsCount[1]));
const list = await response.data;
if (list) {
commit('setList', humps((list)));
return humps(list)
} else
commit('setList', []);
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
fetchProcurementReport: async ({ commit }, { purchaserIds, from, storeIds, to, providerIds, filters }) => {
commit('setReportInProgress', true);
try {
const report = await doFetchProcurementReport({ purchaserIds, from, storeIds, to, providerIds, filters });
if (report) {
commit('setProcurementReport', humps(report));
commit('setReportInProgress', false);
} else {
commit('setProcurementReport', {});
commit('setReportInProgress', false);
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('setReportInProgress', false)
}
},
fetchLogisticsTrackerList: async({ commit }, { purchaseOrderId }) => {
commit('inProgress', true)
try {
const response = await doFetchLogisticsTrackerList({ purchaseOrderId })
if (response) {
const list = await response.shipments
if (list) {
commit('setLogisticsTrackerList', humps((list)))
commit('inProgress', false)
return (humps(list))
} else
commit('setLogisticsTrackerList', [])
commit('inProgress', false)
return []
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
}
}