Files
admin-erahn/app/Exports/LaporanKeseluruhan/LelonganAllExportExcel.php
T
2026-01-27 16:50:52 +08:00

185 lines
5.8 KiB
PHP

<?php
namespace App\Exports\LaporanKeseluruhan;
use Maatwebsite\Excel\Concerns\FromArray;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithCustomValueBinder;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithMapping;
use Maatwebsite\Excel\Concerns\WithStrictNullComparison;
use PhpOffice\PhpSpreadsheet\Cell\Cell;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
class LelonganAllExportExcel extends DefaultValueBinder implements FromArray, WithStrictNullComparison, WithMapping, WithHeadings, ShouldAutoSize, WithCustomValueBinder, WithColumnFormatting
{
public $data;
public function __construct($data)
{
$this->data = $data;
}
public function headings(): array
{
return [
'Cawangan',
'Bilangan Pembiayaan',
'Berat',
'Nilai Marhun',
'Pembiayaan (RM)',
'Baki Pembiayaan (RM)',
'Keuntungan (RM)',
'Caj Lelong (RM)',
'Harga Asas (RM)',
'Harga Jual (RM)',
'Baki (RM)',
];
}
public function array(): array
{
// dd($this->data);
if (empty($this->data)) {
return [];
}
// Initialize an array to store formatted data
$formattedData = [];
// Initialize totals
$total_lelongan = 0;
$sum_berat = 0;
$sum_nilai_marhun = 0;
$sum_bakipjm = 0;
$sum_pinjaman = 0;
$sum_bakiupah = 0;
$sum_cajlelong = 0;
$sum_hargaasas = 0;
$sum_hargajual = 0;
$sum_baki = 0;
// Process data
foreach ($this->data as $index => $data) {
// Make sure all expected keys exist before accessing them
$formattedData[] = [
$data['details_caw'] ?? 'N/A',
$data['total_lelongan'] ?? 0,
number_format((float) ($data['sum_berat'] ?? 0), 2),
number_format((float) ($data['sum_nilai_marhun'] ?? 0), 2),
number_format((float) ($data['sum_pinjaman'] ?? 0), 2),
number_format((float) ($data['sum_bakipjm'] ?? 0), 2),
number_format((float) ($data['sum_bakiupah'] ?? 0), 2),
number_format((float) ($data['sum_cajlelong'] ?? 0), 2),
number_format((float) ($data['sum_hargaasas'] ?? 0), 2),
number_format((float) ($data['sum_hargajual'] ?? 0), 2),
number_format((float) ($data['sum_baki'] ?? 0), 2),
];
// Update totals
$total_lelongan += (int) $data['total_lelongan'];
$sum_berat += (float) $data['sum_berat'];
$sum_nilai_marhun += (float) $data['sum_nilai_marhun'];
$sum_pinjaman += (float) $data['sum_pinjaman'];
$sum_bakipjm += (float) $data['sum_bakipjm'];
$sum_bakiupah += (float) $data['sum_bakiupah'];
$sum_cajlelong += (float) $data['sum_cajlelong'];
$sum_hargaasas += (float) $data['sum_hargaasas'];
$sum_hargajual += (float) $data['sum_hargajual'];
$sum_baki += (float) $data['sum_baki'];
}
// Append total row
$formattedData[] = [
'Jumlah Keseluruhan',
$total_lelongan,
number_format($sum_berat, 2),
number_format($sum_nilai_marhun, 2),
number_format($sum_pinjaman, 2),
number_format($sum_bakipjm, 2),
number_format($sum_bakiupah, 2),
number_format($sum_cajlelong, 2),
number_format($sum_hargaasas, 2),
number_format($sum_hargajual, 2),
number_format($sum_baki, 2),
];
return $formattedData;
}
public function startCell(): string
{
return 'B2';
}
public function map($data): array
{
return [
$data[0] ?? 'N/A', // Cawangan
(int) ($data[1] ?? 0), // Bilangan Pembiayaan
(float) str_replace(',', '', $data[2] ?? 0), // Berat (remove commas)
(float) str_replace(',', '', $data[3] ?? 0), // Nilai Marhun
(float) str_replace(',', '', $data[4] ?? 0), // Baki Pembiayaan
(float) str_replace(',', '', $data[5] ?? 0), // Pembiayaan
(float) str_replace(',', '', $data[6] ?? 0), // Upah Belum Bayar
(float) str_replace(',', '', $data[7] ?? 0), // Total Untung 1%
(float) str_replace(',', '', $data[8] ?? 0), // Total Ujrah
(float) str_replace(',', '', $data[9] ?? 0), // Total Ujrah
(float) str_replace(',', '', $data[10] ?? 0), // Total Ujrah
];
}
public function columnWidths(): array
{
return [
'A' => 20.5,
'B' => 42,
'C' => 14.18,
'D' => 14.18,
'E' => 9.19,
'F' => 27.5,
];
}
public function columnFormats(): array
{
return [
'D' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'E' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'F' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'G' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'H' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'I' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'J' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'K' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'L' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'M' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
];
}
public function bindValue(Cell $cell, $value)
{
if (is_numeric($value) && !is_string($value)) {
// Ensure value is treated as a number
$cell->setValueExplicit((float) $value, DataType::TYPE_NUMERIC);
return true;
}
return parent::bindValue($cell, $value);
}
}