Kasir/app/Exports/RingkasanExport.php
2025-09-09 11:59:00 +07:00

82 lines
2.0 KiB
PHP

<?php
namespace App\Exports;
use Maatwebsite\Excel\Concerns\FromCollection;
use Maatwebsite\Excel\Concerns\WithHeadings;
use Maatwebsite\Excel\Concerns\WithTitle;
use Maatwebsite\Excel\Concerns\WithStyles;
use PhpOffice\PhpSpreadsheet\Worksheet\Worksheet;
class RingkasanExport implements FromCollection, WithHeadings, WithTitle, WithStyles
{
private $data;
private $page;
public function __construct(iterable $data, $page = 1)
{
$this->data = $data;
$this->page = $page;
}
public function collection()
{
$collection = collect();
$items = method_exists($this->data, 'items') ? $this->data->items() : $this->data;
foreach ($items as $item) {
$collection->push([
'Tanggal' => $item['tanggal'] ?? '-',
'Total Item Terjual' => $item['total_item_terjual'] ?? 0,
'Total Berat' => $item['total_berat'] ?? 0,
'Total Pendapatan' => $item['total_pendapatan'] ?? 0,
'Detail Sales' => $this->formatSalesData($item['sales'] ?? []),
]);
}
return $collection;
}
public function headings(): array
{
return [
'Tanggal',
'Total Item Terjual',
'Total Berat',
'Total Pendapatan',
'Detail Sales'
];
}
public function title(): string
{
return "Ringkasan Halaman {$this->page}";
}
public function styles(Worksheet $sheet)
{
return [
1 => ['font' => ['bold' => true]],
];
}
private function formatSalesData($sales): string
{
if (empty($sales)) {
return '-';
}
$formatted = [];
foreach ($sales as $sale) {
$nama = $sale['nama'] ?? 'Sales Tidak Dikenal';
$itemTerjual = $sale['item_terjual'] ?? 0;
$pendapatan = $sale['pendapatan'] ?? '-';
$formatted[] = "{$nama}: {$itemTerjual} item, {$pendapatan}";
}
return implode('; ', $formatted);
}
}