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; } }