diff --git a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_AgingComplaint.ts b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_AgingComplaint.ts index 3a5e0f2..5402b4d 100644 --- a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_AgingComplaint.ts +++ b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_AgingComplaint.ts @@ -1,17 +1,4 @@ import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter' -import { - Document, - AlignmentType, - Packer, - Paragraph, - Table, - TableCell, - TableRow, - VerticalAlign, - TextRun, - WidthType, - PageOrientation -} from 'docx' import { saveAs } from 'file-saver' import { jsPDF } from 'jspdf' import autoTable from 'jspdf-autotable' @@ -24,54 +11,117 @@ import { exportToWord } from './doc/MonalisaLK_AgingComplaint_DOC' const reportName = 'Aging Complaint' const fontSize = 5 -const groupingData = (data: any) => { - const groupedData: any = {} - - data.forEach((item: any) => { - const { nama_regional } = item - - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } +const getGroupParent = (reportMeta: any) => { + if (reportMeta.ulp.id != 0) { + return { + parent: reportMeta.ulp.name, + summaryName: reportMeta.ulp.name, + summaryKey: 'nama_ulp' } - - 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 + 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 formatData = (rawData: any) => { - const data = groupingData(rawData) +const groupingData = (data: any, reportMeta: any) => { + const groupedData: any = {} + + if (reportMeta.regional.id == 0) { + data.forEach((item: any) => { + const { nama_regional } = item + + 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 + } + } +} + +const formatData = (rawData: any, reportMeta: any) => { const formattedData: any = [] const total: any = { @@ -84,82 +134,144 @@ const formatData = (rawData: any) => { avg_aging_complaint: [] } - formattedData.push([{ content: 'NASIONAL', colSpan: 8, styles: { fontStyle: 'bold' } }]) + if (reportMeta.regional.id == 0) { + const data = groupingData(rawData, reportMeta) + const formattedData: any = [] - for (const regional in data) { - const summary = data[regional].summary + formattedData.push([{ content: 'NASIONAL', colSpan: 8, styles: { fontStyle: 'bold' } }]) - 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 + 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) + } 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) + { 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 + ) ]) - 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) + 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([{ content: '1', styles: { halign: 'right' } }, summaryName, ...result]) + formattedData.push([ + { content: 'RATA-RATA', colSpan: 2, styles: { fontStyle: 'bold' } }, + ...result + ]) + + return formattedData } - - 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) => { @@ -167,7 +279,7 @@ const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => const date = new Date().getDate() const month = new Date().toLocaleString('id-ID', { month: 'long' }) const year = new Date().getFullYear() - const data = formatData(rawData) + const data = formatData(rawData, reportMeta) const doc = new jsPDF({ orientation: 'landscape' }) @@ -416,7 +528,7 @@ const exportToXLSX = (reportMeta: any, e: any) => { e.cancel = true } const exportToDOCX = (reportMeta: any, rawData: any) => { - exportToWord(reportMeta, formatData(rawData), `Laporan ${reportName}`, null) + exportToWord(reportMeta, formatData(rawData, reportMeta), `Laporan ${reportName}`, null) } -export { exportToPDF, exportToXLSX ,exportToDOCX} +export { exportToPDF, exportToXLSX, exportToDOCX } diff --git a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_EnergyNotSales.ts b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_EnergyNotSales.ts index 6f234cf..79717e8 100644 --- a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_EnergyNotSales.ts +++ b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_EnergyNotSales.ts @@ -1,17 +1,4 @@ import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter' -import { - Document, - AlignmentType, - Packer, - Paragraph, - Table, - TableCell, - TableRow, - VerticalAlign, - TextRun, - WidthType, - PageOrientation -} from 'docx' import { saveAs } from 'file-saver' import { jsPDF } from 'jspdf' import autoTable from 'jspdf-autotable' @@ -23,42 +10,105 @@ import { exportToWord } from './doc/MonalisaLK_EnergyNotSales_DOC' const reportName = 'Energy Not Sales (ENS)' const fontSize = 5 -const groupingData = (data: any) => { - const groupedData: any = {} - - data.forEach((item: any) => { - const { nama_regional } = item - - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } +const getGroupParent = (reportMeta: any) => { + if (reportMeta.ulp.id != 0) { + return { + parent: reportMeta.ulp.name, + summaryName: reportMeta.ulp.name, + summaryKey: 'nama_ulp' } - - 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 + 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 formatData = (rawData: any) => { - const data = groupingData(rawData) +const groupingData = (data: any, reportMeta: any) => { + const groupedData: any = {} + + if (reportMeta.regional.id == 0) { + data.forEach((item: any) => { + const { nama_regional } = item + + 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 + } + } +} + +const formatData = (rawData: any, reportMeta: any) => { const formattedData: any = [] const total: any = { @@ -67,35 +117,67 @@ const formatData = (rawData: any) => { bencana_alam: 0 } - formattedData.push([{ content: 'NASIONAL', colSpan: 6, styles: { fontStyle: 'bold' } }]) + if (reportMeta.regional.id == 0) { + const data = groupingData(rawData, reportMeta) - for (const regional in data) { - const summary = data[regional].summary + 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 + } 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) + { 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) ]) - total.terencana += summary.terencana - total.tidak_terencana += summary.tidak_terencana - total.bencana_alam += summary.bencana_alam + 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([{ content: '1', styles: { halign: 'right' } }, summaryName, ...result]) + formattedData.push([{ content: 'TOTAL', colSpan: 2, styles: { fontStyle: 'bold' } }, ...result]) + + return formattedData } - - 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) => { @@ -103,7 +185,7 @@ const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => const date = new Date().getDate() const month = new Date().toLocaleString('id-ID', { month: 'long' }) const year = new Date().getFullYear() - const data = formatData(rawData) + const data = formatData(rawData, reportMeta) const doc = new jsPDF({ orientation: 'landscape' }) @@ -329,7 +411,7 @@ const exportToXLSX = (reportMeta: any, e: any) => { e.cancel = true } const exportToDOCX = (reportMeta: any, rawData: any) => { - exportToWord(reportMeta, formatData(rawData), `Laporan ${reportName}`, null) + exportToWord(reportMeta, formatData(rawData, reportMeta), `Laporan ${reportName}`, null) } -export { exportToPDF, exportToXLSX , exportToDOCX} +export { exportToPDF, exportToXLSX, exportToDOCX } diff --git a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_KDADPelaporan.ts b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_KDADPelaporan.ts index ae3eee3..0934b86 100644 --- a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_KDADPelaporan.ts +++ b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_KDADPelaporan.ts @@ -1,17 +1,4 @@ import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter' -import { - Document, - AlignmentType, - Packer, - Paragraph, - Table, - TableCell, - TableRow, - VerticalAlign, - TextRun, - WidthType, - PageOrientation -} from 'docx' import { saveAs } from 'file-saver' import { jsPDF } from 'jspdf' import autoTable from 'jspdf-autotable' @@ -24,44 +11,107 @@ import { exportToWord } from './doc/MonalisaLK_KDADPelaporan_DOC' const reportName = 'Kepatuhan dan Akurasi Dalam Pelaporan' const fontSize = 5 -const groupingData = (data: any) => { - const groupedData: any = {} - - data.forEach((item: any) => { - const { nama_regional } = item - - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } +const getGroupParent = (reportMeta: any) => { + if (reportMeta.ulp.id != 0) { + return { + parent: reportMeta.ulp.name, + summaryName: reportMeta.ulp.name, + summaryKey: 'nama_ulp' } - - 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 + 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 formatData = (rawData: any) => { - const data = groupingData(rawData) +const groupingData = (data: any, reportMeta: any) => { + const groupedData: any = {} + + if (reportMeta.regional.id == 0) { + data.forEach((item: any) => { + const { nama_regional } = item + + 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 + } + } +} + +const formatData = (rawData: any, reportMeta: any) => { const formattedData: any = [] const total: any = { @@ -71,54 +121,97 @@ const formatData = (rawData: any) => { keluhan_total: 0 } - formattedData.push([{ content: 'NASIONAL', colSpan: 6, styles: { fontStyle: 'bold' } }]) + if (reportMeta.regional.id == 0) { + const data = groupingData(rawData, reportMeta) - for (const regional in data) { - const summary = data[regional].summary + formattedData.push([{ content: 'NASIONAL', colSpan: 6, styles: { fontStyle: 'bold' } }]) - const komplain_pelanggan = - ((summary.gangguan_berulang / summary.gangguan_total + - summary.keluhan_berulang / summary.keluhan_total) / + 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) / 2) * 100 formattedData.push([ - regional, - formatNumber(summary.gangguan_berulang), - formatNumber(summary.gangguan_total), - formatNumber(summary.keluhan_berulang), - formatNumber(summary.keluhan_total), + { content: 'TOTAL', styles: { fontStyle: 'bold' } }, + formatNumber(total.gangguan_berulang), + formatNumber(total.gangguan_total), + formatNumber(total.keluhan_berulang), + formatNumber(total.keluhan_total), formatPercentage( - !komplain_pelanggan || !isFinite(komplain_pelanggan) ? 0 : komplain_pelanggan + !total_komplain_pelanggan || !isFinite(total_komplain_pelanggan) + ? 0 + : total_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 + 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([{ content: '1', styles: { halign: 'right' } }, summaryName, ...result]) + formattedData.push([{ content: 'TOTAL', colSpan: 2, styles: { fontStyle: 'bold' } }, ...result]) + + return formattedData } - - 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) => { @@ -126,7 +219,7 @@ const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => const date = new Date().getDate() const month = new Date().toLocaleString('id-ID', { month: 'long' }) const year = new Date().getFullYear() - const data = formatData(rawData) + const data = formatData(rawData, reportMeta) const doc = new jsPDF({ orientation: 'landscape' }) @@ -363,7 +456,7 @@ const exportToXLSX = (reportMeta: any, e: any) => { e.cancel = true } const exportToDOCX = (reportMeta: any, rawData: any) => { - exportToWord(reportMeta, formatData(rawData), `Laporan ${reportName}`, null) + exportToWord(reportMeta, formatData(rawData, reportMeta), `Laporan ${reportName}`, null) } -export { exportToPDF, exportToXLSX,exportToDOCX } +export { exportToPDF, exportToXLSX, exportToDOCX } diff --git a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_PenurunanJumlahKomplain.ts b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_PenurunanJumlahKomplain.ts index b84d56e..b6152fd 100644 --- a/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_PenurunanJumlahKomplain.ts +++ b/src/report/Monalisa/Laporan/Kumulatif/MonalisaLK_PenurunanJumlahKomplain.ts @@ -1,17 +1,4 @@ import { exportDataGrid as exportToExcel } from 'devextreme/excel_exporter' -import { - Document, - AlignmentType, - Packer, - Paragraph, - Table, - TableCell, - TableRow, - VerticalAlign, - TextRun, - WidthType, - PageOrientation -} from 'docx' import { saveAs } from 'file-saver' import { jsPDF } from 'jspdf' import autoTable from 'jspdf-autotable' @@ -24,69 +11,132 @@ import { exportToWord } from './doc/MonalisaLK_PenurunanJumlahKomplain_DOC' const reportName = 'Penurunan Jumlah Komplain' const fontSize = 5 -const groupingData = (data: any) => { - const groupedData: any = {} - - data.forEach((item: any) => { - const { nama_regional } = item - - if (!groupedData[nama_regional]) { - groupedData[nama_regional] = { data: [] } +const getGroupParent = (reportMeta: any) => { + if (reportMeta.ulp.id != 0) { + return { + parent: reportMeta.ulp.name, + summaryName: reportMeta.ulp.name, + summaryKey: 'nama_ulp' } - - 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 + 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 formatData = (rawData: any) => { - const data = groupingData(rawData) +const groupingData = (data: any, reportMeta: any) => { + const groupedData: any = {} + + if (reportMeta.regional.id == 0) { + data.forEach((item: any) => { + const { nama_regional } = item + + 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 + } + } +} + +const formatData = (rawData: any, reportMeta: any) => { const formattedData: any = [] const total: any = { @@ -111,44 +161,113 @@ const formatData = (rawData: any) => { // persen_delta_total } - formattedData.push([{ content: 'NASIONAL', colSpan: 20, styles: { fontStyle: 'bold' } }]) + if (reportMeta.regional.id == 0) { + const data = groupingData(rawData, reportMeta) + const formattedData: any = [] - let no = 1 - for (const regional in data) { - const summary = data[regional].summary + formattedData.push([{ content: 'NASIONAL', 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 + } const total_informasi_tahun_sebelumnya = - summary.total_keluhan_informasi_tahun_sebelumnya + - summary.total_gangguan_informasi_tahun_sebelumnya + total.total_keluhan_informasi_tahun_sebelumnya + + total.total_gangguan_informasi_tahun_sebelumnya const total_tahun_sebelumnya = - summary.total_keluhan_tahun_sebelumnya + - summary.total_gangguan_tahun_sebelumnya + + total.total_keluhan_tahun_sebelumnya + + total.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 + total.total_keluhan_informasi_tahun_ini + total.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 + 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 / summary.total_keluhan_tahun_sebelumnya) - const persen_delta_gangguan = 40 * (delta_gangguan / summary.total_gangguan_tahun_sebelumnya) + 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([ - 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), + { 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(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.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), @@ -168,66 +287,84 @@ const formatData = (rawData: any) => { ) ]) - 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 + 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([{ content: '1', styles: { halign: 'right' } }, summaryName, ...result]) + formattedData.push([{ content: 'TOTAL', colSpan: 2, styles: { fontStyle: 'bold' } }, ...result]) + + return formattedData } - - 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) => { @@ -235,7 +372,7 @@ const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => const date = new Date().getDate() const month = new Date().toLocaleString('id-ID', { month: 'long' }) const year = new Date().getFullYear() - const data = formatData(rawData) + const data = formatData(rawData, reportMeta) const doc = new jsPDF({ orientation: 'landscape' }) @@ -549,7 +686,7 @@ const exportToXLSX = (reportMeta: any, e: any) => { e.cancel = true } const exportToDOCX = (reportMeta: any, rawData: any) => { - exportToWord(reportMeta, formatData(rawData), `Laporan ${reportName}`, null) + exportToWord(reportMeta, formatData(rawData, reportMeta), `Laporan ${reportName}`, null) } -export { exportToPDF, exportToXLSX,exportToDOCX } +export { exportToPDF, exportToXLSX, exportToDOCX }