middleware(function ($request, $next) { return $next($request); }); } public function index() { $menu_master = ''; Session::forget('percent'); set_time_limit(0); $materials = Material::all(); $materialsKategori = MaterialKategori::all(); $suplayers = Suplayer::all(); return view('staff.list-material', compact('materials', 'suplayers', 'materialsKategori', 'menu_master')); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { // } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { if ($request->act == 'upload_csv-data') { $file = $request->file('file'); // File Details $filename = $file->getClientOriginalName(); $extension = $file->getClientOriginalExtension(); $tempPath = $file->getRealPath(); $fileSize = $file->getSize(); // move file $location = public_path('uploads/'); $file->move($location, $filename); // import to db $filepath = fopen(public_path('uploads/' . $filename), "r"); $i = 0; set_time_limit(0); while (($key = fgetcsv($filepath, 10000, $this->detectDelimiter($location . '/' . $filename))) !== false) { if ($i > 0) { if (!empty($key[0]) and !empty($key[1]) and !empty($key[2])) { $cek = Material::where('nama_material', preg_replace("/[^a-zA-Z0-9\s\.,-:\/\^(\")]/", ' ', $key[0]))->first(); if ($cek) { $cek->satuan = $key[1]; $cek->harga = str_replace(".", "", $key[2]); $cek->save(); } else { Material::create([ 'nama_material' => preg_replace("/[^a-zA-Z0-9\s\.,-:\/\^(\")]/", ' ', $key[0]), 'satuan' => $key[1], 'harga' => str_replace(".", "", $key[2]), ]); } } } $i++; } fclose($filepath); return redirect()->route('material.index')->with('msg', 'data berhasil diupload'); } elseif ($request->act == 'create') { $request->harga = str_replace('.', '', $request->harga); $request->validate([ 'nama_material' => 'required|regex:/^[a-zA-Z0-9\s\.,-:\/\^(\")]+$/u|unique:materials,nama_material|max:50', 'satuan' => 'required', 'harga' => 'required|numeric', 'id_suplayer' => 'required', 'id_material_kategori' => 'required', ]); Material::create([ 'nama_material' => $request->nama_material, 'satuan' => $request->satuan, 'harga' => $request->harga, 'id_suplayer' => $request->id_suplayer, 'id_material_kategori' => $request->id_material_kategori, ]); return redirect()->route('material.index')->with('msg', 'data berhasil ditambahkan'); } elseif ($request->act == 'create-category') { $request->validate([ 'nama_kategori' => 'required|regex:/^[a-zA-Z0-9\s\.,-:\/\^(\")]+$/u|unique:materials_kategori,nama_kategori|max:50', ]); MaterialKategori::create($request->except('act', 'id')); return redirect()->route('material.index')->with('msg', 'Kategori berhasil ditambahkan'); } else { abort('404'); } } private function detectDelimiter($csvFile) { $delimiters = array( ';' => 0, ',' => 0, "\t" => 0, "|" => 0, ); $handle = fopen($csvFile, "r"); $firstLine = fgets($handle); fclose($handle); foreach ($delimiters as $delimiter => &$count) { $count = count(str_getcsv($firstLine, $delimiter)); } return array_search(max($delimiters), $delimiters); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show(Request $request, $id) { if (isset($_GET['act'])) { if ($_GET['act'] == 'materialData') { $material = Material::with('suplayer', 'kategori')->findOrFail($id); return response()->json(['material' => $material]); } elseif ($_GET['act'] == 'materialsData') { $columns = array( 0 => 'nama_material', 1 => 'satuan', 2 => 'harga', 3 => 'id_suplayer', ); $totalData = Material::count(); $totalFiltered = $totalData; $limit = $request->input('length'); $start = $request->input('start'); $order = $columns[$request->input('order.0.column')]; $dir = $request->input('order.0.dir'); if (isset($_GET['id_material_kategori'])) { if (empty($request->input('search.value'))) { $materials = Material::where('id_material_kategori', $_GET['id_material_kategori'])->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); $totalFiltered = Material::where('id_material_kategori', $_GET['id_material_kategori']) ->count(); } else { $search = $request->input('search.value'); $materials = Material::where([ ['id_material_kategori', $_GET['id_material_kategori']], ['nama_material', 'LIKE', "%{$search}%"], ])->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); $totalFiltered = Material::where([ ['id_material_kategori', $_GET['id_material_kategori']], ['nama_material', 'LIKE', "%{$search}%"]]) ->count(); } } elseif (isset($_GET['null_kategori_material'])) { if (empty($request->input('search.value'))) { $materials = Material::whereNull('id_material_kategori')->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); $totalFiltered =Material::whereNull('id_material_kategori')->count(); } else { $search = $request->input('search.value'); $materials = Material::where([['id_material_kategori', null], ['nama_material', 'LIKE', "%{$search}%"]])->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); $totalFiltered = Material::where([['id_material_kategori', null], ['nama_material', 'LIKE', "%{$search}%"]]) ->count(); } } else { if (empty($request->input('search.value'))) { $materials = Material::offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); $totalFiltered = Material::offset($start) ->count(); } else { $search = $request->input('search.value'); $materials = Material::where('nama_material', 'LIKE', "%{$search}%")->offset($start) ->limit($limit) ->orderBy($order, $dir) ->get(); $totalFiltered = Material::where('nama_material', 'LIKE', "%{$search}%") ->count(); } } $data = array(); if (!empty($materials)) { foreach ($materials as $row) { if (isset($_GET['id_material_kategori'])) { $nestedData['check'] = ''; } else { $nestedData['check'] = ''; } $nestedData['nama_material'] = $row->nama_material; $nestedData['satuan'] = $row->satuan; $nestedData['harga'] = 'Rp' . number_format($row->harga, 0, "", "."); $nestedData['suplayer'] = $row->id_suplayer != null ? 'suplayer->id).'>'.$row->suplayer->name.'' : '-'; $nestedData['#'] = ''; if(RoleController::access('list_material', 'edit') > 0){ $nestedData['#'] .= "
"; } if (RoleController::access('list_material', 'delete') > 0) { $nestedData['#'] .= "
" . csrf_field() . " " . method_field('delete') . "
"; } $data[] = $nestedData; } } $json_data = array( "draw" => intval($request->input('draw')), "recordsTotal" => intval($totalData), "recordsFiltered" => intval($totalFiltered), "data" => $data, ); echo json_encode($json_data); }elseif ($_GET['act'] == 'getPercentUpload') { return response()->json(['percentComplete' => Session::get('percent')]); } } else { abort('404'); } } public static function getPercent($total,$curr){ return ($curr/$total) * 100; } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { // } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { if ($request->act == 'materialSetSuplayer') { foreach ($request->id_materials as $key => $value) { $m = Material::where('id', $value)->first(); $m->id_suplayer = $id; $m->save(); } return response()->json(['msg', 'material berhasil diupdate']); }elseif ($request->act == 'materialDataTo') { $request->harga = str_replace('.', '', $request->harga); $request->validate([ 'nama_material' => 'required|regex:/^[a-zA-Z0-9\s\.,-:\/\^(\")]+$/u|unique:materials,nama_material|max:50', 'satuan' => 'required', 'harga' => 'required', 'id_suplayer' => 'required', ]); $m = Material::create([ 'nama_material' => $request->nama_material, 'satuan' => $request->satuan, 'harga' => $request->harga, 'id_material_kategori' => $request->id_material_kategori, ]); $m->id_material_kategori = $id; $m->save(); return redirect()->route('material.index')->with('msg', 'data berhasil ditambahkan'); } elseif ($request->act == 'materialSetKategori') { foreach ($request->id_materials as $key => $value) { $m = Material::where('id', $value)->first(); $m->id_material_kategori = $id; $m->save(); } return response()->json(['msg', 'material berhasil diupdate']); }elseif ($request->act == 'upload_csv-data-to') { $file = $request->file('file'); // File Details $filename = $file->getClientOriginalName(); $extension = $file->getClientOriginalExtension(); $tempPath = $file->getRealPath(); $fileSize = $file->getSize(); // move file $location = public_path('uploads/'); $file->move($location, $filename); return response()->json(['msg' => 'file successfully uploaded','filename' => $filename]); }elseif ($request->act == 'insert_csv-data-to') { $location = public_path('uploads/'); $filepath = fopen(public_path('uploads/' . $request->filename), "r"); $i = 0; set_time_limit(0); while (($key = fgetcsv($filepath, count(file((public_path('uploads/' . $request->filename)))), $this->detectDelimiter(public_path('uploads/') . '/' . $request->filename))) !== false) { if ($i > 0) { if (!empty($key[0]) and !empty($key[1]) and !empty($key[2])) { $cek = Material::where('nama_material', preg_replace("/[^a-zA-Z0-9\s\.,-:\/\^(\")]/", ' ', $key[0]))->first(); if ($cek) { $cek->satuan = $key[1]; $cek->harga = str_replace(".", "", $key[2]); $cek->id_material_kategori = $id; $cek->save(); } else { Material::create([ 'nama_material' => preg_replace("/[^a-zA-Z0-9\s\.,-:\/\^(\")]/", ' ', $key[0]), 'satuan' => $key[1], 'harga' => str_replace(".", "", $key[2]), 'id_material_kategori' => $id, ]); } } } $i++; } fclose($filepath); return response()->json(['msg' => 'file successfully inserted']); }elseif ($request->act == 'update-category') { $request->validate([ 'nama_kategori' => 'required|regex:/^[a-zA-Z0-9\s\.,-:\/\^(\")]+$/u|unique:materials_kategori,nama_kategori,'.$id.',id|max:50', ]); MaterialKategori::where('id',$id)->update($request->except('act', 'id','_method','_token')); return redirect()->route('material.index')->with('msg', 'Kategori berhasil dirubah'); }else { $request->harga = str_replace('.', '', $request->harga); $request->validate([ 'nama_material' => 'required|regex:/^[a-zA-Z0-9\s\.,-:\/\^(\")]+$/u|unique:materials,nama_material,' . $id . ',id|max:50', 'satuan' => 'required', 'harga' => 'required|numeric', 'id_suplayer' => 'required', 'id_material_kategori' => 'required', ]); Material::where('id', $id)->update([ 'nama_material' => $request->nama_material, 'satuan' => $request->satuan, 'harga' => $request->harga, 'id_suplayer' => $request->id_suplayer, 'id_material_kategori' => $request->id_material_kategori, ]); } return redirect()->route('material.index')->with('msg', 'data berhasil diubah'); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { Material::destroy($id); return redirect()->route('material.index')->with('msg', 'data berhasil dihapus'); } }