import { CONNECTION_URL } from "../../constants"; import { fetchFromServer } from "../../utils/browser"; import { Browser } from "../../utils/export"; import { toFixedFloat } from "../../utils/math"; import { Panel, Area } from '../../class/export'; /** * * @param {*} state * @param {*} catalog * return { gridData: [], totalPrice: 0 } */ export function getComponentDetails(state, catalog) { var layers = state.scene.layers; let { scene } = state; let componentArray = []; let partComponentDebugger = 'SAAL0404XXHP' layers.map((layer) => { let { lines, areas, vertices, holes, id: layerID, items, opacity, panels } = layer; holes.map(hole => { if (catalog.getElement(hole.type).getPartNumber) { if (catalog.getElement(hole.type).getPartNumber(catalog, hole, layer, scene)) { let partNumberArray = catalog.getElement(hole.type).getPartNumber(catalog, hole, layer, scene); partNumberArray.map((partNo) => { if (partNo.partno.startsWith(partComponentDebugger)) console.log(partNo.quantity, hole.type, 'componentArrayprevvv') componentArray.push(partNo); }) } } }) items.map(item => { if (catalog.getElement(item.type).getPartNumber) { if (catalog.getElement(item.type).getPartNumber(catalog, item, layer, scene)) { let partNumberArray = catalog.getElement(item.type).getPartNumber(catalog, item, layer, scene); partNumberArray.map((partNo) => { if (partNo.partno.startsWith(partComponentDebugger)) console.log(partNo.quantity, item.type, 'ascomponentArrayprevvv') componentArray.push(partNo); }) } } }) let panelGroupArray = Panel.getPanelGroupInformation(scene, layer.id); panels.map(panel => { if (catalog.getElement(panel.type).getPartNumber) { if (catalog.getElement(panel.type).getPartNumber(catalog, panel, layer, scene)) { let partNumberArray = catalog.getElement(panel.type).getPartNumber(catalog, panel, layer, scene, panelGroupArray); partNumberArray.map((partNo) => { if (partNo.partno.startsWith(partComponentDebugger)) console.log(partNo.quantity, panel.type, 'componentArrayprevvv') componentArray.push(partNo); }) } // componentArray.push(catalog.getElement(hole.type).getPartNumber(catalog,hole, layer, scene)); } }) areas.map(area => { if (catalog.getElement(area.type).getPartNumber) { if (catalog.getElement(area.type).getPartNumber(catalog, area, layer, scene)) { let partNumberArray = catalog.getElement(area.type).getPartNumber(catalog, area, layer, scene); partNumberArray.map((partNo) => { if (partNo.partno.startsWith(partComponentDebugger)) console.log(partNo.quantity, area.type, 'componentArrayprevvv') componentArray.push(partNo); }) } } }) let transitionCount = Area.getCountOfFlooringTrasition(state, layerID) if (transitionCount) { let transitionData = { partno: 'WF361375TRACL', quantity: transitionCount, } componentArray.push(transitionData) } }) var excludePartnumbers = ['-X']; //calculation of extra panel let twoInchExtraPanel = componentArray.filter((e) => e.cut == true && e.partno.charAt(8)== '2') let fourInchExtraPanel = componentArray.filter((e) => e.cut == true && e.partno.charAt(8)== '4') if(twoInchExtraPanel){ let quarter = 0; let half = 0 let threeQuarter = 0; twoInchExtraPanel.map((element) => { // if (element && element.partno.slice(-2) === '-X' && element.partno.charAt(8)== '2'){ // } if (element.cutQuantity === 0.75) { quarter = quarter + 1; } if (element.cutQuantity === 0.50) { if (half > 0) { half = half - 1; } else if (threeQuarter > 0) { threeQuarter = threeQuarter - 1 quarter = quarter + 1; } else { half = half + 1; } } if (element.cutQuantity === 0.25) { if (quarter > 0) { quarter = quarter - 1; } else if (half > 0) { half = half - 1; quarter = quarter + 1; } else if (threeQuarter > 0) { threeQuarter = threeQuarter - 1; half = half + 1; } else { threeQuarter = threeQuarter + 1; } } }) let extraPanel = componentArray.filter((e) => e.cut == true && e.partno.charAt(8)== '2') for (let i = 0; i < quarter; i++) { let quarterData = { partno: extraPanel[0].partno, info: "0.25 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.25, quantity: 0.25 } componentArray.push(quarterData) } for (let j = 0; j < half; j++) { let halfData = { partno: extraPanel[0].partno, info: "0.50 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.50, quantity: 0.50 } componentArray.push(halfData) } for (let k = 0; k < threeQuarter; k++) { let threeQuarterData = { partno: extraPanel[0].partno, info: "0.75 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.75, quantity: 0.75 } componentArray.push(threeQuarterData) } } if(fourInchExtraPanel){ let quarter = 0; let half = 0 let threeQuarter = 0; fourInchExtraPanel.map((element) => { // if (element && element.partno.slice(-2) === '-X' && element.partno.charAt(8)== '2'){ // } if (element.cutQuantity === 0.75) { quarter = quarter + 1; } if (element.cutQuantity === 0.50) { if (half > 0) { half = half - 1; } else if (threeQuarter > 0) { threeQuarter = threeQuarter - 1 quarter = quarter + 1; } else { half = half + 1; } } if (element.cutQuantity === 0.25) { if (quarter > 0) { quarter = quarter - 1; } else if (half > 0) { half = half - 1; quarter = quarter + 1; } else if (threeQuarter > 0) { threeQuarter = threeQuarter - 1; half = half + 1; } else { threeQuarter = threeQuarter + 1; } } }) let extraPanel = componentArray.filter((e) => e.cut == true && e.partno.charAt(8)== '4') for (let i = 0; i < quarter; i++) { let quarterData = { partno: extraPanel[0].partno, info: "0.25 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.25, quantity: 0.25 } componentArray.push(quarterData) } for (let j = 0; j < half; j++) { let halfData = { partno: extraPanel[0].partno, info: "0.50 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.50, quantity: 0.50 } componentArray.push(halfData) } for (let k = 0; k < threeQuarter; k++) { let threeQuarterData = { partno: extraPanel[0].partno, info: "0.75 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.75, quantity: 0.75 } componentArray.push(threeQuarterData) } } let cutPanelsPartNo = componentArray.filter((e) => e.cut == true) let otherPartNumber = componentArray.filter((e) => e.cut !== true) let partNumberArrayGroup = _.groupBy(otherPartNumber, (h) => [ h.partno, h.variantColor, h.info, h.panelLabel, h.cut, h.cutQuantity, ]); let finalArr = Object.keys(partNumberArrayGroup).map(p => { let groupArray = partNumberArrayGroup[p]; let totalQty = groupArray.reduce((p, n) => p + n.quantity, 0) // let totalcutQty = groupArray.reduce((p, n) => p + n.cutQuantity, 0) if(groupArray[0].partno =="HF02187075HTEK"){ console.log(groupArray[0].partno) return Object.assign({}, groupArray[0],{partno:"HF02187100HTEK-50P"}, { quantity: Math.ceil(totalQty/50) }); }else{ return Object.assign({}, groupArray[0], { quantity: totalQty }); } }) finalArr.push(...cutPanelsPartNo) // var finalArr = componentArray.reduce((m, o) => { // // if(!o.partno.includes(excludePartnumbers)){ // let equal = false // let panelExtension = false // if (o.panelLabel) { // panelExtension = String(o.panelLabel).includes('E') || String(o.panelLabel).includes('C') || String(o.panelLabel).includes('A'); // if (panelExtension) { // equal = m.findIndex(h => h.panelLabel == o.panelLabel && h.partno == o.partno && h.info == o.info) // } // } // if (o.cut && panelExtension && equal != -1) { // m[equal].quantity += o.quantity; // } else if (o.cut == false || o.cut == undefined) { // var found = m.findIndex(p => (p.partno === o.partno && p.info === o.info && p.variantColor == o.variantColor)); // if (found != -1) { // m[found].quantity += o.quantity; // } // else { // m.push(o); // } // } // else { // m.push(o); // } // return m; // }, []); finalArr = finalArr.filter((p) => p.partno); finalArr.forEach((single, index, farray) => { farray[index].quantity = Math.ceil(single.quantity); if (single.partno.includes('WC190190')) { var componentPartNo = new Object(); componentPartNo.partno = 'HW03TAPE2WH'; componentPartNo.quantity = Math.ceil((farray[index].quantity) / 2); finalArr.push(componentPartNo); } // else if(single.partno.includes('WF041440COV')) { // var componentPartNo = new Object(); // componentPartNo.partno = 'WFADHESIVE-COVE'; // componentPartNo.quantity = Math.ceil((farray[index].quantity))*6; // finalArr.push(componentPartNo); // } }) finalArr = _.orderBy(finalArr, ['partno']); // //ASPACKAGING part should always add to the BOM with quantity 1. var packagePartNo = new Object(); packagePartNo.partno = 'ASPACKAGING'; packagePartNo.quantity = 1; finalArr.push(packagePartNo); let formData = new FormData() formData.append('data', JSON.stringify(finalArr)); return fetchFromServer(CONNECTION_URL + 'get/component_price', 'POST', formData).then((result) => { let bomDetails = { gridData: [], totalPrice: 0 }; if (result) { bomDetails.totalPrice = toFixedFloat(result.data.totalprice, 2) || 0; let bomData = []; let panelAmount = result.data.griddata.filter((e) => e.panelLabel === 'A1') Object.keys(result.data.griddata).forEach((index) => { let gridObj = result.data.griddata[index]; if (gridObj.cut == true) { if (panelAmount.length > 0) { let cutPanelPrice = parseFloat(panelAmount[0].price_base) || 0 gridObj.price_base = parseFloat(panelAmount[0].price_base) || 0 gridObj.quantity = parseFloat(gridObj.cutQuantity) gridObj.price = parseFloat(gridObj.cutQuantity) * cutPanelPrice } } else { gridObj.price = toFixedFloat(gridObj.price, 2) || 0; gridObj.quantity = Math.round(parseFloat(gridObj.quantity)) || 0; } gridObj && bomData.push(gridObj); }); bomData = _.orderBy(bomData, ['partno', 'quantity'], ['asc', 'desc']); bomDetails.gridData = bomData; } return bomDetails; }) } //commented out writein Products due to client requirements // export function getWriteInProductDetails(state) { // return Browser.fetchFromServer(CONNECTION_URL + 'get/writinproduct/' + state.get('quoteId')).then((result) => { // return result.data || []; // }) // } export function getPartNoArray(state, catalog) { var layers = state.scene.layers; let { scene } = state; let componentArray = []; let partComponentDebugger = 'SAAL0404XXHP' layers.map((layer) => { let { lines, areas, vertices, holes, id: layerID, items, opacity, panels } = layer; holes.map(hole => { if (catalog.getElement(hole.type).getPartNumber) { if (catalog.getElement(hole.type).getPartNumber(catalog, hole, layer, scene)) { let partNumberArray = catalog.getElement(hole.type).getPartNumber(catalog, hole, layer, scene); partNumberArray.map((partNo) => { if (partNo.partno.startsWith(partComponentDebugger)) console.log(partNo.quantity, hole.type, 'componentArrayprevvv') componentArray.push(partNo); }) } } }) items.map(item => { if (catalog.getElement(item.type).getPartNumber) { if (catalog.getElement(item.type).getPartNumber(catalog, item, layer, scene)) { let partNumberArray = catalog.getElement(item.type).getPartNumber(catalog, item, layer, scene); partNumberArray.map((partNo) => { if (partNo.partno.startsWith(partComponentDebugger)) console.log(partNo.quantity, item.type, 'ascomponentArrayprevvv') componentArray.push(partNo); }) } } }) let panelGroupArray = Panel.getPanelGroupInformation(scene, layer.id); panels.map(panel => { if (catalog.getElement(panel.type).getPartNumber) { if (catalog.getElement(panel.type).getPartNumber(catalog, panel, layer, scene)) { let partNumberArray = catalog.getElement(panel.type).getPartNumber(catalog, panel, layer, scene, panelGroupArray); partNumberArray.map((partNo) => { if (partNo.partno.startsWith(partComponentDebugger)) console.log(partNo.quantity, panel.type, 'componentArrayprevvv') componentArray.push(partNo); }) } // componentArray.push(catalog.getElement(hole.type).getPartNumber(catalog,hole, layer, scene)); } }) areas.map(area => { if (catalog.getElement(area.type).getPartNumber) { if (catalog.getElement(area.type).getPartNumber(catalog, area, layer, scene)) { let partNumberArray = catalog.getElement(area.type).getPartNumber(catalog, area, layer, scene); partNumberArray.map((partNo) => { if (partNo.partno.startsWith(partComponentDebugger)) console.log(partNo.quantity, area.type, 'componentArrayprevvv') componentArray.push(partNo); }) } } }) }) var excludePartnumbers = ['-X']; //calculation of extra panel let twoInchExtraPanel = componentArray.filter((e) => e.cut == true && e.partno.charAt(8)== '2') let fourInchExtraPanel = componentArray.filter((e) => e.cut == true && e.partno.charAt(8)== '4') if(twoInchExtraPanel){ let quarter = 0; let half = 0 let threeQuarter = 0; twoInchExtraPanel.map((element) => { // if (element && element.partno.slice(-2) === '-X' && element.partno.charAt(8)== '2'){ // } if (element.cutQuantity === 0.75) { quarter = quarter + 1; } if (element.cutQuantity === 0.50) { if (half > 0) { half = half - 1; } else if (threeQuarter > 0) { threeQuarter = threeQuarter - 1 quarter = quarter + 1; } else { half = half + 1; } } if (element.cutQuantity === 0.25) { if (quarter > 0) { quarter = quarter - 1; } else if (half > 0) { half = half - 1; quarter = quarter + 1; } else if (threeQuarter > 0) { threeQuarter = threeQuarter - 1; half = half + 1; } else { threeQuarter = threeQuarter + 1; } } }) let extraPanel = componentArray.filter((e) => e.cut == true && e.partno.charAt(8)== '2') for (let i = 0; i < quarter; i++) { let quarterData = { partno: extraPanel[0].partno, info: "0.25 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.25, quantity: 0.25 } componentArray.push(quarterData) } for (let j = 0; j < half; j++) { let halfData = { partno: extraPanel[0].partno, info: "0.50 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.50, quantity: 0.50 } componentArray.push(halfData) } for (let k = 0; k < threeQuarter; k++) { let threeQuarterData = { partno: extraPanel[0].partno, info: "0.75 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.75, quantity: 0.75 } componentArray.push(threeQuarterData) } } if(fourInchExtraPanel){ let quarter = 0; let half = 0 let threeQuarter = 0; fourInchExtraPanel.map((element) => { // if (element && element.partno.slice(-2) === '-X' && element.partno.charAt(8)== '2'){ // } if (element.cutQuantity === 0.75) { quarter = quarter + 1; } if (element.cutQuantity === 0.50) { if (half > 0) { half = half - 1; } else if (threeQuarter > 0) { threeQuarter = threeQuarter - 1 quarter = quarter + 1; } else { half = half + 1; } } if (element.cutQuantity === 0.25) { if (quarter > 0) { quarter = quarter - 1; } else if (half > 0) { half = half - 1; quarter = quarter + 1; } else if (threeQuarter > 0) { threeQuarter = threeQuarter - 1; half = half + 1; } else { threeQuarter = threeQuarter + 1; } } }) let extraPanel = componentArray.filter((e) => e.cut == true && e.partno.charAt(8)== '4') for (let i = 0; i < quarter; i++) { let quarterData = { partno: extraPanel[0].partno, info: "0.25 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.25, quantity: 0.25 } componentArray.push(quarterData) } for (let j = 0; j < half; j++) { let halfData = { partno: extraPanel[0].partno, info: "0.50 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.50, quantity: 0.50 } componentArray.push(halfData) } for (let k = 0; k < threeQuarter; k++) { let threeQuarterData = { partno: extraPanel[0].partno, info: "0.75 Extra Panel", cut: extraPanel[0].cut, cutQuantity: 0.75, quantity: 0.75 } componentArray.push(threeQuarterData) } } let cutPanelsPartNo = componentArray.filter((e) => e.cut == true) let otherPartNumber = componentArray.filter((e) => e.cut !== true) let partNumberArrayGroup = _.groupBy(otherPartNumber, (h) => [ h.partno, h.variantColor, h.info, h.panelLabel, h.cut, h.cutQuantity, ]); let finalArr = Object.keys(partNumberArrayGroup).map(p => { let groupArray = partNumberArrayGroup[p]; let totalQty = groupArray.reduce((p, n) => p + n.quantity, 0) // let totalcutQty = groupArray.reduce((p, n) => p + n.cutQuantity, 0) if(groupArray[0].partno =="HF02187075HTEK"){ console.log(groupArray[0].partno) return Object.assign({}, groupArray[0],{partno:"HF02187075HTEK-50P"}, { quantity: Math.ceil(totalQty/50) }); }else{ return Object.assign({}, groupArray[0], { quantity: totalQty }); } }) finalArr.push(...cutPanelsPartNo) finalArr = finalArr.filter((p) => p.partno); finalArr.forEach((single, index, farray) => { farray[index].quantity = Math.ceil(single.quantity); if (single.partno.includes('WC190190')) { var componentPartNo = new Object(); componentPartNo.partno = 'HW03TAPE2WH'; componentPartNo.quantity = Math.ceil((farray[index].quantity) / 2); finalArr.push(componentPartNo); } // else if(single.partno.includes('WF041440COV')) { // var componentPartNo = new Object(); // componentPartNo.partno = 'WFADHESIVE-COVE'; // componentPartNo.quantity = Math.ceil((farray[index].quantity))*6; // finalArr.push(componentPartNo); // } }) finalArr = _.orderBy(finalArr, ['partno']); // //ASPACKAGING part should always add to the BOM with quantity 1. var packagePartNo = new Object(); packagePartNo.partno = 'ASPACKAGING'; packagePartNo.quantity = 1; finalArr.push(packagePartNo); return finalArr; }