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' import { Workbook } from 'exceljs' import { setHeaderStyle } from '@/report/utils/xlsx' const reportName = 'Daftar Gangguan Dan Material Yang Dipakai' const fontSize = 5 const formatMetaData = (reportMeta: any) => { const periode = reportMeta.value.periode ? reportMeta.value.periode.split(' s/d ') : '' let dateFromFormat = '' let dateToFormat = '' let dayTo = '' if (periode != '') { const dateFrom = new Date(periode[0].split('-').reverse().join('-')) const dateTo = new Date(periode[1].split('-').reverse().join('-')) dateFromFormat = `${dateFrom.getDate()}-${dateFrom.toLocaleString('id-ID', { month: 'long' })}-${dateFrom.getFullYear()}` dateToFormat = `${dateTo.getDate()}-${dateTo.toLocaleString('id-ID', { month: 'long' })}-${dateTo.getFullYear()}` dayTo = dateTo.toLocaleString('id-ID', { weekday: 'long' }) } return { dateFromFormat, dateToFormat, dayTo } } const exportToPDF = (reportMeta: any, data: any) => { const meta = formatMetaData(reportMeta) const doc = new jsPDF({ orientation: 'landscape' }) autoTable(doc, { head: [ ['PT. PLN(Persero)', '', ''], [ { content: 'DISTRIBUSI/WILAYAH', styles: { cellWidth: 35 } }, { content: ':', styles: { cellWidth: 1 } }, reportMeta.value.uid ? reportMeta.value.uid.name.toUpperCase() : 'Semua Distribusi/Wilayah'.toUpperCase() ], [ 'AREA', ':', reportMeta.value.up3 ? reportMeta.value.up3.name.toUpperCase() : 'Semua Area'.toUpperCase() ], [ 'POSKO', ':', reportMeta.value.posko ? reportMeta.value.posko.name.toUpperCase() : 'Semua Posko'.toUpperCase() ] ], styles: { fontSize, cellPadding: 0.1, textColor: [0, 0, 0], fontStyle: 'bold' }, theme: 'plain', startY: 10 }) autoTable(doc, { head: [ [`${reportName}`.toUpperCase()], [`PERIODE TANGGAL : ${meta.dateFromFormat} SD TGL ${meta.dateToFormat}`] ], styles: { fontSize, cellPadding: 0.1, textColor: [0, 0, 0], fontStyle: 'bold', halign: 'center' }, theme: 'plain', startY: 25 }) autoTable(doc, { head: [ [ { content: 'No', rowSpan: 2 }, { content: 'Nomor Gangguan', rowSpan: 2 }, { content: 'Nama Pelanggan', rowSpan: 2 }, { content: 'Isi Laporan', rowSpan: 2 }, { content: 'Penyebab Gangguan', rowSpan: 2 }, { content: 'Tgl Padam', rowSpan: 2 }, { content: 'Tgl Nyala', rowSpan: 2 }, { content: 'Regu', rowSpan: 2 }, { content: 'Material Yang Dipakai', colSpan: 4 } ], ['Sumber', 'Nama', 'Satuan', 'Vol'] ], body: data.value.map((item: any, i: any) => [ { content: ++i, styles: { halign: 'right' } }, item.no_laporan, item.nama_pelapor, item.keterangan_pelapor, item.penyebab, item.waktu_lapor, item.waktu_recovery, item.regu, item.media, item.nama_material, item.satuan_material, item.volume_material ]), styles: { fontSize, cellPadding: 1, lineColor: [0, 0, 0], lineWidth: 0.1, cellWidth: 'auto' }, rowPageBreak: 'auto', headStyles: { fillColor: [192, 192, 192], textColor: [0, 0, 0], fontStyle: 'bold', cellWidth: 'wrap', halign: 'center' }, bodyStyles: { textColor: [0, 0, 0] }, didParseCell: function (data) { if (data.row.section === 'head') { data.cell.text = data.cell.text.map(function (word: any) { return word.toUpperCase() }) } }, startY: 35 }) autoTable(doc, { head: [ [`${meta.dayTo}, ${meta.dateToFormat}`], [ { content: '(.........................................)', styles: { minCellHeight: 8, valign: 'bottom' } } ] ], styles: { fontSize, cellPadding: 0.1, textColor: [0, 0, 0], fontStyle: 'bold', halign: 'center' }, theme: 'plain', tableWidth: 50, margin: { left: 230 } }) doc.save(`Laporan ${reportName}.pdf`, { returnPromise: true }).then(() => { console.log('pdf berhasil disimpan') }) } const exportToXLSX = (reportMeta: any, e: any) => { const meta = formatMetaData(reportMeta) const workbook = new Workbook() const worksheet = workbook.addWorksheet(`${reportName}`) setHeaderStyle(worksheet, 1, 1, 'PT. PLN(Persero)') setHeaderStyle( worksheet, 2, 1, `DISTRIBUSI/WILAYAH : ${ reportMeta.value.uid ? reportMeta.value.uid.name.toUpperCase() : 'Semua Distribusi/Wilayah'.toUpperCase() }` ) setHeaderStyle( worksheet, 3, 1, `AREA : ${ reportMeta.value.up3 ? reportMeta.value.up3.name.toUpperCase() : 'Semua Area'.toUpperCase() }` ) setHeaderStyle( worksheet, 4, 1, `POSKO : ${ reportMeta.value.posko ? reportMeta.value.posko.name.toUpperCase() : 'Semua Posko'.toUpperCase() }` ) setHeaderStyle(worksheet, 6, 1, `${reportName}`.toUpperCase(), true) setHeaderStyle( worksheet, 7, 1, `PERIODE TANGGAL : ${meta.dateFromFormat} SD TGL ${meta.dateToFormat}`, true ) worksheet.mergeCells('A1:L1') worksheet.mergeCells('A2:L2') worksheet.mergeCells('A3:L3') worksheet.mergeCells('A4:L4') worksheet.mergeCells('A6:L6') worksheet.mergeCells('A7:L7') exportToExcel({ component: e.component, worksheet, autoFilterEnabled: true, topLeftCell: { row: 10, column: 1 }, loadPanel: { enabled: false } }).then(() => { workbook.xlsx.writeBuffer().then((buffer: any) => { saveAs(new Blob([buffer], { type: 'application/octet-stream' }), `Laporan ${reportName}.xlsx`) }) }) e.cancel = true } export { exportToPDF, exportToXLSX }