'Master Persetujuan' ]; return view('masterPersetujuan.index', $data); } public function datatable(){ return masterPersetujuan::where('statusenabled', true)->with([ 'pegawai:id,namalengkap', 'details.unitPegawai:id,name' ])->get(); } public function store(Request $request) { $payloads = $request->input('data', []); if (!is_array($payloads) || empty($payloads)) { return response()->json([ 'status' => false, 'message' => 'Data tidak boleh kosong' ], 422); } DB::connection('dbDirectory')->beginTransaction(); try { foreach ($payloads as $payload) { $pegawaiId = $payload['pegawai_id'] ?? null; // field name tetap, isi pegawai if (!$pegawaiId) { throw new \InvalidArgumentException('Pegawai wajib diisi.'); } $master = masterPersetujuan::create([ 'pegawai_id' => $pegawaiId, 'statusenabled' => true, 'entry_at' => Carbon::now(), ]); $detailUnits = collect($payload['unit_akses'] ?? []) ->filter() ->unique() ->values(); foreach ($detailUnits as $unitId) { masterPersetujuanDetail::create([ 'master_persetujuan_file_directory_id' => $master->id, 'unit_pegawai_id' => $unitId, 'statusenabled' => true, 'entry_at' => Carbon::now() ]); } } DB::connection('dbDirectory')->commit(); return response()->json([ 'status' => true, 'message' => 'Data berhasil disimpan' ], 200); } catch (\Throwable $th) { DB::connection('dbDirectory')->rollBack(); return response()->json([ 'status' => false, 'message' => $th->getMessage(), ], 500); } } public function show(string $id) { $data = masterPersetujuan::with(['pegawai:id,nama', 'unitPegawai:id,name', 'details.unitPegawai:id,name']) ->find($id); if (!$data) { return response()->json([ 'status' => false, 'message' => 'Data tidak ditemukan' ], 404); } return response()->json([ 'status' => true, 'data' => [ 'id' => $data->id, 'unit_pegawai_id' => $data->unit_pegawai_id, 'unit_pegawai_nama' => $data->pegawai?->nama, 'detail_units' => $data->details->map(function ($detail) { return [ 'id' => $detail->unit_pegawai_id, 'text' => $detail->unitPegawai?->name, ]; })->values(), ], ], 200); } public function update(Request $request, string $id) { $data = masterPersetujuan::find($id); if (!$data) { return response()->json([ 'status' => false, 'message' => 'Data tidak ditemukan' ], 404); } $unitPegawaiId = $request->input('pegawai_id'); if (!$unitPegawaiId) { return response()->json([ 'status' => false, 'message' => 'Pegawai wajib diisi.' ], 422); } $detailUnits = collect($request->input('unit_akses', [])) ->filter() ->unique() ->values(); DB::connection('dbDirectory')->beginTransaction(); try { $data->update([ 'pegawai_id' => $unitPegawaiId, 'modified_at' => Carbon::now() ]); masterPersetujuanDetail::where('master_persetujuan_file_directory_id', $data->id)->delete(); foreach ($detailUnits as $unitId) { masterPersetujuanDetail::create([ 'master_persetujuan_file_directory_id' => $data->id, 'unit_pegawai_id' => $unitId, 'entry_at' => Carbon::now(), 'modified_at' => Carbon::now(), 'statusenabled' => true ]); } DB::connection('dbDirectory')->commit(); return response()->json([ 'status' => true, 'message' => 'Data berhasil diperbarui' ], 200); } catch (\Throwable $th) { DB::connection('dbDirectory')->rollBack(); return response()->json([ 'status' => false, 'message' => $th->getMessage(), ], 500); } } public function destroy(string $id) { $data = masterPersetujuan::find($id); if (!$data) { return response()->json([ 'status' => false, 'message' => 'Data tidak ditemukan' ], 404); } DB::connection('dbDirectory')->beginTransaction(); try { masterPersetujuanDetail::where('master_persetujuan_file_directory_id', $data->id)->update([ 'statusenabled' => false, 'modified_at' => Carbon::now(), ]); $data->update([ 'statusenabled' => false, 'modified_at' => Carbon::now(), ]); DB::connection('dbDirectory')->commit(); return response()->json([ 'status' => true, 'message' => 'Data berhasil dihapus' ], 200); } catch (\Throwable $th) { DB::connection('dbDirectory')->rollBack(); return response()->json([ 'status' => false, 'message' => $th->getMessage(), ], 500); } } }