From a4d1d9574de38c228ac06b1d6ceabd3877259168 Mon Sep 17 00:00:00 2001 From: kur0nek-o Date: Fri, 5 Apr 2024 20:42:15 +0700 Subject: [PATCH] create export doc in ctt & kwh --- .../Pages/Ctt/CTT_LaporanCttKwhPeriksa.vue | 8 +- src/report/Ctt/CTT_LaporanCttKwhPeriksa.ts | 21 +- .../Ctt/doc/CTT_LaporanCttKwhPeriksa.ts | 330 ++++++++++++++++++ 3 files changed, 356 insertions(+), 3 deletions(-) create mode 100644 src/report/Ctt/doc/CTT_LaporanCttKwhPeriksa.ts diff --git a/src/components/Pages/Ctt/CTT_LaporanCttKwhPeriksa.vue b/src/components/Pages/Ctt/CTT_LaporanCttKwhPeriksa.vue index ef949f7..466790b 100755 --- a/src/components/Pages/Ctt/CTT_LaporanCttKwhPeriksa.vue +++ b/src/components/Pages/Ctt/CTT_LaporanCttKwhPeriksa.vue @@ -939,7 +939,9 @@ import { exportToPDF, exportToXLSX, exportDetailToPDF, - exportDetailToXLSX + exportDetailToXLSX, + exportToDOCX, + exportDetailToDOCX } from '@/report/Ctt/CTT_LaporanCttKwhPeriksa' const client = apolloClient() @@ -1013,10 +1015,11 @@ const calculateCustomSummary = (options: any) => { const onExporting = (e: any) => { if (e.format === 'pdf') { - exportToPDF(reportMeta.value, data.value, true) + exportToPDF(reportMeta.value, data.value) } else if (e.format === 'xlsx') { exportToXLSX(reportMeta.value, e) } else { + exportToDOCX(reportMeta.value, data.value) } } @@ -1026,6 +1029,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/Ctt/CTT_LaporanCttKwhPeriksa.ts b/src/report/Ctt/CTT_LaporanCttKwhPeriksa.ts index c3a7066..32b760f 100644 --- a/src/report/Ctt/CTT_LaporanCttKwhPeriksa.ts +++ b/src/report/Ctt/CTT_LaporanCttKwhPeriksa.ts @@ -18,6 +18,7 @@ import autoTable from 'jspdf-autotable' import { Workbook } from 'exceljs' import { setHeaderStyle } from '@/report/utils/xlsx' import { formatNumber } from '@/utils/numbers' +import { exportToWord, exportDetailToWord } from './doc/CTT_LaporanCttKwhPeriksa' const reportName = 'Laporan CTT & KWH Periksa' const fontSize = 5 @@ -90,6 +91,7 @@ const formatMetaData = (reportMeta: any) => { const exportToPDF = (reportMeta: any, rawData: any, preview: boolean = false) => { const data = formatData(rawData) + console.log(data) const meta = formatMetaData(reportMeta) const doc = new jsPDF({ orientation: 'landscape' @@ -522,4 +524,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/Ctt/doc/CTT_LaporanCttKwhPeriksa.ts b/src/report/Ctt/doc/CTT_LaporanCttKwhPeriksa.ts new file mode 100644 index 0000000..ad6ef95 --- /dev/null +++ b/src/report/Ctt/doc/CTT_LaporanCttKwhPeriksa.ts @@ -0,0 +1,330 @@ +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() + }
UNIT LAYANAN PELANGGAN
:
${ + rawMeta.ulp + ? rawMeta.ulp.name.toUpperCase() + : 'Semua Unit Layanan Pelanggan'.toUpperCase() + }
+ +
+
+ + + + + + + + +
${reportName.toUpperCase()}
${`PERIODE TANGGAL : ${formattedMeta.dateFromFormat} SD TGL ${formattedMeta.dateToFormat}`}
+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ${tbody} +
Nama UnitTotal WORekomendasi SistemDLPDHistori P2LT
CC 123PLN MobileComcenTotalMendatangkan PetugasDiberikan ke Pelanggangh
abcd=a+b+cef
+
+
+

${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 + ? rawData + .map( + (item: any, i: any) => ` + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ` + ) + .join('') + : '' + } + +
NoUIW/DUP3RayonIDPELNOMETERNo. TeleponNamaAlamatSumber LaporNo Laporan087071414445463747Jenis DLPDKeterangan DLPDBulan Tahun DLPDNo. Agenda P2TLTgl Mohon P2TTgl Sah P2TLRekomendasi SistemTgl/Jam LaporPetugas ReguUser VCC
${i + 1}${item.nama_uid}${item.nama_up3}${item.nama_ulp}${item.id_pelanggan}${item.nomormeter}${item.no_telp_pelapor}${item.nama_pelapor}${item.alamat_pelapor}${item.media}${item.no_laporan}${item.r08}${item.r70}${item.r71}${item.r41}${item.r44}${item.r45}${item.r46}${item.r37}${item.r47}${item.jenis_dlpd}${item.keterangan_dlpd}${item.blth_dlpd}${item.no_agenda_p2tl}${item.tgl_mohon_p2tl}${item.tgl_sah_p2tl}${item.rekomendasi_sistem}${item.waktu_lapor}${item.petugas_regu}${item.user_vcc}
+
+ +
+ ` + + 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) +}