Tambah kolom approval pada tabel permohonan

- Menambahkan kolom approval_eo, approval_dd, dan approval_so beserta timestamp terkait di tabel permohonan.
- Memperluas fungsionalitas model dan controller untuk mendukung kolom approval baru.
This commit is contained in:
Daeng Deni Mardaeni
2024-12-23 22:46:42 +07:00
parent d465a3ea7d
commit afe0563361
4 changed files with 571 additions and 463 deletions

View File

@@ -1,26 +1,25 @@
<?php
namespace Modules\Lpj\Http\Controllers;
namespace Modules\Lpj\Http\Controllers;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Http\Requests\PenilaianRequest;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\PenilaianTeam;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\Teams;
use Modules\Lpj\Models\Regions;
use Modules\Lpj\Models\TeamsUsers;
use Modules\Usermanagement\Models\User;
use Illuminate\Support\Facades\Auth;
use App\Http\Controllers\Controller;
use Exception;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Illuminate\Support\Facades\DB;
use Modules\Lpj\Http\Requests\PenilaianRequest;
use Modules\Lpj\Models\JenisPenilaian;
use Modules\Lpj\Models\Penilaian;
use Modules\Lpj\Models\PenilaianTeam;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\StatusPermohonan;
use Modules\Lpj\Models\Teams;
use Modules\Usermanagement\Models\User;
class PenilaianController extends Controller
{
class PenilaianController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
@@ -75,7 +74,6 @@ class PenilaianController extends Controller
}
$roles[] = 'surveyor';
}
if ($validatedData['penilai_id'] === 'pilih_dari_region') {
@@ -103,7 +101,6 @@ class PenilaianController extends Controller
}
$roles[] = 'penilai';
}
foreach ($teams_ids as $key => $teams_id) {
@@ -171,7 +168,6 @@ class PenilaianController extends Controller
'role' => 'penilai',
]);
}
}
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi);
@@ -182,7 +178,7 @@ class PenilaianController extends Controller
return response()->json(['success' => true, 'message' => 'Data berhasil disimpan'], 200);
} catch (Exception $e) {
DB::rollBack();
return response()->json([ 'success' => false, 'error' => $e->getMessage()]);
return response()->json(['success' => false, 'error' => $e->getMessage()]);
}
}
@@ -206,11 +202,9 @@ class PenilaianController extends Controller
$jenisPenilaian = JenisPenilaian::find($idPenilaian);
$userTeam = Teams::with(['regions', 'teamsUsers.user'])
->whereHas('regions', function ($q) use ($idRegion) {
$userTeam = Teams::with(['regions', 'teamsUsers.user'])->whereHas('regions', function ($q) use ($idRegion) {
$q->where('id', $idRegion);
})
->get();
})->get();
$teamPenilai = $userTeam->flatMap(function ($team) {
return $team->teamsUsers->filter(function ($teamUser) {
@@ -224,9 +218,10 @@ class PenilaianController extends Controller
$existingTeamIds = $userTeam->pluck('id')->toArray();
$updateTeamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])
->whereNotIn('id', $existingTeamIds)
->get();
$updateTeamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])->whereNotIn(
'id',
$existingTeamIds,
)->get();
$regionName = null;
foreach ($userTeam as $item) {
@@ -240,8 +235,20 @@ class PenilaianController extends Controller
$penilaianTeam = PenilaianTeam::where('penilaian_id', $penilaian->id)->get();
}
return view('lpj::penilaian.form', compact('permohonan', 'teamPenilai', 'jenisPenilaian', 'penilaian', 'regionName', 'updateTeamPenilai', 'penilaianTeam'));
return view(
'lpj::penilaian.form',
compact(
'permohonan',
'teamPenilai',
'jenisPenilaian',
'penilaian',
'regionName',
'updateTeamPenilai',
'penilaianTeam',
),
);
}
/**
* Remove the specified resource from storage.
*/
@@ -250,9 +257,7 @@ class PenilaianController extends Controller
{
$validatedData = $request->validated();
if ($validatedData) {
try {
if (isset($validatedData['dokumen']) && $request->hasFile('dokumen')) {
$file_name = $validatedData['dokumen']->getClientOriginalName();
$validatedData['dokumen']->storeAs('public/dokumen_revisi', $file_name);
@@ -276,12 +281,9 @@ class PenilaianController extends Controller
}
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
}
$query = Permohonan::query();
@@ -329,7 +331,9 @@ class PenilaianController extends Controller
}
$filteredRecords = $query->count();
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers.user'])->get();
$data = $query->with(
['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers.user'],
)->get();
$pageCount = ceil($totalRecords / $size);
@@ -346,12 +350,8 @@ class PenilaianController extends Controller
}
public function otorisator(Request $request)
{
$type = $request->route('type');
$headers = [
'pelaporan' => 'Pelaporan',
@@ -382,11 +382,10 @@ class PenilaianController extends Controller
public function otorisatorUpdate(Request $request, $id, $context)
{
$permohonan = Permohonan::find($id);
if (!$permohonan) {
return response()->json([
'message' => 'Data permohonan tidak ditemukan.'
'message' => 'Data permohonan tidak ditemukan.',
], 404);
}
@@ -397,53 +396,67 @@ class PenilaianController extends Controller
$permohonan->update([
'status_bayar' => $newStatus,
'keterangan' => $request->message
'keterangan' => $request->message,
]);
break;
case 'pembatalan':
$permohonan->update([
'status' => 'batal',
'keterangan' => $request->message
'keterangan' => $request->message,
]);
break;
case 'pelaporan':
if(Auth::user()->roles[0]->name === 'senior-officer') {
$permohonan->update([
'status' => 'proses-laporan',
'keterangan' => $request->message
'approval_so' => Auth::user()->id,
'approval_so_at' => now(),
'keterangan' => $request->message,
]);
} elseif(Auth::user()->roles[0]->name === 'EO Appraisal') {
$permohonan->update([
'status' => 'proses-laporan',
'approval_eo' => Auth::user()->id,
'approval_eo_at' => now(),
'keterangan' => $request->message,
]);
} elseif(Auth::user()->roles[0]->name === 'DD Appraisal') {
$permohonan->update([
'status' => 'proses-laporan',
'approval_dd' => Auth::user()->id,
'approval_dd_at' => now(),
'keterangan' => $request->message,
]);
}
break;
case 'sla':
$permohonan->update([
'status' => 'proses-sla',
'keterangan' => $request->message
'keterangan' => $request->message,
]);
break;
default:
return response()->json([
'message' => 'Konteks otorisasi tidak valid.'
'message' => 'Konteks otorisasi tidak valid.',
], 400);
}
return response()->json([
'message' => 'Otorisasi berhasil dilakukan.',
'data' => $permohonan
'data' => $permohonan,
]);
}
public function dataForAuthorization(Request $request, $otorisator)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
// abort(403, 'Sorry! You are not allowed to view users.');
}
@@ -489,9 +502,11 @@ class PenilaianController extends Controller
}
// Filter berdasarkan region user yang login
if(Auth::user()->hasRole('senior-officer')) {
$query->whereHas('region.teams.teamsUsers', function ($q) {
$q->where('user_id', Auth::id());
});
}
// Sorting berdasarkan sortField dan sortOrder
@@ -543,4 +558,4 @@ class PenilaianController extends Controller
}
}
}

View File

@@ -44,6 +44,25 @@
'approve_keterangan_bayar',
'approve_bayar_by',
'approve_bayar_at',
'approval_eo',
'approval_eo_at',
'approval_dd',
'approval_dd_at',
'approval_so',
'approval_so_at',
];
protected $dates = [
'tanggal_permohonan',
'authorized_at',
'created_at',
'updated_at',
'registrasi_at',
'approve_bayar_at',
'approval_eo_at',
'approval_dd_at',
'approval_so_at',
];
protected static function boot()

View File

@@ -0,0 +1,43 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddApprovalFieldsToPermohonanTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('permohonan', function (Blueprint $table) {
$table->boolean('approval_eo')->default(false)->after('status');
$table->timestamp('approval_eo_at')->nullable()->after('approval_eo');
$table->boolean('approval_dd')->default(false)->after('approval_eo_at');
$table->timestamp('approval_dd_at')->nullable()->after('approval_dd');
$table->boolean('approval_so')->default(false)->after('approval_dd_at');
$table->timestamp('approval_so_at')->nullable()->after('approval_so');
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('permohonan', function (Blueprint $table) {
$table->dropColumn([
'approval_eo', 'approval_eo_at',
'approval_dd', 'approval_dd_at',
'approval_so', 'approval_so_at'
]);
});
}
}

View File

@@ -13,6 +13,37 @@
@include('lpj::component.detail-jaminan', ['backLink' => 'otorisator.'. $dataHeader . '.index'])
@if($permohonan->approval_so)
<div class="card pb-2.5">
<div class="card-header" id="basic_settings">
<h3 class="card-title">
Approval
</h3>
</div>
<div class="card-body">
<table class="table table-border">
<tbody>
<tr>
<td>Diperiksa Oleh</td>
<td>{{ getUser($permohonan->approval_so)->name ?? 'N/A' }}</td>
<td>{{ $permohonan->approval_so_at ? formatTanggalIndonesia($permohonan->approval_so_at,1) : 'N/A' }}</td>
</tr>
<tr>
<td>Disetujui Oleh (EO)</td>
<td>{{ getUser($permohonan->approval_eo)->name ?? 'N/A' }}</td>
<td>{{ $permohonan->approval_eo_at ? formatTanggalIndonesia($permohonan->approval_eo_at,1) : 'N/A' }}</td>
</tr>
<tr>
<td>Disetujui Oleh (DD)</td>
<td>{{ getUser($permohonan->approval_dd)->name ?? 'N/A' }}</td>
<td>{{ $permohonan->approval_dd_at ? formatTanggalIndonesia($permohonan->approval_dd_at,1) : 'N/A' }}</td>
</tr>
</tbody>
</table>
</div>
</div>
@endif
<div>
<div>
<button onclick="otorisatorData({{ $permohonan->id }})" type="button" class="btn btn-primary">