Files
manjapro_v6/excel/export_history_payment_gateway.php
T
2026-08-20 18:39:37 +07:00

228 lines
5.1 KiB
PHP

<?php
require '../vendor/autoload.php';
include '../config/connect.php';
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;
// =====================
// PARAMETER
// =====================
$startDate = $_GET['start_date'] ?? '';
$endDate = $_GET['end_date'] ?? '';
$idsv = $_GET['idsv'] ?? '';
$idmsv = $_GET['idmsv'] ?? '';
$status = $_GET['status'] ?? 'ALL';
// =====================
// BASE QUERY
// =====================
$sql = "
SELECT
v_tagihan.nama,
v_tagihan.akun,
v_tagihan.alamat,
v_tagihan.keterangan,
v_tagihan.nama_paket,
v_tagihan.nama_server,
v_tagihan.nama_marketing,
v_tagihan.nomor_whatsapp,
payment_winpay.id,
payment_winpay.trx_id,
payment_winpay.channel,
payment_winpay.status,
payment_winpay.created_at,
payment_winpay.paid_at,
CAST(payment_winpay.amount AS UNSIGNED) as amount,
CAST(payment_winpay.fee AS UNSIGNED) as fee,
CAST(payment_winpay.nett AS UNSIGNED) as nett
FROM payment_winpay
INNER JOIN v_tagihan
ON payment_winpay.id_tagihan = v_tagihan.id
WHERE 1=1
";
$params = [];
// =====================
// FILTER STATUS
// =====================
if ($status !== 'ALL' && !empty($status)) {
$sql .= " AND payment_winpay.status = :status";
$params[':status'] = $status;
}
// =====================
// FILTER SERVER
// =====================
if (!empty($idsv)) {
$ids = explode(',', $idsv);
$ids = array_filter($ids, 'is_numeric');
if (!empty($ids)) {
$sql .= " AND v_tagihan.id_data_server IN (" . implode(',', $ids) . ")";
}
}
// =====================
// FILTER MARKETING
// =====================
if (!empty($idmsv) && is_numeric($idmsv)) {
$sql .= " AND v_tagihan.id_marketing = :idmsv";
$params[':idmsv'] = $idmsv;
}
// =====================
// FILTER TANGGAL
// =====================
if (!empty($startDate) && !empty($endDate)) {
$sql .= " AND DATE(payment_winpay.created_at) BETWEEN :start AND :end";
$params[':start'] = $startDate;
$params[':end'] = $endDate;
}
// =====================
// ORDER
// =====================
$sql .= " ORDER BY payment_winpay.created_at DESC";
// =====================
// EXECUTE
// =====================
$stmt = $pdo->prepare($sql);
$stmt->execute($params);
$data = $stmt->fetchAll(PDO::FETCH_ASSOC);
// =====================
// SPREADSHEET
// =====================
$spreadsheet = new Spreadsheet();
$sheet = $spreadsheet->getActiveSheet();
// =====================
// HEADER
// =====================
$headers = [
'No',
'Nama',
'ID Pelanggan',
'Alamat',
'Keterangan',
'Paket',
'Server',
'Marketing',
'No WhatsApp',
'TRX ID',
'Channel',
'Status',
'Amount',
'Fee',
'Nett',
'Dibuat',
'Tanggal Bayar'
];
$sheet->fromArray($headers, null, 'A1');
$sheet->getStyle('A1:P1')->getFont()->setBold(true);
// =====================
// DATA
// =====================
$row = 2;
$no = 1;
$totalAmount = 0;
$totalFee = 0;
$totalNett = 0;
foreach ($data as $d) {
$sheet->setCellValue("A{$row}", $no++);
$sheet->setCellValue("B{$row}", $d['nama']);
$sheet->setCellValue("C{$row}", "'" . $d['akun']);
$sheet->setCellValue("D{$row}", $d['alamat']);
$sheet->setCellValue("E{$row}", $d['keterangan']);
$sheet->setCellValue("F{$row}", $d['nama_paket']);
$sheet->setCellValue("G{$row}", $d['nama_server']);
$sheet->setCellValue("H{$row}", $d['nama_marketing']);
$sheet->setCellValue("I{$row}", "'" . $d['nomor_whatsapp']);
$sheet->setCellValue("J{$row}", "'" . $d['trx_id']);
$sheet->setCellValue("K{$row}", $d['channel']);
$sheet->setCellValue("L{$row}", $d['status']);
$sheet->setCellValue("M{$row}", (int)$d['amount']);
$sheet->setCellValue("N{$row}", (int)$d['fee']);
$sheet->setCellValue("O{$row}", (int)$d['nett']);
$sheet->setCellValue("P{$row}", $d['created_at']);
$sheet->setCellValue("Q{$row}", $d['paid_at']);
$totalAmount += (int)$d['amount'];
$totalFee += (int)$d['fee'];
$totalNett += (int)$d['nett'];
$row++;
}
// =====================
// TOTAL
// =====================
$sheet->setCellValue("L{$row}", "TOTAL");
$sheet->setCellValue("M{$row}", $totalAmount);
$sheet->setCellValue("N{$row}", $totalFee);
$sheet->setCellValue("O{$row}", $totalNett);
$sheet->getStyle("L{$row}:O{$row}")
->getFont()
->setBold(true);
// =====================
// FORMAT ANGKA RUPIAH
// =====================
$sheet->getStyle("L2:N{$row}")
->getNumberFormat()
->setFormatCode('#,##0');
// =====================
// AUTO WIDTH
// =====================
foreach (range('A', 'P') as $col) {
$sheet->getColumnDimension($col)->setAutoSize(true);
}
// =====================
// NAMA FILE
// =====================
$filename = 'Laporan_Payment_Gateway_' . date('YmdHis') . '.xlsx';
// =====================
// OUTPUT
// =====================
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Cache-Control: max-age=0');
$writer = new Xlsx($spreadsheet);
$writer->save('php://output');
exit;