wholesale-vuex
Version:
Commerce vuex module
188 lines (182 loc) • 7.86 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 salesCommercialInvoiceService from './wholesale_commercial_invoice.service'
const { doPostInvoiceListItems, doFetchInvoiceItemsList,doDeleteSelectedInvoiceItems } = salesCommercialInvoiceService
const snakes = createHumps(snakeCase)
export default {
namespaced: true,
state: {
one: null,
inProgress: true,
invoiceItemsList: [],
orderItemVariantsList: [],
originalOrderItemVariants: []
},
getters: {
getField,
},
mutations: {
updateField,
setOne(state, one) {
state.one = one;
},
inProgress(state, yesOrNo) {
state.inProgress = yesOrNo
},
setInvoiceListItems(state, list) {
state.invoiceItemsList = []
state.invoiceItemsList = list
},
setOrderItemsVariantList(state, data) {
state.orderItemVariantsList = []
if (data.list && data.list.length) {
const dataList = []
data.list.map((item) => {
for (let i = 0; i < item.variants.length; i++) {
item.variants[i].id = item.id
item.variants[i].name = item.variants[i].name ? item.variants[i].name : item.name
dataList.push(item.variants[i])
}
})
state.originalOrderItemVariants = _.cloneDeep(dataList)
state.orderItemVariantsList = _.cloneDeep(dataList)
}
},
setItemListAsPerQuantity(state, data) {
state.originalOrderItemVariants.filter((originalVrnt) => {
let editedItem = _.cloneDeep(data.item)
if (originalVrnt.sku === editedItem.sku) {
let qty = 0
state.orderItemVariantsList.filter((variant) => {
if (variant.sku === editedItem.sku)
qty += Number(variant.qty)
})
if (Number(originalVrnt.qty) > Number(qty)) {
editedItem.qty = Number(originalVrnt.qty) - Number(qty)
state.orderItemVariantsList.push(editedItem)
}
// edited qty is greater then delete that record from list
if (Number(originalVrnt.qty) < Number(qty)) {
let cnt = 0
let newList = state.orderItemVariantsList.filter((variant) => {
if (variant.sku === editedItem.sku) {
cnt++
if (cnt === 1) {
return variant
}
}
else
return variant
})
state.orderItemVariantsList = []
state.orderItemVariantsList = newList
}
}
})
},
modifyInvoiceListItems(state, data) {
state.invoiceItemsList = []
if (data.invoiceList && data.dataList && data.dataList.length) {
let orderItemIds = []
// storing unique ids
data.dataList.filter((item) => {
if (!orderItemIds.includes(item.id)) {
orderItemIds.push(item.id)
}
})
// storing same ids data in variants
orderItemIds.filter((uniqueId) => {
let packedItem = {
appId: data.invoiceList.appId,
providerBusinessEntityId: data.invoiceList.providerBusinessEntityId,
salesteamServiceId: data.invoiceList.salesteamServiceId,
purchaserBusinessEntityId: data.invoiceList.purchaserBusinessEntityId,
commercialInvoiceId: data.invoiceList.id
}
let variants = []
data.dataList.filter((item) => {
if (uniqueId === item.id) {
if (!item.notIncluded || item.notIncluded === null) {
variants.push({
sku: item.sku,
size: item.size,
color: item.color,
qty: item.qty,
boxNumber: item.boxNumber,
hsCode: item.hsCode,
countryIso3: item.countryIso3,
})
}
}
})
//assinging a varinats to new record
packedItem.variants = variants
// collecting records for unique ids as per api requirement
state.invoiceItemsList.push(packedItem)
})
}
},
},
actions: {
new({ commit }, { salesOrderOne }) {
commit('inProgress', false);
commit('setOne', {
appId: salesOrderOne.appId,
providerBusinessEntityId: salesOrderOne.providerBusinessEntityId,
purchaserBusinessEntityId: salesOrderOne.purchaserBusinessEntityId,
salesteamServiceId : salesOrderOne.salesteamServiceId,
commercialInvoiceId: '',
variants: [],
});
},
fetchVariantsList: async ({ commit }, { list }) => {
commit('setOrderItemsVariantList', { list });
},
modifyListAsPerQuantity: async ({ commit }, { item }) => {
commit('setItemListAsPerQuantity', { item });
},
saveInvoiceItemList: async ({ commit, state }, { invoiceList, dataList }) => {
commit('modifyInvoiceListItems', { dataList, invoiceList: humps(invoiceList) });
if (state.invoiceItemsList.length) {
let invoiceItemList = await doPostInvoiceListItems(snakes(Object.assign([], state.invoiceItemsList)))
commit('inProgress', false)
return ({ new: true, invoiceItemList: invoiceItemList })
}
},
fetchList: async ({ commit }, { appId, invoiceListId }) => {
commit('inProgress', true);
try {
const list = await doFetchInvoiceItemsList({ appId, invoiceListId });
if (list) {
commit('setInvoiceListItems', humps((list)));
commit('inProgress', false);
return { invoiceItemList: humps(list) }
} else {
commit('setInvoiceListItems', []);
commit('inProgress', false);
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
deleteInvoiceItems: async ({ commit }, { invoiceId }) => {
commit('inProgress', true);
try {
await doDeleteSelectedInvoiceItems({ invoiceId });
return ({ deleteSelected: true })
} catch (err) {
return ({ deleteSelected: false })
}
finally {
commit('inProgress', false);
}
},
},
}