From d824ddf7852aae904b2e2e7c1bc367d6989ddfc4 Mon Sep 17 00:00:00 2001 From: kur0nek-o Date: Tue, 23 Apr 2024 16:10:09 +0700 Subject: [PATCH] fix: report in monalisa jumlah kali gangguan --- .../Rekap/MonalisaGR_JumlahKaliGangguan.ts | 405 ++++++++++-------- 1 file changed, 215 insertions(+), 190 deletions(-) diff --git a/src/report/Monalisa/Gangguan/Rekap/MonalisaGR_JumlahKaliGangguan.ts b/src/report/Monalisa/Gangguan/Rekap/MonalisaGR_JumlahKaliGangguan.ts index c2e5080..6753979 100644 --- a/src/report/Monalisa/Gangguan/Rekap/MonalisaGR_JumlahKaliGangguan.ts +++ b/src/report/Monalisa/Gangguan/Rekap/MonalisaGR_JumlahKaliGangguan.ts @@ -11,120 +11,80 @@ import { exportToWord } from './doc/MonalisaGR_JumlahKaliGangguan_DOC' const reportName = 'Jumlah Kali Gangguan' const fontSize = 5 -const getGroupParent = (reportMeta: any) => { - if (reportMeta.ulp.id != 0) { - return { - parent: reportMeta.ulp.name, - summaryName: reportMeta.ulp.name, - summaryKey: 'nama_ulp' - } - } - - if (reportMeta.up3.id != 0) { - return { - parent: reportMeta.up3.name, - summaryName: reportMeta.up3.name, - summaryKey: 'nama_up3' - } - } - - if (reportMeta.uid.id != 0) { - return { - parent: reportMeta.uid.name, - summaryName: reportMeta.uid.name, - summaryKey: 'nama_uid' - } - } - - if (reportMeta.regional.id != 0) { - return { - parent: reportMeta.regional.name, - summaryName: reportMeta.regional.name, - summaryKey: 'nama_regional' - } - } - - return '' -} - const groupingData = (data: any, reportMeta: any) => { const groupedData: any = {} - if (reportMeta.regional.id == 0 || reportMeta.uid.id == 0) { - if (reportMeta.regional.id != 0) { - data.forEach((item: any) => { - const { nama_uid } = item + const reportMetaMapping: any = { + ulp: 'nama_ulp', + up3: 'nama_ulp', + uid: 'nama_up3', + regional: 'nama_uid', + default: 'nama_regional' + } - if (!groupedData[nama_uid]) { - groupedData[nama_uid] = { data: [] } - } - - groupedData[nama_uid].data.push(item) - }) - } else { - data.forEach((item: any) => { - const { nama_regional } = item - - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } - } - - groupedData[nama_regional].data.push(item) - }) - } - - for (const key in groupedData) { - const data = groupedData[key].data - - data.forEach((item: any) => { - if (!groupedData[key].summary) { - groupedData[key].summary = { - mom_bulan_kemarin: 0, - mom_bulan_ini: 0, - persen_mom: [], - yoy_tahun_kemarin: 0, - yoy_tahun_ini: 0, - persen_yoy: [] - } - } - - groupedData[key].summary.mom_bulan_kemarin += item.mom_bulan_kemarin - groupedData[key].summary.mom_bulan_ini += item.mom_bulan_ini - groupedData[key].summary.persen_mom.push(item.persen_mom) - groupedData[key].summary.yoy_tahun_kemarin += item.yoy_tahun_kemarin - groupedData[key].summary.yoy_tahun_ini += item.yoy_tahun_ini - groupedData[key].summary.persen_yoy.push(item.persen_yoy) - }) - } - - return groupedData - } else { - const groupParent = getGroupParent(reportMeta) - - if (groupParent === '') { - return { - data, - parent: '', - summaryName: '' - } - } - - data.forEach((item: any) => { - const group = item[groupParent.summaryKey] - - if (!groupedData[group]) { - groupedData[group] = [] - } - - groupedData[group].push(item) - }) - - return { - data: groupedData, - parent: groupParent.parent, - summaryName: groupParent.summaryName + let key = 'default' + for (const prop in reportMetaMapping) { + if (reportMeta[prop] && reportMeta[prop].id != 0) { + key = reportMetaMapping[prop] + break } } + + data.forEach((item: any) => { + const groupKey = item[key] + + if (!groupedData[groupKey]) { + groupedData[groupKey] = { data: [] } + } + + groupedData[groupKey].data.push(item) + }) + + for (const key in groupedData) { + const data = groupedData[key].data + + data.forEach((item: any) => { + if (!groupedData[key].summary) { + groupedData[key].summary = { + mom_bulan_kemarin: 0, + mom_bulan_ini: 0, + persen_mom: [], + yoy_tahun_kemarin: 0, + yoy_tahun_ini: 0, + persen_yoy: [] + } + } + + groupedData[key].summary.mom_bulan_kemarin += item.mom_bulan_kemarin + groupedData[key].summary.mom_bulan_ini += item.mom_bulan_ini + groupedData[key].summary.persen_mom.push(item.persen_mom) + groupedData[key].summary.yoy_tahun_kemarin += item.yoy_tahun_kemarin + groupedData[key].summary.yoy_tahun_ini += item.yoy_tahun_ini + groupedData[key].summary.persen_yoy.push(item.persen_yoy) + }) + } + + return groupedData +} + +const getTitle = (reportMeta: any) => { + if (reportMeta.ulp.id != 0) { + return reportMeta.ulp.name + } + + if (reportMeta.up3.id != 0) { + return reportMeta.up3.name + } + + if (reportMeta.uid.id != 0) { + return reportMeta.uid.name + } + + if (reportMeta.regional.id != 0) { + return reportMeta.regional.name + } + + return 'NASIONAL' } const formatData = (rawData: any, reportMeta: any) => { @@ -137,103 +97,168 @@ const formatData = (rawData: any, reportMeta: any) => { yoy_tahun_ini: 0 } - if (reportMeta.regional.id == 0 || reportMeta.uid.id == 0) { - const data = groupingData(rawData, reportMeta) - const title = reportMeta.regional.id != 0 ? reportMeta.regional.name : 'NASIONAL' + const data = groupingData(rawData, reportMeta) + const title = getTitle(reportMeta) - formattedData.push([{ content: title, colSpan: 7, styles: { fontStyle: 'bold' } }]) + formattedData.push([{ content: title, colSpan: 7, styles: { fontStyle: 'bold' } }]) - let no = 1 - for (const key in data) { - const summary = data[key].summary - - formattedData.push([ - { content: no++, styles: { halign: 'right' } }, - key, - formatNumber(summary.mom_bulan_kemarin), - formatNumber(summary.mom_bulan_ini), - formatPercentage( - !summary.mom_bulan_ini || !summary.mom_bulan_kemarin - ? '0%' - : ((summary.mom_bulan_kemarin - summary.mom_bulan_ini) / summary.mom_bulan_kemarin) * - 100 - ), - formatNumber(summary.yoy_tahun_kemarin), - formatNumber(summary.yoy_tahun_ini), - formatPercentage( - !summary.yoy_tahun_ini || !summary.yoy_tahun_kemarin - ? '0%' - : ((summary.yoy_tahun_kemarin - summary.yoy_tahun_ini) / summary.yoy_tahun_kemarin) * - 100 - ) - ]) - - total.mom_bulan_kemarin += summary.mom_bulan_kemarin - total.mom_bulan_ini += summary.mom_bulan_ini - total.yoy_tahun_kemarin += summary.yoy_tahun_kemarin - total.yoy_tahun_ini += summary.yoy_tahun_ini - } + let no = 1 + for (const key in data) { + const summary = data[key].summary formattedData.push([ - { content: 'TOTAL', colSpan: 2, styles: { fontStyle: 'bold' } }, - formatNumber(total.mom_bulan_kemarin), - formatNumber(total.mom_bulan_ini), + { content: no++, styles: { halign: 'right' } }, + key, + formatNumber(summary.mom_bulan_kemarin), + formatNumber(summary.mom_bulan_ini), formatPercentage( - !total.mom_bulan_ini || !total.mom_bulan_kemarin + !summary.mom_bulan_ini || !summary.mom_bulan_kemarin ? '0%' - : ((total.mom_bulan_kemarin - total.mom_bulan_ini) / total.mom_bulan_kemarin) * 100 + : ((summary.mom_bulan_kemarin - summary.mom_bulan_ini) / summary.mom_bulan_kemarin) * 100 ), - formatNumber(total.yoy_tahun_kemarin), - formatNumber(total.yoy_tahun_ini), + formatNumber(summary.yoy_tahun_kemarin), + formatNumber(summary.yoy_tahun_ini), formatPercentage( - !total.yoy_tahun_ini || !total.yoy_tahun_kemarin + !summary.yoy_tahun_ini || !summary.yoy_tahun_kemarin ? '0%' - : ((total.yoy_tahun_kemarin - total.yoy_tahun_ini) / total.yoy_tahun_kemarin) * 100 + : ((summary.yoy_tahun_kemarin - summary.yoy_tahun_ini) / summary.yoy_tahun_kemarin) * 100 ) ]) - return formattedData - } else { - const tempData = groupingData(rawData, reportMeta) - const data = tempData.data[tempData.summaryName] || tempData.data - const formattedData: any = [] - - let parentName = tempData.parent - let summaryName = tempData.summaryName ? tempData.summaryName : 'Seluruh Unit' - - data.forEach((item: any) => { - total.mom_bulan_kemarin += item.mom_bulan_kemarin - total.mom_bulan_ini += item.mom_bulan_ini - total.yoy_tahun_kemarin += item.yoy_tahun_kemarin - total.yoy_tahun_ini += item.yoy_tahun_ini - }) - - formattedData.push([{ content: parentName, colSpan: 7, styles: { fontStyle: 'bold' } }]) - - const result = [ - formatNumber(total.mom_bulan_kemarin), - formatNumber(total.mom_bulan_ini), - formatPercentage( - !total.mom_bulan_ini || !total.mom_bulan_kemarin - ? '0%' - : ((total.mom_bulan_kemarin - total.mom_bulan_ini) / total.mom_bulan_kemarin) * 100 - ), - formatNumber(total.yoy_tahun_kemarin), - formatNumber(total.yoy_tahun_ini), - formatPercentage( - !total.yoy_tahun_ini || !total.yoy_tahun_kemarin - ? '0%' - : ((total.yoy_tahun_kemarin - total.yoy_tahun_ini) / total.yoy_tahun_kemarin) * 100 - ) - ] - - formattedData.push([{ content: '1', styles: { halign: 'right' } }, summaryName, ...result]) - formattedData.push([{ content: 'TOTAL', colSpan: 2, styles: { fontStyle: 'bold' } }, ...result]) - - return formattedData + total.mom_bulan_kemarin += summary.mom_bulan_kemarin + total.mom_bulan_ini += summary.mom_bulan_ini + total.yoy_tahun_kemarin += summary.yoy_tahun_kemarin + total.yoy_tahun_ini += summary.yoy_tahun_ini } + + formattedData.push([ + { content: 'TOTAL', colSpan: 2, styles: { fontStyle: 'bold' } }, + formatNumber(total.mom_bulan_kemarin), + formatNumber(total.mom_bulan_ini), + formatPercentage( + !total.mom_bulan_ini || !total.mom_bulan_kemarin + ? '0%' + : ((total.mom_bulan_kemarin - total.mom_bulan_ini) / total.mom_bulan_kemarin) * 100 + ), + formatNumber(total.yoy_tahun_kemarin), + formatNumber(total.yoy_tahun_ini), + formatPercentage( + !total.yoy_tahun_ini || !total.yoy_tahun_kemarin + ? '0%' + : ((total.yoy_tahun_kemarin - total.yoy_tahun_ini) / total.yoy_tahun_kemarin) * 100 + ) + ]) + + return formattedData } +// const formatData = (rawData: any, reportMeta: any) => { +// const formattedData: any = [] + +// const total: any = { +// mom_bulan_kemarin: 0, +// mom_bulan_ini: 0, +// yoy_tahun_kemarin: 0, +// yoy_tahun_ini: 0 +// } + +// if (reportMeta.regional.id == 0 || reportMeta.uid.id == 0) { +// const data = groupingData(rawData, reportMeta) +// const title = reportMeta.regional.id != 0 ? reportMeta.regional.name : 'NASIONAL' + +// formattedData.push([{ content: title, colSpan: 7, styles: { fontStyle: 'bold' } }]) + +// let no = 1 +// for (const key in data) { +// const summary = data[key].summary + +// formattedData.push([ +// { content: no++, styles: { halign: 'right' } }, +// key, +// formatNumber(summary.mom_bulan_kemarin), +// formatNumber(summary.mom_bulan_ini), +// formatPercentage( +// !summary.mom_bulan_ini || !summary.mom_bulan_kemarin +// ? '0%' +// : ((summary.mom_bulan_kemarin - summary.mom_bulan_ini) / summary.mom_bulan_kemarin) * +// 100 +// ), +// formatNumber(summary.yoy_tahun_kemarin), +// formatNumber(summary.yoy_tahun_ini), +// formatPercentage( +// !summary.yoy_tahun_ini || !summary.yoy_tahun_kemarin +// ? '0%' +// : ((summary.yoy_tahun_kemarin - summary.yoy_tahun_ini) / summary.yoy_tahun_kemarin) * +// 100 +// ) +// ]) + +// total.mom_bulan_kemarin += summary.mom_bulan_kemarin +// total.mom_bulan_ini += summary.mom_bulan_ini +// total.yoy_tahun_kemarin += summary.yoy_tahun_kemarin +// total.yoy_tahun_ini += summary.yoy_tahun_ini +// } + +// formattedData.push([ +// { content: 'TOTAL', colSpan: 2, styles: { fontStyle: 'bold' } }, +// formatNumber(total.mom_bulan_kemarin), +// formatNumber(total.mom_bulan_ini), +// formatPercentage( +// !total.mom_bulan_ini || !total.mom_bulan_kemarin +// ? '0%' +// : ((total.mom_bulan_kemarin - total.mom_bulan_ini) / total.mom_bulan_kemarin) * 100 +// ), +// formatNumber(total.yoy_tahun_kemarin), +// formatNumber(total.yoy_tahun_ini), +// formatPercentage( +// !total.yoy_tahun_ini || !total.yoy_tahun_kemarin +// ? '0%' +// : ((total.yoy_tahun_kemarin - total.yoy_tahun_ini) / total.yoy_tahun_kemarin) * 100 +// ) +// ]) + +// return formattedData +// } else { +// const tempData = groupingData(rawData, reportMeta) +// const data = tempData.data[tempData.summaryName] || tempData.data +// const formattedData: any = [] + +// let parentName = tempData.parent +// let summaryName = tempData.summaryName ? tempData.summaryName : 'Seluruh Unit' + +// data.forEach((item: any) => { +// total.mom_bulan_kemarin += item.mom_bulan_kemarin +// total.mom_bulan_ini += item.mom_bulan_ini +// total.yoy_tahun_kemarin += item.yoy_tahun_kemarin +// total.yoy_tahun_ini += item.yoy_tahun_ini +// }) + +// formattedData.push([{ content: parentName, colSpan: 7, styles: { fontStyle: 'bold' } }]) + +// const result = [ +// formatNumber(total.mom_bulan_kemarin), +// formatNumber(total.mom_bulan_ini), +// formatPercentage( +// !total.mom_bulan_ini || !total.mom_bulan_kemarin +// ? '0%' +// : ((total.mom_bulan_kemarin - total.mom_bulan_ini) / total.mom_bulan_kemarin) * 100 +// ), +// formatNumber(total.yoy_tahun_kemarin), +// formatNumber(total.yoy_tahun_ini), +// formatPercentage( +// !total.yoy_tahun_ini || !total.yoy_tahun_kemarin +// ? '0%' +// : ((total.yoy_tahun_kemarin - total.yoy_tahun_ini) / total.yoy_tahun_kemarin) * 100 +// ) +// ] + +// formattedData.push([{ content: '1', styles: { halign: 'right' } }, summaryName, ...result]) +// formattedData.push([{ content: 'TOTAL', colSpan: 2, styles: { fontStyle: 'bold' } }, ...result]) + +// return formattedData +// } +// } + const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => { const day = new Date().toLocaleString('id-ID', { weekday: 'long' }) const date = new Date().getDate()