UNPKG

procurement-vuex

Version:
625 lines (577 loc) 24.8 kB
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 }