From 32b62341d123e170c50e1d9b3f648c792f9458e9 Mon Sep 17 00:00:00 2001 From: kur0nek-o Date: Tue, 23 Apr 2024 22:47:28 +0700 Subject: [PATCH] fix: rekapitulasi monalisa laporan --- .../Pages/PencarianData/PencarianData.vue | 4 +- .../Bulanan/MonalisaLB_AgingComplaint.ts | 369 ++++++-------- .../Bulanan/MonalisaLB_EnergyNotSales.ts | 237 ++++----- .../Bulanan/MonalisaLB_KADDalamPelaporan.ts | 274 ++++------- .../MonalisaLB_PenurunanJumlahKomplain.ts | 459 +++++++---------- .../Kumulatif/MonalisaLK_AgingComplaint.ts | 374 ++++++-------- .../Kumulatif/MonalisaLK_EnergyNotSales.ts | 231 ++++----- .../Kumulatif/MonalisaLK_KDADPelaporan.ts | 274 ++++------- .../MonalisaLK_PenurunanJumlahKomplain.ts | 460 +++++++----------- src/utils/api/api.graphql.ts | 2 + 10 files changed, 1018 insertions(+), 1666 deletions(-) diff --git a/src/components/Pages/PencarianData/PencarianData.vue b/src/components/Pages/PencarianData/PencarianData.vue index 85064ad..a2ea09d 100755 --- a/src/components/Pages/PencarianData/PencarianData.vue +++ b/src/components/Pages/PencarianData/PencarianData.vue @@ -131,7 +131,7 @@ css-class="custom-table-column" :width="170" alignment="center" - data-field="" + data-field="nama_regu" caption="Petugas" cell-template="formatText" /> @@ -223,7 +223,7 @@

Petugas:

- +
diff --git a/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_AgingComplaint.ts b/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_AgingComplaint.ts index 5b40e1e..a58469b 100644 --- a/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_AgingComplaint.ts +++ b/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_AgingComplaint.ts @@ -13,114 +13,82 @@ const reportName = '(Monalisa) Aging Complaint' const fontSize = 5 const detailFontSize = 3 -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) { - data.forEach((item: any) => { - const { nama_regional } = item + const reportMetaMapping: any = { + ulp: 'nama_ulp', + up3: 'nama_ulp', + uid: 'nama_up3', + regional: 'nama_uid', + default: 'nama_regional' + } - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } - } - - groupedData[nama_regional].data.push(item) - }) - - for (const regional in groupedData) { - const data = groupedData[regional].data - - data.forEach((item: any) => { - if (!groupedData[regional].summary) { - groupedData[regional].summary = { - avg_durasi_recovery_gangguan: [], - sla_gangguan: [], - avg_durasi_recovery_keluhan: [], - sla_keluhan: [], - aging_complaint_gangguan: [], - aging_complaint_keluhan: [], - avg_aging_complaint: [] - } - } - - groupedData[regional].summary.avg_durasi_recovery_gangguan.push( - item.avg_durasi_recovery_gangguan - ) - groupedData[regional].summary.sla_gangguan.push(item.sla_gangguan) - groupedData[regional].summary.avg_durasi_recovery_keluhan.push( - item.avg_durasi_recovery_keluhan - ) - groupedData[regional].summary.sla_keluhan.push(item.sla_keluhan) - groupedData[regional].summary.aging_complaint_gangguan.push(item.aging_complaint_gangguan) - groupedData[regional].summary.aging_complaint_keluhan.push(item.aging_complaint_keluhan) - groupedData[regional].summary.avg_aging_complaint.push(item.avg_aging_complaint) - }) - } - - 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 = 'nama_regional' + 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 = { + avg_durasi_recovery_gangguan: [], + sla_gangguan: [], + avg_durasi_recovery_keluhan: [], + sla_keluhan: [], + aging_complaint_gangguan: [], + aging_complaint_keluhan: [], + avg_aging_complaint: [] + } + } + + groupedData[key].summary.avg_durasi_recovery_gangguan.push(item.avg_durasi_recovery_gangguan) + groupedData[key].summary.sla_gangguan.push(item.sla_gangguan) + groupedData[key].summary.avg_durasi_recovery_keluhan.push(item.avg_durasi_recovery_keluhan) + groupedData[key].summary.sla_keluhan.push(item.sla_keluhan) + groupedData[key].summary.aging_complaint_gangguan.push(item.aging_complaint_gangguan) + groupedData[key].summary.aging_complaint_keluhan.push(item.aging_complaint_keluhan) + groupedData[key].summary.avg_aging_complaint.push(item.avg_aging_complaint) + }) + } + + 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) => { @@ -136,140 +104,85 @@ const formatData = (rawData: any, reportMeta: any) => { avg_aging_complaint: [] } - if (reportMeta.regional.id == 0) { - const data = groupingData(rawData, reportMeta) + const data = groupingData(rawData, reportMeta) + const title = getTitle(reportMeta) - formattedData.push([{ content: 'NASIONAL', colSpan: 8, styles: { fontStyle: 'bold' } }]) + formattedData.push([{ content: title, colSpan: 8, styles: { fontStyle: 'bold' } }]) - for (const regional in data) { - const summary = data[regional].summary + for (const regional in data) { + const summary = data[regional].summary - const avg_durasi_recovery_gangguan = - summary.avg_durasi_recovery_gangguan.reduce((a: number, b: number) => a + b, 0) / - summary.avg_durasi_recovery_gangguan.length - const sla_gangguan = - summary.sla_gangguan.reduce((a: number, b: number) => a + b, 0) / - summary.sla_gangguan.length - const avg_durasi_recovery_keluhan = - summary.avg_durasi_recovery_keluhan.reduce((a: number, b: number) => a + b, 0) / - summary.avg_durasi_recovery_keluhan.length - const sla_keluhan = - summary.sla_keluhan.reduce((a: number, b: number) => a + b, 0) / summary.sla_keluhan.length - const aging_complaint_gangguan = - summary.aging_complaint_gangguan.reduce((a: number, b: number) => a + b, 0) / - summary.aging_complaint_gangguan.length - const aging_complaint_keluhan = - summary.aging_complaint_keluhan.reduce((a: number, b: number) => a + b, 0) / - summary.aging_complaint_keluhan.length - const avg_aging_complaint = - summary.avg_aging_complaint.reduce((a: number, b: number) => a + b, 0) / - summary.avg_aging_complaint.length - - formattedData.push([ - regional, - formatNumber(avg_durasi_recovery_gangguan), - formatNumber(sla_gangguan), - formatNumber(avg_durasi_recovery_keluhan), - formatNumber(sla_keluhan), - formatPercentage(aging_complaint_gangguan), - formatPercentage(aging_complaint_keluhan), - formatPercentage(avg_aging_complaint) - ]) - - total.avg_durasi_recovery_gangguan.push(avg_durasi_recovery_gangguan) - total.sla_gangguan.push(sla_gangguan) - total.avg_durasi_recovery_keluhan.push(avg_durasi_recovery_keluhan) - total.sla_keluhan.push(sla_keluhan) - total.aging_complaint_gangguan.push(aging_complaint_gangguan) - total.aging_complaint_keluhan.push(aging_complaint_keluhan) - total.avg_aging_complaint.push(avg_aging_complaint) - } + const avg_durasi_recovery_gangguan = + summary.avg_durasi_recovery_gangguan.reduce((a: number, b: number) => a + b, 0) / + summary.avg_durasi_recovery_gangguan.length + const sla_gangguan = + summary.sla_gangguan.reduce((a: number, b: number) => a + b, 0) / summary.sla_gangguan.length + const avg_durasi_recovery_keluhan = + summary.avg_durasi_recovery_keluhan.reduce((a: number, b: number) => a + b, 0) / + summary.avg_durasi_recovery_keluhan.length + const sla_keluhan = + summary.sla_keluhan.reduce((a: number, b: number) => a + b, 0) / summary.sla_keluhan.length + const aging_complaint_gangguan = + summary.aging_complaint_gangguan.reduce((a: number, b: number) => a + b, 0) / + summary.aging_complaint_gangguan.length + const aging_complaint_keluhan = + summary.aging_complaint_keluhan.reduce((a: number, b: number) => a + b, 0) / + summary.aging_complaint_keluhan.length + const avg_aging_complaint = + summary.avg_aging_complaint.reduce((a: number, b: number) => a + b, 0) / + summary.avg_aging_complaint.length formattedData.push([ - { content: 'RATA-RATA', styles: { fontStyle: 'bold' } }, - formatNumber( - total.avg_durasi_recovery_gangguan.reduce((a: number, b: number) => a + b, 0) / - total.avg_durasi_recovery_gangguan.length - ), - formatNumber( - total.sla_gangguan.reduce((a: number, b: number) => a + b, 0) / total.sla_gangguan.length - ), - formatNumber( - total.avg_durasi_recovery_keluhan.reduce((a: number, b: number) => a + b, 0) / - total.avg_durasi_recovery_keluhan.length - ), - formatNumber( - total.sla_keluhan.reduce((a: number, b: number) => a + b, 0) / total.sla_keluhan.length - ), - formatPercentage( - total.aging_complaint_gangguan.reduce((a: number, b: number) => a + b, 0) / - total.aging_complaint_gangguan.length - ), - formatPercentage( - total.aging_complaint_keluhan.reduce((a: number, b: number) => a + b, 0) / - total.aging_complaint_keluhan.length - ), - formatPercentage( - total.avg_aging_complaint.reduce((a: number, b: number) => a + b, 0) / - total.avg_aging_complaint.length - ) + regional, + formatNumber(avg_durasi_recovery_gangguan), + formatNumber(sla_gangguan), + formatNumber(avg_durasi_recovery_keluhan), + formatNumber(sla_keluhan), + formatPercentage(aging_complaint_gangguan), + formatPercentage(aging_complaint_keluhan), + formatPercentage(avg_aging_complaint) ]) - 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.avg_durasi_recovery_gangguan.push(item.avg_durasi_recovery_gangguan) - total.sla_gangguan.push(item.sla_gangguan) - total.avg_durasi_recovery_keluhan.push(item.avg_durasi_recovery_keluhan) - total.sla_keluhan.push(item.sla_keluhan) - total.aging_complaint_gangguan.push(item.aging_complaint_gangguan) - total.aging_complaint_keluhan.push(item.aging_complaint_keluhan) - total.avg_aging_complaint.push(item.avg_aging_complaint) - }) - - formattedData.push([{ content: parentName, colSpan: 8, styles: { fontStyle: 'bold' } }]) - - const result = [ - formatNumber( - total.avg_durasi_recovery_gangguan.reduce((a: number, b: number) => a + b, 0) / - total.avg_durasi_recovery_gangguan.length - ), - formatNumber( - total.sla_gangguan.reduce((a: number, b: number) => a + b, 0) / total.sla_gangguan.length - ), - formatNumber( - total.avg_durasi_recovery_keluhan.reduce((a: number, b: number) => a + b, 0) / - total.avg_durasi_recovery_keluhan.length - ), - formatNumber( - total.sla_keluhan.reduce((a: number, b: number) => a + b, 0) / total.sla_keluhan.length - ), - formatPercentage( - total.aging_complaint_gangguan.reduce((a: number, b: number) => a + b, 0) / - total.aging_complaint_gangguan.length - ), - formatPercentage( - total.aging_complaint_keluhan.reduce((a: number, b: number) => a + b, 0) / - total.aging_complaint_keluhan.length - ), - formatPercentage( - total.avg_aging_complaint.reduce((a: number, b: number) => a + b, 0) / - total.avg_aging_complaint.length - ) - ] - - formattedData.push([summaryName, ...result]) - formattedData.push([{ content: 'RATA-RATA', styles: { fontStyle: 'bold' } }, ...result]) - - return formattedData + total.avg_durasi_recovery_gangguan.push(avg_durasi_recovery_gangguan) + total.sla_gangguan.push(sla_gangguan) + total.avg_durasi_recovery_keluhan.push(avg_durasi_recovery_keluhan) + total.sla_keluhan.push(sla_keluhan) + total.aging_complaint_gangguan.push(aging_complaint_gangguan) + total.aging_complaint_keluhan.push(aging_complaint_keluhan) + total.avg_aging_complaint.push(avg_aging_complaint) } + + formattedData.push([ + { content: 'RATA-RATA', styles: { fontStyle: 'bold' } }, + formatNumber( + total.avg_durasi_recovery_gangguan.reduce((a: number, b: number) => a + b, 0) / + total.avg_durasi_recovery_gangguan.length + ), + formatNumber( + total.sla_gangguan.reduce((a: number, b: number) => a + b, 0) / total.sla_gangguan.length + ), + formatNumber( + total.avg_durasi_recovery_keluhan.reduce((a: number, b: number) => a + b, 0) / + total.avg_durasi_recovery_keluhan.length + ), + formatNumber( + total.sla_keluhan.reduce((a: number, b: number) => a + b, 0) / total.sla_keluhan.length + ), + formatPercentage( + total.aging_complaint_gangguan.reduce((a: number, b: number) => a + b, 0) / + total.aging_complaint_gangguan.length + ), + formatPercentage( + total.aging_complaint_keluhan.reduce((a: number, b: number) => a + b, 0) / + total.aging_complaint_keluhan.length + ), + formatPercentage( + total.avg_aging_complaint.reduce((a: number, b: number) => a + b, 0) / + total.avg_aging_complaint.length + ) + ]) + + return formattedData } const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => { diff --git a/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_EnergyNotSales.ts b/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_EnergyNotSales.ts index 7f52f7a..9ac072f 100644 --- a/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_EnergyNotSales.ts +++ b/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_EnergyNotSales.ts @@ -10,102 +10,74 @@ import { exportToWord } from './doc/MonalisaLB_EnergyNotSales_DOC' const reportName = '(Monalisa) Energy Not Sales (ENS)' 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) { - data.forEach((item: any) => { - const { nama_regional } = item + const reportMetaMapping: any = { + ulp: 'nama_ulp', + up3: 'nama_ulp', + uid: 'nama_up3', + regional: 'nama_uid', + default: 'nama_regional' + } - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } - } - - groupedData[nama_regional].data.push(item) - }) - - for (const regional in groupedData) { - const data = groupedData[regional].data - - data.forEach((item: any) => { - if (!groupedData[regional].summary) { - groupedData[regional].summary = { - terencana: 0, - tidak_terencana: 0, - bencana_alam: 0 - } - } - - groupedData[regional].summary.terencana += item.terencana - groupedData[regional].summary.tidak_terencana += item.tidak_terencana - groupedData[regional].summary.bencana_alam += item.bencana_alam - }) - } - - 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 = 'nama_regional' + 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 = { + terencana: 0, + tidak_terencana: 0, + bencana_alam: 0 + } + } + + groupedData[key].summary.terencana += item.terencana + groupedData[key].summary.tidak_terencana += item.tidak_terencana + groupedData[key].summary.bencana_alam += item.bencana_alam + }) + } + + 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) => { @@ -117,73 +89,38 @@ const formatData = (rawData: any, reportMeta: any) => { bencana_alam: 0 } - if (reportMeta.regional.id == 0) { - const data = groupingData(rawData, reportMeta) + const data = groupingData(rawData, reportMeta) + const title = getTitle(reportMeta) - const total: any = { - terencana: 0, - tidak_terencana: 0, - bencana_alam: 0 - } + formattedData.push([{ content: title, colSpan: 6, styles: { fontStyle: 'bold' } }]) - formattedData.push([{ content: 'NASIONAL', colSpan: 6, styles: { fontStyle: 'bold' } }]) - - for (const regional in data) { - const summary = data[regional].summary - - formattedData.push([ - regional, - formatNumber(summary.terencana), - formatNumber(summary.tidak_terencana), - formatNumber(summary.bencana_alam), - formatNumber(summary.terencana + summary.tidak_terencana + summary.bencana_alam), - formatNumber(summary.terencana + summary.tidak_terencana) - ]) - - total.terencana += summary.terencana - total.tidak_terencana += summary.tidak_terencana - total.bencana_alam += summary.bencana_alam - } + for (const key in data) { + const summary = data[key].summary formattedData.push([ - { content: 'TOTAL', styles: { fontStyle: 'bold' } }, - formatNumber(total.terencana), - formatNumber(total.tidak_terencana), - formatNumber(total.bencana_alam), - formatNumber(total.terencana + total.tidak_terencana + total.bencana_alam), - formatNumber(total.terencana + total.tidak_terencana) + key, + formatNumber(summary.terencana), + formatNumber(summary.tidak_terencana), + formatNumber(summary.bencana_alam), + formatNumber(summary.terencana + summary.tidak_terencana + summary.bencana_alam), + formatNumber(summary.terencana + summary.tidak_terencana) ]) - 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.terencana += item.terencana - total.tidak_terencana += item.tidak_terencana - total.bencana_alam += item.bencana_alam - }) - - formattedData.push([{ content: parentName, colSpan: 6, styles: { fontStyle: 'bold' } }]) - - const result = [ - formatNumber(total.terencana), - formatNumber(total.tidak_terencana), - formatNumber(total.bencana_alam), - formatNumber(total.terencana + total.tidak_terencana + total.bencana_alam), - formatNumber(total.terencana + total.tidak_terencana) - ] - - formattedData.push([summaryName, ...result]) - formattedData.push([{ content: 'TOTAL', styles: { fontStyle: 'bold' } }, ...result]) - - return formattedData + total.terencana += summary.terencana + total.tidak_terencana += summary.tidak_terencana + total.bencana_alam += summary.bencana_alam } + + formattedData.push([ + { content: 'TOTAL', styles: { fontStyle: 'bold' } }, + formatNumber(total.terencana), + formatNumber(total.tidak_terencana), + formatNumber(total.bencana_alam), + formatNumber(total.terencana + total.tidak_terencana + total.bencana_alam), + formatNumber(total.terencana + total.tidak_terencana) + ]) + + return formattedData } const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => { diff --git a/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_KADDalamPelaporan.ts b/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_KADDalamPelaporan.ts index cee2a48..d58ed2a 100644 --- a/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_KADDalamPelaporan.ts +++ b/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_KADDalamPelaporan.ts @@ -11,104 +11,76 @@ import { exportToWord } from './doc/MonalisaLB_KADDalamPelaporan_DOC' const reportName = '(Monalisa) Kepatuhan dan Akurasi Dalam Pelaporan' 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) { - data.forEach((item: any) => { - const { nama_regional } = item + const reportMetaMapping: any = { + ulp: 'nama_ulp', + up3: 'nama_ulp', + uid: 'nama_up3', + regional: 'nama_uid', + default: 'nama_regional' + } - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } - } - - groupedData[nama_regional].data.push(item) - }) - - for (const regional in groupedData) { - const data = groupedData[regional].data - - data.forEach((item: any) => { - if (!groupedData[regional].summary) { - groupedData[regional].summary = { - gangguan_berulang: 0, - gangguan_total: 0, - keluhan_berulang: 0, - keluhan_total: 0 - } - } - - groupedData[regional].summary.gangguan_berulang += item.gangguan_berulang - groupedData[regional].summary.gangguan_total += item.gangguan_total - groupedData[regional].summary.keluhan_berulang += item.keluhan_berulang - groupedData[regional].summary.keluhan_total += item.keluhan_total - }) - } - - 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 = 'nama_regional' + 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 = { + gangguan_berulang: 0, + gangguan_total: 0, + keluhan_berulang: 0, + keluhan_total: 0 + } + } + + groupedData[key].summary.gangguan_berulang += item.gangguan_berulang + groupedData[key].summary.gangguan_total += item.gangguan_total + groupedData[key].summary.keluhan_berulang += item.keluhan_berulang + groupedData[key].summary.keluhan_total += item.keluhan_total + }) + } + + 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) => { @@ -121,97 +93,57 @@ const formatData = (rawData: any, reportMeta: any) => { keluhan_total: 0 } - if (reportMeta.regional.id == 0) { - const data = groupingData(rawData, reportMeta) + const data = groupingData(rawData, reportMeta) + const title = getTitle(reportMeta) - formattedData.push([{ content: 'NASIONAL', colSpan: 6, styles: { fontStyle: 'bold' } }]) + formattedData.push([{ content: title, colSpan: 6, styles: { fontStyle: 'bold' } }]) - for (const regional in data) { - const summary = data[regional].summary + for (const regional in data) { + const summary = data[regional].summary - const komplain_pelanggan = - ((summary.gangguan_berulang / summary.gangguan_total + - summary.keluhan_berulang / summary.keluhan_total) / - 2) * - 100 - - formattedData.push([ - regional, - formatNumber(summary.gangguan_berulang), - formatNumber(summary.gangguan_total), - formatNumber(summary.keluhan_berulang), - formatNumber(summary.keluhan_total), - formatPercentage( - !komplain_pelanggan || !!isFinite(komplain_pelanggan) ? 0 : komplain_pelanggan - ) - ]) - - total.gangguan_berulang += summary.gangguan_berulang - total.gangguan_total += summary.gangguan_total - total.keluhan_berulang += summary.keluhan_berulang - total.keluhan_total += summary.keluhan_total - } - - const total_komplain_pelanggan = - ((total.gangguan_berulang / total.gangguan_total + - total.keluhan_berulang / total.keluhan_total) / + const komplain_pelanggan = + ((summary.gangguan_berulang / summary.gangguan_total + + summary.keluhan_berulang / summary.keluhan_total) / 2) * 100 formattedData.push([ - { content: 'TOTAL', styles: { fontStyle: 'bold' } }, - formatNumber(total.gangguan_berulang), - formatNumber(total.gangguan_total), - formatNumber(total.keluhan_berulang), - formatNumber(total.keluhan_total), + regional, + formatNumber(summary.gangguan_berulang), + formatNumber(summary.gangguan_total), + formatNumber(summary.keluhan_berulang), + formatNumber(summary.keluhan_total), formatPercentage( - !total_komplain_pelanggan || !!isFinite(total_komplain_pelanggan) - ? 0 - : total_komplain_pelanggan + !komplain_pelanggan || !!isFinite(komplain_pelanggan) ? 0 : komplain_pelanggan ) ]) - 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.gangguan_berulang += item.gangguan_berulang - total.gangguan_total += item.gangguan_total - total.keluhan_berulang += item.keluhan_berulang - total.keluhan_total += item.keluhan_total - }) - - formattedData.push([{ content: parentName, colSpan: 6, styles: { fontStyle: 'bold' } }]) - - const total_komplain_pelanggan = - ((total.gangguan_berulang / total.gangguan_total + - total.keluhan_berulang / total.keluhan_total) / - 2) * - 100 - - const result = [ - formatNumber(total.gangguan_berulang), - formatNumber(total.gangguan_total), - formatNumber(total.keluhan_berulang), - formatNumber(total.keluhan_total), - formatPercentage( - !total_komplain_pelanggan || !!isFinite(total_komplain_pelanggan) - ? 0 - : total_komplain_pelanggan - ) - ] - - formattedData.push([summaryName, ...result]) - formattedData.push([{ content: 'TOTAL', styles: { fontStyle: 'bold' } }, ...result]) - - return formattedData + total.gangguan_berulang += summary.gangguan_berulang + total.gangguan_total += summary.gangguan_total + total.keluhan_berulang += summary.keluhan_berulang + total.keluhan_total += summary.keluhan_total } + + const total_komplain_pelanggan = + ((total.gangguan_berulang / total.gangguan_total + + total.keluhan_berulang / total.keluhan_total) / + 2) * + 100 + + formattedData.push([ + { content: 'TOTAL', styles: { fontStyle: 'bold' } }, + formatNumber(total.gangguan_berulang), + formatNumber(total.gangguan_total), + formatNumber(total.keluhan_berulang), + formatNumber(total.keluhan_total), + formatPercentage( + !total_komplain_pelanggan || !!isFinite(total_komplain_pelanggan) + ? 0 + : total_komplain_pelanggan + ) + ]) + + return formattedData } const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => { diff --git a/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_PenurunanJumlahKomplain.ts b/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_PenurunanJumlahKomplain.ts index 7f4856e..5348521 100644 --- a/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_PenurunanJumlahKomplain.ts +++ b/src/report/Monalisa/Laporan/Bulanan/MonalisaLB_PenurunanJumlahKomplain.ts @@ -13,129 +13,101 @@ const reportName = '(Monalisa) Penurunan Jumlah Komplain' const fontSize = 5 const detailFontSize = 3 -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) { - data.forEach((item: any) => { - const { nama_regional } = item + const reportMetaMapping: any = { + ulp: 'nama_ulp', + up3: 'nama_ulp', + uid: 'nama_up3', + regional: 'nama_uid', + default: 'nama_regional' + } - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } - } - - groupedData[nama_regional].data.push(item) - }) - - for (const regional in groupedData) { - const data = groupedData[regional].data - - data.forEach((item: any) => { - if (!groupedData[regional].summary) { - groupedData[regional].summary = { - total_keluhan_tahun_sebelumnya: 0, - total_gangguan_tahun_sebelumnya: 0, - total_keluhan_informasi_tahun_sebelumnya: 0, - total_gangguan_informasi_tahun_sebelumnya: 0, - // total_informasi_tahun_sebelumnya - // total_tahun_sebelumnya - total_keluhan_tahun_ini: 0, - total_gangguan_tahun_ini: 0, - total_keluhan_informasi_tahun_ini: 0, - total_gangguan_informasi_tahun_ini: 0 - // total_informasi_tahun_ini - // total_tahun_ini - // delta_keluhan - // delta_gangguan - // delta_informasi - // persen_delta_keluhan - // persen_delta_gangguan - // persen_delta_informasi - // persen_delta_total - } - } - - groupedData[regional].summary.total_keluhan_tahun_sebelumnya += - item.total_keluhan_tahun_sebelumnya - groupedData[regional].summary.total_gangguan_tahun_sebelumnya += - item.total_gangguan_tahun_sebelumnya - groupedData[regional].summary.total_keluhan_informasi_tahun_sebelumnya += - item.total_keluhan_informasi_tahun_sebelumnya - groupedData[regional].summary.total_gangguan_informasi_tahun_sebelumnya += - item.total_gangguan_informasi_tahun_sebelumnya - groupedData[regional].summary.total_keluhan_tahun_ini += item.total_keluhan_tahun_ini - groupedData[regional].summary.total_gangguan_tahun_ini += item.total_gangguan_tahun_ini - groupedData[regional].summary.total_keluhan_informasi_tahun_ini += - item.total_keluhan_informasi_tahun_ini - groupedData[regional].summary.total_gangguan_informasi_tahun_ini += - item.total_gangguan_informasi_tahun_ini - }) - } - - 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 = 'nama_regional' + 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 regional in groupedData) { + const data = groupedData[regional].data + + data.forEach((item: any) => { + if (!groupedData[regional].summary) { + groupedData[regional].summary = { + total_keluhan_tahun_sebelumnya: 0, + total_gangguan_tahun_sebelumnya: 0, + total_keluhan_informasi_tahun_sebelumnya: 0, + total_gangguan_informasi_tahun_sebelumnya: 0, + // total_informasi_tahun_sebelumnya + // total_tahun_sebelumnya + total_keluhan_tahun_ini: 0, + total_gangguan_tahun_ini: 0, + total_keluhan_informasi_tahun_ini: 0, + total_gangguan_informasi_tahun_ini: 0 + // total_informasi_tahun_ini + // total_tahun_ini + // delta_keluhan + // delta_gangguan + // delta_informasi + // persen_delta_keluhan + // persen_delta_gangguan + // persen_delta_informasi + // persen_delta_total + } + } + + groupedData[regional].summary.total_keluhan_tahun_sebelumnya += + item.total_keluhan_tahun_sebelumnya + groupedData[regional].summary.total_gangguan_tahun_sebelumnya += + item.total_gangguan_tahun_sebelumnya + groupedData[regional].summary.total_keluhan_informasi_tahun_sebelumnya += + item.total_keluhan_informasi_tahun_sebelumnya + groupedData[regional].summary.total_gangguan_informasi_tahun_sebelumnya += + item.total_gangguan_informasi_tahun_sebelumnya + groupedData[regional].summary.total_keluhan_tahun_ini += item.total_keluhan_tahun_ini + groupedData[regional].summary.total_gangguan_tahun_ini += item.total_gangguan_tahun_ini + groupedData[regional].summary.total_keluhan_informasi_tahun_ini += + item.total_keluhan_informasi_tahun_ini + groupedData[regional].summary.total_gangguan_informasi_tahun_ini += + item.total_gangguan_informasi_tahun_ini + }) + } + + 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) => { @@ -163,112 +135,47 @@ const formatData = (rawData: any, reportMeta: any) => { // persen_delta_total } - if (reportMeta.regional.id == 0) { - const data = groupingData(rawData, reportMeta) + const data = groupingData(rawData, reportMeta) + const title = getTitle(reportMeta) - formattedData.push([{ content: 'NASIONAL', colSpan: 20, styles: { fontStyle: 'bold' } }]) + formattedData.push([{ content: title, colSpan: 20, styles: { fontStyle: 'bold' } }]) - let no = 1 - for (const regional in data) { - const summary = data[regional].summary - - const total_informasi_tahun_sebelumnya = - summary.total_keluhan_informasi_tahun_sebelumnya + - summary.total_gangguan_informasi_tahun_sebelumnya - const total_tahun_sebelumnya = - summary.total_keluhan_tahun_sebelumnya + - summary.total_gangguan_tahun_sebelumnya + - total_informasi_tahun_sebelumnya - const total_informasi_tahun_ini = - summary.total_keluhan_informasi_tahun_ini + summary.total_gangguan_informasi_tahun_ini - const total_tahun_ini = - summary.total_keluhan_tahun_ini + - summary.total_gangguan_tahun_ini + - total_informasi_tahun_ini - const delta_keluhan = summary.total_keluhan_tahun_sebelumnya - summary.total_keluhan_tahun_ini - const delta_gangguan = - summary.total_gangguan_tahun_sebelumnya - summary.total_gangguan_tahun_ini - const delta_informasi = total_informasi_tahun_sebelumnya - total_informasi_tahun_ini - const persen_delta_keluhan = 40 * (delta_keluhan / summary.total_keluhan_tahun_sebelumnya) - const persen_delta_gangguan = 40 * (delta_gangguan / summary.total_gangguan_tahun_sebelumnya) - const persen_delta_informasi = 20 * (delta_informasi / total_informasi_tahun_sebelumnya) - const persen_delta_total = - persen_delta_keluhan + persen_delta_gangguan + persen_delta_informasi - - formattedData.push([ - regional, - formatNumber(summary.total_keluhan_tahun_sebelumnya), - formatNumber(summary.total_gangguan_tahun_sebelumnya), - formatNumber(summary.total_keluhan_informasi_tahun_sebelumnya), - formatNumber(summary.total_gangguan_informasi_tahun_sebelumnya), - formatNumber(total_informasi_tahun_sebelumnya), - formatNumber(total_tahun_sebelumnya), - formatNumber(summary.total_keluhan_tahun_ini), - formatNumber(summary.total_gangguan_tahun_ini), - formatNumber(summary.total_keluhan_informasi_tahun_ini), - formatNumber(summary.total_gangguan_informasi_tahun_ini), - formatNumber(total_informasi_tahun_ini), - formatNumber(total_tahun_ini), - formatNumber(delta_keluhan), - formatNumber(delta_gangguan), - formatNumber(delta_informasi), - formatPercentage( - !persen_delta_keluhan || !!isFinite(persen_delta_keluhan) ? 0 : persen_delta_keluhan - ), - formatPercentage( - !persen_delta_gangguan || !!isFinite(persen_delta_gangguan) ? 0 : persen_delta_gangguan - ), - formatPercentage( - !persen_delta_informasi || !!isFinite(persen_delta_informasi) ? 0 : persen_delta_informasi - ), - formatPercentage( - !persen_delta_total || !!isFinite(persen_delta_total) ? 0 : persen_delta_total - ) - ]) - - total.total_keluhan_tahun_sebelumnya += summary.total_keluhan_tahun_sebelumnya - total.total_gangguan_tahun_sebelumnya += summary.total_gangguan_tahun_sebelumnya - total.total_keluhan_informasi_tahun_sebelumnya += - summary.total_keluhan_informasi_tahun_sebelumnya - total.total_gangguan_informasi_tahun_sebelumnya += - summary.total_gangguan_informasi_tahun_sebelumnya - total.total_keluhan_tahun_ini += summary.total_keluhan_tahun_ini - total.total_gangguan_tahun_ini += summary.total_gangguan_tahun_ini - total.total_keluhan_informasi_tahun_ini += summary.total_keluhan_informasi_tahun_ini - total.total_gangguan_informasi_tahun_ini += summary.total_gangguan_informasi_tahun_ini - } + let no = 1 + for (const regional in data) { + const summary = data[regional].summary const total_informasi_tahun_sebelumnya = - total.total_keluhan_informasi_tahun_sebelumnya + - total.total_gangguan_informasi_tahun_sebelumnya + summary.total_keluhan_informasi_tahun_sebelumnya + + summary.total_gangguan_informasi_tahun_sebelumnya const total_tahun_sebelumnya = - total.total_keluhan_tahun_sebelumnya + - total.total_gangguan_tahun_sebelumnya + + summary.total_keluhan_tahun_sebelumnya + + summary.total_gangguan_tahun_sebelumnya + total_informasi_tahun_sebelumnya const total_informasi_tahun_ini = - total.total_keluhan_informasi_tahun_ini + total.total_gangguan_informasi_tahun_ini + summary.total_keluhan_informasi_tahun_ini + summary.total_gangguan_informasi_tahun_ini const total_tahun_ini = - total.total_keluhan_tahun_ini + total.total_gangguan_tahun_ini + total_informasi_tahun_ini - const delta_keluhan = total.total_keluhan_tahun_sebelumnya - total.total_keluhan_tahun_ini - const delta_gangguan = total.total_gangguan_tahun_sebelumnya - total.total_gangguan_tahun_ini + summary.total_keluhan_tahun_ini + summary.total_gangguan_tahun_ini + total_informasi_tahun_ini + const delta_keluhan = summary.total_keluhan_tahun_sebelumnya - summary.total_keluhan_tahun_ini + const delta_gangguan = + summary.total_gangguan_tahun_sebelumnya - summary.total_gangguan_tahun_ini const delta_informasi = total_informasi_tahun_sebelumnya - total_informasi_tahun_ini - const persen_delta_keluhan = 40 * (delta_keluhan / total.total_keluhan_tahun_sebelumnya) - const persen_delta_gangguan = 40 * (delta_gangguan / total.total_gangguan_tahun_sebelumnya) + const persen_delta_keluhan = 40 * (delta_keluhan / summary.total_keluhan_tahun_sebelumnya) + const persen_delta_gangguan = 40 * (delta_gangguan / summary.total_gangguan_tahun_sebelumnya) const persen_delta_informasi = 20 * (delta_informasi / total_informasi_tahun_sebelumnya) const persen_delta_total = persen_delta_keluhan + persen_delta_gangguan + persen_delta_informasi formattedData.push([ - { content: 'TOTAL', styles: { fontStyle: 'bold' } }, - formatNumber(total.total_keluhan_tahun_sebelumnya), - formatNumber(total.total_gangguan_tahun_sebelumnya), - formatNumber(total.total_keluhan_informasi_tahun_sebelumnya), - formatNumber(total.total_gangguan_informasi_tahun_sebelumnya), + regional, + formatNumber(summary.total_keluhan_tahun_sebelumnya), + formatNumber(summary.total_gangguan_tahun_sebelumnya), + formatNumber(summary.total_keluhan_informasi_tahun_sebelumnya), + formatNumber(summary.total_gangguan_informasi_tahun_sebelumnya), formatNumber(total_informasi_tahun_sebelumnya), formatNumber(total_tahun_sebelumnya), - formatNumber(total.total_keluhan_tahun_ini), - formatNumber(total.total_gangguan_tahun_ini), - formatNumber(total.total_keluhan_informasi_tahun_ini), - formatNumber(total.total_gangguan_informasi_tahun_ini), + formatNumber(summary.total_keluhan_tahun_ini), + formatNumber(summary.total_gangguan_tahun_ini), + formatNumber(summary.total_keluhan_informasi_tahun_ini), + formatNumber(summary.total_gangguan_informasi_tahun_ini), formatNumber(total_informasi_tahun_ini), formatNumber(total_tahun_ini), formatNumber(delta_keluhan), @@ -288,84 +195,66 @@ const formatData = (rawData: any, reportMeta: any) => { ) ]) - 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.total_keluhan_tahun_sebelumnya += item.total_keluhan_tahun_sebelumnya - total.total_gangguan_tahun_sebelumnya += item.total_gangguan_tahun_sebelumnya - total.total_keluhan_informasi_tahun_sebelumnya += - item.total_keluhan_informasi_tahun_sebelumnya - total.total_gangguan_informasi_tahun_sebelumnya += - item.total_gangguan_informasi_tahun_sebelumnya - total.total_keluhan_tahun_ini += item.total_keluhan_tahun_ini - total.total_gangguan_tahun_ini += item.total_gangguan_tahun_ini - total.total_keluhan_informasi_tahun_ini += item.total_keluhan_informasi_tahun_ini - total.total_gangguan_informasi_tahun_ini += item.total_gangguan_informasi_tahun_ini - }) - - formattedData.push([{ content: parentName, colSpan: 20, styles: { fontStyle: 'bold' } }]) - - const total_informasi_tahun_sebelumnya = - total.total_keluhan_informasi_tahun_sebelumnya + - total.total_gangguan_informasi_tahun_sebelumnya - const total_tahun_sebelumnya = - total.total_keluhan_tahun_sebelumnya + - total.total_gangguan_tahun_sebelumnya + - total_informasi_tahun_sebelumnya - const total_informasi_tahun_ini = - total.total_keluhan_informasi_tahun_ini + total.total_gangguan_informasi_tahun_ini - const total_tahun_ini = - total.total_keluhan_tahun_ini + total.total_gangguan_tahun_ini + total_informasi_tahun_ini - const delta_keluhan = total.total_keluhan_tahun_sebelumnya - total.total_keluhan_tahun_ini - const delta_gangguan = total.total_gangguan_tahun_sebelumnya - total.total_gangguan_tahun_ini - const delta_informasi = total_informasi_tahun_sebelumnya - total_informasi_tahun_ini - const persen_delta_keluhan = 40 * (delta_keluhan / total.total_keluhan_tahun_sebelumnya) - const persen_delta_gangguan = 40 * (delta_gangguan / total.total_gangguan_tahun_sebelumnya) - const persen_delta_informasi = 20 * (delta_informasi / total_informasi_tahun_sebelumnya) - const persen_delta_total = persen_delta_keluhan + persen_delta_gangguan + persen_delta_informasi - - const result = [ - formatNumber(total.total_keluhan_tahun_sebelumnya), - formatNumber(total.total_gangguan_tahun_sebelumnya), - formatNumber(total.total_keluhan_informasi_tahun_sebelumnya), - formatNumber(total.total_gangguan_informasi_tahun_sebelumnya), - formatNumber(total_informasi_tahun_sebelumnya), - formatNumber(total_tahun_sebelumnya), - formatNumber(total.total_keluhan_tahun_ini), - formatNumber(total.total_gangguan_tahun_ini), - formatNumber(total.total_keluhan_informasi_tahun_ini), - formatNumber(total.total_gangguan_informasi_tahun_ini), - formatNumber(total_informasi_tahun_ini), - formatNumber(total_tahun_ini), - formatNumber(delta_keluhan), - formatNumber(delta_gangguan), - formatNumber(delta_informasi), - formatPercentage( - !persen_delta_keluhan || !!isFinite(persen_delta_keluhan) ? 0 : persen_delta_keluhan - ), - formatPercentage( - !persen_delta_gangguan || !!isFinite(persen_delta_gangguan) ? 0 : persen_delta_gangguan - ), - formatPercentage( - !persen_delta_informasi || !!isFinite(persen_delta_informasi) ? 0 : persen_delta_informasi - ), - formatPercentage( - !persen_delta_total || !!isFinite(persen_delta_total) ? 0 : persen_delta_total - ) - ] - - formattedData.push([summaryName, ...result]) - formattedData.push([{ content: 'TOTAL', styles: { fontStyle: 'bold' } }, ...result]) - - return formattedData + total.total_keluhan_tahun_sebelumnya += summary.total_keluhan_tahun_sebelumnya + total.total_gangguan_tahun_sebelumnya += summary.total_gangguan_tahun_sebelumnya + total.total_keluhan_informasi_tahun_sebelumnya += + summary.total_keluhan_informasi_tahun_sebelumnya + total.total_gangguan_informasi_tahun_sebelumnya += + summary.total_gangguan_informasi_tahun_sebelumnya + total.total_keluhan_tahun_ini += summary.total_keluhan_tahun_ini + total.total_gangguan_tahun_ini += summary.total_gangguan_tahun_ini + total.total_keluhan_informasi_tahun_ini += summary.total_keluhan_informasi_tahun_ini + total.total_gangguan_informasi_tahun_ini += summary.total_gangguan_informasi_tahun_ini } + + const total_informasi_tahun_sebelumnya = + total.total_keluhan_informasi_tahun_sebelumnya + total.total_gangguan_informasi_tahun_sebelumnya + const total_tahun_sebelumnya = + total.total_keluhan_tahun_sebelumnya + + total.total_gangguan_tahun_sebelumnya + + total_informasi_tahun_sebelumnya + const total_informasi_tahun_ini = + total.total_keluhan_informasi_tahun_ini + total.total_gangguan_informasi_tahun_ini + const total_tahun_ini = + total.total_keluhan_tahun_ini + total.total_gangguan_tahun_ini + total_informasi_tahun_ini + const delta_keluhan = total.total_keluhan_tahun_sebelumnya - total.total_keluhan_tahun_ini + const delta_gangguan = total.total_gangguan_tahun_sebelumnya - total.total_gangguan_tahun_ini + const delta_informasi = total_informasi_tahun_sebelumnya - total_informasi_tahun_ini + const persen_delta_keluhan = 40 * (delta_keluhan / total.total_keluhan_tahun_sebelumnya) + const persen_delta_gangguan = 40 * (delta_gangguan / total.total_gangguan_tahun_sebelumnya) + const persen_delta_informasi = 20 * (delta_informasi / total_informasi_tahun_sebelumnya) + const persen_delta_total = persen_delta_keluhan + persen_delta_gangguan + persen_delta_informasi + + formattedData.push([ + { content: 'TOTAL', styles: { fontStyle: 'bold' } }, + formatNumber(total.total_keluhan_tahun_sebelumnya), + formatNumber(total.total_gangguan_tahun_sebelumnya), + formatNumber(total.total_keluhan_informasi_tahun_sebelumnya), + formatNumber(total.total_gangguan_informasi_tahun_sebelumnya), + formatNumber(total_informasi_tahun_sebelumnya), + formatNumber(total_tahun_sebelumnya), + formatNumber(total.total_keluhan_tahun_ini), + formatNumber(total.total_gangguan_tahun_ini), + formatNumber(total.total_keluhan_informasi_tahun_ini), + formatNumber(total.total_gangguan_informasi_tahun_ini), + formatNumber(total_informasi_tahun_ini), + formatNumber(total_tahun_ini), + formatNumber(delta_keluhan), + formatNumber(delta_gangguan), + formatNumber(delta_informasi), + formatPercentage( + !persen_delta_keluhan || !!isFinite(persen_delta_keluhan) ? 0 : persen_delta_keluhan + ), + formatPercentage( + !persen_delta_gangguan || !!isFinite(persen_delta_gangguan) ? 0 : persen_delta_gangguan + ), + formatPercentage( + !persen_delta_informasi || !!isFinite(persen_delta_informasi) ? 0 : persen_delta_informasi + ), + formatPercentage(!persen_delta_total || !!isFinite(persen_delta_total) ? 0 : persen_delta_total) + ]) + + return formattedData } const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => { diff --git a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_AgingComplaint.ts b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_AgingComplaint.ts index 7a6267e..6eeddd0 100644 --- a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_AgingComplaint.ts +++ b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_AgingComplaint.ts @@ -11,114 +11,86 @@ import { exportToWord } from './doc/MonalisaLK_AgingComplaint_DOC' const reportName = 'Aging Complaint' 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) { - data.forEach((item: any) => { - const { nama_regional } = item + const reportMetaMapping: any = { + ulp: 'nama_ulp', + up3: 'nama_ulp', + uid: 'nama_up3', + regional: 'nama_uid', + default: 'nama_regional' + } - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } - } - - groupedData[nama_regional].data.push(item) - }) - - for (const regional in groupedData) { - const data = groupedData[regional].data - - data.forEach((item: any) => { - if (!groupedData[regional].summary) { - groupedData[regional].summary = { - avg_durasi_recovery_gangguan: [], - sla_gangguan: [], - avg_durasi_recovery_keluhan: [], - sla_keluhan: [], - aging_complaint_gangguan: [], - aging_complaint_keluhan: [], - avg_aging_complaint: [] - } - } - - groupedData[regional].summary.avg_durasi_recovery_gangguan.push( - item.avg_durasi_recovery_gangguan - ) - groupedData[regional].summary.sla_gangguan.push(item.sla_gangguan) - groupedData[regional].summary.avg_durasi_recovery_keluhan.push( - item.avg_durasi_recovery_keluhan - ) - groupedData[regional].summary.sla_keluhan.push(item.sla_keluhan) - groupedData[regional].summary.aging_complaint_gangguan.push(item.aging_complaint_gangguan) - groupedData[regional].summary.aging_complaint_keluhan.push(item.aging_complaint_keluhan) - groupedData[regional].summary.avg_aging_complaint.push(item.avg_aging_complaint) - }) - } - - 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 = 'nama_regional' + 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 regional in groupedData) { + const data = groupedData[regional].data + + data.forEach((item: any) => { + if (!groupedData[regional].summary) { + groupedData[regional].summary = { + avg_durasi_recovery_gangguan: [], + sla_gangguan: [], + avg_durasi_recovery_keluhan: [], + sla_keluhan: [], + aging_complaint_gangguan: [], + aging_complaint_keluhan: [], + avg_aging_complaint: [] + } + } + + groupedData[regional].summary.avg_durasi_recovery_gangguan.push( + item.avg_durasi_recovery_gangguan + ) + groupedData[regional].summary.sla_gangguan.push(item.sla_gangguan) + groupedData[regional].summary.avg_durasi_recovery_keluhan.push( + item.avg_durasi_recovery_keluhan + ) + groupedData[regional].summary.sla_keluhan.push(item.sla_keluhan) + groupedData[regional].summary.aging_complaint_gangguan.push(item.aging_complaint_gangguan) + groupedData[regional].summary.aging_complaint_keluhan.push(item.aging_complaint_keluhan) + groupedData[regional].summary.avg_aging_complaint.push(item.avg_aging_complaint) + }) + } + + 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) => { @@ -134,141 +106,85 @@ const formatData = (rawData: any, reportMeta: any) => { avg_aging_complaint: [] } - if (reportMeta.regional.id == 0) { - const data = groupingData(rawData, reportMeta) - const formattedData: any = [] + const data = groupingData(rawData, reportMeta) + const title = getTitle(reportMeta) - formattedData.push([{ content: 'NASIONAL', colSpan: 8, styles: { fontStyle: 'bold' } }]) + formattedData.push([{ content: title, colSpan: 8, styles: { fontStyle: 'bold' } }]) - for (const regional in data) { - const summary = data[regional].summary + for (const regional in data) { + const summary = data[regional].summary - const avg_durasi_recovery_gangguan = - summary.avg_durasi_recovery_gangguan.reduce((a: number, b: number) => a + b, 0) / - summary.avg_durasi_recovery_gangguan.length - const sla_gangguan = - summary.sla_gangguan.reduce((a: number, b: number) => a + b, 0) / - summary.sla_gangguan.length - const avg_durasi_recovery_keluhan = - summary.avg_durasi_recovery_keluhan.reduce((a: number, b: number) => a + b, 0) / - summary.avg_durasi_recovery_keluhan.length - const sla_keluhan = - summary.sla_keluhan.reduce((a: number, b: number) => a + b, 0) / summary.sla_keluhan.length - const aging_complaint_gangguan = - summary.aging_complaint_gangguan.reduce((a: number, b: number) => a + b, 0) / - summary.aging_complaint_gangguan.length - const aging_complaint_keluhan = - summary.aging_complaint_keluhan.reduce((a: number, b: number) => a + b, 0) / - summary.aging_complaint_keluhan.length - const avg_aging_complaint = - summary.avg_aging_complaint.reduce((a: number, b: number) => a + b, 0) / - summary.avg_aging_complaint.length - - formattedData.push([ - regional, - formatNumber(avg_durasi_recovery_gangguan), - formatNumber(sla_gangguan), - formatNumber(avg_durasi_recovery_keluhan), - formatNumber(sla_keluhan), - formatPercentage(aging_complaint_gangguan), - formatPercentage(aging_complaint_keluhan), - formatPercentage(avg_aging_complaint) - ]) - - total.avg_durasi_recovery_gangguan.push(avg_durasi_recovery_gangguan) - total.sla_gangguan.push(sla_gangguan) - total.avg_durasi_recovery_keluhan.push(avg_durasi_recovery_keluhan) - total.sla_keluhan.push(sla_keluhan) - total.aging_complaint_gangguan.push(aging_complaint_gangguan) - total.aging_complaint_keluhan.push(aging_complaint_keluhan) - total.avg_aging_complaint.push(avg_aging_complaint) - } + const avg_durasi_recovery_gangguan = + summary.avg_durasi_recovery_gangguan.reduce((a: number, b: number) => a + b, 0) / + summary.avg_durasi_recovery_gangguan.length + const sla_gangguan = + summary.sla_gangguan.reduce((a: number, b: number) => a + b, 0) / summary.sla_gangguan.length + const avg_durasi_recovery_keluhan = + summary.avg_durasi_recovery_keluhan.reduce((a: number, b: number) => a + b, 0) / + summary.avg_durasi_recovery_keluhan.length + const sla_keluhan = + summary.sla_keluhan.reduce((a: number, b: number) => a + b, 0) / summary.sla_keluhan.length + const aging_complaint_gangguan = + summary.aging_complaint_gangguan.reduce((a: number, b: number) => a + b, 0) / + summary.aging_complaint_gangguan.length + const aging_complaint_keluhan = + summary.aging_complaint_keluhan.reduce((a: number, b: number) => a + b, 0) / + summary.aging_complaint_keluhan.length + const avg_aging_complaint = + summary.avg_aging_complaint.reduce((a: number, b: number) => a + b, 0) / + summary.avg_aging_complaint.length formattedData.push([ - { content: 'RATA-RATA', styles: { fontStyle: 'bold' } }, - formatNumber( - total.avg_durasi_recovery_gangguan.reduce((a: number, b: number) => a + b, 0) / - total.avg_durasi_recovery_gangguan.length - ), - formatNumber( - total.sla_gangguan.reduce((a: number, b: number) => a + b, 0) / total.sla_gangguan.length - ), - formatNumber( - total.avg_durasi_recovery_keluhan.reduce((a: number, b: number) => a + b, 0) / - total.avg_durasi_recovery_keluhan.length - ), - formatNumber( - total.sla_keluhan.reduce((a: number, b: number) => a + b, 0) / total.sla_keluhan.length - ), - formatPercentage( - total.aging_complaint_gangguan.reduce((a: number, b: number) => a + b, 0) / - total.aging_complaint_gangguan.length - ), - formatPercentage( - total.aging_complaint_keluhan.reduce((a: number, b: number) => a + b, 0) / - total.aging_complaint_keluhan.length - ), - formatPercentage( - total.avg_aging_complaint.reduce((a: number, b: number) => a + b, 0) / - total.avg_aging_complaint.length - ) + regional, + formatNumber(avg_durasi_recovery_gangguan), + formatNumber(sla_gangguan), + formatNumber(avg_durasi_recovery_keluhan), + formatNumber(sla_keluhan), + formatPercentage(aging_complaint_gangguan), + formatPercentage(aging_complaint_keluhan), + formatPercentage(avg_aging_complaint) ]) - 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.avg_durasi_recovery_gangguan.push(item.avg_durasi_recovery_gangguan) - total.sla_gangguan.push(item.sla_gangguan) - total.avg_durasi_recovery_keluhan.push(item.avg_durasi_recovery_keluhan) - total.sla_keluhan.push(item.sla_keluhan) - total.aging_complaint_gangguan.push(item.aging_complaint_gangguan) - total.aging_complaint_keluhan.push(item.aging_complaint_keluhan) - total.avg_aging_complaint.push(item.avg_aging_complaint) - }) - - formattedData.push([{ content: parentName, colSpan: 8, styles: { fontStyle: 'bold' } }]) - - const result = [ - formatNumber( - total.avg_durasi_recovery_gangguan.reduce((a: number, b: number) => a + b, 0) / - total.avg_durasi_recovery_gangguan.length - ), - formatNumber( - total.sla_gangguan.reduce((a: number, b: number) => a + b, 0) / total.sla_gangguan.length - ), - formatNumber( - total.avg_durasi_recovery_keluhan.reduce((a: number, b: number) => a + b, 0) / - total.avg_durasi_recovery_keluhan.length - ), - formatNumber( - total.sla_keluhan.reduce((a: number, b: number) => a + b, 0) / total.sla_keluhan.length - ), - formatPercentage( - total.aging_complaint_gangguan.reduce((a: number, b: number) => a + b, 0) / - total.aging_complaint_gangguan.length - ), - formatPercentage( - total.aging_complaint_keluhan.reduce((a: number, b: number) => a + b, 0) / - total.aging_complaint_keluhan.length - ), - formatPercentage( - total.avg_aging_complaint.reduce((a: number, b: number) => a + b, 0) / - total.avg_aging_complaint.length - ) - ] - - formattedData.push([summaryName, ...result]) - formattedData.push([{ content: 'RATA-RATA', styles: { fontStyle: 'bold' } }, ...result]) - - return formattedData + total.avg_durasi_recovery_gangguan.push(avg_durasi_recovery_gangguan) + total.sla_gangguan.push(sla_gangguan) + total.avg_durasi_recovery_keluhan.push(avg_durasi_recovery_keluhan) + total.sla_keluhan.push(sla_keluhan) + total.aging_complaint_gangguan.push(aging_complaint_gangguan) + total.aging_complaint_keluhan.push(aging_complaint_keluhan) + total.avg_aging_complaint.push(avg_aging_complaint) } + + formattedData.push([ + { content: 'RATA-RATA', styles: { fontStyle: 'bold' } }, + formatNumber( + total.avg_durasi_recovery_gangguan.reduce((a: number, b: number) => a + b, 0) / + total.avg_durasi_recovery_gangguan.length + ), + formatNumber( + total.sla_gangguan.reduce((a: number, b: number) => a + b, 0) / total.sla_gangguan.length + ), + formatNumber( + total.avg_durasi_recovery_keluhan.reduce((a: number, b: number) => a + b, 0) / + total.avg_durasi_recovery_keluhan.length + ), + formatNumber( + total.sla_keluhan.reduce((a: number, b: number) => a + b, 0) / total.sla_keluhan.length + ), + formatPercentage( + total.aging_complaint_gangguan.reduce((a: number, b: number) => a + b, 0) / + total.aging_complaint_gangguan.length + ), + formatPercentage( + total.aging_complaint_keluhan.reduce((a: number, b: number) => a + b, 0) / + total.aging_complaint_keluhan.length + ), + formatPercentage( + total.avg_aging_complaint.reduce((a: number, b: number) => a + b, 0) / + total.avg_aging_complaint.length + ) + ]) + + return formattedData } const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => { diff --git a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_EnergyNotSales.ts b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_EnergyNotSales.ts index 56d0e6f..3729aac 100644 --- a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_EnergyNotSales.ts +++ b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_EnergyNotSales.ts @@ -10,102 +10,74 @@ import { exportToWord } from './doc/MonalisaLK_EnergyNotSales_DOC' const reportName = 'Energy Not Sales (ENS)' 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) { - data.forEach((item: any) => { - const { nama_regional } = item + const reportMetaMapping: any = { + ulp: 'nama_ulp', + up3: 'nama_ulp', + uid: 'nama_up3', + regional: 'nama_uid', + default: 'nama_regional' + } - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } - } - - groupedData[nama_regional].data.push(item) - }) - - for (const regional in groupedData) { - const data = groupedData[regional].data - - data.forEach((item: any) => { - if (!groupedData[regional].summary) { - groupedData[regional].summary = { - terencana: 0, - tidak_terencana: 0, - bencana_alam: 0 - } - } - - groupedData[regional].summary.terencana += item.terencana - groupedData[regional].summary.tidak_terencana += item.tidak_terencana - groupedData[regional].summary.bencana_alam += item.bencana_alam - }) - } - - 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 = 'nama_regional' + 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 = { + terencana: 0, + tidak_terencana: 0, + bencana_alam: 0 + } + } + + groupedData[key].summary.terencana += item.terencana + groupedData[key].summary.tidak_terencana += item.tidak_terencana + groupedData[key].summary.bencana_alam += item.bencana_alam + }) + } + + 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) => { @@ -117,67 +89,38 @@ const formatData = (rawData: any, reportMeta: any) => { bencana_alam: 0 } - if (reportMeta.regional.id == 0) { - const data = groupingData(rawData, reportMeta) + const data = groupingData(rawData, reportMeta) + const title = getTitle(reportMeta) - formattedData.push([{ content: 'NASIONAL', colSpan: 6, styles: { fontStyle: 'bold' } }]) + formattedData.push([{ content: title, colSpan: 6, styles: { fontStyle: 'bold' } }]) - for (const regional in data) { - const summary = data[regional].summary - - formattedData.push([ - regional, - formatNumber(summary.terencana), - formatNumber(summary.tidak_terencana), - formatNumber(summary.bencana_alam), - formatNumber(summary.terencana + summary.tidak_terencana + summary.bencana_alam), - formatNumber(summary.terencana + summary.tidak_terencana) - ]) - - total.terencana += summary.terencana - total.tidak_terencana += summary.tidak_terencana - total.bencana_alam += summary.bencana_alam - } + for (const key in data) { + const summary = data[key].summary formattedData.push([ - { content: 'TOTAL', styles: { fontStyle: 'bold' } }, - formatNumber(total.terencana), - formatNumber(total.tidak_terencana), - formatNumber(total.bencana_alam), - formatNumber(total.terencana + total.tidak_terencana + total.bencana_alam), - formatNumber(total.terencana + total.tidak_terencana) + key, + formatNumber(summary.terencana), + formatNumber(summary.tidak_terencana), + formatNumber(summary.bencana_alam), + formatNumber(summary.terencana + summary.tidak_terencana + summary.bencana_alam), + formatNumber(summary.terencana + summary.tidak_terencana) ]) - 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.terencana += item.terencana - total.tidak_terencana += item.tidak_terencana - total.bencana_alam += item.bencana_alam - }) - - formattedData.push([{ content: parentName, colSpan: 6, styles: { fontStyle: 'bold' } }]) - - const result = [ - formatNumber(total.terencana), - formatNumber(total.tidak_terencana), - formatNumber(total.bencana_alam), - formatNumber(total.terencana + total.tidak_terencana + total.bencana_alam), - formatNumber(total.terencana + total.tidak_terencana) - ] - - formattedData.push([summaryName, ...result]) - formattedData.push([{ content: 'TOTAL', styles: { fontStyle: 'bold' } }, ...result]) - - return formattedData + total.terencana += summary.terencana + total.tidak_terencana += summary.tidak_terencana + total.bencana_alam += summary.bencana_alam } + + formattedData.push([ + { content: 'TOTAL', styles: { fontStyle: 'bold' } }, + formatNumber(total.terencana), + formatNumber(total.tidak_terencana), + formatNumber(total.bencana_alam), + formatNumber(total.terencana + total.tidak_terencana + total.bencana_alam), + formatNumber(total.terencana + total.tidak_terencana) + ]) + + return formattedData } const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => { diff --git a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_KDADPelaporan.ts b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_KDADPelaporan.ts index 0e1a9a4..c6c3325 100644 --- a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_KDADPelaporan.ts +++ b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_KDADPelaporan.ts @@ -11,104 +11,76 @@ import { exportToWord } from './doc/MonalisaLK_KDADPelaporan_DOC' const reportName = 'Kepatuhan dan Akurasi Dalam Pelaporan' 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) { - data.forEach((item: any) => { - const { nama_regional } = item + const reportMetaMapping: any = { + ulp: 'nama_ulp', + up3: 'nama_ulp', + uid: 'nama_up3', + regional: 'nama_uid', + default: 'nama_regional' + } - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } - } - - groupedData[nama_regional].data.push(item) - }) - - for (const regional in groupedData) { - const data = groupedData[regional].data - - data.forEach((item: any) => { - if (!groupedData[regional].summary) { - groupedData[regional].summary = { - gangguan_berulang: 0, - gangguan_total: 0, - keluhan_berulang: 0, - keluhan_total: 0 - } - } - - groupedData[regional].summary.gangguan_berulang += item.gangguan_berulang - groupedData[regional].summary.gangguan_total += item.gangguan_total - groupedData[regional].summary.keluhan_berulang += item.keluhan_berulang - groupedData[regional].summary.keluhan_total += item.keluhan_total - }) - } - - 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 = 'nama_regional' + 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 regional in groupedData) { + const data = groupedData[regional].data + + data.forEach((item: any) => { + if (!groupedData[regional].summary) { + groupedData[regional].summary = { + gangguan_berulang: 0, + gangguan_total: 0, + keluhan_berulang: 0, + keluhan_total: 0 + } + } + + groupedData[regional].summary.gangguan_berulang += item.gangguan_berulang + groupedData[regional].summary.gangguan_total += item.gangguan_total + groupedData[regional].summary.keluhan_berulang += item.keluhan_berulang + groupedData[regional].summary.keluhan_total += item.keluhan_total + }) + } + + 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) => { @@ -121,97 +93,57 @@ const formatData = (rawData: any, reportMeta: any) => { keluhan_total: 0 } - if (reportMeta.regional.id == 0) { - const data = groupingData(rawData, reportMeta) + const data = groupingData(rawData, reportMeta) + const title = getTitle(reportMeta) - formattedData.push([{ content: 'NASIONAL', colSpan: 6, styles: { fontStyle: 'bold' } }]) + formattedData.push([{ content: title, colSpan: 6, styles: { fontStyle: 'bold' } }]) - for (const regional in data) { - const summary = data[regional].summary + for (const regional in data) { + const summary = data[regional].summary - const komplain_pelanggan = - ((summary.gangguan_berulang / summary.gangguan_total + - summary.keluhan_berulang / summary.keluhan_total) / - 2) * - 100 - - formattedData.push([ - regional, - formatNumber(summary.gangguan_berulang), - formatNumber(summary.gangguan_total), - formatNumber(summary.keluhan_berulang), - formatNumber(summary.keluhan_total), - formatPercentage( - !komplain_pelanggan || !!isFinite(komplain_pelanggan) ? 0 : komplain_pelanggan - ) - ]) - - total.gangguan_berulang += summary.gangguan_berulang - total.gangguan_total += summary.gangguan_total - total.keluhan_berulang += summary.keluhan_berulang - total.keluhan_total += summary.keluhan_total - } - - const total_komplain_pelanggan = - ((total.gangguan_berulang / total.gangguan_total + - total.keluhan_berulang / total.keluhan_total) / + const komplain_pelanggan = + ((summary.gangguan_berulang / summary.gangguan_total + + summary.keluhan_berulang / summary.keluhan_total) / 2) * 100 formattedData.push([ - { content: 'TOTAL', styles: { fontStyle: 'bold' } }, - formatNumber(total.gangguan_berulang), - formatNumber(total.gangguan_total), - formatNumber(total.keluhan_berulang), - formatNumber(total.keluhan_total), + regional, + formatNumber(summary.gangguan_berulang), + formatNumber(summary.gangguan_total), + formatNumber(summary.keluhan_berulang), + formatNumber(summary.keluhan_total), formatPercentage( - !total_komplain_pelanggan || !!isFinite(total_komplain_pelanggan) - ? 0 - : total_komplain_pelanggan + !komplain_pelanggan || !!isFinite(komplain_pelanggan) ? 0 : komplain_pelanggan ) ]) - 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.gangguan_berulang += item.gangguan_berulang - total.gangguan_total += item.gangguan_total - total.keluhan_berulang += item.keluhan_berulang - total.keluhan_total += item.keluhan_total - }) - - const total_komplain_pelanggan = - ((total.gangguan_berulang / total.gangguan_total + - total.keluhan_berulang / total.keluhan_total) / - 2) * - 100 - - formattedData.push([{ content: parentName, colSpan: 6, styles: { fontStyle: 'bold' } }]) - - const result = [ - formatNumber(total.gangguan_berulang), - formatNumber(total.gangguan_total), - formatNumber(total.keluhan_berulang), - formatNumber(total.keluhan_total), - formatPercentage( - !total_komplain_pelanggan || !!isFinite(total_komplain_pelanggan) - ? 0 - : total_komplain_pelanggan - ) - ] - - formattedData.push([summaryName, ...result]) - formattedData.push([{ content: 'TOTAL', styles: { fontStyle: 'bold' } }, ...result]) - - return formattedData + total.gangguan_berulang += summary.gangguan_berulang + total.gangguan_total += summary.gangguan_total + total.keluhan_berulang += summary.keluhan_berulang + total.keluhan_total += summary.keluhan_total } + + const total_komplain_pelanggan = + ((total.gangguan_berulang / total.gangguan_total + + total.keluhan_berulang / total.keluhan_total) / + 2) * + 100 + + formattedData.push([ + { content: 'TOTAL', styles: { fontStyle: 'bold' } }, + formatNumber(total.gangguan_berulang), + formatNumber(total.gangguan_total), + formatNumber(total.keluhan_berulang), + formatNumber(total.keluhan_total), + formatPercentage( + !total_komplain_pelanggan || !!isFinite(total_komplain_pelanggan) + ? 0 + : total_komplain_pelanggan + ) + ]) + + return formattedData } const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => { diff --git a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_PenurunanJumlahKomplain.ts b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_PenurunanJumlahKomplain.ts index 3e5f254..76360f9 100644 --- a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_PenurunanJumlahKomplain.ts +++ b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_PenurunanJumlahKomplain.ts @@ -11,129 +11,101 @@ import { exportToWord } from './doc/MonalisaLK_PenurunanJumlahKomplain_DOC' const reportName = 'Penurunan Jumlah Komplain' 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) { - data.forEach((item: any) => { - const { nama_regional } = item + const reportMetaMapping: any = { + ulp: 'nama_ulp', + up3: 'nama_ulp', + uid: 'nama_up3', + regional: 'nama_uid', + default: 'nama_regional' + } - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } - } - - groupedData[nama_regional].data.push(item) - }) - - for (const regional in groupedData) { - const data = groupedData[regional].data - - data.forEach((item: any) => { - if (!groupedData[regional].summary) { - groupedData[regional].summary = { - total_keluhan_tahun_sebelumnya: 0, - total_gangguan_tahun_sebelumnya: 0, - total_keluhan_informasi_tahun_sebelumnya: 0, - total_gangguan_informasi_tahun_sebelumnya: 0, - // total_informasi_tahun_sebelumnya - // total_tahun_sebelumnya - total_keluhan_tahun_ini: 0, - total_gangguan_tahun_ini: 0, - total_keluhan_informasi_tahun_ini: 0, - total_gangguan_informasi_tahun_ini: 0 - // total_informasi_tahun_ini - // total_tahun_ini - // delta_keluhan - // delta_gangguan - // delta_informasi - // persen_delta_keluhan - // persen_delta_gangguan - // persen_delta_informasi - // persen_delta_total - } - } - - groupedData[regional].summary.total_keluhan_tahun_sebelumnya += - item.total_keluhan_tahun_sebelumnya - groupedData[regional].summary.total_gangguan_tahun_sebelumnya += - item.total_gangguan_tahun_sebelumnya - groupedData[regional].summary.total_keluhan_informasi_tahun_sebelumnya += - item.total_keluhan_informasi_tahun_sebelumnya - groupedData[regional].summary.total_gangguan_informasi_tahun_sebelumnya += - item.total_gangguan_informasi_tahun_sebelumnya - groupedData[regional].summary.total_keluhan_tahun_ini += item.total_keluhan_tahun_ini - groupedData[regional].summary.total_gangguan_tahun_ini += item.total_gangguan_tahun_ini - groupedData[regional].summary.total_keluhan_informasi_tahun_ini += - item.total_keluhan_informasi_tahun_ini - groupedData[regional].summary.total_gangguan_informasi_tahun_ini += - item.total_gangguan_informasi_tahun_ini - }) - } - - 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 = 'nama_regional' + 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 regional in groupedData) { + const data = groupedData[regional].data + + data.forEach((item: any) => { + if (!groupedData[regional].summary) { + groupedData[regional].summary = { + total_keluhan_tahun_sebelumnya: 0, + total_gangguan_tahun_sebelumnya: 0, + total_keluhan_informasi_tahun_sebelumnya: 0, + total_gangguan_informasi_tahun_sebelumnya: 0, + // total_informasi_tahun_sebelumnya + // total_tahun_sebelumnya + total_keluhan_tahun_ini: 0, + total_gangguan_tahun_ini: 0, + total_keluhan_informasi_tahun_ini: 0, + total_gangguan_informasi_tahun_ini: 0 + // total_informasi_tahun_ini + // total_tahun_ini + // delta_keluhan + // delta_gangguan + // delta_informasi + // persen_delta_keluhan + // persen_delta_gangguan + // persen_delta_informasi + // persen_delta_total + } + } + + groupedData[regional].summary.total_keluhan_tahun_sebelumnya += + item.total_keluhan_tahun_sebelumnya + groupedData[regional].summary.total_gangguan_tahun_sebelumnya += + item.total_gangguan_tahun_sebelumnya + groupedData[regional].summary.total_keluhan_informasi_tahun_sebelumnya += + item.total_keluhan_informasi_tahun_sebelumnya + groupedData[regional].summary.total_gangguan_informasi_tahun_sebelumnya += + item.total_gangguan_informasi_tahun_sebelumnya + groupedData[regional].summary.total_keluhan_tahun_ini += item.total_keluhan_tahun_ini + groupedData[regional].summary.total_gangguan_tahun_ini += item.total_gangguan_tahun_ini + groupedData[regional].summary.total_keluhan_informasi_tahun_ini += + item.total_keluhan_informasi_tahun_ini + groupedData[regional].summary.total_gangguan_informasi_tahun_ini += + item.total_gangguan_informasi_tahun_ini + }) + } + + 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) => { @@ -161,113 +133,47 @@ const formatData = (rawData: any, reportMeta: any) => { // persen_delta_total } - if (reportMeta.regional.id == 0) { - const data = groupingData(rawData, reportMeta) - const formattedData: any = [] + const data = groupingData(rawData, reportMeta) + const title = getTitle(reportMeta) - formattedData.push([{ content: 'NASIONAL', colSpan: 20, styles: { fontStyle: 'bold' } }]) + formattedData.push([{ content: title, colSpan: 20, styles: { fontStyle: 'bold' } }]) - let no = 1 - for (const regional in data) { - const summary = data[regional].summary - - const total_informasi_tahun_sebelumnya = - summary.total_keluhan_informasi_tahun_sebelumnya + - summary.total_gangguan_informasi_tahun_sebelumnya - const total_tahun_sebelumnya = - summary.total_keluhan_tahun_sebelumnya + - summary.total_gangguan_tahun_sebelumnya + - total_informasi_tahun_sebelumnya - const total_informasi_tahun_ini = - summary.total_keluhan_informasi_tahun_ini + summary.total_gangguan_informasi_tahun_ini - const total_tahun_ini = - summary.total_keluhan_tahun_ini + - summary.total_gangguan_tahun_ini + - total_informasi_tahun_ini - const delta_keluhan = summary.total_keluhan_tahun_sebelumnya - summary.total_keluhan_tahun_ini - const delta_gangguan = - summary.total_gangguan_tahun_sebelumnya - summary.total_gangguan_tahun_ini - const delta_informasi = total_informasi_tahun_sebelumnya - total_informasi_tahun_ini - const persen_delta_keluhan = 40 * (delta_keluhan / summary.total_keluhan_tahun_sebelumnya) - const persen_delta_gangguan = 40 * (delta_gangguan / summary.total_gangguan_tahun_sebelumnya) - const persen_delta_informasi = 20 * (delta_informasi / total_informasi_tahun_sebelumnya) - const persen_delta_total = - persen_delta_keluhan + persen_delta_gangguan + persen_delta_informasi - - formattedData.push([ - regional, - formatNumber(summary.total_keluhan_tahun_sebelumnya), - formatNumber(summary.total_gangguan_tahun_sebelumnya), - formatNumber(summary.total_keluhan_informasi_tahun_sebelumnya), - formatNumber(summary.total_gangguan_informasi_tahun_sebelumnya), - formatNumber(total_informasi_tahun_sebelumnya), - formatNumber(total_tahun_sebelumnya), - formatNumber(summary.total_keluhan_tahun_ini), - formatNumber(summary.total_gangguan_tahun_ini), - formatNumber(summary.total_keluhan_informasi_tahun_ini), - formatNumber(summary.total_gangguan_informasi_tahun_ini), - formatNumber(total_informasi_tahun_ini), - formatNumber(total_tahun_ini), - formatNumber(delta_keluhan), - formatNumber(delta_gangguan), - formatNumber(delta_informasi), - formatPercentage( - !persen_delta_keluhan || !!isFinite(persen_delta_keluhan) ? 0 : persen_delta_keluhan - ), - formatPercentage( - !persen_delta_gangguan || !!isFinite(persen_delta_gangguan) ? 0 : persen_delta_gangguan - ), - formatPercentage( - !persen_delta_informasi || !!isFinite(persen_delta_informasi) ? 0 : persen_delta_informasi - ), - formatPercentage( - !persen_delta_total || !!isFinite(persen_delta_total) ? 0 : persen_delta_total - ) - ]) - - total.total_keluhan_tahun_sebelumnya += summary.total_keluhan_tahun_sebelumnya - total.total_gangguan_tahun_sebelumnya += summary.total_gangguan_tahun_sebelumnya - total.total_keluhan_informasi_tahun_sebelumnya += - summary.total_keluhan_informasi_tahun_sebelumnya - total.total_gangguan_informasi_tahun_sebelumnya += - summary.total_gangguan_informasi_tahun_sebelumnya - total.total_keluhan_tahun_ini += summary.total_keluhan_tahun_ini - total.total_gangguan_tahun_ini += summary.total_gangguan_tahun_ini - total.total_keluhan_informasi_tahun_ini += summary.total_keluhan_informasi_tahun_ini - total.total_gangguan_informasi_tahun_ini += summary.total_gangguan_informasi_tahun_ini - } + let no = 1 + for (const regional in data) { + const summary = data[regional].summary const total_informasi_tahun_sebelumnya = - total.total_keluhan_informasi_tahun_sebelumnya + - total.total_gangguan_informasi_tahun_sebelumnya + summary.total_keluhan_informasi_tahun_sebelumnya + + summary.total_gangguan_informasi_tahun_sebelumnya const total_tahun_sebelumnya = - total.total_keluhan_tahun_sebelumnya + - total.total_gangguan_tahun_sebelumnya + + summary.total_keluhan_tahun_sebelumnya + + summary.total_gangguan_tahun_sebelumnya + total_informasi_tahun_sebelumnya const total_informasi_tahun_ini = - total.total_keluhan_informasi_tahun_ini + total.total_gangguan_informasi_tahun_ini + summary.total_keluhan_informasi_tahun_ini + summary.total_gangguan_informasi_tahun_ini const total_tahun_ini = - total.total_keluhan_tahun_ini + total.total_gangguan_tahun_ini + total_informasi_tahun_ini - const delta_keluhan = total.total_keluhan_tahun_sebelumnya - total.total_keluhan_tahun_ini - const delta_gangguan = total.total_gangguan_tahun_sebelumnya - total.total_gangguan_tahun_ini + summary.total_keluhan_tahun_ini + summary.total_gangguan_tahun_ini + total_informasi_tahun_ini + const delta_keluhan = summary.total_keluhan_tahun_sebelumnya - summary.total_keluhan_tahun_ini + const delta_gangguan = + summary.total_gangguan_tahun_sebelumnya - summary.total_gangguan_tahun_ini const delta_informasi = total_informasi_tahun_sebelumnya - total_informasi_tahun_ini - const persen_delta_keluhan = 40 * (delta_keluhan / total.total_keluhan_tahun_sebelumnya) - const persen_delta_gangguan = 40 * (delta_gangguan / total.total_gangguan_tahun_sebelumnya) + const persen_delta_keluhan = 40 * (delta_keluhan / summary.total_keluhan_tahun_sebelumnya) + const persen_delta_gangguan = 40 * (delta_gangguan / summary.total_gangguan_tahun_sebelumnya) const persen_delta_informasi = 20 * (delta_informasi / total_informasi_tahun_sebelumnya) const persen_delta_total = persen_delta_keluhan + persen_delta_gangguan + persen_delta_informasi formattedData.push([ - { content: 'TOTAL', styles: { fontStyle: 'bold' } }, - formatNumber(total.total_keluhan_tahun_sebelumnya), - formatNumber(total.total_gangguan_tahun_sebelumnya), - formatNumber(total.total_keluhan_informasi_tahun_sebelumnya), - formatNumber(total.total_gangguan_informasi_tahun_sebelumnya), + regional, + formatNumber(summary.total_keluhan_tahun_sebelumnya), + formatNumber(summary.total_gangguan_tahun_sebelumnya), + formatNumber(summary.total_keluhan_informasi_tahun_sebelumnya), + formatNumber(summary.total_gangguan_informasi_tahun_sebelumnya), formatNumber(total_informasi_tahun_sebelumnya), formatNumber(total_tahun_sebelumnya), - formatNumber(total.total_keluhan_tahun_ini), - formatNumber(total.total_gangguan_tahun_ini), - formatNumber(total.total_keluhan_informasi_tahun_ini), - formatNumber(total.total_gangguan_informasi_tahun_ini), + formatNumber(summary.total_keluhan_tahun_ini), + formatNumber(summary.total_gangguan_tahun_ini), + formatNumber(summary.total_keluhan_informasi_tahun_ini), + formatNumber(summary.total_gangguan_informasi_tahun_ini), formatNumber(total_informasi_tahun_ini), formatNumber(total_tahun_ini), formatNumber(delta_keluhan), @@ -287,84 +193,66 @@ const formatData = (rawData: any, reportMeta: any) => { ) ]) - 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.total_keluhan_tahun_sebelumnya += item.total_keluhan_tahun_sebelumnya - total.total_gangguan_tahun_sebelumnya += item.total_gangguan_tahun_sebelumnya - total.total_keluhan_informasi_tahun_sebelumnya += - item.total_keluhan_informasi_tahun_sebelumnya - total.total_gangguan_informasi_tahun_sebelumnya += - item.total_gangguan_informasi_tahun_sebelumnya - total.total_keluhan_tahun_ini += item.total_keluhan_tahun_ini - total.total_gangguan_tahun_ini += item.total_gangguan_tahun_ini - total.total_keluhan_informasi_tahun_ini += item.total_keluhan_informasi_tahun_ini - total.total_gangguan_informasi_tahun_ini += item.total_gangguan_informasi_tahun_ini - }) - - const total_informasi_tahun_sebelumnya = - total.total_keluhan_informasi_tahun_sebelumnya + - total.total_gangguan_informasi_tahun_sebelumnya - const total_tahun_sebelumnya = - total.total_keluhan_tahun_sebelumnya + - total.total_gangguan_tahun_sebelumnya + - total_informasi_tahun_sebelumnya - const total_informasi_tahun_ini = - total.total_keluhan_informasi_tahun_ini + total.total_gangguan_informasi_tahun_ini - const total_tahun_ini = - total.total_keluhan_tahun_ini + total.total_gangguan_tahun_ini + total_informasi_tahun_ini - const delta_keluhan = total.total_keluhan_tahun_sebelumnya - total.total_keluhan_tahun_ini - const delta_gangguan = total.total_gangguan_tahun_sebelumnya - total.total_gangguan_tahun_ini - const delta_informasi = total_informasi_tahun_sebelumnya - total_informasi_tahun_ini - const persen_delta_keluhan = 40 * (delta_keluhan / total.total_keluhan_tahun_sebelumnya) - const persen_delta_gangguan = 40 * (delta_gangguan / total.total_gangguan_tahun_sebelumnya) - const persen_delta_informasi = 20 * (delta_informasi / total_informasi_tahun_sebelumnya) - const persen_delta_total = persen_delta_keluhan + persen_delta_gangguan + persen_delta_informasi - - formattedData.push([{ content: parentName, colSpan: 20, styles: { fontStyle: 'bold' } }]) - - const result = [ - formatNumber(total.total_keluhan_tahun_sebelumnya), - formatNumber(total.total_gangguan_tahun_sebelumnya), - formatNumber(total.total_keluhan_informasi_tahun_sebelumnya), - formatNumber(total.total_gangguan_informasi_tahun_sebelumnya), - formatNumber(total_informasi_tahun_sebelumnya), - formatNumber(total_tahun_sebelumnya), - formatNumber(total.total_keluhan_tahun_ini), - formatNumber(total.total_gangguan_tahun_ini), - formatNumber(total.total_keluhan_informasi_tahun_ini), - formatNumber(total.total_gangguan_informasi_tahun_ini), - formatNumber(total_informasi_tahun_ini), - formatNumber(total_tahun_ini), - formatNumber(delta_keluhan), - formatNumber(delta_gangguan), - formatNumber(delta_informasi), - formatPercentage( - !persen_delta_keluhan || !!isFinite(persen_delta_keluhan) ? 0 : persen_delta_keluhan - ), - formatPercentage( - !persen_delta_gangguan || !!isFinite(persen_delta_gangguan) ? 0 : persen_delta_gangguan - ), - formatPercentage( - !persen_delta_informasi || !!isFinite(persen_delta_informasi) ? 0 : persen_delta_informasi - ), - formatPercentage( - !persen_delta_total || !!isFinite(persen_delta_total) ? 0 : persen_delta_total - ) - ] - - formattedData.push([summaryName, ...result]) - formattedData.push([{ content: 'TOTAL', styles: { fontStyle: 'bold' } }, ...result]) - - return formattedData + total.total_keluhan_tahun_sebelumnya += summary.total_keluhan_tahun_sebelumnya + total.total_gangguan_tahun_sebelumnya += summary.total_gangguan_tahun_sebelumnya + total.total_keluhan_informasi_tahun_sebelumnya += + summary.total_keluhan_informasi_tahun_sebelumnya + total.total_gangguan_informasi_tahun_sebelumnya += + summary.total_gangguan_informasi_tahun_sebelumnya + total.total_keluhan_tahun_ini += summary.total_keluhan_tahun_ini + total.total_gangguan_tahun_ini += summary.total_gangguan_tahun_ini + total.total_keluhan_informasi_tahun_ini += summary.total_keluhan_informasi_tahun_ini + total.total_gangguan_informasi_tahun_ini += summary.total_gangguan_informasi_tahun_ini } + + const total_informasi_tahun_sebelumnya = + total.total_keluhan_informasi_tahun_sebelumnya + total.total_gangguan_informasi_tahun_sebelumnya + const total_tahun_sebelumnya = + total.total_keluhan_tahun_sebelumnya + + total.total_gangguan_tahun_sebelumnya + + total_informasi_tahun_sebelumnya + const total_informasi_tahun_ini = + total.total_keluhan_informasi_tahun_ini + total.total_gangguan_informasi_tahun_ini + const total_tahun_ini = + total.total_keluhan_tahun_ini + total.total_gangguan_tahun_ini + total_informasi_tahun_ini + const delta_keluhan = total.total_keluhan_tahun_sebelumnya - total.total_keluhan_tahun_ini + const delta_gangguan = total.total_gangguan_tahun_sebelumnya - total.total_gangguan_tahun_ini + const delta_informasi = total_informasi_tahun_sebelumnya - total_informasi_tahun_ini + const persen_delta_keluhan = 40 * (delta_keluhan / total.total_keluhan_tahun_sebelumnya) + const persen_delta_gangguan = 40 * (delta_gangguan / total.total_gangguan_tahun_sebelumnya) + const persen_delta_informasi = 20 * (delta_informasi / total_informasi_tahun_sebelumnya) + const persen_delta_total = persen_delta_keluhan + persen_delta_gangguan + persen_delta_informasi + + formattedData.push([ + { content: 'TOTAL', styles: { fontStyle: 'bold' } }, + formatNumber(total.total_keluhan_tahun_sebelumnya), + formatNumber(total.total_gangguan_tahun_sebelumnya), + formatNumber(total.total_keluhan_informasi_tahun_sebelumnya), + formatNumber(total.total_gangguan_informasi_tahun_sebelumnya), + formatNumber(total_informasi_tahun_sebelumnya), + formatNumber(total_tahun_sebelumnya), + formatNumber(total.total_keluhan_tahun_ini), + formatNumber(total.total_gangguan_tahun_ini), + formatNumber(total.total_keluhan_informasi_tahun_ini), + formatNumber(total.total_gangguan_informasi_tahun_ini), + formatNumber(total_informasi_tahun_ini), + formatNumber(total_tahun_ini), + formatNumber(delta_keluhan), + formatNumber(delta_gangguan), + formatNumber(delta_informasi), + formatPercentage( + !persen_delta_keluhan || !!isFinite(persen_delta_keluhan) ? 0 : persen_delta_keluhan + ), + formatPercentage( + !persen_delta_gangguan || !!isFinite(persen_delta_gangguan) ? 0 : persen_delta_gangguan + ), + formatPercentage( + !persen_delta_informasi || !!isFinite(persen_delta_informasi) ? 0 : persen_delta_informasi + ), + formatPercentage(!persen_delta_total || !!isFinite(persen_delta_total) ? 0 : persen_delta_total) + ]) + + return formattedData } const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => { diff --git a/src/utils/api/api.graphql.ts b/src/utils/api/api.graphql.ts index d847025..89bc2a4 100755 --- a/src/utils/api/api.graphql.ts +++ b/src/utils/api/api.graphql.ts @@ -4020,6 +4020,7 @@ export const queries = { nama_ulp nama_posko id_regu + nama_regu waktu_lapor waktu_response waktu_recovery @@ -4059,6 +4060,7 @@ export const queries = { nama_ulp nama_posko id_regu + nama_regu waktu_lapor waktu_response waktu_recovery