Files
open-isp/services/pdfBranding.js
T
oxpoe eaf05f2811 OPEN-ISP v0.5 (pickle-lime) — rilis open-source perdana
Aplikasi billing & manajemen ISP (fiber optic) — PWA pelanggan, portal teknisi & kolektor,
admin panel lengkap, multi-vendor OLT, RADIUS, WhatsApp/Telegram, pembayaran QRIS.

Kredit & lisensi (ISC):
- Base kode & repo: alijayanet/billing-rtrw oleh Alijaya Net — terima kasih banyak
  atas base kode dan repo yang bermanfaat.
- Add-on: GoWA, LibreSpeed/OpenSpeedTest, Uptime Kuma, notification-forwarder.
- Dikembangkan menjadi OPEN-ISP oleh oxpoe — https://github.com/oxpoe/open-isp
2026-10-09 05:51:21 +07:00

58 lines
2.0 KiB
JavaScript

/**
* pdfBranding.js — Tema & branding bersama untuk semua PDF (pdfkit).
* Dipakai oleh: pdfInvoiceService.js, financeReportPdfService.js.
* Nama & logo otomatis dari settings (company_header / company_logo -> public /img/logo.png).
*/
const path = require('path');
const fs = require('fs');
const THEME = {
INK: '#0f172a', // header band / teks utama
HEAD: '#0f172a', // alias header band
ACCENT: '#ADFF2F', // aksen lime (garis header / highlight)
ACCENT_TXT: '#065f46',
MUTED: '#64748b',
LINE: '#e2e8f0',
SOFT: '#f8fafc',
GREEN: '#16a34a',
RED: '#e11d48',
AMBER: '#d97706',
BLUE: '#0284c7',
LIGHT: '#94a3b8',
ON_HEAD: '#ffffff',
};
// Resolusi logo: pakai settings.company_logo bila file lokal ada; fallback /img/logo.png
function resolveLogoPath(settings) {
const cands = [];
try {
const raw = String((settings && (settings.logo_invoice || settings.logo_portal || settings.company_logo)) || '').trim();
if (raw && !/^https?:\/\//i.test(raw) && !raw.startsWith('data:')) {
let p = raw.split('?')[0].split('#')[0].replace(/^\/+/, '');
cands.push(path.join(__dirname, '../public', p));
}
} catch (e) {}
cands.push(path.join(__dirname, '../public/img/logo.png'));
for (const c of cands) { try { if (fs.existsSync(c)) return c; } catch (e) {} }
return null;
}
function fmtRp(n) { return 'Rp ' + Math.round(Number(n) || 0).toLocaleString('id-ID'); }
function companyInfo(settings) {
const s = settings || {};
const phone = (Array.isArray(s.whatsapp_admin_numbers) && s.whatsapp_admin_numbers[0])
? '+' + String(s.whatsapp_admin_numbers[0]).replace(/^0/, '62')
: (s.company_phone || '-');
return {
name: s.company_header || 'OPEN-ISP',
sub: s.company_subheader || 'PT Artha Mega Data',
address: s.company_address || 'Pusat Layanan Internet',
phone,
email: s.company_email || '',
manager: s.company_manager || 'Bagian Keuangan',
};
}
module.exports = { THEME, resolveLogoPath, fmtRp, companyInfo };