From 2157fbcd070444227e96a30b6594234dce4f7dea Mon Sep 17 00:00:00 2001 From: bagus Date: Fri, 3 May 2024 14:50:44 +0700 Subject: [PATCH] fix: report anomali penanganan pengaduan gangguan petugas --- .../Anomali/Gangguan/Anomali_LAPPGP_LPP.ts | 13 -- .../Anomali/Gangguan/Anomali_LAPPGP_LPT.ts | 218 ++++++++++++------ src/utils/api/api.graphql.ts | 5 +- 3 files changed, 148 insertions(+), 88 deletions(-) diff --git a/src/report/Anomali/Gangguan/Anomali_LAPPGP_LPP.ts b/src/report/Anomali/Gangguan/Anomali_LAPPGP_LPP.ts index 173f1d4..2be9f01 100644 --- a/src/report/Anomali/Gangguan/Anomali_LAPPGP_LPP.ts +++ b/src/report/Anomali/Gangguan/Anomali_LAPPGP_LPP.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' diff --git a/src/report/Anomali/Gangguan/Anomali_LAPPGP_LPT.ts b/src/report/Anomali/Gangguan/Anomali_LAPPGP_LPT.ts index b4f9a04..9b3d115 100644 --- a/src/report/Anomali/Gangguan/Anomali_LAPPGP_LPT.ts +++ b/src/report/Anomali/Gangguan/Anomali_LAPPGP_LPT.ts @@ -10,82 +10,154 @@ import { exportToWord } from './doc/Anomali_LAPPGP_LPT' const reportName = 'Anomali Penanganan Pengaduan Gangguan Petugas' const fontSize = 5 -const formatData = (rawData: any) => { - const formattedData: any = [] - const total: any = { - total_petugas: 0, - anomali_pln_mobile_marking: 0, - anomali_pln_mobile_non_marking: 0, - anomali_cc123_marking: 0, - anomali_cc123_non_marking: 0 - // total_anomali_marking: 0, - // total_anomali_non_marking: 0, - // persen_anomali_pln_mobile_marking - // persen_anomali_pln_mobile_non_marking - // persen_anomali_cc123_marking - // persen_anomali_cc123_non_marking - // persen_anomali_marking - // persen_anomali_non_marking +const groupingData = (data: any, reportMeta: any) => { + const groupedData: any = {} + + const reportMetaMapping: any = { + up3: 'nama_ulp', + uid: 'nama_up3', + default: 'nama_uid' } - rawData.forEach((item: any) => { - total.total_petugas += item.total_petugas - total.anomali_pln_mobile_marking += item.anomali_pln_mobile_marking - total.anomali_pln_mobile_non_marking += item.anomali_pln_mobile_non_marking - total.anomali_cc123_marking += item.anomali_cc123_marking - total.anomali_cc123_non_marking += item.anomali_cc123_non_marking + let key = 'nama_uid' + 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) }) - const total_anomali_marking = total.anomali_pln_mobile_marking + total.anomali_cc123_marking - const total_anomali_non_marking = - total.anomali_pln_mobile_non_marking + total.anomali_cc123_non_marking - const persen_anomali_pln_mobile_marking = total.anomali_pln_mobile_marking / total.total_petugas - const persen_anomali_pln_mobile_non_marking = - total.anomali_pln_mobile_non_marking / total.total_petugas - const persen_anomali_cc123_marking = total.anomali_cc123_marking / total.total_petugas - const persen_anomali_cc123_non_marking = total.anomali_cc123_non_marking / total.total_petugas - const persen_anomali_marking = persen_anomali_pln_mobile_marking + persen_anomali_cc123_marking - const persen_anomali_non_marking = - persen_anomali_pln_mobile_non_marking + persen_anomali_cc123_non_marking + for (const key in groupedData) { + const data = groupedData[key].data - formattedData.push([ - 'Semua Unit', - formatNumber(total.total_petugas), - formatNumber(total.anomali_pln_mobile_marking), - formatNumber(total.anomali_pln_mobile_non_marking), - formatNumber(total.anomali_cc123_marking), - formatNumber(total.anomali_cc123_non_marking), - formatNumber(total_anomali_marking), - formatNumber(total_anomali_non_marking), - formatPercentage( - !persen_anomali_pln_mobile_marking || !!isFinite(persen_anomali_pln_mobile_marking) - ? 0 - : persen_anomali_pln_mobile_marking * 100 - ), - formatPercentage( - !persen_anomali_pln_mobile_non_marking || !!isFinite(persen_anomali_pln_mobile_non_marking) - ? 0 - : persen_anomali_pln_mobile_non_marking * 100 - ), - formatPercentage( - !persen_anomali_cc123_marking || !!isFinite(persen_anomali_cc123_marking) - ? 0 - : persen_anomali_cc123_marking * 100 - ), - formatPercentage( - !persen_anomali_cc123_non_marking || !!isFinite(persen_anomali_cc123_non_marking) - ? 0 - : persen_anomali_cc123_non_marking * 100 - ), - formatPercentage( - !persen_anomali_marking || !!isFinite(persen_anomali_marking) ? 0 : persen_anomali_marking - ), - formatPercentage( - !persen_anomali_non_marking || !!isFinite(persen_anomali_non_marking) - ? 0 - : persen_anomali_non_marking * 100 - ) - ]) + data.forEach((item: any) => { + if (!groupedData[key].summary) { + groupedData[key].summary = { + total_petugas: 0, + petugas_pln_mobile_marking: 0, + petugas_pln_mobile_nonmarking: 0, + petugas_cc123_marking: 0, + petugas_cc123_nonmarking: 0 + // petugas_anomali_marking: 0, + // petugas_anomali_nonmarking: 0, + // persen_pln_mobile_marking + // persen_pln_mobile_non_marking + // persen_cc123_marking + // persen_cc123_nonmarking + // persen_anomali_marking + // persen_anomali_non_marking + } + } + + groupedData[key].summary.total_petugas += item.total_petugas + groupedData[key].summary.petugas_pln_mobile_marking += item.petugas_pln_mobile_marking + groupedData[key].summary.petugas_pln_mobile_nonmarking += item.petugas_pln_mobile_nonmarking + groupedData[key].summary.petugas_cc123_marking += item.petugas_cc123_marking + groupedData[key].summary.petugas_cc123_nonmarking += item.petugas_cc123_nonmarking + }) + + groupedData[key].summary.petugas_anomali_marking = + groupedData[key].summary.petugas_pln_mobile_marking + + groupedData[key].summary.petugas_cc123_marking + groupedData[key].summary.petugas_anomali_nonmarking = + groupedData[key].summary.petugas_pln_mobile_nonmarking + + groupedData[key].summary.petugas_cc123_nonmarking + + groupedData[key].summary.persen_pln_mobile_marking = + (groupedData[key].summary.petugas_pln_mobile_marking / + groupedData[key].summary.total_petugas) * + 100 + + groupedData[key].summary.persen_pln_mobile_non_marking = + (groupedData[key].summary.petugas_pln_mobile_nonmarking / + groupedData[key].summary.total_petugas) * + 100 + + groupedData[key].summary.persen_cc123_marking = + (groupedData[key].summary.petugas_cc123_marking / groupedData[key].summary.total_petugas) * + 100 + + groupedData[key].summary.persen_cc123_nonmarking = + (groupedData[key].summary.petugas_cc123_nonmarking / groupedData[key].summary.total_petugas) * + 100 + + groupedData[key].summary.persen_anomali_marking = + groupedData[key].summary.persen_pln_mobile_marking + + groupedData[key].summary.persen_cc123_marking + groupedData[key].summary.persen_anomali_non_marking = + groupedData[key].summary.persen_pln_mobile_non_marking + + groupedData[key].summary.persen_cc123_nonmarking + } + + return groupedData +} + +const getTitle = (reportMeta: any) => { + if (reportMeta.up3.id != 0) { + return 'nama_up3' + } + + if (reportMeta.uid.id != 0) { + return 'nama_uid' + } + + return 'nama_regional' +} + +const formatData = (rawData: any, reportMeta: any) => { + const formattedData: any = [] + const groupedData: any = {} + + const data = groupingData(rawData, reportMeta) + const title = getTitle(reportMeta) + + for (const key in data) { + const groupKey = data[key].data[0][title] + + if (!groupedData[groupKey]) { + groupedData[groupKey] = { data: [] } + } + + groupedData[groupKey].data.push({ + key: key, + value: data[key] + }) + } + + for (const key in groupedData) { + formattedData.push([{ content: key, colSpan: 14, styles: { fontStyle: 'bold' } }]) + + groupedData[key].data.forEach((item: any) => { + const summary = item.value.summary + + formattedData.push([ + item.key, + formatNumber(summary.total_petugas), + formatNumber(summary.petugas_pln_mobile_marking), + formatNumber(summary.petugas_pln_mobile_nonmarking), + formatNumber(summary.petugas_cc123_marking), + formatNumber(summary.petugas_cc123_nonmarking), + formatNumber(summary.petugas_anomali_marking), + formatNumber(summary.petugas_anomali_nonmarking), + formatPercentage(summary.persen_pln_mobile_marking), + formatPercentage(summary.persen_pln_mobile_non_marking), + formatPercentage(summary.persen_cc123_marking), + formatPercentage(summary.persen_cc123_nonmarking), + formatPercentage(summary.persen_anomali_marking), + formatPercentage(summary.persen_anomali_non_marking) + ]) + }) + } return formattedData } @@ -120,7 +192,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 meta = formatMetaData(reportMeta) const doc = new jsPDF({ orientation: 'landscape' @@ -410,7 +482,7 @@ const exportToXLSX = (reportMeta: any, e: any) => { const exportToDOCX = (reportMeta: any, rawData: any) => { const meta = formatMetaData(reportMeta) - exportToWord(reportMeta, meta, formatData(rawData), reportName) + exportToWord(reportMeta, meta, formatData(rawData, reportMeta), reportName) } export { exportToPDF, exportToXLSX, exportToDOCX } diff --git a/src/utils/api/api.graphql.ts b/src/utils/api/api.graphql.ts index 7f95fdd..8bd6c9d 100755 --- a/src/utils/api/api.graphql.ts +++ b/src/utils/api/api.graphql.ts @@ -4475,8 +4475,8 @@ export const queries = { nama_up3 id_ulp nama_ulp + nama_regional total_petugas - petugas_pln_mobile_marking petugas_pln_mobile_nonmarking petugas_cc123_marking @@ -4487,7 +4487,6 @@ export const queries = { persen_pln_mobile_nonmarking persen_cc123_marking persen_cc123_nonmarking - persen_anomali_marking persen_anomali_non_marking } @@ -4605,6 +4604,7 @@ export const queries = { nama_up3 id_ulp nama_ulp + nama_regional total_petugas petugas_pln_mobile_marking petugas_pln_mobile_nonmarking @@ -4730,6 +4730,7 @@ export const queries = { nama_up3 id_ulp nama_ulp + nama_regional total_petugas petugas_pln_mobile_marking petugas_pln_mobile_nonmarking