level == 'DRAFTER' || Auth::user()->id == 11 || Auth::user()->level == 'QUANTITY SURVEYOR') { $clients = Client::where('id_user', Auth::user()->id)->get(); $backup_volumes = BackupVolume::where('id_user', Auth::user()->id)->whereDoesntHave('rab')->get(); } elseif (Auth::user()->level == 'ARSITEK') { $clients = Client::where('id_arsitek', Auth::user()->id)->get(); $backup_volumes = BackupVolume::where('id_user', Auth::user()->id)->whereDoesntHave('rab')->get(); } elseif (Auth::user()->level == 'VENDOR') { $clients = Client::where('id_vendor', Auth::user()->id)->get(); $backup_volumes = BackupVolume::where('id_user', Auth::user()->id)->whereDoesntHave('rab')->get(); } else { $clients = Client::all(); $backup_volumes = BackupVolume::whereDoesntHave('rab')->get(); } return view('staff.new-rab-create', compact('clients', 'backup_volumes')); } private function initDetail($id_rab, $request) { foreach ($request->id_ahs as $key => $id_ahs) { $rabD = NewRabDetail::where([['id_ahs', $id_ahs],['id_rab', $id_rab]])->first(); if (!$rabD) { $rabD = NewRabDetail::create([ 'id_rab' => $id_rab, 'id_ahs' => $id_ahs, 'deskripsi' => preg_replace('/[^A-Za-z0-9\s\.,-]/', ' ', $request->deskripsi[$key]), 'volume' => str_replace(',', '.', $request->volume[$key]), 'harga_material' => $request->harga_material[$key] ? str_replace('.', '', $request->harga_material[$key]) : null, 'harga_jasa' => $request->harga_jasa[$key] ? str_replace('.', '', $request->harga_jasa[$key]) : null, 'subtotal' => 0, ]); } else { $rabD->deskripsi = preg_replace('/[^A-Za-z0-9\s\.,-]/', ' ', $request->deskripsi[$key]); $rabD->volume = str_replace(',', '.', $request->volume[$key]); $rabD->harga_material = $request->harga_material[$key] ? str_replace('.', '', $request->harga_material[$key]) : null; $rabD->harga_jasa = $request->harga_jasa[$key] ? str_replace('.', '', $request->harga_jasa[$key]) : null; $rabD->subtotal = $rabD->volume * ($rabD->harga_material??0) + ($rabD->harga_jasa??0); $rabD->save(); } } } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $rab = NewRab::create([ 'id_user' => Auth::user()->id, 'ppn' => $request->ppn, 'nama_rab' => $request->nama_rab, 'id_backup_volume' => $request->id_backup_volume, 'id_client' => $request->client ]); if ($request->id_ahs) { $this->initDetail($rab->id, $request); } return redirect()->route("new_rab.index")->with("msg", "data berhasil ditambahkan"); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show(Request $request, $id) { if (\Request::ajax()) { if (isset($_GET['act'])) { if ($_GET['act'] == 'rabData') { $columns = array( 0 => 'id', ); $totalData = NewRab::count(); $totalFiltered = $totalData; $limit = $request->input('length'); $start = $request->input('start'); $order = $columns[$request->input('order.0.column')]; $dir = $request->input('order.0.dir'); $newRab = new NewRab; $search = $request->input('search.value'); if ($search) { $newRab = $newRab->where('nama_rab', 'like', "{$search}%"); } $newRab = $newRab->offset($start) ->limit($limit) ->orderBy($order, $dir)->get(); $totalFiltered = $newRab->count(); $data = []; if (!empty($newRab)) { foreach ($newRab as $row) { $nestedData['nama_rab'] = $row->nama_rab; $nestedData['client'] = $row->client->fullname ?? "-"; $nestedData['created_by'] = $row->user?$row->user->fullname:''; $nestedData['status'] = $row->status; if (RoleController::access('rab', 'edit') > 0 || RoleController::access('rab', 'delete') > 0) { $nestedData['opsi'] = "
"; if (RoleController::access('rab', 'view') > 0) { $nestedData['opsi'] .= " detail "; } if (RoleController::access('rab', 'edit') > 0) { $nestedData['opsi'] .= " edit "; } if (RoleController::access('rab', 'delete') > 0) { $nestedData['opsi'] .= "
" . csrf_field() . " " . method_field('delete') . "
"; } if (RoleController::access('rab', 'edit') > 0) { $nestedData['opsi'] .= "
" . csrf_field() . " " . method_field('put') . "
"; } $nestedData['opsi'] .= "
"; } else { $nestedData['opsi'] = ""; } $data[] = $nestedData; } } $json_data = array( "draw" => intval($request->input('draw')), "recordsTotal" => intval($totalData), "recordsFiltered" => intval($totalFiltered), "data" => $data, ); return json_encode($json_data); } elseif ($_GET['act'] == 'load_backup_volume') { $backup_volume = BackupVolume::findOrFail($id); if (!$request->id_rab) { $ahsS = AhsKategori::with(['subkategoris' => function ($q) use ($id) { $q->with(['ahsS' => function ($q2) use ($id) { $q2->where('status', 'approve') ->with(['backupVolumeDetail' => function ($q3) use ($id) { $q3->where('id_backup_volume', $id); }]); }])->with(['vendors' => function ($q2) use ($id) { $q2->where('status', 'approve') ->with(['backupVolumeDetail' => function ($q3) use ($id) { $q3->where('id_backup_volume', $id); }]); }]); }])->where('hidden', 0)->orderBy('urutan', 'asc')->get(); } else { $rab = NewRab::findOrFail($request->id_rab); $ahsS = AhsKategori::with(["subkategoris" => function ($q) use ($rab) { $q->with(["ahsS" => function ($q) use ($rab) { $q->with(['newRabDetail' => function ($q) use ($rab) { $q->where('id_rab', $rab->id); }])->with(['backupVolumeDetail' => function ($q) use ($rab) { $q->where('id_backup_volume', $rab->id_backup_volume); }])->where('status', 'approve'); }])>with(["vendors" => function ($q) use ($rab) { $q->with(['newRabDetail' => function ($q) use ($rab) { $q->where('id_rab', $rab->id); }])->with(['backupVolumeDetail' => function ($q) use ($rab) { $q->where('id_backup_volume', $rab->id_backup_volume); }])->where('status', 'approve'); }]); }])->where('hidden', 0)->orderBy('urutan', 'asc')->get(); } $view = view('staff.new-rab-create-data', compact('backup_volume', 'ahsS', 'backup_volume_details'))->render(); return response()->json(['view' => $view,'backup_volume' => $backup_volume]); } } } $rab = NewRab::findOrFail($id); $rabDetails = AhsKategori::whereHas("subkategoris.ahsS", function ($q) use ($rab) { $q->whereHas("newRabDetail", function ($q) use ($rab) { $q->where("id_rab", $rab->id); }); })->with(["subkategoris" => function ($q) use ($rab) { $q->whereHas("ahsS.newRabDetail", function ($q) use ($rab) { $q->where("id_rab", $rab->id); })->with(["ahsS" => function ($q) use ($rab) { $q->whereHas("newRabDetail", function ($q) use ($rab) { $q->where("id_rab", $rab->id); })->with(['newRabDetail' => function ($q) use ($rab) { $q->where('id_rab', $rab->id); }])->with(['backupVolumeDetail' => function ($q) use ($rab) { $q->where('id_backup_volume', $rab->id_backup_volume); }]); }]); }])->get(); return view("staff.new-rab-detail", compact("rab", "rabDetails")); } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { $rab = NewRab::findOrFail($id); return view('staff.new-rab-edit', compact('rab')); } /** * 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) { if ($request->act === "convert_to_rab") { $newRab = NewRab::findOrFail($id); $rab = Rab::create([ 'id_client' => $newRab->id_client, 'status' => 'non-approve', 'id_user' => Auth::user()->id, 'ppn' => $newRab->ppn, 'nama_rab' => $newRab->nama_rab, 'id_backup_volume' => $newRab->id_backup_volume, ]); if ($newRab->rabDetails) { foreach ($newRab->rabDetails as $detail) { $rabD = RabDetail::create([ 'id_rab' => $rab->id, 'id_ahs' => $detail->id_ahs, 'deskripsi' => $detail->deskripsi, 'volume' => $detail->volume, 'harga' => $detail->harga_jasa + $detail->harga_material, 'subtotal' => $detail->subtotal, ]); } } return redirect()->route("rab.index")->with("msg", "data berhasil diconvert"); } } $rab = NewRab::findOrFail($id); if ($request->id_ahs) { $this->initDetail($id, $request); } return redirect()->route("new_rab.index")->with("msg", "data berhasil diperbarui"); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { NewRab::destroy($id); return redirect()->route("new_rab.index")->with("msg", "data berhasil dihapus"); } }