From 0b85dcf2114810721cb4b0ddaa105e1f8b04509b Mon Sep 17 00:00:00 2001 From: kur0nek-o Date: Fri, 5 Apr 2024 20:55:00 +0700 Subject: [PATCH] feat: create export doc in laporan cico --- src/components/Pages/Cico/LaporanCICO.vue | 6 +- src/report/Cico/LaporanCICO.ts | 24 +- src/report/Cico/doc/LaporanCICO.ts | 334 ++++++++++++++++++++++ 3 files changed, 360 insertions(+), 4 deletions(-) create mode 100644 src/report/Cico/doc/LaporanCICO.ts diff --git a/src/components/Pages/Cico/LaporanCICO.vue b/src/components/Pages/Cico/LaporanCICO.vue index b3f3b01..a996c30 100755 --- a/src/components/Pages/Cico/LaporanCICO.vue +++ b/src/components/Pages/Cico/LaporanCICO.vue @@ -888,7 +888,9 @@ import { exportToPDF, exportToXLSX, exportDetailToPDF, - exportDetailToXLSX + exportDetailToXLSX, + exportToDOCX, + exportDetailToDOCX } from '@/report/Cico/LaporanCICO' const client = apolloClient() @@ -967,6 +969,7 @@ const onExporting = (e: any) => { } else if (e.format === 'xlsx') { exportToXLSX(reportMeta.value, e) } else { + exportToDOCX(reportMeta.value, data.value) } } @@ -976,6 +979,7 @@ const onExportingDetail = (e: any) => { } else if (e.format === 'xlsx') { exportDetailToXLSX(reportMeta.value, e) } else { + exportDetailToDOCX(reportMeta.value, dataSub.value) } } diff --git a/src/report/Cico/LaporanCICO.ts b/src/report/Cico/LaporanCICO.ts index 319615d..2c76cee 100644 --- a/src/report/Cico/LaporanCICO.ts +++ b/src/report/Cico/LaporanCICO.ts @@ -17,9 +17,10 @@ import { jsPDF } from 'jspdf' import autoTable from 'jspdf-autotable' import { Workbook } from 'exceljs' import { setHeaderStyle } from '@/report/utils/xlsx' -import { formatNumber, formatPercentage } from '@/utils/numbers' +import { formatNumber } from '@/utils/numbers' +import { exportToWord, exportDetailToWord } from './doc/LaporanCICO' -const reportName = 'Laporan Check In Check Out (CICO)' +const reportName = 'Check In Check Out (CICO)' const fontSize = 5 const detailFontSize = 3 @@ -537,4 +538,21 @@ const exportDetailToXLSX = (reportMeta: any, e: any) => { e.cancel = true } -export { exportToPDF, exportToXLSX, exportDetailToPDF, exportDetailToXLSX } +const exportToDOCX = (reportMeta: any, rawData: any) => { + const meta = formatMetaData(reportMeta) + exportToWord(reportMeta, meta, formatData(rawData), reportName) +} + +const exportDetailToDOCX = (reportMeta: any, rawData: any) => { + const meta = formatMetaData(reportMeta) + exportDetailToWord(meta, rawData, reportName) +} + +export { + exportToPDF, + exportToXLSX, + exportDetailToPDF, + exportDetailToXLSX, + exportToDOCX, + exportDetailToDOCX +} diff --git a/src/report/Cico/doc/LaporanCICO.ts b/src/report/Cico/doc/LaporanCICO.ts new file mode 100644 index 0000000..3a87969 --- /dev/null +++ b/src/report/Cico/doc/LaporanCICO.ts @@ -0,0 +1,334 @@ +import { formatWaktu } from '@/components/Form/FiltersType/reference' + +export const exportToWord = ( + rawMeta: any, + formattedMeta: any, + rawData: any, + reportName: String +) => { + const filename = 'Laporan ' + reportName + '.doc' + + let tbody = '' + + for (let index = 0; index < rawData.length; index++) { + const element = rawData[index] + + let column = `` + let styleTotal = '' + + for (let i = 0; i < element.length; i++) { + const content = element[i] + const colSpan = content?.colSpan !== undefined ? `colspan="${content.colSpan}"` : '' + + if (content && (content.content === 'TOTAL' || content.content === 'GRAND TOTAL')) { + styleTotal = 'style="background-color: #c0c0c0; font-weight: bold;"' + } + + i === 0 + ? (column += `${content.content || content}`) + : (column += `${content}`) + } + + column += `` + tbody += column + } + + let preHtml = ` + + + + ${reportName} + + + + ` + + const body = ` +
+
+
PT. PLN(Persero)
+ + + + + + + + + + + + + + + + + +
UNIT INDUK
:
${ + rawMeta.uid + ? rawMeta.uid.name.toUpperCase() + : 'Semua Unit Induk Distribusi/Wilayah'.toUpperCase() + }
UNIT PELAKSANA PELAYANAN PELANGGAN
:
${ + rawMeta.up3 + ? rawMeta.up3.name.toUpperCase() + : 'Semua Unit Pelaksanaan Pelayanan Pelanggan'.toUpperCase() + }
POSKO
:
${ + rawMeta.posko ? rawMeta.posko.name.toUpperCase() : 'Semua Posko'.toUpperCase() + }
+ +
+
+ + + + + + + + +
${reportName.toUpperCase()}
${`PERIODE TANGGAL : ${formattedMeta.dateFromFormat} SD TGL ${formattedMeta.dateToFormat}`}
+
+ +
+ + + + + + + + + + + + + + + ${tbody} +
User ReguPersonil YantekJumlah WO Gangguan IndividualRata-rata Durasi WO GangguanRata-rata RPT WO GangguanRata-rata RCT WO GangguanJumlah WO Penugasan KhususRata-rata WO Penugasan Khusus
+
+
+

${formattedMeta.dayTo}, ${formattedMeta.dateToFormat}

+
+

(.........................................)

+
+
+ ` + + const postHtml = '' + const html = preHtml + body + postHtml + const url = 'data:application/vnd.ms-word;charset=utf-8,' + encodeURIComponent(html) + const downloadLink = document.createElement('a') + + document.body.appendChild(downloadLink) + downloadLink.href = url + downloadLink.download = filename + downloadLink.click() + document.body.removeChild(downloadLink) +} + +export const exportDetailToWord = (formattedMeta: any, rawData: any, reportName: String) => { + const filename = 'Laporan Detail ' + reportName + '.doc' + + let preHtml = ` + + + + Daftar Detail ${reportName} + + + + ` + + const body = ` +
+
+
PT. PLN(Persero)
+
+ + + + + + + +
${'DAFTAR DETAIL ' + reportName.toUpperCase()}
${`PERIODE TANGGAL : ${formattedMeta.dateFromFormat} SD TGL ${formattedMeta.dateToFormat}`}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${rawData + .map( + (item: any, i: any) => ` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ` + ) + .join('')} + +
NoUID/UIWUP3PoskoSumber LaporCreate ByDispacth ByUser ReguNama ReguNama PetugasShiftCheck In PetugasNo LaporanTgl LaporTgl Penugasan BaruTgl Dalam PerjalananTgl PengerjaanTgl Nyala SementaraTgl NyalaTgl SelesaiDurasi PerjalananDurasi WOCheck Out PetugasRPTRCTRatingJml Pelanggan PadamFasilitasSub FasilitasPeralatanDampak KerusakanPenyebabKelompok PenyebabCuacaKeterangan PelaporKeteranganPenyebab PadamTindakanAPKT StatusReferensi MarkingBLTH
${i + 1}${item.nama_uid}${item.nama_up3}${item.nama_posko}${item.media}${item.pembuat_laporan}${item.dispacth_by}${item.waktu_dispacth}${item.user_regu}${item.nama_regu}${item.personil_yantek}${item.shift}${item.check_in_petugas}${item.no_laporan}${item.waktu_lapor}${item.waktu_dispacth}${item.waktu_perjalanan}${item.waktu_response}${item.waktu_nyala_sementara}${item.waktu_nyala}${item.waktu_selesai}${item.durasi_waktu_response}${item.durasi_wo}${item.check_out_petugas}${item.durasi_menit_response}${item.durasi_menit_recovery}${item.rating}${item.jml_pelanggan_padam}${item.fasilitas}${item.sub_fasilitas}${item.peralatan}${item.dampak_kerusakan}${item.penyebab}${item.kelompok_penyebab}${item.cuaca}${item.keterangan_pelapor}${item.keterangan}${item.penyebab_padam}${item.tindakan}${item.status_akhir}${item.referensi_marking}${item.blth}
+
+ +
+ ` + + const postHtml = '' + const html = preHtml + body + postHtml + const url = 'data:application/vnd.ms-word;charset=utf-8,' + encodeURIComponent(html) + const downloadLink = document.createElement('a') + + document.body.appendChild(downloadLink) + downloadLink.href = url + downloadLink.download = filename + downloadLink.click() + document.body.removeChild(downloadLink) +}