82 lines
2.0 KiB
PHP
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);
|
|
}
|
|
}
|