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'] .= "
";
}
if (RoleController::access('rab', 'edit') > 0) {
$nestedData['opsi'] .= "
";
}
$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");
}
}