Merge branch 'qcast-pub' into dev

# Conflicts:
#	src/components/floor-plan/modal/circuitTrestle/CircuitTrestleSetting.jsx
#	src/components/floor-plan/modal/roofAllocation/ContextRoofAllocationSetting.jsx
#	src/components/floor-plan/modal/roofAllocation/RoofAllocationSetting.jsx
This commit is contained in:
김민식 2025-02-05 16:59:44 +09:00
commit 3a7e206f27
7 changed files with 256 additions and 251 deletions

View File

@ -359,7 +359,7 @@ export default function CanvasMenu(props) {
}, [basicSetting])*/ }, [basicSetting])*/
const checkMenuState = (menu) => { const checkMenuState = (menu) => {
return (['2', '3'].includes(canvasSetting?.roofSizeSet) && menu.index === 2) || (menuNumber === 4 && menu.index === 2) return (['2', '3'].includes(canvasSetting?.roofSizeSet) && menu.index === 2) || (menuNumber === 4 && [1, 2].includes(menu.index))
} }
const checkMenuAndCanvasState = () => { const checkMenuAndCanvasState = () => {
@ -493,7 +493,7 @@ export default function CanvasMenu(props) {
className={`canvas-menu-item ${menuNumber === menu.index ? 'active' : ''}`} className={`canvas-menu-item ${menuNumber === menu.index ? 'active' : ''}`}
onClick={() => { onClick={() => {
if (['2', '3'].includes(canvasSetting?.roofSizeSet) && menu.index === 2) return if (['2', '3'].includes(canvasSetting?.roofSizeSet) && menu.index === 2) return
if (menuNumber === 4 && menu.index === 2) return if (menuNumber === 4 && [1, 2].includes(menu.index)) return
onClickNav(menu) onClickNav(menu)
}} }}
> >

View File

@ -94,14 +94,14 @@ export default function CircuitTrestleSetting({ id }) {
// PCS // PCS
getPcsAutoRecommendList(params).then((res) => { getPcsAutoRecommendList(params).then((res) => {
if (res.data?.pcsItemList) { if (res.data?.pcsItemList) {
const itemList = models.filter((model) => { let pcsItemList = []
return res.data?.pcsItemList.map((item) => item.itemId).includes(model.itemId) res.data?.pcsItemList.forEach((item) => {
}) if (models.map((model) => model.itemId).includes(item.itemId)) {
const selectedModels = itemList.map((model) => { pcsItemList.push({
return { ...item,
...model,
id: uuidv4(), id: uuidv4(),
isUsed: false, isUsed: false,
})
} }
}) })
// //
@ -112,7 +112,7 @@ export default function CircuitTrestleSetting({ id }) {
pcsItemList: getPcsItemList(), pcsItemList: getPcsItemList(),
} }
// //
setSelectedModels(selectedModels) setSelectedModels(pcsItemList)
// //
getPcsVoltageChk(pcsVoltageChkParams).then((res) => { getPcsVoltageChk(pcsVoltageChkParams).then((res) => {
if (res.resultCode === 'S') { if (res.resultCode === 'S') {
@ -205,7 +205,8 @@ export default function CircuitTrestleSetting({ id }) {
const getRoofSurfaceList = () => { const getRoofSurfaceList = () => {
const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) const roofSurfaceList = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
roofSurfaceList.sort((a, b) => a.left - b.left || b.top - a.top) roofSurfaceList.sort((a, b) => a.left - b.left || b.top - a.top)
return roofSurfaceList.map((obj) => { return roofSurfaceList
.map((obj) => {
return { return {
roofSurfaceId: obj.id, roofSurfaceId: obj.id,
roofSurface: canvas roofSurface: canvas
@ -223,6 +224,7 @@ export default function CircuitTrestleSetting({ id }) {
}), }),
} }
}) })
.filter((surface) => surface.moduleList.length > 0)
} }
// //
@ -338,7 +340,18 @@ export default function CircuitTrestleSetting({ id }) {
const params = { const params = {
...getOptYn(), ...getOptYn(),
useModuleItemList: getUseModuleItemList(), useModuleItemList: getUseModuleItemList(),
roofSurfaceList: getRoofSurfaceList(), roofSurfaceList: getRoofSurfaceList().map((surface) => {
console.log(surface.moduleList)
return {
...surface,
moduleList: surface.moduleList.map((module) => {
return {
itemId: module.itemId,
uniqueId: module.uniqueId,
}
}),
}
}),
pcsItemList: getPcsItemList(), pcsItemList: getPcsItemList(),
} }
@ -348,19 +361,34 @@ export default function CircuitTrestleSetting({ id }) {
const itemList = models.filter((model) => { const itemList = models.filter((model) => {
return res.data?.pcsItemList.map((item) => item.itemId).includes(model.itemId) return res.data?.pcsItemList.map((item) => item.itemId).includes(model.itemId)
}) })
const selectedModels = itemList.map((model) => {
return { let pcsItemList = []
...model, let pcsObj = {}
models.forEach((model) => {
pcsObj[model.itemId] = model
})
res.data?.pcsItemList.forEach((item) => {
if (pcsObj[item.itemId]) {
pcsItemList.push({
...pcsObj[item.itemId],
isUsed: false,
id: uuidv4(), id: uuidv4(),
})
} }
}) })
const pcsVoltageChkParams = { const pcsVoltageChkParams = {
...getOptYn(), ...getOptYn(),
useModuleItemList: getUseModuleItemList(), useModuleItemList: getUseModuleItemList(),
roofSurfaceList: getRoofSurfaceList(), roofSurfaceList: getRoofSurfaceList(),
pcsItemList: getPcsItemList(), pcsItemList: pcsItemList.map((item) => {
return {
itemId: item.itemId,
pcsMkrCd: item.pcsMkrCd,
pcsSerCd: item.pcsSerCd,
} }
setSelectedModels(selectedModels) }),
}
setSelectedModels(pcsItemList)
getPcsVoltageChk(pcsVoltageChkParams).then((res) => { getPcsVoltageChk(pcsVoltageChkParams).then((res) => {
setAllocationType(ALLOCATION_TYPE.PASSIVITY) setAllocationType(ALLOCATION_TYPE.PASSIVITY)
}) })
@ -536,23 +564,9 @@ export default function CircuitTrestleSetting({ id }) {
// //
const handleClose = () => { const handleClose = () => {
swalFire({ // //
title: '변경사항을 저장하시겠습니까?',
//text: ' .',
type: 'confirm',
confirmButtonText: '저장',
cancelButtonText: '취소',
icon: 'warning',
confirmFn: async () => {
//
await onApply()
closePopup(id)
},
denyFn: () => {
//
const circuitTexts = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber') const circuitTexts = canvas.getObjects().filter((obj) => obj.name === 'circuitNumber')
canvas.remove(...circuitTexts) canvas.remove(...circuitTexts)
// //
canvas canvas
.getObjects() .getObjects()
@ -565,8 +579,6 @@ export default function CircuitTrestleSetting({ id }) {
canvas.renderAll() canvas.renderAll()
closePopup(id) closePopup(id)
},
})
} }
return ( return (

View File

@ -91,7 +91,6 @@ export default function PowerConditionalSelect(props) {
} }
const onCheckSeries = (data) => { const onCheckSeries = (data) => {
console.log('data', data)
const copySeries = series.map((s) => { const copySeries = series.map((s) => {
return { return {
...s, ...s,
@ -99,12 +98,10 @@ export default function PowerConditionalSelect(props) {
} }
}) })
setSeries(copySeries) setSeries(copySeries)
console.log('copySeries', copySeries)
handleSetmodels(copySeries.filter((s) => s.selected)) handleSetmodels(copySeries.filter((s) => s.selected))
} }
const handleSetmodels = (selectedSeries) => { const handleSetmodels = (selectedSeries) => {
console.log('series', selectedSeries)
if (selectedSeries.length === 0) { if (selectedSeries.length === 0) {
setModels([]) setModels([])
setSelectedModels([]) setSelectedModels([])
@ -149,7 +146,7 @@ export default function PowerConditionalSelect(props) {
return return
} }
setSelectedModels([...selectedModels, { ...selectedRow, id: uuidv4() }]) setSelectedModels([...selectedModels, { ...selectedRow, id: uuidv4(), isUsed: false }])
setSelectedRow(null) setSelectedRow(null)
} }
@ -163,7 +160,6 @@ export default function PowerConditionalSelect(props) {
setSelectedMaker(option) setSelectedMaker(option)
getPcsMakerList(option).then((res) => { getPcsMakerList(option).then((res) => {
console.log('getPcsMakerList(series)', res.data)
setSeries( setSeries(
res.data.map((series) => { res.data.map((series) => {
return { ...series, selected: false } return { ...series, selected: false }

View File

@ -79,36 +79,36 @@ export default function PassivityCircuitAllocation(props) {
const setSurfaceInfo = () => { const setSurfaceInfo = () => {
const surfaces = canvas.getObjects().filter((obj) => POLYGON_TYPE.MODULE_SETUP_SURFACE === obj.name) const surfaces = canvas.getObjects().filter((obj) => POLYGON_TYPE.MODULE_SETUP_SURFACE === obj.name)
// setHeaders([header[0], { name: '', prop: 'circuit' }, ...header.slice(1)]) // setHeaders([header[0], { name: '', prop: 'circuit' }, ...header.slice(1)])
setRows( // setRows(
rows.map((row) => { // rows.map((row) => {
return { // return {
...row, // ...row,
circuit: '', // circuit: '',
} // }
}), // }),
) // )
let totals = {} // let totals = {}
rows.forEach((row) => { // rows.forEach((row) => {
if (header.length === 4) { // if (header.length === 4) {
if (!totals[header[2].prop]) totals[header[2].prop] = 0 // if (!totals[header[2].prop]) totals[header[2].prop] = 0
totals[header[2].prop] += +row[header[2].prop] // totals[header[2].prop] += +row[header[2].prop]
} else if (header.length === 5) { // } else if (header.length === 5) {
if (!totals[header[2].prop]) totals[header[2].prop] = 0 // if (!totals[header[2].prop]) totals[header[2].prop] = 0
totals[header[2].prop] += +row[header[2].prop] // totals[header[2].prop] += +row[header[2].prop]
if (!totals[header[3].prop]) totals[header[3].prop] = 0 // if (!totals[header[3].prop]) totals[header[3].prop] = 0
totals[header[3]] += +row[header[3]] // totals[header[3]] += +row[header[3]]
} // }
}) // })
setFooter([ // setFooter([
...['합계', ''], // ...['', ''],
...Object.keys(totals).map((key) => { // ...Object.keys(totals).map((key) => {
return totals[key] // return totals[key]
}), // }),
Object.keys(totals).reduce((acc, key) => { // Object.keys(totals).reduce((acc, key) => {
return acc + totals[key] // return acc + totals[key]
}, 0), // }, 0),
]) // ])
// let totalWpout = 0 // let totalWpout = 0
// const rows = surfaces.map((surface) => { // const rows = surfaces.map((surface) => {
// let wpOut = 0 // let wpOut = 0
@ -226,10 +226,23 @@ export default function PassivityCircuitAllocation(props) {
setSelectedPcs(tempSelectedPcs) setSelectedPcs(tempSelectedPcs)
canvas.add(moduleCircuitText) canvas.add(moduleCircuitText)
}) })
console.log('🚀 ~ handleCircuitNumberFix ~ selectedModels:', selectedModels)
// let pcsList = [...selectedModels.map((model) => ({ ...model }))]
let pcsList = JSON.parse(JSON.stringify(selectedModels))
pcsList = pcsList.map((model) => {
console.log('🚀 ~ handleCircuitNumberFix ~ pcsList:', pcsList)
if (model.id === selectedPcs.id) {
model.isUsed = true
}
return model
})
console.log('🚀 ~ handleCircuitNumberFix ~ pcsList:', pcsList)
const roofSurfaceList = canvas const roofSurfaceList = canvas
.getObjects() .getObjects()
.filter((obj) => POLYGON_TYPE.MODULE_SETUP_SURFACE === obj.name) .filter((obj) => POLYGON_TYPE.MODULE_SETUP_SURFACE === obj.name && obj?.modules.length > 0)
.map((surface) => { .map((surface) => {
return { return {
roofSurfaceId: surface.id, roofSurfaceId: surface.id,
@ -246,28 +259,8 @@ export default function PassivityCircuitAllocation(props) {
}) })
console.log('uniqueCircuitNumbers', uniqueCircuitNumbers) console.log('uniqueCircuitNumbers', uniqueCircuitNumbers)
const usedPcses = selectedModels.filter((model) => model.isUsed) const usedPcses = pcsList.filter((model) => model.isUsed)
const pcsItemList = const pcsItemList = usedPcses.map((model, index) => {
usedPcses.length === 0
? [
{
pcsMkrCd: selectedPcs.pcsMkrCd,
pcsSerCd: selectedPcs.pcsSerCd,
itemId: selectedPcs.itemId,
itemNm: selectedPcs.itemNm,
goodsNo: selectedPcs.goodsNo,
serQtyList: [
{
serQty: targetModules.length,
paralQty: uniqueCircuitNumbers.length,
rmdYn: 'Y',
usePossYn: 'Y',
roofSurfaceList: roofSurfaceList,
},
],
},
]
: selectedModels.map((model, index) => {
return { return {
pcsMkrCd: model.pcsMkrCd, pcsMkrCd: model.pcsMkrCd,
pcsSerCd: model.pcsSerCd, pcsSerCd: model.pcsSerCd,
@ -318,17 +311,15 @@ export default function PassivityCircuitAllocation(props) {
return return
} }
setSelectedModels( setSelectedModels(pcsList)
selectedModels.map((model) => {
return { ...model, isUsed: model.id === selectedPcs.id ? true : model.isUsed }
}),
)
setTargetModules([]) setTargetModules([])
setCircuitNumber(+circuitNumber + 1) setCircuitNumber(+circuitNumber + 1)
setModuleStatisticsData() setModuleStatisticsData()
}) })
} }
console.log('🚀 ~ handleCircuitNumberFix ~ selectedModels:', selectedModels)
console.log('🚀 ~ handleCircuitNumberFix ~ selectedModels:', selectedModels)
const getCircuitNumber = () => { const getCircuitNumber = () => {
if (selectedModels.length === 1) { if (selectedModels.length === 1) {

View File

@ -116,22 +116,25 @@ export default function ContextRoofAllocationSetting(props) {
)} )}
</div> </div>
</div> </div>
{roof.raftAuth && (
<div className="block-box"> <div className="block-box">
<div className="flex-ment"> <div className="flex-ment">
<span>{getMessage('slope')}</span> <span>{getMessage('modal.placement.initial.setting.rafter')}</span>
<div className="input-grid"> {raftCodes.length > 0 && (
<input <div className="grid-select">
type="text" <QSelectBox
className="input-origin block" options={raftCodes}
onChange={(e) => { value={roof}
handleChangePitch(e, index) showKey={'clCodeNm'}
}} sourceKey={'clCode'}
defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle} targetKey={roof.raft ? 'raft' : 'raftBaseCd'}
/> />
</div> </div>
<span className="absol">{pitchText}</span> )}
</div> </div>
</div> </div>
)}
{(roof.widAuth || roof.lenAuth) && ( {(roof.widAuth || roof.lenAuth) && (
<> <>
{roof.widAuth && ( {roof.widAuth && (
@ -156,26 +159,6 @@ export default function ContextRoofAllocationSetting(props) {
)} )}
</> </>
)} )}
{(roof.raftAuth || roof.roofPchAuth) && (
<>
{roof.raftAuth && (
<div className="block-box">
<div className="flex-ment">
<span>{getMessage('modal.placement.initial.setting.rafter')}</span>
{raftCodes.length > 0 && (
<div className="grid-select">
<QSelectBox
options={raftCodes}
value={roof}
showKey={'clCodeNm'}
sourceKey={'clCode'}
targetKey={roof.raft ? 'raft' : 'raftBaseCd'}
/>
</div>
)}
</div>
</div>
)}
{roof.roofPchAuth && ( {roof.roofPchAuth && (
<div className="block-box"> <div className="block-box">
<div className="flex-ment"> <div className="flex-ment">
@ -191,8 +174,22 @@ export default function ContextRoofAllocationSetting(props) {
</div> </div>
</div> </div>
)} )}
</> <div className="block-box">
)} <div className="flex-ment">
<span>{getMessage('slope')}</span>
<div className="input-grid">
<input
type="text"
className="input-origin block"
onChange={(e) => {
handleChangeInput(e, currentAngleType === 'slope' ? 'pitch' : 'angle', index)
}}
defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle}
/>
</div>
<span className="absol">{pitchText}</span>
</div>
</div>
<div className="block-box"> <div className="block-box">
<div className="icon-btn-wrap"> <div className="icon-btn-wrap">
<button <button

View File

@ -33,7 +33,6 @@ export default function RoofAllocationSetting(props) {
handleChangeLayout, handleChangeLayout,
currentRoofList, currentRoofList,
handleChangeInput, handleChangeInput,
handleChangePitch,
} = useRoofAllocationSetting(id) } = useRoofAllocationSetting(id)
const pitchText = useRecoilValue(pitchTextSelector) const pitchText = useRecoilValue(pitchTextSelector)
const { findCommonCode } = useCommonCode() const { findCommonCode } = useCommonCode()
@ -118,22 +117,27 @@ export default function RoofAllocationSetting(props) {
)} )}
</div> </div>
</div> </div>
{roof.raftAuth && (
<div className="block-box"> <div className="block-box">
<div className="flex-ment"> <div className="flex-ment">
<span>{getMessage('slope')}</span> <span>{getMessage('modal.placement.initial.setting.rafter')}</span>
<div className="input-grid"> {raftCodes.length > 0 && (
<input <div className="grid-select">
type="text" <QSelectBox
className="input-origin block" options={raftCodes}
onChange={(e) => { value={roof}
handleChangePitch(e, index) showKey={'clCodeNm'}
}} sourceKey={'clCode'}
defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle} targetKey={roof.raft ? 'raft' : 'raftBaseCd'}
onChange={(e) => handleChangeRaft(e, index)}
/> />
</div> </div>
<span className="absol">{pitchText}</span> )}
</div> </div>
</div> </div>
)}
{(roof.widAuth || roof.lenAuth) && ( {(roof.widAuth || roof.lenAuth) && (
<> <>
{roof.widAuth && ( {roof.widAuth && (
@ -170,27 +174,6 @@ export default function RoofAllocationSetting(props) {
)} )}
</> </>
)} )}
{(roof.raftAuth || roof.roofPchAuth) && (
<>
{roof.raftAuth && (
<div className="block-box">
<div className="flex-ment">
<span>{getMessage('modal.placement.initial.setting.rafter')}</span>
{raftCodes.length > 0 && (
<div className="grid-select">
<QSelectBox
options={raftCodes}
value={roof}
showKey={'clCodeNm'}
sourceKey={'clCode'}
targetKey={roof.raft ? 'raft' : 'raftBaseCd'}
onChange={(e) => handleChangeRaft(e, index)}
/>
</div>
)}
</div>
</div>
)}
{roof.roofPchAuth && ( {roof.roofPchAuth && (
<div className="block-box"> <div className="block-box">
<div className="flex-ment"> <div className="flex-ment">
@ -207,8 +190,22 @@ export default function RoofAllocationSetting(props) {
</div> </div>
</div> </div>
)} )}
</> <div className="block-box">
)} <div className="flex-ment">
<span>{getMessage('slope')}</span>
<div className="input-grid">
<input
type="text"
className="input-origin block"
onChange={(e) => {
handleChangePitch(e, index)
}}
defaultValue={currentAngleType === 'slope' ? roof.pitch : roof.angle}
/>
</div>
<span className="absol">{pitchText}</span>
</div>
</div>
<div className="block-box"> <div className="block-box">
<div className="icon-btn-wrap"> <div className="icon-btn-wrap">
<button <button

View File

@ -243,6 +243,7 @@ export function useModule() {
}, },
}) })
} }
setModuleStatisticsData()
} }
const moduleCopy = (length, direction) => { const moduleCopy = (length, direction) => {
@ -303,6 +304,7 @@ export function useModule() {
}, },
}) })
} }
setModuleStatisticsData()
} }
const moduleMultiCopy = (type, length, direction) => { const moduleMultiCopy = (type, length, direction) => {
@ -377,6 +379,7 @@ export function useModule() {
}, },
}) })
} }
setModuleStatisticsData()
} }
const moduleColumnRemove = (type) => { const moduleColumnRemove = (type) => {
@ -491,6 +494,7 @@ export function useModule() {
}, },
}) })
} }
setModuleStatisticsData()
} }
const moduleRowRemove = (type) => { const moduleRowRemove = (type) => {
@ -606,6 +610,7 @@ export function useModule() {
}, },
}) })
} }
setModuleStatisticsData()
} }
const moduleColumnInsert = (type) => { const moduleColumnInsert = (type) => {
@ -701,6 +706,8 @@ export function useModule() {
}, },
}) })
} }
moduleSetupSurface.set({ modules: [...moduleSetupSurface.modules, ...copyModules] })
setModuleStatisticsData()
} }
const muduleRowInsert = (type) => { const muduleRowInsert = (type) => {
@ -798,6 +805,9 @@ export function useModule() {
}, },
}) })
} }
moduleSetupSurface.set({ modules: [...moduleSetupSurface.modules, ...copyModules] })
setModuleStatisticsData()
} }
const alignModule = (type, surfaceArray) => { const alignModule = (type, surfaceArray) => {
@ -870,6 +880,7 @@ export function useModule() {
surface.set({ modules: modules }) surface.set({ modules: modules })
canvas.remove(activeModule) canvas.remove(activeModule)
canvas.renderAll() canvas.renderAll()
setModuleStatisticsData()
} }
const moduleRoofRemove = (surfaceArray) => { const moduleRoofRemove = (surfaceArray) => {
@ -965,7 +976,7 @@ export function useModule() {
] ]
const surfaceObjects = {} const surfaceObjects = {}
const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE) const surfaces = canvas.getObjects().filter((obj) => obj.name === POLYGON_TYPE.MODULE_SETUP_SURFACE)
const rows = surfaces.map((surface) => { surfaces.forEach((surface) => {
surfaceObjects[surface.id] = { surfaceObjects[surface.id] = {
roofSurface: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText, roofSurface: canvas.getObjects().filter((obj) => obj.id === surface.parentId)[0].directionText,
circuit: '-', circuit: '-',
@ -1002,11 +1013,12 @@ export function useModule() {
}) })
}) })
let tempRows = [] let tempRows = []
console.log('surfaceObjects', surfaceObjects)
Object.keys(surfaceObjects).forEach((key) => { Object.keys(surfaceObjects).forEach((key) => {
let tempRow = { let tempRow = {
name: surfaceObjects[key].roofSurface, name: surfaceObjects[key].roofSurface,
circuit: surfaceObjects[key].circuit, circuit: surfaceObjects[key].circuit,
wpOut: parseInt((surfaceObjects[key].wpOut / 1000).toFixed(3)), wpOut: parseFloat(surfaceObjects[key].wpOut / 1000),
} }
selectedModules.itemList.forEach((module) => { selectedModules.itemList.forEach((module) => {
tempRow[module.itemId] = surfaceObjects[key][module.itemId] tempRow[module.itemId] = surfaceObjects[key][module.itemId]
@ -1017,7 +1029,7 @@ export function useModule() {
let row = { let row = {
name: surfaceObjects[key].roofSurface, name: surfaceObjects[key].roofSurface,
circuit: surfaceObjects[key].circuits[circuit].circuit, circuit: surfaceObjects[key].circuits[circuit].circuit,
wpOut: parseInt((surfaceObjects[key].circuits[circuit].circuits.wpOut / 1000).toFixed(3)), wpOut: parseFloat(surfaceObjects[key].circuits[circuit].circuits.wpOut / 1000),
} }
selectedModules.itemList.forEach((module) => { selectedModules.itemList.forEach((module) => {
row[module.itemId] = surfaceObjects[key].circuits[circuit].circuits[module.itemId] row[module.itemId] = surfaceObjects[key].circuits[circuit].circuits[module.itemId]
@ -1025,14 +1037,14 @@ export function useModule() {
tempRows.push(row) tempRows.push(row)
}) })
}) })
console.log('tempRows', tempRows)
const tempFooter = { const tempFooter = {
name: getMessage('modal.panel.batch.statistic.total'), name: getMessage('modal.panel.batch.statistic.total'),
circuit: '-', circuit: '-',
wpOut: tempRows.reduce((acc, row) => acc + row.wpOut, 0), wpOut: tempRows.reduce((acc, row) => acc + row.wpOut, 0),
} }
selectedModules.itemList.forEach((module) => { selectedModules.itemList.forEach((module) => {
tempFooter[module.itemId] = tempRows.reduce((acc, row) => acc + row[module.itemId], 0) tempFooter[module.itemId] = tempRows.reduce((acc, row) => acc + (row[module.itemId] ? parseFloat(row[module.itemId]) : 0), 0)
}) })
setModuleStatistics({ header: tempHeader, rows: tempRows.filter((row) => row.wpOut !== 0), footer: tempFooter }) setModuleStatistics({ header: tempHeader, rows: tempRows.filter((row) => row.wpOut !== 0), footer: tempFooter })
} }