[Refactor] Ubah format laporan
This commit is contained in:
parent
88207ea1fc
commit
97192bb05a
@ -57,15 +57,15 @@ class LaporanHelper
|
|||||||
$dataTerjual = $salesData->get($item->id);
|
$dataTerjual = $salesData->get($item->id);
|
||||||
return [
|
return [
|
||||||
'nama_produk' => $item->nama,
|
'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),
|
'berat_terjual' => $this->formatWeight($dataTerjual->berat_terjual),
|
||||||
'pendapatan' => $this->formatCurrency($dataTerjual->pendapatan),
|
'pendapatan' => $this->formatCurrency($dataTerjual->pendapatan),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
return [
|
return [ // Untuk kosong, return dengan 0 (akan difilter nanti)
|
||||||
'nama_produk' => $item->nama,
|
'nama_produk' => $item->nama,
|
||||||
'jumlah_item_terjual' => self::DEFAULT_DISPLAY,
|
'jumlah_item_terjual' => 0,
|
||||||
'berat_terjual' => self::DEFAULT_DISPLAY,
|
'berat_terjual' => self::DEFAULT_DISPLAY,
|
||||||
'pendapatan' => self::DEFAULT_DISPLAY,
|
'pendapatan' => self::DEFAULT_DISPLAY,
|
||||||
];
|
];
|
||||||
|
|||||||
@ -211,7 +211,7 @@ class ProdukController extends Controller
|
|||||||
$foto->delete();
|
$foto->delete();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hapus produk (soft delete)
|
$produk->items()->delete();
|
||||||
$produk->delete();
|
$produk->delete();
|
||||||
|
|
||||||
DB::commit();
|
DB::commit();
|
||||||
|
|||||||
@ -24,7 +24,7 @@ class Item extends Model
|
|||||||
parent::boot();
|
parent::boot();
|
||||||
|
|
||||||
static::creating(function ($item) {
|
static::creating(function ($item) {
|
||||||
$prefix = 'ITM';
|
$prefix = 'TMJC';
|
||||||
$date = now()->format('Ymd');
|
$date = now()->format('Ymd');
|
||||||
|
|
||||||
// Cari item terakhir yg dibuat hari ini
|
// Cari item terakhir yg dibuat hari ini
|
||||||
|
|||||||
@ -116,15 +116,25 @@ class LaporanService
|
|||||||
'berat_terjual' => $item->berat_terjual ? $this->helper->formatWeight($item->berat_terjual) : '-',
|
'berat_terjual' => $item->berat_terjual ? $this->helper->formatWeight($item->berat_terjual) : '-',
|
||||||
'pendapatan' => $item->pendapatan ? $this->helper->formatCurrency($item->pendapatan) : '-',
|
'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 ---
|
// --- Step 5: Assemble final response ---
|
||||||
$filterInfo = $this->helper->buildProdukFilterInfo($tanggal, $params);
|
$filterInfo = $this->helper->buildProdukFilterInfo($tanggal, $params);
|
||||||
|
|
||||||
return [
|
return [
|
||||||
'filter' => $filterInfo,
|
'filter' => $filterInfo,
|
||||||
'rekap_harian' => $rekapHarian,
|
'rekap_harian' => $rekapHarian,
|
||||||
'produk' => $detailItem,
|
// 'produk' => $detailItem,
|
||||||
|
'produk' => $paginatedFiltered->getCollection(),
|
||||||
'pagination' => $this->helper->buildPaginationInfo($semuaProdukPaginated),
|
'pagination' => $this->helper->buildPaginationInfo($semuaProdukPaginated),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
@ -151,14 +161,27 @@ class LaporanService
|
|||||||
|
|
||||||
$totals = $this->helper->calculateTotals($nampanTerjual);
|
$totals = $this->helper->calculateTotals($nampanTerjual);
|
||||||
$semuaNampanPaginated = $this->helper->getAllNampanWithPagination($page, $perPage);
|
$semuaNampanPaginated = $this->helper->getAllNampanWithPagination($page, $perPage);
|
||||||
$detailItem = $this->helper->mapNampanWithSalesData($semuaNampanPaginated, $nampanTerjual);
|
// $detailItem = $this->helper->mapNampanWithSalesData($semuaNampanPaginated, $nampanTerjual);
|
||||||
$filterInfo = $this->helper->buildNampanFilterInfo($tanggal, $params);
|
$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 [
|
return [
|
||||||
'filter' => $filterInfo,
|
'filter' => $filterInfo,
|
||||||
'rekap_harian' => $totals,
|
'rekap_harian' => $totals,
|
||||||
'nampan' => $detailItem->values(),
|
'nampan' => $paginatedFiltered->getCollection(),
|
||||||
'pagination' => $this->helper->buildPaginationInfo($semuaNampanPaginated),
|
'pagination' => $this->helper->buildPaginationInfo($paginatedFiltered),
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -280,6 +303,8 @@ class LaporanService
|
|||||||
'berat_terjual' => LaporanHelper::DEFAULT_DISPLAY,
|
'berat_terjual' => LaporanHelper::DEFAULT_DISPLAY,
|
||||||
'pendapatan' => LaporanHelper::DEFAULT_DISPLAY,
|
'pendapatan' => LaporanHelper::DEFAULT_DISPLAY,
|
||||||
];
|
];
|
||||||
|
})->filter(function ($item) {
|
||||||
|
return $item['jumlah_item_terjual'] > 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
$filterInfo = $this->helper->buildProdukFilterInfo($tanggal, $params);
|
$filterInfo = $this->helper->buildProdukFilterInfo($tanggal, $params);
|
||||||
@ -335,6 +360,8 @@ class LaporanService
|
|||||||
'berat_terjual' => LaporanHelper::DEFAULT_DISPLAY,
|
'berat_terjual' => LaporanHelper::DEFAULT_DISPLAY,
|
||||||
'pendapatan' => LaporanHelper::DEFAULT_DISPLAY,
|
'pendapatan' => LaporanHelper::DEFAULT_DISPLAY,
|
||||||
];
|
];
|
||||||
|
})->filter(function ($item) {
|
||||||
|
return $item['jumlah_item_terjual'] > 0;
|
||||||
});
|
});
|
||||||
|
|
||||||
$filterInfo = $this->helper->buildNampanFilterInfo($tanggal, $params);
|
$filterInfo = $this->helper->buildNampanFilterInfo($tanggal, $params);
|
||||||
|
|||||||
@ -33,11 +33,10 @@ class DatabaseSeeder extends Seeder
|
|||||||
User::factory(2)->create();
|
User::factory(2)->create();
|
||||||
Sales::factory(5)->create();
|
Sales::factory(5)->create();
|
||||||
|
|
||||||
$kodeNampan = ['A', 'B'];
|
for ($i=0; $i <= 30; $i++) {
|
||||||
foreach ($kodeNampan as $kode) {
|
if ($i != 13) {
|
||||||
for ($i=0; $i < 4; $i++) {
|
|
||||||
Nampan::factory()->create([
|
Nampan::factory()->create([
|
||||||
'nama' => $kode . ($i + 1) // A1, A2, ... B4
|
'nama' => 'A' . ($i + 1)
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -113,7 +113,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr v-else-if="!sortedNampan.length">
|
<tr v-else-if="sortedNampan.length == 0">
|
||||||
<td colspan="4" class="p-4 text-center">Tidak ada data untuk ditampilkan.</td>
|
<td colspan="4" class="p-4 text-center">Tidak ada data untuk ditampilkan.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<template v-else v-for="item in sortedNampan" :key="item.nama_nampan">
|
<template v-else v-for="item in sortedNampan" :key="item.nama_nampan">
|
||||||
@ -151,6 +151,7 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
<button @click="njir">njir</button>
|
||||||
</template>
|
</template>
|
||||||
|
|
||||||
<script setup>
|
<script setup>
|
||||||
@ -159,6 +160,10 @@ import InputSelect from './InputSelect.vue';
|
|||||||
import InputField from './InputField.vue';
|
import InputField from './InputField.vue';
|
||||||
import axios from 'axios';
|
import axios from 'axios';
|
||||||
|
|
||||||
|
const njir = ()=>{
|
||||||
|
console.log(sortedNampan.value);
|
||||||
|
|
||||||
|
}
|
||||||
// --- State ---
|
// --- State ---
|
||||||
const isExportOpen = ref(false);
|
const isExportOpen = ref(false);
|
||||||
const exportDropdownRef = ref(null);
|
const exportDropdownRef = ref(null);
|
||||||
|
|||||||
@ -279,10 +279,8 @@ async function deleteProduk() {
|
|||||||
products.value = products.value.filter((p) => p.id !== detail.value.id);
|
products.value = products.value.filter((p) => p.id !== detail.value.id);
|
||||||
deleting.value = false;
|
deleting.value = false;
|
||||||
showOverlay.value = false;
|
showOverlay.value = false;
|
||||||
alert("Produk berhasil dihapus!");
|
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("Gagal hapus produk:", err);
|
console.error("Gagal hapus produk:", err);
|
||||||
alert("Gagal menghapus produk!");
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user