Files
admin-erahn/app/Exports/BakiLelongSummaryExport.php
2025-06-11 12:31:24 +08:00

135 lines
4.4 KiB
PHP

<?php
namespace App\Exports;
use Illuminate\Contracts\View\View;
use Maatwebsite\Excel\Concerns\FromView;
use Maatwebsite\Excel\Concerns\ShouldAutoSize;
use Maatwebsite\Excel\Concerns\WithColumnFormatting;
use Maatwebsite\Excel\Concerns\WithColumnWidths;
use Maatwebsite\Excel\Concerns\WithCustomValueBinder;
use Maatwebsite\Excel\Concerns\WithEvents;
use PhpOffice\PhpSpreadsheet\Cell\Cell;
use PhpOffice\PhpSpreadsheet\Cell\DataType;
use PhpOffice\PhpSpreadsheet\Cell\DefaultValueBinder;
use PhpOffice\PhpSpreadsheet\Style\NumberFormat;
use Maatwebsite\Excel\Concerns\WithTitle;
class BakiLelongSummaryExport extends DefaultValueBinder implements FromView, ShouldAutoSize, WithCustomValueBinder, WithColumnWidths, WithEvents, WithColumnFormatting, WithTitle
{
public $cawangan_detail;
public $query;
public $teller_with_lelongan_summary_data;
public $summary_lelongan;
public $isByTeller;
public function __construct($cawangan_detail, $query, $teller_with_lelongan_data, $summary_lelongan, $isByTeller = true)
{
$this->cawangan_detail = $cawangan_detail;
$this->query = $query;
$this->teller_with_lelongan_summary_data = $teller_with_lelongan_data;
$this->summary_lelongan = $summary_lelongan;
$this->isByTeller = $isByTeller;
}
public function title(): string
{
return 'SUMMARY LELONGAN';
}
public function bindValue(Cell $cell, $value)
{
if (is_numeric($value)) {
$cell->setValueExplicit($value, DataType::TYPE_NUMERIC);
return true;
}
// else return default behavior
return parent::bindValue($cell, $value);
}
public function columnWidths(): array
{
return [
'A' => 28,
'B' => 14.67,
'C' => 16.00,
'D' => 14.18,
];
}
public function columnFormats(): array
{
return [
'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,
'C' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
'D' => NumberFormat::FORMAT_NUMBER_COMMA_SEPARATED1,
];
}
public function registerEvents(): array
{
$table_style = [
'borders' => [
'allBorders' => [
'borderStyle' => \PhpOffice\PhpSpreadsheet\Style\Border::BORDER_THIN,
'color' => ['argb' => '#000000'],
],
],
];
$main_table_row_count = count($this->teller_with_lelongan_summary_data) + 1;
$main_table_start_at_row = 9;
$main_table_range = 'A' . $main_table_start_at_row . ':J' . ($main_table_row_count + $main_table_start_at_row);
$summary_table_row_count = 1;
$summary_table_start_at_row = $main_table_row_count + $main_table_start_at_row + 5;
$summary_table_range = 'A' . $summary_table_start_at_row . ':I' . ($summary_table_row_count + $summary_table_start_at_row);
$summary_table_column_head = 'A' . $summary_table_start_at_row . ':F' . $summary_table_start_at_row;
return [];
}
public function view(): View
{
$data = $this->teller_with_lelongan_summary_data;
if (!$this->isByTeller) {
// Gabung semua teller jadi 1 baris jumlah
$total = [
'jumlah_lelongan' => 0,
'jumlah_harga' => 0,
'jumlah_baki' => 0,
// ... fields lain
];
foreach ($data as $row) {
$total['jumlah_lelongan'] += $row['jumlah_lelongan'];
$total['jumlah_harga'] += $row['jumlah_harga'];
$total['jumlah_baki'] += $row['jumlah_baki'];
// ... jumlahkan field lain
}
$data = [$total]; // Gantikan data kepada 1 baris gabungan
}
return view('exports.bakilelong.summary', [
'cawangan_detail' => $this->cawangan_detail,
'query' => $this->query,
'teller_with_lelongan_data' => $data,
'summary_lelongan' => $this->summary_lelongan,
]);
}
}