UNPKG

wholesale-vuex

Version:
188 lines (182 loc) 7.86 kB
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); } }, }, }