procurement-vuex
Version:
Commerce vuex module
605 lines (570 loc) • 24.3 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 purchaseOrderItemService from './purchase_order_item.service'
const { doPostOne, doPatchOne, doFetchOne, doDeleteSelected, doExportPurchaseOrderItemsInExcel,doPatchItems, doCreateJiraTicketRequest } = purchaseOrderItemService
const snakes = createHumps(snakeCase)
import { checkExistOrNot, returnOriginalSkuQtyBySku, checkForUndefined } from './common.service.js'
export default {
namespaced: true,
state: {
one: null,
oneVariantsObj: {},
inProgress: false,
variantsListInProgress: true,
variantsList: [],
originalVariants: [],
orderItemIcpData:null,
masterItemOne:null,
masterItemOneIcpData:null
},
getters: {
getField,
},
mutations: {
updateField,
setOne(state, one) {
state.one = one;
if (state.one.variants.length > 0 && state.one.format === 'sku') {
state.oneVariantsObj = Object.assign({}, state.one.variants[0])
let resultColor = state.oneVariantsObj.color
let newColor = resultColor && resultColor.length && typeof resultColor == "object" ? resultColor[0] : resultColor && typeof resultColor == "string" ? resultColor : null;
state.oneVariantsObj.color = newColor
let resultSize = state.oneVariantsObj.size
let newSize = resultSize && resultSize.length && typeof resultSize == "object" ? resultSize[0] : resultSize && typeof resultSize == "string" ? resultSize : null;
state.oneVariantsObj.size = newSize
let resultCategory = state.oneVariantsObj.category
let newCategory = resultCategory && resultCategory.length && Array.isArray(resultCategory) ? resultCategory : typeof resultCategory == "object" ? resultCategory[0] : resultCategory && typeof resultCategory == "string" ? resultCategory : null;
state.oneVariantsObj.category = newCategory
}
if (state.one.variants.length > 0 && state.one.format === "variant_size_color") {
state.oneVariantsObj = Object.assign({}, state.one.variants[0])
/* size */
// let resultSize = state.one.variants.map(a =>a.size
// );
// let newListSize=(resultSize.toString()).split(",");
// state.oneVariantsObj.size=[...new Set(newListSize)];
state.one.variants.map((a) => {
if (!a.qtyPacked){
a.qtyPacked=a.qty
}
});
let resultSize = []
state.one.variants.filter((a) => {
// if (a.size) // will aslo add empty value in array
resultSize.push(a.size+'')
});
let newListSize = resultSize //&& resultSize.length ? (resultSize.toString()).split(",") : null;
state.oneVariantsObj.size = newListSize && newListSize.length ? [...new Set(newListSize)] : null;
/* color */
let resultColor = []
state.one.variants.filter((a) => {
// if (a.color) // will aslo add empty value in array
resultColor.push(a.color)
});
let newListColor = resultColor && resultColor.length ? (resultColor.toString()).split(",") : null;
state.oneVariantsObj.color = newListColor && newListColor.length ? [...new Set(newListColor)] : null;
/* Category */
let resultCategory = state.one.variants.map(a => a.category
);
let newListCategory = (resultCategory.toString()).split(",");
state.oneVariantsObj.category = [...new Set(newListCategory)];
state.variantsList = state.one.variants;
state.originalVariants = state.one.variants;
}
},
inProgress(state, yesOrNo) {
state.inProgress = yesOrNo
},
setItemMasterOne(state, orderItem) {
if(orderItem && orderItem.shipmentCancelDateOld){
orderItem.shipmentCancelDate=orderItem.shipmentCancelDateOld
delete orderItem.shipmentCancelDateOld
}
if(orderItem && orderItem.shipmentStartDateOld){
orderItem.shipmentStartDate=orderItem.shipmentStartDateOld
delete orderItem.shipmentStartDateOld
}
state.masterItemOne = JSON.stringify(orderItem);
},
resetFormFields(state) {
state.one.name = ''
state.one.brandProductId = ''
state.one.quantities = ''
state.one.importData = ''
state.one.unitPrice = null
},
setOneVariantsObj(state, oneItem) {
state.oneVariantsObj = oneItem;
},
resetOrderItemIcpData(state) {
state.orderItemIcpData = null;
},
variantsListInProgress(state, yesOrNo) {
state.variantsListInProgress = yesOrNo;
},
setNewVariantsList(state) {
state.variantsList = [];
state.originalVariants = []
},
setItemVariantsDamagedUrls(state,item){
if(state.variantsList.length > 0){
for(let i=0; i<state.variantsList.length;i++){
if(JSON.stringify(state.variantsList[i]) === JSON.stringify(item)){
state.variantsList[i].damagedUrls= item.damagedUrls
}
}
}
},
setItemVariantsList(state) {
// state.variantsList = []
if(state.variantsList.length <= 0){
state.oneVariantsObj.category.filter((categoryItem) => {
if (state.oneVariantsObj.color && state.oneVariantsObj.color.length > 0) {
// if variants has color and size
state.oneVariantsObj.color.filter((colorItem) => {
if (state.oneVariantsObj.size && state.oneVariantsObj.size.length > 0) {
state.oneVariantsObj.size.filter((sizeItem) => {
state.variantsList.push(
{
sku: state.one.variantsRefCode + '-' + categoryItem + '-' + sizeItem + '-' + colorItem,
category: categoryItem ? categoryItem : null,
size: sizeItem ? sizeItem : null,
color: colorItem ? colorItem : null,
qty: 0,
//qty: state.oneVariantsObj.qty,
retailPrice: state.oneVariantsObj.retailPrice,
wholesalePrice: state.oneVariantsObj.wholesalePrice,
eanCode: null,// state.oneVariantsObj.eanCode,
qtyPacked:0
}
)
})
} else {
// if variants has color and no size
state.variantsList.push(
{
sku: state.one.variantsRefCode + '-' + categoryItem + '-' + colorItem,
category: categoryItem,
size: null,
color: colorItem ? colorItem : null,
qty: 0,
//qty: state.oneVariantsObj.qty,
retailPrice: state.oneVariantsObj.retailPrice,
wholesalePrice: state.oneVariantsObj.wholesalePrice,
eanCode: null, //state.oneVariantsObj.eanCode
qtyPacked:0
}
)
}
})
} else if (state.oneVariantsObj.size && state.oneVariantsObj.size.length > 0) {
// if variants has size and no color
state.oneVariantsObj.size.filter((sizeItem) => {
state.variantsList.push(
{
sku: state.one.variantsRefCode + '-' + categoryItem + '-' + sizeItem,
category: categoryItem,
size: sizeItem,
color: null,
qty: 0,
//qty: state.oneVariantsObj.qty,
retailPrice: state.oneVariantsObj.retailPrice,
wholesalePrice: state.oneVariantsObj.wholesalePrice,
eanCode: null, //state.oneVariantsObj.eanCode
qtyPacked:0
}
)
})
} else {
// if variants has no size and no color , only has category
state.variantsList.push(
{
sku: state.one.variantsRefCode + '-' + categoryItem,
category: categoryItem,
size: null,
color: null,
qty: 0,
//qty: state.oneVariantsObj.qty,
retailPrice: state.oneVariantsObj.retailPrice,
wholesalePrice: state.oneVariantsObj.wholesalePrice,
eanCode: null,//state.oneVariantsObj.eanCode
qtyPacked:0
}
)
}
})
} else {
let variantList = state.variantsList.length > 0 ? state.variantsList : state.originalVariants
let newColors = checkExistOrNot({oneVariantsObj: state.oneVariantsObj.color,variantsList: variantList, type: 'color'})
let newCategory = checkExistOrNot({oneVariantsObj: state.oneVariantsObj.category,variantsList: variantList, type: 'category'})
let newSize = checkExistOrNot({oneVariantsObj: state.oneVariantsObj.size,variantsList: variantList, type: 'size'})
let newVariantItems = []
state.originalVariants.filter((item)=>{
let flag = false
if(state.oneVariantsObj.category.includes(item.category)){
if(!state.oneVariantsObj.size.includes(item.size)){
flag = true
}
if(!state.oneVariantsObj.color.includes(item.color)){
flag = true
}
if(!flag) {
newVariantItems.push(item)
}
}
})
let totalMixedCategories = [...new Set([...newCategory, ...state.oneVariantsObj.category])]
let totalMixedColors = [...new Set([...newColors, ...state.oneVariantsObj.color])]
let totalMixedSizes = [...new Set([...newSize, ...state.oneVariantsObj.size])]
// if(newCategory.length){
for(let i=0; i< totalMixedCategories.length; i++){
let category = totalMixedCategories[i];
// if(newColors.length){
for(let j=0; j< totalMixedColors.length; j++){
let color = totalMixedColors[j];
// if(newSize.length){
for(let k=0; k< totalMixedSizes.length; k++){
let size = totalMixedSizes[k];
let obj = {
sku: state.one.variantsRefCode + '-' + category + '-' + size + '-' + color,
category: category ? category : null,
size: size ? size : null,
color: color ? color : null,
qty: returnOriginalSkuQtyBySku(state.variantsList, 'qty', category , size ,color),
retailPrice: state.oneVariantsObj.retailPrice, // returnOriginalSkuQtyBySku(state.variantsList, 'retailPrice', category , size ,color),//
wholesalePrice: state.oneVariantsObj.wholesalePrice, // returnOriginalSkuQtyBySku(state.variantsList, 'wholesalePrice', category , size ,color),
eanCode: returnOriginalSkuQtyBySku(state.variantsList, 'eanCode', category , size ,color),
qtyPacked: returnOriginalSkuQtyBySku(state.variantsList, 'qtyPacked', category , size ,color),
}
// avoid duplication
if(!newVariantItems.filter((item => (item.category == obj.category && item.size == obj.size && item.color == obj.color))).length)
newVariantItems.push(obj)
else {
newVariantItems.filter((item,index) => {
if(item.category == obj.category && item.size == obj.size && item.color == obj.color){
let {sku, ...othersProp } = obj
newVariantItems[index] = { sku: item.sku, ...othersProp }
}
})
}
} // totalMixedSizes
//}
} //totalMixedColors
//}
} // totalMixedCategories
//} //newCategory.length
state.variantsList = [...new Set([...newVariantItems])]
}
},
},
actions: {
/* old code */
/* new({ commit }, {appId, purchaseOrderId, brandId, brandCatalogId,purchaserBusinessEntityId,providerBusinessEntityId}) {
commit('inProgress', false)
commit('setOne', {
'purchaseOrderId': purchaseOrderId,
'importData': '',
'brandId': brandId ? brandId:'',
'name':'',
'brandProductId': '',
'brandCatalogId': brandCatalogId ? brandCatalogId:'',
'appId': appId,
'quantities': '',
'purchaserBusinessEntityId':purchaserBusinessEntityId,
'providerBusinessEntityId':providerBusinessEntityId,
'unitPrice':null
//'season':''
})
},
fetchOne: async({ commit }, { purchaseOrderItemId,appId }) => {
commit('inProgress', true)
try {
let orderItem = await doFetchOne({ purchaseOrderItemId,appId })
if (orderItem) {
let { quantities } = orderItem
orderItem = humps(orderItem)
orderItem.quantities = quantities
commit('setOne', orderItem)
return (orderItem)
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
save: async({ commit, state }) => {
commit('inProgress', true)
try {
if (undefined === state.one.id) {
let { quantities } = state.one
let itemOne = snakes(state.one)
itemOne.quantities = quantities
await doPostOne(itemOne)
commit('inProgress', false)
return ({ new: true })
} else {
let { quantities } = state.one
let itemOne = snakes(state.one)
itemOne.quantities = quantities
await doPatchOne(itemOne)
commit('inProgress', false)
return ({ update: true })
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},*/
/*new code */
new({ commit }, { appId, purchaseOrderId, purchaserBusinessEntityId, providerBusinessEntityId, brandId ,startDate,endDate,state }) {
commit('inProgress', false)
commit('setOne', {
'appId': appId,
'purchaseOrderId': purchaseOrderId,
'brandId': brandId ? brandId:null,
'format': null,
'lineNumber': 0,
'quantity': 0,
'unitPrice': 0,
'name': null,
//'description': '',
'variantsRefCode': null,
'variants': [],
'description':null,
'purchaserBusinessEntityId': purchaserBusinessEntityId,
'providerBusinessEntityId': providerBusinessEntityId,
'shipmentStartDate':startDate,
'shipmentCancelDate':endDate,
'hsCode': null,
state
})
},
fetchOne: async ({ commit,state }, { purchaseOrderItemId, appId,snapshotOrderItem }) => {
commit('inProgress', true)
try {
let orderItem =null
if(purchaseOrderItemId && !snapshotOrderItem){
orderItem = await doFetchOne({ purchaseOrderItemId, appId })
}
if(snapshotOrderItem){
let orderItemDetails = await doFetchOne({ purchaseOrderItemId:snapshotOrderItem.id, appId:snapshotOrderItem.appId })
orderItem= snakes(snapshotOrderItem)
orderItem.icp_data=orderItemDetails.icp_data
}
// const orderItem = await doFetchOne({ purchaseOrderItemId, appId })
if (orderItem) {
if(orderItem.icp_data){
state.orderItemIcpData=orderItem.icp_data
state.masterItemOneIcpData=JSON.stringify(orderItem.icp_data)
}
commit('setOne', humps(orderItem))
commit('setItemMasterOne', humps(orderItem))
return humps(orderItem)
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
console.log(err)
return {error:true}
//throw err
}
finally {
commit('inProgress', false)
}
},
save: async ({ commit, state }, { itemsFormat }) => {
commit('inProgress', true)
try {
if (undefined === state.one.id) {
state.one.format = itemsFormat;
if (state.one.format === 'sku') {
state.one.variants = [];
state.one.variants.push(state.oneVariantsObj);
await doPostOne({one:snakes(state.one)})
}
else {
state.one.variants = [];
state.one.variants = (state.variantsList).filter(item => {
item.category.toString()
if(item.qty === ""){
item.qty='0'
}
return item
})
checkForUndefined(state.orderItemIcpData)
await doPostOne({one:snakes(state.one),icpData:state.orderItemIcpData})
}
commit('inProgress', false)
return ({ new: true })
} else {
if (state.one.format === 'sku') {
state.one.variants = [];
state.one.variants.push(state.oneVariantsObj);
}
else {
state.one.variants = [];
state.one.variants = (state.variantsList).filter(item => {
item.category.toString()
if(item.qty === ""){
item.qty='0'
}
return item
})
}
checkForUndefined(state.orderItemIcpData)
await doPatchOne({one:snakes(state.one),icpData:state.orderItemIcpData})
commit('inProgress', false)
return ({ update: true })
}
}
// eslint-disable-next-line no-useless-catch
catch (err) {
throw err
}
finally {
commit('inProgress', false)
}
},
deleteSelected: async ({ commit }, {purchaseOrderItemId}) => {
commit('inProgress', true);
try {
await doDeleteSelected({purchaseOrderItemId});
return ({ deleteSelected: true })
} catch (err) {
return ({ deleteSelected: false })
}
finally {
commit('inProgress', false);
}
},
newItemVariant({ commit }) {
commit('setOneVariantsObj', {
sku: null,
category: null,
size: null,
color: null,
qty: null,
retailPrice: null,
wholesalePrice: null,
eanCode: null,
qtyPacked:null
})
},
newItemVariantsList: async ({ commit }) => {
commit('variantsListInProgress', true);
try {
commit('setItemVariantsList');
commit('variantsListInProgress', false);
} catch (err) {
commit('variantsListInProgress', false);
}
},
newVariantsList: async ({ commit }) => {
commit('variantsListInProgress', true);
try {
commit('setNewVariantsList');
commit('variantsListInProgress', false);
} catch (err) {
commit('variantsListInProgress', false);
}
},
resetFormFields: async ({ commit }) => {
commit('resetFormFields');
},
setOrderItem: async ({ commit,state }, {one}) => {
commit('inProgress', true);
try {
if(one.icp_data){
state.orderItemIcpData=one.icp_data
state.masterItemOneIcpData=JSON.stringify(one.icp_data)
}
commit('setOne', humps(one))
commit('setItemMasterOne',humps(one))
commit('inProgress', false);
} catch (err) {
commit('inProgress', false);
}
finally {
commit('inProgress', false);
}
},
exportOrderItemsInExcel: async ({ commit,state}, { purchaseOrderId, busniessEntityId, preTemplateId, type }) => {
commit('inProgress', true);
try {
let data = await doExportPurchaseOrderItemsInExcel({ purchaseOrderId, busniessEntityId, preTemplateId, type })
return ({ blob: data.blob, errorMessage: data.errorMessage })
} catch (err) {
throw err
}
finally {
commit('inProgress', false);
}
},
updateShipingWindow: async ({ commit }, {dates,orderId,shipmentStartDate,shipmentCancelDate}) => {
commit('inProgress', true);
try {
let list = await doPatchItems({dates,orderId,shipmentStartDate,shipmentCancelDate})
if(list){
commit('inProgress', false);
return (list)
}
} catch (err) {
commit('inProgress', false);
}
finally {
commit('inProgress', false);
}
},
resetOrderItemIcpData: async ({ commit }) => {
commit('resetOrderItemIcpData');
},
setDamagedUrls: async ({ commit },{item}) => {
commit('setItemVariantsDamagedUrls',item);
},
createJiraTicketRequest: async ({commit},{ url, data, documentId, documents }) => {
commit('inProgress', true);
try {
let ticketResp = await doCreateJiraTicketRequest({ url, data, documentId, documents })
if(ticketResp){
commit('inProgress', false);
return humps(ticketResp)
}
} catch (err) {
commit('inProgress', false);
throw err
}
finally {
commit('inProgress', false);
}
},
fetchItem: async ({ commit }, { purchaseOrderItemId, appId }) => {
commit('inProgress', true)
try {
let orderItem = await doFetchOne({ purchaseOrderItemId, appId })
if (orderItem) {
return humps(orderItem)
}
return null
}
// eslint-disable-next-line no-useless-catch
catch (err) {
console.log(err)
return {error:true}
//throw err
}
finally {
commit('inProgress', false)
}
},
},
}