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
+
+ +
+ ` + + 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) +}