From 97192bb05a27860db5aa9c83372180d8a5d12a45 Mon Sep 17 00:00:00 2001 From: Baghaztra Date: Fri, 19 Sep 2025 10:27:47 +0700 Subject: [PATCH] [Refactor] Ubah format laporan --- app/Helpers/LaporanHelper.php | 6 ++-- app/Http/Controllers/ProdukController.php | 2 +- app/Models/Item.php | 2 +- app/Services/LaporanService.php | 35 ++++++++++++++++++--- database/seeders/DatabaseSeeder.php | 7 ++--- resources/js/components/DetailPerNampan.vue | 7 ++++- resources/js/pages/Produk.vue | 2 -- 7 files changed, 45 insertions(+), 16 deletions(-) diff --git a/app/Helpers/LaporanHelper.php b/app/Helpers/LaporanHelper.php index 700c9b1..4632d09 100644 --- a/app/Helpers/LaporanHelper.php +++ b/app/Helpers/LaporanHelper.php @@ -57,15 +57,15 @@ class LaporanHelper $dataTerjual = $salesData->get($item->id); return [ 'nama_produk' => $item->nama, - 'jumlah_item_terjual' => (int) $dataTerjual->jumlah_item_terjual, + 'jumlah_item_terjual' => (int) $dataTerjual->jumlah_item_terjual, // Selalu int 'berat_terjual' => $this->formatWeight($dataTerjual->berat_terjual), 'pendapatan' => $this->formatCurrency($dataTerjual->pendapatan), ]; } - return [ + return [ // Untuk kosong, return dengan 0 (akan difilter nanti) 'nama_produk' => $item->nama, - 'jumlah_item_terjual' => self::DEFAULT_DISPLAY, + 'jumlah_item_terjual' => 0, 'berat_terjual' => self::DEFAULT_DISPLAY, 'pendapatan' => self::DEFAULT_DISPLAY, ]; diff --git a/app/Http/Controllers/ProdukController.php b/app/Http/Controllers/ProdukController.php index 681189a..09b1177 100644 --- a/app/Http/Controllers/ProdukController.php +++ b/app/Http/Controllers/ProdukController.php @@ -211,7 +211,7 @@ class ProdukController extends Controller $foto->delete(); } - // Hapus produk (soft delete) + $produk->items()->delete(); $produk->delete(); DB::commit(); diff --git a/app/Models/Item.php b/app/Models/Item.php index 7fcec9e..1fdd3b6 100644 --- a/app/Models/Item.php +++ b/app/Models/Item.php @@ -24,7 +24,7 @@ class Item extends Model parent::boot(); static::creating(function ($item) { - $prefix = 'ITM'; + $prefix = 'TMJC'; $date = now()->format('Ymd'); // Cari item terakhir yg dibuat hari ini diff --git a/app/Services/LaporanService.php b/app/Services/LaporanService.php index 660de9f..c3b8b40 100644 --- a/app/Services/LaporanService.php +++ b/app/Services/LaporanService.php @@ -116,15 +116,25 @@ class LaporanService 'berat_terjual' => $item->berat_terjual ? $this->helper->formatWeight($item->berat_terjual) : '-', 'pendapatan' => $item->pendapatan ? $this->helper->formatCurrency($item->pendapatan) : '-', ]; + })->filter(function ($item) { + return $item['jumlah_item_terjual'] > 0; }); + $paginatedFiltered = new \Illuminate\Pagination\LengthAwarePaginator( + $detailItem->forPage($page, $perPage), + $detailItem->count(), + $perPage, + $page, + ['path' => request()->url(), 'query' => request()->query()] + ); // --- Step 5: Assemble final response --- $filterInfo = $this->helper->buildProdukFilterInfo($tanggal, $params); return [ 'filter' => $filterInfo, 'rekap_harian' => $rekapHarian, - 'produk' => $detailItem, + // 'produk' => $detailItem, + 'produk' => $paginatedFiltered->getCollection(), 'pagination' => $this->helper->buildPaginationInfo($semuaProdukPaginated), ]; } @@ -151,14 +161,27 @@ class LaporanService $totals = $this->helper->calculateTotals($nampanTerjual); $semuaNampanPaginated = $this->helper->getAllNampanWithPagination($page, $perPage); - $detailItem = $this->helper->mapNampanWithSalesData($semuaNampanPaginated, $nampanTerjual); + // $detailItem = $this->helper->mapNampanWithSalesData($semuaNampanPaginated, $nampanTerjual); $filterInfo = $this->helper->buildNampanFilterInfo($tanggal, $params); + $detailItem = $this->helper->mapNampanWithSalesData($semuaNampanPaginated, $nampanTerjual) + ->filter(function ($item) { // TAMBAH: Filter out kosong + return $item['jumlah_item_terjual'] !== $this->helper::DEFAULT_DISPLAY && $item['jumlah_item_terjual'] > 0; + }); + + // Rebuild paginator serupa seperti di atas + $paginatedFiltered = new \Illuminate\Pagination\LengthAwarePaginator( + $detailItem->forPage($page, $perPage), + $detailItem->count(), + $perPage, + $page, + ['path' => request()->url(), 'query' => request()->query()] + ); return [ 'filter' => $filterInfo, 'rekap_harian' => $totals, - 'nampan' => $detailItem->values(), - 'pagination' => $this->helper->buildPaginationInfo($semuaNampanPaginated), + 'nampan' => $paginatedFiltered->getCollection(), + 'pagination' => $this->helper->buildPaginationInfo($paginatedFiltered), ]; } @@ -280,6 +303,8 @@ class LaporanService 'berat_terjual' => LaporanHelper::DEFAULT_DISPLAY, 'pendapatan' => LaporanHelper::DEFAULT_DISPLAY, ]; + })->filter(function ($item) { + return $item['jumlah_item_terjual'] > 0; }); $filterInfo = $this->helper->buildProdukFilterInfo($tanggal, $params); @@ -335,6 +360,8 @@ class LaporanService 'berat_terjual' => LaporanHelper::DEFAULT_DISPLAY, 'pendapatan' => LaporanHelper::DEFAULT_DISPLAY, ]; + })->filter(function ($item) { + return $item['jumlah_item_terjual'] > 0; }); $filterInfo = $this->helper->buildNampanFilterInfo($tanggal, $params); diff --git a/database/seeders/DatabaseSeeder.php b/database/seeders/DatabaseSeeder.php index 3e7500e..3e78d69 100644 --- a/database/seeders/DatabaseSeeder.php +++ b/database/seeders/DatabaseSeeder.php @@ -33,11 +33,10 @@ class DatabaseSeeder extends Seeder User::factory(2)->create(); Sales::factory(5)->create(); - $kodeNampan = ['A', 'B']; - foreach ($kodeNampan as $kode) { - for ($i=0; $i < 4; $i++) { + for ($i=0; $i <= 30; $i++) { + if ($i != 13) { Nampan::factory()->create([ - 'nama' => $kode . ($i + 1) // A1, A2, ... B4 + 'nama' => 'A' . ($i + 1) ]); } } diff --git a/resources/js/components/DetailPerNampan.vue b/resources/js/components/DetailPerNampan.vue index c7834e1..21865d4 100644 --- a/resources/js/components/DetailPerNampan.vue +++ b/resources/js/components/DetailPerNampan.vue @@ -113,7 +113,7 @@ - + Tidak ada data untuk ditampilkan.