Tambahkan menu expired gudang
This commit is contained in:
@@ -64,6 +64,7 @@ class GudangController extends Controller
|
||||
$tasks['stat_perjenis_bulanan'] = $this->getUsagePerJenis('bulanan');
|
||||
$tasks['stat_perjenis_tahunan'] = $this->getUsagePerJenis('tahunan');
|
||||
$tasks['warningstok'] = $this->getLowStockWarnings();
|
||||
$tasks['expiringSoon'] = $this->getExpiringSoonItems();
|
||||
$tasks['jenisRows'] = $this->getJenisRows();
|
||||
return view('admin.gudang', $tasks);
|
||||
}
|
||||
@@ -134,6 +135,7 @@ class GudangController extends Controller
|
||||
'pemasukan' => number_format( $pemasukan , 0 , '.' , ',' ),
|
||||
'pengeluaran' => number_format( $pengeluaran , 0 , '.' , ',' ),
|
||||
'jenis' => $rdata->jenis,
|
||||
'masa_expired' => $rdata->masa_expired,
|
||||
'keterangan' => $rdata->keterangan,
|
||||
'tgllengkap' => $tgllengkap,
|
||||
'total' => $total,
|
||||
@@ -142,6 +144,52 @@ class GudangController extends Controller
|
||||
echo json_encode($hasil);
|
||||
}
|
||||
|
||||
public function exportReportbhp(Request $request)
|
||||
{
|
||||
$bulan = strtoupper((string) $request->query('bulan', date('m')));
|
||||
$tahun = strtoupper((string) $request->query('tahun', date('Y')));
|
||||
|
||||
if ($tahun === 'ALL'){
|
||||
$bulan = date("m");
|
||||
$tahun = date("Y");
|
||||
$query = SIMBHPReport::where('bulan', (int) $bulan)->where('tahun', (int) $tahun);
|
||||
} else {
|
||||
$query = SIMBHPReport::where('tahun', (int) $tahun);
|
||||
if ($bulan !== 'ALL') {
|
||||
$query->where('bulan', (int) $bulan);
|
||||
}
|
||||
}
|
||||
|
||||
$rows = $query->orderBy('id', 'DESC')->get();
|
||||
$filename = 'laporan-gudang-bln-'.$bulan.'_thn-'.$tahun.'.csv';
|
||||
$headers = [
|
||||
'Content-Type' => 'text/csv; charset=UTF-8',
|
||||
'Content-Disposition' => 'attachment; filename="'.$filename.'"',
|
||||
];
|
||||
|
||||
$callback = function () use ($rows) {
|
||||
$file = fopen('php://output', 'w');
|
||||
fputcsv($file, ['Tanggal', 'Bulan', 'Tahun', 'Jenis', 'Deskripsi', 'Pemasukan', 'Pengeluaran', 'Satuan Transaksi', 'Masa Expired', 'Keterangan']);
|
||||
foreach ($rows as $row) {
|
||||
fputcsv($file, [
|
||||
$row->tanggal,
|
||||
$row->bulan,
|
||||
$row->tahun,
|
||||
$row->jenis,
|
||||
$row->deskripsi,
|
||||
(int) ($row->pemasukan ?? 0),
|
||||
(int) ($row->pengeluaran ?? 0),
|
||||
$row->satuan_transaksi ?: '-',
|
||||
$row->masa_expired ?: '-',
|
||||
$row->keterangan ?: '-',
|
||||
]);
|
||||
}
|
||||
fclose($file);
|
||||
};
|
||||
|
||||
return response()->stream($callback, 200, $headers);
|
||||
}
|
||||
|
||||
public function jsonReportbhpPaginated(Request $request) {
|
||||
$tanggal = $request->input('tanggal');
|
||||
$deskripsi = $request->input('deskripsi');
|
||||
@@ -208,6 +256,7 @@ class GudangController extends Controller
|
||||
'pemasukan' => number_format( $pemasukan , 0 , '.' , ',' ),
|
||||
'pengeluaran' => number_format( $pengeluaran , 0 , '.' , ',' ),
|
||||
'jenis' => $kodejenis,
|
||||
'masa_expired' => $rdata->masa_expired,
|
||||
'keterangan' => $rdata->keterangan,
|
||||
'tgllengkap' => $tgllengkap,
|
||||
'created_at' => $rdata->created_at,
|
||||
@@ -237,6 +286,7 @@ class GudangController extends Controller
|
||||
$set09 = $request->input('set09');
|
||||
$set10 = $request->input('set10');
|
||||
$satuanTransaksi = $request->input('set11');
|
||||
$masaExpired = $this->normalizeDateInput($request->input('set12'));
|
||||
if ($tanggal == '' OR is_null($tanggal)){
|
||||
$tanggal = date("d-m-Y");
|
||||
}
|
||||
@@ -317,6 +367,7 @@ class GudangController extends Controller
|
||||
'pengeluaran' => null,
|
||||
'qty_base' => $qtyBase,
|
||||
'satuan_transaksi' => $satuanTransaksi ?: 'besar',
|
||||
'masa_expired' => $masaExpired,
|
||||
'jenis' => $pos,
|
||||
'keterangan' => '',
|
||||
'marking' => '',
|
||||
@@ -387,6 +438,7 @@ class GudangController extends Controller
|
||||
'pemasukan' => $total,
|
||||
'qty_base' => $qtyBaseEdit,
|
||||
'satuan_transaksi' => $satuanEdit,
|
||||
'masa_expired' => $masaExpired,
|
||||
'keterangan' => $alasan,
|
||||
'updated_at' => date("Y-m-d H:i:s")
|
||||
]);
|
||||
@@ -592,6 +644,50 @@ class GudangController extends Controller
|
||||
return $warnings;
|
||||
}
|
||||
|
||||
private function getExpiringSoonItems()
|
||||
{
|
||||
$today = date('Y-m-d');
|
||||
$limitDate = date('Y-m-d', strtotime('+30 days'));
|
||||
|
||||
$rows = SIMBHPReport::whereNotNull('masa_expired')
|
||||
->whereNotNull('pemasukan')
|
||||
->where('pemasukan', '>', 0)
|
||||
->where('masa_expired', '>=', $today)
|
||||
->where('masa_expired', '<=', $limitDate)
|
||||
->orderBy('masa_expired', 'ASC')
|
||||
->orderBy('id', 'DESC')
|
||||
->get();
|
||||
|
||||
$items = [];
|
||||
foreach ($rows as $row) {
|
||||
$expiredAt = (string) $row->masa_expired;
|
||||
$daysLeft = (int) floor((strtotime($expiredAt) - strtotime($today)) / 86400);
|
||||
if ($daysLeft < 0) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$badge = 'warning';
|
||||
if ($daysLeft <= 7) {
|
||||
$badge = 'danger';
|
||||
} elseif ($daysLeft <= 14) {
|
||||
$badge = 'warning';
|
||||
}
|
||||
|
||||
$items[] = [
|
||||
'jenis' => $row->jenis ?: '-',
|
||||
'deskripsi' => $row->deskripsi ?: '-',
|
||||
'qty' => (int) ($row->pemasukan ?? 0),
|
||||
'satuan' => $row->satuan_transaksi ?: 'besar',
|
||||
'tanggal_masuk' => sprintf('%02d-%02d-%04d', (int) $row->tanggal, (int) $row->bulan, (int) $row->tahun),
|
||||
'masa_expired' => date('d-m-Y', strtotime($expiredAt)),
|
||||
'sisa_hari' => $daysLeft,
|
||||
'badge' => $badge,
|
||||
];
|
||||
}
|
||||
|
||||
return $items;
|
||||
}
|
||||
|
||||
private function getAggregateBaseQty($direction, $scope = 'harian')
|
||||
{
|
||||
$now = date('Y-m-d');
|
||||
@@ -656,6 +752,25 @@ class GudangController extends Controller
|
||||
return array_values($grouped);
|
||||
}
|
||||
|
||||
private function normalizeDateInput($value)
|
||||
{
|
||||
$value = trim((string) $value);
|
||||
if ($value === '') {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (preg_match('/^\d{4}-\d{2}-\d{2}$/', $value)) {
|
||||
return $value;
|
||||
}
|
||||
|
||||
if (preg_match('/^\d{2}-\d{2}-\d{4}$/', $value)) {
|
||||
$parts = explode('-', $value);
|
||||
return $parts[2].'-'.$parts[1].'-'.$parts[0];
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
private function getJenisRows()
|
||||
{
|
||||
$rows = [];
|
||||
|
||||
Reference in New Issue
Block a user