project_directory/app/Http/Controllers/masterPersetujuanController.php
2026-01-25 23:49:15 +07:00

196 lines
6.3 KiB
PHP

<?php
namespace App\Http\Controllers;
use App\Models\masterPersetujuan;
use App\Models\masterPersetujuanDetail;
use Illuminate\Support\Facades\DB;
use Illuminate\Http\Request;
use Carbon\Carbon;
class masterPersetujuanController extends Controller
{
public function index(){
$data = [
'title' => '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);
}
}
}