Files
portal-api/app/Exports/TransactionsExport.php

68 lines
2.0 KiB
PHP

<?php
namespace App\Exports;
use App\Enums\TransactionStatus;
use App\Models\Transaction;
use Illuminate\Database\Eloquent\Builder;
final class TransactionsExport implements BrandedReport
{
public function __construct(private readonly Builder $query) {}
public function title(): string
{
return 'Danh sách giao dịch nạp tiền';
}
public function query(): Builder
{
return $this->query;
}
public function moneyColumns(): array
{
return ['E', 'F', 'G'];
}
public function headings(): array
{
return [
'Mã giao dịch', 'Khách hàng', 'Email', 'Số điện thoại', 'Khách khai', 'Thực nhận', 'Chênh lệch',
'Trạng thái', 'Chứng từ', 'Người nạp', 'Ghi chú', 'Ngày tạo',
];
}
/**
* @param Transaction $transaction
*/
public function map($transaction): array
{
$received = $transaction->received_amount === null ? null : (int) $transaction->received_amount;
return [
$transaction->public_code ?? $transaction->trans,
$transaction->customer?->fullname,
$transaction->customer?->email,
$transaction->customer?->phone,
(int) $transaction->amount,
$received,
$received === null ? null : $received - (int) $transaction->amount,
$this->statusLabel($transaction),
$transaction->proof_image ? 'Có' : 'Không',
$transaction->user?->name ?: $transaction->user?->username,
$transaction->note,
$transaction->created_at?->format('d/m/Y H:i'),
];
}
private function statusLabel(Transaction $transaction): string
{
if ((int) $transaction->status === TransactionStatus::PENDING->value && ! $transaction->proof_image) {
return 'Chưa gửi chứng từ';
}
return TransactionStatus::tryFrom((int) $transaction->status)?->label() ?? (string) $transaction->status;
}
}