subYear()->format('Y'); $safetyStockMonthly = []; $currentStockPerBarang = []; // $barangKeluarThisMonthPerSize = []; // $ukuran_barang = Barang::groupBy("ukuran")->get(); // // dd($ukuran_barang); // foreach($ukuran_barang as $val){ // $barangKeluarThisMonthPerSize[$val->ukuran] = 0; // } $barangKeluarThisMonthPerSize = [ 'NBS' => 0, 'S' => 0, 'M' => 0, 'L' => 0, 'XL' => 0, 'XXL' => 0, ]; $barang = Barang:: selectRaw("barang.*,barang.id as barang_id,(IFNULL(jumlah_beli,0)-IFNULL(jumlah_jual,0)) as stok_terbaru") ->join("kategori","id_kategori","kategori.id") ->leftJoin(DB::raw('(SELECT barang_id,SUM(qty_beli) as jumlah_beli from list_item_pembelian group by barang_id) as data_beli'), function($join) { $join->on('barang.id', '=', 'data_beli.barang_id'); } ) ->leftJoin(DB::raw('(SELECT barang_id,SUM(qty) as jumlah_jual from list_item_penjualan group by barang_id) as data_jual'), function($join) { $join->on('barang.id', '=', 'data_jual.barang_id'); } ) ->groupBy("barang.id") ->get(); // dd($barang); $res_barang = []; $safetyStockMonthly = []; $currentStockPerBarang = []; foreach($barang as $item){ $penjualans = Penjualan::join("list_item_penjualan","penjualan.id","penjualan_id") ->selectRaw("SUM(qty) as demand") ->where("barang_id",$item->id) ->whereYear("list_item_penjualan.created_at",date("Y")-1) ->first(); $max = Penjualan::join("list_item_penjualan","penjualan.id","penjualan_id") ->selectRaw("SUM(qty) as qty_harian") ->where("barang_id",$item->id) ->whereYear("list_item_penjualan.created_at",date("Y")-1) ->groupBy(DB::raw("DATE_FORMAT(list_item_penjualan.created_at, '%Y-%m-%d')")) ->get(); $harian = []; foreach($max as $a){ array_push($harian,$a->qty_harian); } if(count($harian) > 0){ $max_sales = max($harian); }else{ $max_sales = 1; } $demand =$penjualans->demand; $item->demand = $demand; $average = $demand/365; $item->average = round($average); $orderingCost = $item->biaya_pemesanan; $orderingCost = $orderingCost==0 || $orderingCost==NULL ?1:$orderingCost; $eoq_annual = sqrt((2 * $demand * $orderingCost ) / $item->holding_cost); $eoq_annual = $eoq_annual==0?1:$eoq_annual; $pemesanan = $demand/$eoq_annual; $safety_stock = ($max_sales * $item->lead_time_variance) - ($average * $item->lead_time); $rop = ($average* $item->lead_time) + $safety_stock ; $item->max_qty = $max_sales; $item->pemesanan = round($pemesanan); $item->eoq_annual = round($eoq_annual); $item->safety_stock = round($safety_stock); $item->rop = $rop; array_push($res_barang,$item); $currentStockPerBarang[$item->nama] = $item->stok_terbaru; $safetyStockMonthly[$item->nama] = round($safety_stock); $update_barang = Barang::find($item->id); $update_barang->update([ 'demand' => $demand, 'eoq_annual' => $eoq_annual, 'safety_stok' => $safety_stock, 'pemesanan' => $pemesanan, 'rop' => $rop, 'max_sales' => $max_sales ]); } // dd($res_barang); //Bulan Ini $totalHargaJual = 0; $totalModal = 0; $totalBarangTerjual = 0; $penjualan_bulan_ini = Penjualan::with('listItem.barang') ->whereMonth('created_at', date("m")) ->whereYear('created_at', date("Y")) ->orderBy("id","DESC") ->get(); $barangKeluarThisMonthPerBarang = []; // dd($penjualan_bulan_ini); foreach ($penjualan_bulan_ini as $penjualan) { foreach ($penjualan->listItem as $listItem) { $totalHargaJual += (int) $listItem->barang->harga_jual * $listItem->qty; $totalModal += (int) $listItem->barang->harga_beli * $listItem->qty; $totalBarangTerjual += $listItem->qty; // echo $listItem->nama_barang."
"; if (array_key_exists($listItem->barang->nama,$barangKeluarThisMonthPerBarang)) { $barangKeluarThisMonthPerBarang[$listItem->barang->nama] += $listItem->qty; }else{ $barangKeluarThisMonthPerBarang[$listItem->barang->nama] = $listItem->qty; } if(array_key_exists($listItem->barang->ukuran,$barangKeluarThisMonthPerSize)){ $barangKeluarThisMonthPerSize[$listItem->barang->ukuran] += $listItem->qty; } } } // dd($barangKeluarThisMonthPerBarang); $totalPendapatan = $totalHargaJual - $totalModal; $data = [ 'title' => 'Dashboard', 'barang' => Barang::count(), 'totalPenjualan' => $this->formatIDR($totalHargaJual), 'totalPendapatan' => $this->formatIDR($totalPendapatan), 'SSperBarang' => $safetyStockMonthly, 'currentStockPerBarang' => $currentStockPerBarang, 'barangKeluarThisMonthPerBarang' =>$barangKeluarThisMonthPerBarang, 'barangKeluarThisMonthPerSize' => $barangKeluarThisMonthPerSize ]; return view('page.dashboard.index', compact('data')); } // public function index() // { // $penjualans = Penjualan::with('listItem')->get(); // $totalHargaJual = 0; // $totalModal = 0; // $pendapatanPerBulan = []; // $lastYear = now()->subYear()->format('Y'); // // dd($lastYear); // $safetyStockMonthly = []; // $currentStockPerBarang = []; // $barangKeluarThisMonthPerSize = [ // 'NBS' => 0, // 'S' => 0, // 'M' => 0, // 'L' => 0, // 'XL' => 0, // 'XXL' => 0, // ]; // $barang = Barang:: // selectRaw("barang.*,barang.id as barang_id,barang.nama as nama_barang,kategori.*,(IFNULL(jumlah_beli,0)-IFNULL(jumlah_jual,0)) as stok_terbaru") // ->join("kategori","id_kategori","kategori.id") // ->leftJoin(DB::raw('(SELECT barang_id,SUM(qty_beli) as jumlah_beli from list_item_pembelian group by barang_id) as // data_beli'), // function($join) // { // $join->on('barang.id', '=', 'data_beli.barang_id'); // } // ) // ->leftJoin(DB::raw('(SELECT barang_id,SUM(qty) as jumlah_jual from list_item_penjualan group by barang_id) as // data_jual'), // function($join) // { // $join->on('barang.id', '=', 'data_jual.barang_id'); // } // ) // ->groupBy("barang.id") // ->get(); // // $monthyear_now = date("Ym"); // // $barang_new = Barang::with('kategori', 'listpenjualan') // // ->where // // ->get(); // foreach ($penjualans as $penjualan) { // foreach ($penjualan->listItem as $listItem) { // $totalHargaJual += (int) $listItem->barang->harga_jual * $listItem->qty; // $totalModal += (int) $listItem->barang->harga_beli * $listItem->qty; // $month = $penjualan->created_at->format('Y-m'); // if (!isset($pendapatanPerBulan[$month])) { // $pendapatanPerBulan[$month] = [ // 'totalHargaJual' => 0, // 'totalModal' => 0, // ]; // } // $pendapatanPerBulan[$month]['totalHargaJual'] += (int) $listItem->barang->harga_jual * $listItem->qty; // $pendapatanPerBulan[$month]['totalModal'] += (int) $listItem->barang->harga_beli * $listItem->qty; // } // } // $thisMonth = Carbon::now()->format('Y-m'); // if (!array_key_exists($thisMonth,$pendapatanPerBulan)){ // $pendapatanPerBulan[$thisMonth]['totalHargaJual'] = 0; // $pendapatanPerBulan[$thisMonth]['totalModal'] = 0; // } // $totalPendapatan = $pendapatanPerBulan[$thisMonth]['totalHargaJual'] - $pendapatanPerBulan[$thisMonth]['totalModal']; // $hitungPenjualanPerhariSelamaSeminggu = []; // $startOfWeek = now()->startOfWeek(); // $endOfWeek = now()->endOfWeek(); // for ($date = $startOfWeek; $date <= $endOfWeek; $date->addDay()) { // $totalPenjualanHarian = Penjualan::whereDate('created_at', $date)->count(); // $hitungPenjualanPerhariSelamaSeminggu[$date->format('Y-m-d')] = $totalPenjualanHarian; // } // $barangKeluarPerBulan = []; // $listItems = ListItemPenjualan::with('barang')->get(); // foreach ($listItems as $listItem) { // $month = $listItem->created_at->format('Y-m'); // if (!isset($barangKeluarPerBulan[$month])) { // $barangKeluarPerBulan[$month] = 0; // } // $barangKeluarPerBulan[$month] += $listItem->qty; // } // foreach($barang as $index => $item) { // $lastYearTotal = 0; // $lastYearCount = 0; // $maxLastYearQty = 0; // $salesPerDay = []; // $highestSalesPerDay = []; // $barangKeluarThisMonthPerBarang = []; // $listItems = ListItemPenjualan::with('barang') // ->whereYear('created_at', now()->year) // ->whereMonth('created_at', now()->month) // ->get(); // foreach ($listItems as $listItem) { // $namaBarang = $listItem->barang->nama; // if (!isset($barangKeluarThisMonthPerBarang[$namaBarang])) { // $barangKeluarThisMonthPerBarang[$namaBarang] = 0; // } // $barangKeluarThisMonthPerBarang[$namaBarang] += $listItem->qty; // } // if (!empty($item->listpenjualan)) { // foreach ($item->listpenjualan as $penjualan) { // if (substr($penjualan->penjualan->created_at, 0, 4) === $lastYear) { // $lastYearTotal += $penjualan->qty; // $lastYearCount++; // if ($penjualan->qty > $maxLastYearQty) { // $maxLastYearQty = $penjualan->qty; // } // $saleDate = substr($penjualan->penjualan->created_at, 0, 10); // $qty = $penjualan->qty; // if (!isset($salesPerDay[$saleDate])) { // $salesPerDay[$saleDate] = $qty; // } else { // $salesPerDay[$saleDate] += $qty; // } // if (!isset($highestSalesPerDay[$saleDate])) { // $highestSalesPerDay[$saleDate] = $qty; // } else { // $highestSalesPerDay[$saleDate] += $qty; // } // } // } // } // if ($lastYearTotal > 0) { // $averageQtyPerDay = array_sum($highestSalesPerDay) / count($highestSalesPerDay); // $maxSalesPerDay = max($highestSalesPerDay); // $orderingCost = $item->biaya_pemesanan; // $orderingCost = $orderingCost==0?1:$orderingCost; // $EOQAnnual = sqrt((2 * $item->demand * $orderingCost ) / $item->holding_cost); // $Pemesanan = $item->demand / $EOQAnnual ; // $rata = $item->demand / 365 ; // $safetyStock = ($maxSalesPerDay * $item->lead_time_variance) - ($rata * $item->lead_time); // $Dm = $item->demand / $EOQAnnual; // $safetyStockMonthly[$item->id] = round($safetyStock); // $ROP = ($rata* $item->lead_time) + $safetyStock ; // } else { // $EOQAnnual = 0; // $EOQMonthly = 0; // $orderingCost = 0; // $ROP = 0; // $safetyStockMonthly[$item->id] = 0; // } // $update_barang = Barang::findOrFail($item->id); // $update_barang->update(['rop'=>$ROP]); // $stok_barang = StokBarang::where("id",$item->id)->first(); // // $currentStock = $item->stok; // $currentStock = $stok_barang->stok_terbaru; // $currentStockPerBarang[$item->nama] = $currentStock; // if (!empty($item->listpenjualan)) { // foreach ($item->listpenjualan as $penjualan) { // $sekarang = "2024-01-01"; // $sekarang = date("Y-m-d"); // $bulan_jual = date("m",strtotime($penjualan->created_at)); // $tahun_jual = date("Y",strtotime($penjualan->created_at)); // $bulan_sekarang = date("m",strtotime($sekarang)); // $tahun_sekarang = date("Y",strtotime($sekarang)); // if(($bulan_jual==$bulan_sekarang) && ($tahun_jual==$tahun_sekarang)){ // $size = $penjualan->barang->ukuran; // if (isset($barangKeluarThisMonthPerSize[$size])) { // $barangKeluarThisMonthPerSize[$size] += $penjualan->qty; // } // } // } // } // } // $data = [ // 'title' => 'Dashboard', // 'barang' => Barang::count(), // 'totalPenjualan' => $this->formatIDR($pendapatanPerBulan[$thisMonth]['totalHargaJual']), // 'totalPendapatan' => $this->formatIDR($totalPendapatan), // 'penjualanHarian' => $hitungPenjualanPerhariSelamaSeminggu, // 'SSperBarang' => $safetyStockMonthly, // 'currentStockPerBarang' => $currentStockPerBarang, // 'barangKeluarThisMonthPerBarang' =>$barangKeluarThisMonthPerBarang, // 'barangKeluarThisMonthPerSize' => $barangKeluarThisMonthPerSize // ]; // return view('page.dashboard.index', compact('data')); // } public function getNotification() { $notifications = StokBarang::whereColumn('rop',">","stok_terbaru")->get(); return response()->json(['notifications' => $notifications]); } public function cetak() { $data = StokBarang::whereColumn('rop',">","stok_terbaru")->get(); return view('page.dashboard.cetak', compact('data')); } public function updateNotification(Request $request, $id) { try { $notification = Notifikasi::findOrFail($id); $notification->update(['read' => $request->read]); return response()->json(['message' => 'Notification updated successfully'], 200); } catch (\Exception $e) { return response()->json(['error' => 'Failed to update notification', 'message' => $e->getMessage()], 500); } } private function formatIDR($amount) { return 'IDR ' . number_format($amount, 0, ',', '.'); } public function profile(Request $request) { $user = User::find(Auth::user()->id); $data = [ 'title' => 'Profile', 'content' => $user, ]; if (!$request->ajax() && $request->isMethod('GET')) { return view('page.dashboard.profile', compact('data')); } if (!$data['content']) { return response()->json(['message' => 'Data not found!', 'code' => 404]); } $validator = Validator::make($request->all(), [ 'name' => 'required|string|max:255', 'email' => 'required|string|email|max:255|unique:users,email,'.$user->id, 'img' => 'image|mimes:jpeg,png,jpg,gif|max:2048', ]); if ($validator->fails()) { return response()->json(['message' => $validator->errors()->first(), 'code' => 422]); } if ($request->hasFile('image')) { $image = $request->file('image'); $imageName = time().'.'.$image->getClientOriginalExtension(); $image->storeAs('public/foto_user', $imageName); $user->img = $imageName; } $user->name = $request->input('name'); $user->email = $request->input('email'); $user->save(); return response()->json(['message' => 'Data updated successfully', 'code' => 200]); } public function changePassword(Request $request) { $data = User::find(Auth::user()->id); $validator = Validator::make($request->all(), [ 'old_password' => 'required', 'password' => 'required|string|min:8|confirmed', 'password_confirmation' => 'required|string|min:8', ]); if ($validator->fails()) { return Response::json(['message' => $validator->errors()->first(), 'code' => 422]); } if (!Hash::check($request->old_password, $data->password)) { return Response::json(['message' => 'The old password is incorrect.', 'code' => 422]); } $data->update(['password' => bcrypt($request->password)]); return Response::json(['message' => 'data updated successfully', 'code' => 200]); } }