procurement-vuex
Version:
Commerce vuex module
361 lines (343 loc) • 19.4 kB
JavaScript
import humps from 'lodash-humps'
import { getField, updateField } from 'vuex-map-fields'
import { generateDiscrepancyOrderSkuItem, generateDiscrepancyOrderItemVarinats, generateDiscrepancyOrderItemAddedAndRemoved, priceFormatter } from './connected_discrepancy_common.service.js'
import purchaseOrderService from './purchase_order.service'
const { doFetchPurchaseOrderDiscrepancyByChangesetId, doPatchPurchaseOrderXChange, doDeleteChangesetXChange } = purchaseOrderService
export default {
namespaced: true,
state: {
purchaseOrderOne: {},
purchaseOrderChangesSummary:null,
inProgress: true,
purchaseOrderCompare: [],
purchaseOrderReportChanges: {
orderItemSku : null,
orderItemVariants : null,
detailsChanged : null,
differences : null,
removedItems : null,
addedItems : null,
changedItems : null
},
purchaseOrderPackedReportChanges: {
orderItemSku : null,
orderItemVariants : null,
detailsChanged : null,
differences : null,
removedItems : null,
addedItems : null,
changedItems : null
}
},
getters: {
getField,
},
mutations: {
updateField,
inProgress(state, yesOrNo) {
state.inProgress = yesOrNo
},
setPurchaseOrderOne(state, one){
state.purchaseOrderOne = one
},
setPurchaseOrderReportChanges(state, compare) {
try {
state.purchaseOrderReportChanges = {
orderItemSku : null,
orderItemVariants : null,
detailsChanged : null,
differences : null,
removedItems : null,
addedItems : null,
changedItems : null
}
state.purchaseOrderPackedReportChanges = {
orderItemSku : null,
orderItemVariants : null,
detailsChanged : null,
differences : null,
removedItems : null,
addedItems : null,
changedItems : null
}
if(compare.changes){
let changedItems = compare.changes['itemChanged']
let detailsChanged = compare.changes['detailsChanged']
let addedItems = compare.changes['itemAdded']
let removedItems = compare.changes['itemRemoved']
let orderItemSku = []
let orderItemAddedSku = []
let orderItemVariants = []
let nonCriticalItemVariants = []
let nonCriticalOrderDetails = []
let orderItemAddedVariants = []
// let orderItemAddedCriticalFalse = []
let orderItemRemovedVariants = []
// let orderItemRemovedCriticalFalse = []
let orderItemRemovedSku = []
let newCurrency = ''
let oldCurrency = ''
// to use in total order number card
let orderTotalNumber = []
let shipmentsDiscrepancies = []
let paymentsDiscrepancies = []
let orderDetailsDiscrepancies = []
if(compare.report){
orderTotalNumber.push({
label: 'total_amount',
submittedOrder: compare.report.totalAmountBefore ,
orderConfirmation: compare.report.totalAmountAfter,
changeId: '',
changeItem : null,
type: 'all'
})
orderTotalNumber.push({
label: 'total_quantity',
submittedOrder: compare.report.totalQtyBefore ,
orderConfirmation: compare.report.totalQtyAfter,
changeId: '',
changeItem : null,
type: 'all'
})
}
if(detailsChanged && detailsChanged.length){
let filteredDetails = detailsChanged.filter((item)=>{
if(['order_ccy'].includes(item.change)){ // && item.isOkRequired
oldCurrency = item.changeValues.old ? item.changeValues.old : '',
newCurrency = item.changeValues.new ? item.changeValues.new : ''
}
if(['total_amount', 'total_quantity'].includes(item.change)){
// orderTotalNumber.push({
// label: item.change,
// submittedOrder: item.change === 'total_amount' ? priceFormatter(item.changeValues.old) : item.changeValues.old,
// orderConfirmation:item.change === 'total_amount' ? priceFormatter(item.changeValues.new) : item.changeValues.new,
// changeId: item.id,
// changeItem : item,
// type: 'all'
// })
}
else if(['shipment_start_date', 'shipment_cancel_date'].includes(item.change) ){ // && item.isOkRequired
// if(item.changeValues.old > 0)
if(item.isCritical){
shipmentsDiscrepancies.push({
label: item.change,
submittedOrder: item.changeValues.old,
orderConfirmation: item.changeValues.new,
changeId: item.id,
changeItem : item,
type: 'shipment',
isCritical: item.isCritical
})
} else {
nonCriticalOrderDetails.push({
label: item.change,
submittedOrder: item.changeValues.old,
orderConfirmation: item.changeValues.new,
changeId: item.id,
changeItem : item,
type: 'shipment',
isCritical: item.isCritical
})
}
}
else if(['discount_value', 'discount_pct'].includes(item.change) ){ // && item.isOkRequired
// if(item.changeValues.old > 0)
if(item.isCritical){
if(item.change == 'discount_pct'){
paymentsDiscrepancies.unshift({
label: item.change,
submittedOrder: item.changeValues.old,
orderConfirmation: item.changeValues.new,
changeId: item.id,
changeItem : item,
type: 'payment',
isCritical: item.isCritical
})
} else {
paymentsDiscrepancies.push({
label: item.change,
submittedOrder: item.changeValues.old,
orderConfirmation: item.changeValues.new,
changeId: item.id,
changeItem : item,
type: 'payment',
isCritical: item.isCritical
})
}
} else {
nonCriticalOrderDetails.push({
label: item.change,
submittedOrder: item.changeValues.old,
orderConfirmation: item.changeValues.new,
changeId: item.id,
changeItem : item,
type: 'payment',
isCritical: item.isCritical
})
}
}
else if(item.changeValues.new !== item.changeValues.old ){ // && item.isOkRequired
// item.changeValues.old &&
// for other than tot. amt, qty
// return item
if(item.isCritical){
orderDetailsDiscrepancies.push({
label: item.change,
submittedOrder: item.changeValues.old,
orderConfirmation: item.changeValues.new,
changeId: item.id,
changeItem : item,
type: 'others'
})
} else {
nonCriticalOrderDetails.push({
label: item.change,
submittedOrder: item.changeValues.old,
orderConfirmation: item.changeValues.new,
changeId: item.id,
changeItem : item,
type: 'others'
})
}
}
})
detailsChanged = []
detailsChanged.push(filteredDetails)
}
if(changedItems && changedItems.length){
changedItems.filter((item) => {
// if(item.isOkRequired){
let newOrderItems = item.changeValues.new
if(newOrderItems.format == 'sku'){
let skus = generateDiscrepancyOrderSkuItem({ changedItem: item })
if(skus && skus.length){
orderItemSku.push(skus)
}
} else {
oldCurrency = oldCurrency ? oldCurrency : state.purchaseOrderOne.orderCcy ? state.purchaseOrderOne.orderCcy : ''
newCurrency = newCurrency ? newCurrency : state.purchaseOrderOne.orderCcy ? state.purchaseOrderOne.orderCcy : ''
let variants = generateDiscrepancyOrderItemVarinats({ changedItem: item, newCurrency, oldCurrency })
if(variants){
if(item.isCritical)
orderItemVariants.push(variants)
else
nonCriticalItemVariants.push(variants)
}
}
// }
})
}
if(removedItems && removedItems.length){
removedItems.filter((item) => {
// if(item.isOkRequired){
oldCurrency = oldCurrency ? oldCurrency : state.purchaseOrderOne.orderCcy ? state.purchaseOrderOne.orderCcy : ''
newCurrency = newCurrency ? newCurrency : state.purchaseOrderOne.orderCcy ? state.purchaseOrderOne.orderCcy : ''
let oldOrderItems = item.changeValues.old
if(oldOrderItems.format == 'sku'){
let skus = generateDiscrepancyOrderItemAddedAndRemoved({ addedItem: item, newCurrency, oldCurrency })
if(skus){
orderItemRemovedSku.push(skus)
}
} else {
let variants = generateDiscrepancyOrderItemAddedAndRemoved({ addedItem: item, newCurrency, oldCurrency })
if(variants){
if(item.isCritical)
orderItemRemovedVariants.push(variants)
else
nonCriticalItemVariants.push(variants)
}
}
//}
})
}
if(addedItems && addedItems.length){
addedItems.filter((item) => {
// if(item.isOkRequired){
oldCurrency = oldCurrency ? oldCurrency : state.purchaseOrderOne.orderCcy ? state.purchaseOrderOne.orderCcy : ''
newCurrency = newCurrency ? newCurrency : state.purchaseOrderOne.orderCcy ? state.purchaseOrderOne.orderCcy : ''
let newOrderItems = item.changeValues.new
if(newOrderItems.format == 'sku'){
let skus = generateDiscrepancyOrderItemAddedAndRemoved({ addedItem: item, newCurrency, oldCurrency })
if(skus){
orderItemAddedSku.push(skus)
}
} else {
let variants = generateDiscrepancyOrderItemAddedAndRemoved({ addedItem: item, newCurrency, oldCurrency })
if(variants){
if(item.isCritical)
orderItemAddedVariants.push(variants)
else
nonCriticalItemVariants.push(variants)
}
}
// }
})
}
// if(state.purchaseOrderOne.state == 'approved_with_discrepancies'){
state.purchaseOrderReportChanges.orderItemSku = orderItemSku
state.purchaseOrderReportChanges.addedSkuItems = orderItemAddedSku
state.purchaseOrderReportChanges.removedSkuItems = orderItemRemovedSku
state.purchaseOrderReportChanges.orderItemVariants = orderItemVariants // item-changed (only critical)
state.purchaseOrderReportChanges.detailsChanged = detailsChanged
state.purchaseOrderReportChanges.nonCriticalOrderDetails = nonCriticalOrderDetails
state.purchaseOrderReportChanges.differences = orderTotalNumber
state.purchaseOrderReportChanges.paymentsDiscrepancies = paymentsDiscrepancies
state.purchaseOrderReportChanges.shipmentsDiscrepancies = shipmentsDiscrepancies
state.purchaseOrderReportChanges.orderDetailsDiscrepancies = orderDetailsDiscrepancies
state.purchaseOrderReportChanges.removedItems = removedItems
state.purchaseOrderReportChanges.addedVariantsItems = orderItemAddedVariants // item-added (only critical)
state.purchaseOrderReportChanges.removedVariantsItems = orderItemRemovedVariants // item-removed (only critical)
state.purchaseOrderReportChanges.nonCriticalItemVariants = nonCriticalItemVariants // non critical items
state.purchaseOrderReportChanges.changedItems = changedItems
}
state.purchaseOrderReportChanges.changes = compare.changes
state.purchaseOrderReportChanges.report = compare.report
} catch (err){
console.log("Error while generating discrepancy ", err)
}
},
},
actions: {
setPurchaseOrderOne: ({ commit },{ one }) =>{
commit('setPurchaseOrderOne', one);
},
purchaseOrderReportChanges: async ({ commit }, { purchaseOrderId, purchaseOrderChangesetId, specs }) => {
commit('inProgress', true);
try {
let discrepResp = await doFetchPurchaseOrderDiscrepancyByChangesetId({ purchaseOrderId, purchaseOrderChangesetId, specs });
commit('setPurchaseOrderReportChanges', humps(discrepResp));
return ({ discrepResp: humps(discrepResp) })
} catch (err) {
throw 'error'
}
finally {
commit('inProgress', false);
}
},
updatePurchaseOrderChange: async ({ commit }, { changeId, property }) => {
commit('inProgress', true);
try {
let changeResp = await doPatchPurchaseOrderXChange({ changeId, property });
// commit('setPurchaseOrderReportChanges', humps(changeResp));
return ({ changeResp: humps(changeResp) })
} catch (err) {
throw 'error'
}
finally {
commit('inProgress', false);
}
},
deleteCurrentChangeOfChangeset: async ({ commit }, { changeId }) => {
commit('inProgress', true);
try {
await doDeleteChangesetXChange({ changeId });
return ({ changeResp: true })
} catch (err) {
throw 'error'
}
finally {
commit('inProgress', false);
}
},
},
}