procurement-vuex
Version:
Commerce vuex module
625 lines (577 loc) • 24.8 kB
JavaScript
export const getPaymentTypesInObj = (data) => {
let obj = {
//on_order_confirmation: {},
//before_delivery: {},
//after_delivery: {},
};
for (let i = 0; i < data.length; i++) {
if (data[i].type === "Payment on order confirmation" && data[i].paid) {
obj["on_order_confirmation"]={}
obj["on_order_confirmation"]["percentage"] = data[i].paid;
//obj.on_order_confirmation.net_payment_days = data[i].days;
}
if (data[i].type === "Payment before first delivery" && data[i].paid) {
obj["before_first_delivery"]={}
obj["before_first_delivery"]["percentage"] = data[i].paid;
obj["before_first_delivery"]["net_payment_days"] = data[i].days;
}
// if (data[i].type === "Payment after first delivery" && data[i].paid) {
// obj["after_first_delivery"]={}
// obj["after_first_delivery"]["percentage"] = data[i].paid;
// obj["after_first_delivery"]["net_payment_days"] = data[i].days;
// }
// if (data[i].type === "Payment before each delivery" && data[i].paid) {
// obj["before_each_delivery"]={}
// obj["before_each_delivery"]["percentage"] = data[i].paid;
// obj["before_each_delivery"]["net_payment_days"] = data[i].days;
// }
// if (data[i].type === "Payment after each delivery" && data[i].paid) {
// obj["after_each_delivery"]={}
// obj["after_each_delivery"]["percentage"] = data[i].paid;
// obj["after_each_delivery"]["net_payment_days"] = data[i].days;
// }
// if (data[i].type === "Payment before last delivery" && data[i].paid) {
// obj["before_last_delivery"]={}
// obj["before_last_delivery"]["percentage"] = data[i].paid;
// obj["before_last_delivery"]["net_payment_days"] = data[i].days;
// }
if (data[i].type === "Payment after last delivery" && data[i].paid) {
obj["after_last_delivery"]={}
obj["after_last_delivery"]["percentage"] = data[i].paid;
obj["after_last_delivery"]["net_payment_days"] = data[i].days;
}
}
// Object.keys(obj.on_order_confirmation).length === 0
// ? (obj.on_order_confirmation = null)
// : obj.on_order_confirmation;
// Object.keys(obj.before_first_delivery).length === 0
// ? (obj.before_first_delivery = null)
// : obj.before_first_delivery;
// Object.keys(obj.after_first_delivery).length === 0
// ? (obj.after_first_delivery = null)
// : obj.after_first_delivery;
// Object.keys(obj.before_each_delivery).length === 0
// ? (obj.before_each_delivery = null)
// : obj.before_each_delivery;
// Object.keys(obj.after_each_delivery).length === 0
// ? (obj.after_each_delivery = null)
// : obj.after_each_delivery;
// Object.keys(obj.before_last_delivery).length === 0
// ? (obj.before_last_delivery = null)
// : obj.before_last_delivery;
// Object.keys(obj.after_last_delivery).length === 0
// ? (obj.after_last_delivery = null)
// : obj.after_last_delivery;
return obj;
};
export const getPaymentTypesInArray = (pmtObjs) => {
let paymentOptions = [];
//to sort payment terms as per required - confrimation, before, after
let data = {};
let sortedKeys = Object.keys(pmtObjs).sort().reverse();
sortedKeys.filter((key) => {
data[key] = pmtObjs[key];
});
Object.keys(data).forEach((key) => {
let paymentObj = { type: "", paid: 0, days: 0 };
let flag = false;
if (data[key]) {
Object.keys(data[key]).forEach((v) => {
let val = data[key][v];
if (key === "afterLastDelivery" && val !== null) {
flag = true;
paymentObj.type = "Payment after last delivery";
if (v === "percentage") {
paymentObj.paid = data[key][v];
} else {
paymentObj.days = data[key][v];
}
}
// if (key === "afterFirstDelivery" && val !== null) {
// flag = true;
// paymentObj.type = "Payment after first delivery";
// if (v === "percentage") {
// paymentObj.paid = data[key][v];
// } else {
// paymentObj.days = data[key][v];
// }
// }
// if (key === "afterEachDelivery" && val !== null) {
// flag = true;
// paymentObj.type = "Payment after each delivery";
// if (v === "percentage") {
// paymentObj.paid = data[key][v];
// } else {
// paymentObj.days = data[key][v];
// }
// }
if (key === "beforeFirstDelivery" && val !== null) {
flag = true;
paymentObj.type = "Payment before first delivery";
if (v === "percentage") {
paymentObj.paid = data[key][v];
} else {
paymentObj.days = data[key][v];
}
}
// if (key === "beforeEachDelivery" && val !== null) {
// flag = true;
// paymentObj.type = "Payment before each delivery";
// if (v === "percentage") {
// paymentObj.paid = data[key][v];
// } else {
// paymentObj.days = data[key][v];
// }
// }
// if (key === "beforeLastDelivery" && val !== null) {
// flag = true;
// paymentObj.type = "Payment before last delivery";
// if (v === "percentage") {
// paymentObj.paid = data[key][v];
// } else {
// paymentObj.days = data[key][v];
// }
// }
if (key === "onOrderConfirmation" && val !== null) {
flag = true;
paymentObj.type = "Payment on order confirmation";
if (v === "percentage") {
paymentObj.paid = data[key][v];
} else {
paymentObj.days = data[key][v];
}
}
});
}
if (flag) {
paymentOptions.push(paymentObj);
}
if(paymentOptions.length === 0){
paymentOptions = [{ type: 'Payment on order confirmation', paid: 30},{ type: 'Payment after last delivery', paid: 70,days: 0 }]
}
});
return paymentOptions;
};
export const setSizesRangeGroups = (sizeRange, sizes) => {
if (sizes.length > 0) {
let regexp = /^\d+$/;
let list = [];
for (let i = 0; i < sizes.length; i++) {
let name =
regexp.test(sizes[i]) || !isNaN(sizes[i])
? parseFloat(sizes[i])
: sizes[i];
list.push({ name: name, group: sizeRange });
}
return list;
}
};
export const checkExistOrNot = ({ oneVariantsObj, variantsList, type }) => {
let newArray = [];
oneVariantsObj.filter((item) => {
let checkExist = false;
variantsList.filter((variant) => {
if (item == variant[type]) {
checkExist = true;
}
});
if (!checkExist) {
newArray.push(item);
}
});
return newArray;
};
export const generateDiscrepancyOrderSkuItem = ({ changedItem }) => {
let orderItemSku = [];
if (changedItem) {
// changedItem.filter((item) => {
let item = changedItem
let newOrderItems = item.changeValues.new;
let oldOrderItems = item.changeValues.old;
if (newOrderItems && oldOrderItems){
if (newOrderItems.format == "sku") {
for (let i = 0; i < newOrderItems.variants.length; i++) {
let skuItem = newOrderItems.variants[i];
Object.keys(skuItem).forEach((key) => {
if (
[
"qty",
"color",
"retailPrice",
"eanCode",
"qtyPacked",
"size",
"sku",
"wholesalePrice",
].includes(key)
) {
// showing only differences in report
if (skuItem[key] !== oldOrderItems.variants[i][key]) {
let change = key == "qty" ? "quantity" : key == "qtyPacked" ? "quantity packed" : key=='eanCode' ? ' EAN Code' : key;
orderItemSku.push({
change,
new: skuItem[key],
old: oldOrderItems.variants[i][key],
});
}
}
});
}
if (
newOrderItems.shipmentCancelDate !== oldOrderItems.shipmentCancelDate
)
orderItemSku.push({
change: "shipment_cancel_date",
new: newOrderItems.shipmentCancelDate,
old: oldOrderItems.shipmentCancelDate,
});
if (newOrderItems.shipmentStartDate !== oldOrderItems.shipmentStartDate)
orderItemSku.push({
change: "shipment_start_date",
new: newOrderItems.shipmentStartDate,
old: oldOrderItems.shipmentStartDate,
});
}
}
//});
}
return orderItemSku;
};
// item variants in new and old are present => item-changed
export const generateDiscrepancyOrderItemVarinats = ({ changedItem, newCurrency, oldCurrency, orderState }) => {
try{
let orderItemVariantsSummary = [];
let itemVariants = []
let customFields = []
let variantsRefCode = null
let itemId = null;
if (changedItem) {
// changedItem.filter((item) => {
let item = changedItem
let newOrderItems = item.changeValues.new;
let oldOrderItems = item.changeValues.old;
// for item-changed
if(newOrderItems && oldOrderItems) {
if(newOrderItems.icpData) {
Object.keys(newOrderItems.icpData).forEach((key)=>{
if(typeof newOrderItems.icpData[key] === "object" || typeof oldOrderItems.icpData[key] === "object"){
if((newOrderItems.icpData[key] && oldOrderItems.icpData[key] && typeof newOrderItems.icpData[key] === "object" && newOrderItems.icpData[key].value !== oldOrderItems.icpData[key].value)){
customFields.push({
change: key,
new: newOrderItems.icpData[key] && typeof newOrderItems.icpData[key] === "object" ? newOrderItems.icpData[key].value : newOrderItems.icpData[key],
old: oldOrderItems.icpData[key] && typeof oldOrderItems.icpData[key] === "object" ? oldOrderItems.icpData[key].value : oldOrderItems.icpData[key]
})
}
}
else if(newOrderItems.icpData[key] !== oldOrderItems.icpData[key]){
customFields.push({
change: key,
new: newOrderItems.icpData[key],
old: oldOrderItems.icpData[key]
})
}
})
}
variantsRefCode = newOrderItems.variantsRefCode
itemId = newOrderItems.id
// generating item summary report
let variantsSummaryArray = {
total_quantity: {
new: newOrderItems.quantity,
old: oldOrderItems.quantity,
},
total_wholesale_value: {
// newOrderItems.variants.length && newOrderItems.variants[0].wholesale_price ? newOrderItems.quantity*newOrderItems.variants[0].wholesale_price+'' : 0 +'').toLocaleString('en-US')+' '+ newCurrency
new: (newOrderItems.wholesaleValue ? newOrderItems.wholesaleValue+'' : 0 +'').toLocaleString('en-US')+' '+ newCurrency,
old: (oldOrderItems.wholesaleValue ? oldOrderItems.wholesaleValue+'' : 0 +'').toLocaleString('en-US')+' '+ oldCurrency,
},
total_retail_value: {
// (newOrderItems.variants.length && newOrderItems.variants[0].retail_price ? newOrderItems.quantity*newOrderItems.variants[0].retail_price+'' : 0 +'').toLocaleString('en-US')+' '+ newCurrency,
new: (newOrderItems.retailValue ? newOrderItems.retailValue+'' : 0 +'').toLocaleString('en-US')+' '+ newCurrency,
old: (oldOrderItems.retailValue ? oldOrderItems.retailValue+'' : 0 +'').toLocaleString('en-US')+' '+ oldCurrency,
},
/* total_number_of_colors: { new: [], old: [] },
total_number_of_sizes: { new: [], old: [] },*/
shipment_start_date: {
new: newOrderItems.shipmentStartDate,
old: oldOrderItems.shipmentStartDate,
},
shipment_cancel_date: {
new: newOrderItems.shipmentCancelDate,
old: oldOrderItems.shipmentCancelDate,
},
};
generateLablesArray(variantsSummaryArray, newOrderItems, "new");
generateLablesArray(variantsSummaryArray, oldOrderItems, "old");
Object.keys(variantsSummaryArray).forEach((key) => {
// showing only differences in report
// if(variantsSummaryArray[key]['new'] !== variantsSummaryArray[key]['old']){
if (["total_number_of_colors", "total_number_of_sizes"].includes(key)) {
/* let type = key == "total_number_of_colors" ? "color" : "size";
let labelForNew = checkIsSame(type, key, variantsSummaryArray);
orderItemVariantsSummary.push({
change: key,
new: labelForNew,
old: variantsSummaryArray[key]["old"].length,
});*/
} else {
if (variantsSummaryArray[key]["new"] !== variantsSummaryArray[key]["old"])
orderItemVariantsSummary.push({
change: key,
new: key === "total_quantity" ? '<span class="red--text comfortaa-bold-font fontsize-12">'+ variantsSummaryArray[key]["new"] +'</span>' : variantsSummaryArray[key]["new"],
old: variantsSummaryArray[key]["old"],
});
}
// }
});
// end of generating item summary report
// generating item variants table
let variants = generateItemVariants(newOrderItems.variants, oldOrderItems.variants, itemVariants, newCurrency, oldCurrency, orderState) // new vs. old
if(variants.length && oldOrderItems.variants && oldOrderItems.variants.length){
for(let o = 0; o < oldOrderItems.variants.length; o++ ){
let old = oldOrderItems.variants[o]
let flag = false
for(let n=0; n < variants.length; n++ ){
let newItem = variants[n]
// checking duplicate items in filtered array
//newItem.sku == old.sku
if(newItem.category == old.category && newItem.size == old.size && newItem.color == old.color){
flag = true
break;
}
}
if(!flag){
variants.push({ sku: old.sku, quantity: { new: 0, old: old.qty }, wholesalePrice: { new: 0, old: priceFormatter(old.wholesalePrice ? old.wholesalePrice : 0.00).toLocaleString('en-US') + ' '+ oldCurrency }, retailPrice: { new: 0, old: priceFormatter(old.retailPrice ? old.retailPrice : 0.00).toLocaleString('en-US')+ ' '+ oldCurrency } })
}
}
}
itemVariants = variants
}
// });
}
return { summary: orderItemVariantsSummary, customFields, variants: itemVariants, variantsRefCode, itemId };
} catch(err){
console.log(err)
}
};
export const generateDiscrepancyOrderItemAddedAndRemoved = ({ addedItem, newCurrency, oldCurrency }) => {
try{
let variantsRefCode = null
let itemId = null;
let itemAddedForVariants = []
let itemRemovedForVariants = []
if (addedItem) {
// addedItem.filter((item) => {
let item = addedItem
let newOrderItems = item.changeValues.new;
let oldOrderItems = item.changeValues.old;
if(newOrderItems){
itemAddedForVariants = generateNewItems(newOrderItems.variants, newCurrency, oldCurrency, 'new')
variantsRefCode = newOrderItems.variantsRefCode
itemId = newOrderItems.id
}
//for item-removed
if(oldOrderItems){
itemRemovedForVariants = generateNewItems(oldOrderItems.variants, newCurrency, oldCurrency, 'old')
variantsRefCode = oldOrderItems.variantsRefCode
itemId = oldOrderItems.id
}
// });
}
return { itemAddedForVariants, itemRemovedForVariants, variantsRefCode, itemId }
} catch(err){
console.log(err)
}
}
export const returnOriginalSkuQtyBySku = (variants, type, category , size ,color) =>{
try{
let val = 0
variants.filter(item => {
if(category == item.category && size == item.size && color == item.color){
val = item[type]
// val = type == 'qty' ? item.qty : type == 'eanCode' ? item.eanCode : item.qtyPacked
}
})
return val
} catch(err){
console.log(err)
}
}
function generateNewItems(items, newCurrency, oldCurrency, type){
try{
let arrayForItems = []
if(items && items.length){
for(let i=0; i<items.length; i++){
if(type == 'old'){
Object.keys(items[i]).forEach((key) => {
let lable = key=='qty' ? 'Quantity' : key=='qtyPacked' ? 'Quantity packed' : key=='wholesalePrice' ? 'wholesale Price' : key=='retailPrice' ? ' retail Price' : key=='eanCode' ? ' EAN Code' : key
let val = ['wholesalePrice', 'retailPrice'].includes(key) && items[i][key] ? priceFormatter(items[i][key] ? items[i][key] : 0.00).toLocaleString('en-US') + ' '+ oldCurrency : items[i][key]
if(items[i][key]){
arrayForItems.push({
change: lable,
new: '-',
old: val,
});
}
})
} else {
Object.keys(items[i]).forEach((key) => {
let lable = key=='qty' ? 'Quantity' : key=='qtyPacked' ? 'Quantity packed' : key=='wholesalePrice' ? 'wholesale Price' : key=='retailPrice' ? ' retail Price' : key=='eanCode' ? ' EAN Code' : key
let val = ['wholesalePrice', 'retailPrice'].includes(key) && items[i][key] ? priceFormatter(items[i][key] ? items[i][key] : 0.00).toLocaleString('en-US') + ' '+ newCurrency : items[i][key]
if(items[i][key]){
arrayForItems.push({
change: lable,
new: val,
old: '-',
});
}
})
}
}
}
return arrayForItems
} catch(err){
console.log(err)
}
}
function generateItemVariants(newItems, oldItems, variants, newCurrency, oldCurrency, orderState) {
try{
if(newItems && oldItems){
for(let n=0; n < newItems.length; n++ ){
let newItem = newItems[n]
let variant = { sku: '', quantity: { new: 0, old: 0 }, wholesalePrice: { new:0, old: 0 }, retailPrice: { new:0, old: 0 } }
let skuPresentFlag = false
for(let o = 0; o < oldItems.length; o++ ){
let old = oldItems[o]
// if new item is present in old items
// if(!variants.length){
//(newItem.sku == old.sku)
if(newItem.category == old.category && newItem.size == old.size && newItem.color == old.color){
skuPresentFlag = true
let label = null
// let newQty = orderState.includes("packed") ? newItem.qtyPacked : newItem.qty
// let oldQty = orderState.includes("packed") ? old.qtyPacked : old.qty
let newQty = newItem.qty
let oldQty = old.qty
if(Number(newQty) !== Number(oldQty))
label = '<span class="red--text comfortaa-bold-font fontsize-12">'+newQty+'</span>';
else
label = newQty
variant = { sku: newItem.sku, quantity: { new: label, old: oldQty }, wholesalePrice: { new: priceFormatter(newItem.wholesalePrice ? newItem.wholesalePrice : 0.00).toLocaleString('en-US') + ' '+ newCurrency, old: priceFormatter(old.wholesalePrice ? old.wholesalePrice : 0.00).toLocaleString('en-US') + ' '+ oldCurrency }, retailPrice: { new: priceFormatter(newItem.retailPrice ? newItem.retailPrice : 0.00).toLocaleString('en-US') + ' '+ newCurrency, old: priceFormatter(old.retailPrice ? old.retailPrice : 0.00).toLocaleString('en-US') + ' '+ oldCurrency }, category: newItem.category, size: newItem.size, color: newItem.color, }
break;
}
// }
}
// if new item is not present in old items
if(!skuPresentFlag){
skuPresentFlag = true
let label = '<span class="red--text comfortaa-bold-font fontsize-12"> ( new ) </span>';
variant = { sku: newItem.sku, quantity: { new: newItem.qty + ' '+ label, old: 0 }, wholesalePrice: { new: priceFormatter(newItem.wholesalePrice ? newItem.wholesalePrice : 0.00).toLocaleString('en-US') + ' '+ newCurrency, old: 0 }, retailPrice: { new: priceFormatter(newItem.retailPrice ? newItem.retailPrice : 0.00).toLocaleString('en-US') + ' '+ newCurrency, old: 0 }, category: newItem.category, size: newItem.size, color: newItem.color, }
}
if(skuPresentFlag)
variants.push(variant)
}
}
return variants
} catch(err){
console.log(err)
}
}
function checkIsSame(type, key, variantsSummaryArray) {
let isSame =
variantsSummaryArray[key]["new"].length == variantsSummaryArray[key]["old"].length &&
variantsSummaryArray[key]["new"].every((element) =>
variantsSummaryArray[key]["old"].includes(element)
);
let labelClass = "red--text comfortaa-bold-font fontsize-12";
let labelForNew =
variantsSummaryArray[key]["new"].length +
(isSame
? ""
: type == "color"
? '<span class="' + labelClass + '"> ( new colors ) </span>'
: '<span class="' + labelClass + '"> ( new sizes ) </span>');
return labelForNew;
}
function generateLablesArray(variantsSummaryArray, orderItems, type) {
for (let i = 0; i < orderItems.variants.length; i++) {
let currentItem = orderItems.variants[i];
if ( variantsSummaryArray["total_number_of_colors"] &&
!variantsSummaryArray["total_number_of_colors"][type].includes(currentItem.color)
)
variantsSummaryArray["total_number_of_colors"][type].push(currentItem.color);
if (variantsSummaryArray["total_number_of_sizes"] && !variantsSummaryArray["total_number_of_sizes"][type].includes(currentItem.size))
variantsSummaryArray["total_number_of_sizes"][type].push(currentItem.size);
}
}
export const priceFormatter = (price, pdp) => {
if (price != undefined) {
price = price.toString();
let decimals = (price.split("."))[1];
if ((!Number(decimals) || isNaN(decimals)) || decimals.length == 1) //if 2 or 2.1
return Number(price).toFixed(2);
if (decimals.length == 2 && pdp) //if 2 or 2.1
return price;
else if (decimals.length > 1) // if 2.34 or 2.56565
return Number(price.match(/^-?\d+(?:\.\d{0,2})?/)[0]);
}
}
export const otherPaymentTermsList = [
'Payment on order confirmation',
'Payment before first delivery',
'Payment after last delivery'
]
export const updateTermsList=(paymentTermsList)=>{
let copyList=paymentTermsList
for (let i=0; i< paymentTermsList.length;i++ ){
if(paymentTermsList[i] && paymentTermsList[i].termsList){
paymentTermsList[i].termsList=[]
}
// if(paymentTermsList.length === 1){
// let termsList=otherPaymentTermsList
// paymentTermsList[i]["termsList"]=termsList
// }else if(paymentTermsList.length === 2){
for(let j=0; j< copyList.length;j++){
if(paymentTermsList[i].type !== copyList[j].type && paymentTermsList.length !== otherPaymentTermsList.length){
let termsList=otherPaymentTermsList.filter((item)=> item !== copyList[j].type)
paymentTermsList[i]["termsList"]=termsList
}else if((paymentTermsList[i].termsList === undefined || paymentTermsList[i].termsList.length === 0 )&& paymentTermsList.length !== otherPaymentTermsList.length){
paymentTermsList[i]["termsList"]=otherPaymentTermsList
}else if(paymentTermsList.length === otherPaymentTermsList.length){
let termsList=[paymentTermsList[i].type]
paymentTermsList[i]["termsList"]=termsList
}
}
// }else{
// let termsList=[paymentTermsList[i].type]
// paymentTermsList[i]["termsList"]=termsList
// }
}
return paymentTermsList
}
export const formateDateToMDYFormat = (date) => {
const newDateTime = Date.parse(date)
const newDate = new Date(newDateTime)
const resultDate =
(newDate.getMonth() + 1).toString().padStart(2, '0') +
'-' +
newDate.getDate().toString().padStart(2, '0') +
'-' + newDate.getFullYear()
return resultDate //return format "2021-08-22"
}
export const formateDateToYMDFormat = (date) => {
const newDateTime = Date.parse(date)
const newDate = new Date(newDateTime)
const resultDate =
newDate.getFullYear() +
'-' + (newDate.getMonth() + 1).toString().padStart(2, '0') +'-' +newDate.getDate().toString().padStart(2, '0')
return resultDate //return format "2021-08-22"
}
export const checkForUndefined = (item) => {
let items= Object.keys(item).map((key) => {
if(item[key] === undefined){
item[key]=null
}
})
return items
}