228 lines
5.1 KiB
PHP
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; |