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:
@@ -5,6 +5,7 @@ namespace Modules\Lpj\Http\Controllers;
|
|||||||
use App\Http\Controllers\Controller;
|
use App\Http\Controllers\Controller;
|
||||||
use Exception;
|
use Exception;
|
||||||
use Illuminate\Http\Request;
|
use Illuminate\Http\Request;
|
||||||
|
use Illuminate\Support\Facades\Auth;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Modules\Lpj\Http\Requests\PenilaianRequest;
|
use Modules\Lpj\Http\Requests\PenilaianRequest;
|
||||||
use Modules\Lpj\Models\JenisPenilaian;
|
use Modules\Lpj\Models\JenisPenilaian;
|
||||||
@@ -13,14 +14,12 @@ use Modules\Lpj\Models\PenilaianTeam;
|
|||||||
use Modules\Lpj\Models\Permohonan;
|
use Modules\Lpj\Models\Permohonan;
|
||||||
use Modules\Lpj\Models\StatusPermohonan;
|
use Modules\Lpj\Models\StatusPermohonan;
|
||||||
use Modules\Lpj\Models\Teams;
|
use Modules\Lpj\Models\Teams;
|
||||||
use Modules\Lpj\Models\Regions;
|
|
||||||
use Modules\Lpj\Models\TeamsUsers;
|
|
||||||
use Modules\Usermanagement\Models\User;
|
use Modules\Usermanagement\Models\User;
|
||||||
use Illuminate\Support\Facades\Auth;
|
|
||||||
|
|
||||||
class PenilaianController extends Controller
|
class PenilaianController extends Controller
|
||||||
{
|
{
|
||||||
public $user;
|
public $user;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Display a listing of the resource.
|
* Display a listing of the resource.
|
||||||
*/
|
*/
|
||||||
@@ -75,7 +74,6 @@ class PenilaianController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$roles[] = 'surveyor';
|
$roles[] = 'surveyor';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($validatedData['penilai_id'] === 'pilih_dari_region') {
|
if ($validatedData['penilai_id'] === 'pilih_dari_region') {
|
||||||
@@ -103,7 +101,6 @@ class PenilaianController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$roles[] = 'penilai';
|
$roles[] = 'penilai';
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
foreach ($teams_ids as $key => $teams_id) {
|
foreach ($teams_ids as $key => $teams_id) {
|
||||||
@@ -171,7 +168,6 @@ class PenilaianController extends Controller
|
|||||||
'role' => 'penilai',
|
'role' => 'penilai',
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi);
|
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi);
|
||||||
@@ -206,11 +202,9 @@ class PenilaianController extends Controller
|
|||||||
|
|
||||||
$jenisPenilaian = JenisPenilaian::find($idPenilaian);
|
$jenisPenilaian = JenisPenilaian::find($idPenilaian);
|
||||||
|
|
||||||
$userTeam = Teams::with(['regions', 'teamsUsers.user'])
|
$userTeam = Teams::with(['regions', 'teamsUsers.user'])->whereHas('regions', function ($q) use ($idRegion) {
|
||||||
->whereHas('regions', function ($q) use ($idRegion) {
|
|
||||||
$q->where('id', $idRegion);
|
$q->where('id', $idRegion);
|
||||||
})
|
})->get();
|
||||||
->get();
|
|
||||||
|
|
||||||
$teamPenilai = $userTeam->flatMap(function ($team) {
|
$teamPenilai = $userTeam->flatMap(function ($team) {
|
||||||
return $team->teamsUsers->filter(function ($teamUser) {
|
return $team->teamsUsers->filter(function ($teamUser) {
|
||||||
@@ -224,9 +218,10 @@ class PenilaianController extends Controller
|
|||||||
|
|
||||||
$existingTeamIds = $userTeam->pluck('id')->toArray();
|
$existingTeamIds = $userTeam->pluck('id')->toArray();
|
||||||
|
|
||||||
$updateTeamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])
|
$updateTeamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])->whereNotIn(
|
||||||
->whereNotIn('id', $existingTeamIds)
|
'id',
|
||||||
->get();
|
$existingTeamIds,
|
||||||
|
)->get();
|
||||||
|
|
||||||
$regionName = null;
|
$regionName = null;
|
||||||
foreach ($userTeam as $item) {
|
foreach ($userTeam as $item) {
|
||||||
@@ -240,8 +235,20 @@ class PenilaianController extends Controller
|
|||||||
$penilaianTeam = PenilaianTeam::where('penilaian_id', $penilaian->id)->get();
|
$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.
|
* Remove the specified resource from storage.
|
||||||
*/
|
*/
|
||||||
@@ -250,9 +257,7 @@ class PenilaianController extends Controller
|
|||||||
{
|
{
|
||||||
$validatedData = $request->validated();
|
$validatedData = $request->validated();
|
||||||
if ($validatedData) {
|
if ($validatedData) {
|
||||||
|
|
||||||
try {
|
try {
|
||||||
|
|
||||||
if (isset($validatedData['dokumen']) && $request->hasFile('dokumen')) {
|
if (isset($validatedData['dokumen']) && $request->hasFile('dokumen')) {
|
||||||
$file_name = $validatedData['dokumen']->getClientOriginalName();
|
$file_name = $validatedData['dokumen']->getClientOriginalName();
|
||||||
$validatedData['dokumen']->storeAs('public/dokumen_revisi', $file_name);
|
$validatedData['dokumen']->storeAs('public/dokumen_revisi', $file_name);
|
||||||
@@ -276,12 +281,9 @@ class PenilaianController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function dataForDatatables(Request $request)
|
public function dataForDatatables(Request $request)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (is_null($this->user) || !$this->user->can('debitur.view')) {
|
if (is_null($this->user) || !$this->user->can('debitur.view')) {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
$query = Permohonan::query();
|
$query = Permohonan::query();
|
||||||
@@ -329,7 +331,9 @@ class PenilaianController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
$filteredRecords = $query->count();
|
$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);
|
$pageCount = ceil($totalRecords / $size);
|
||||||
|
|
||||||
@@ -346,12 +350,8 @@ class PenilaianController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function otorisator(Request $request)
|
public function otorisator(Request $request)
|
||||||
{
|
{
|
||||||
|
|
||||||
$type = $request->route('type');
|
$type = $request->route('type');
|
||||||
$headers = [
|
$headers = [
|
||||||
'pelaporan' => 'Pelaporan',
|
'pelaporan' => 'Pelaporan',
|
||||||
@@ -382,11 +382,10 @@ class PenilaianController extends Controller
|
|||||||
|
|
||||||
public function otorisatorUpdate(Request $request, $id, $context)
|
public function otorisatorUpdate(Request $request, $id, $context)
|
||||||
{
|
{
|
||||||
|
|
||||||
$permohonan = Permohonan::find($id);
|
$permohonan = Permohonan::find($id);
|
||||||
if (!$permohonan) {
|
if (!$permohonan) {
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'Data permohonan tidak ditemukan.'
|
'message' => 'Data permohonan tidak ditemukan.',
|
||||||
], 404);
|
], 404);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -397,53 +396,67 @@ class PenilaianController extends Controller
|
|||||||
|
|
||||||
$permohonan->update([
|
$permohonan->update([
|
||||||
'status_bayar' => $newStatus,
|
'status_bayar' => $newStatus,
|
||||||
'keterangan' => $request->message
|
'keterangan' => $request->message,
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'pembatalan':
|
case 'pembatalan':
|
||||||
$permohonan->update([
|
$permohonan->update([
|
||||||
'status' => 'batal',
|
'status' => 'batal',
|
||||||
'keterangan' => $request->message
|
'keterangan' => $request->message,
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'pelaporan':
|
case 'pelaporan':
|
||||||
|
if(Auth::user()->roles[0]->name === 'senior-officer') {
|
||||||
$permohonan->update([
|
$permohonan->update([
|
||||||
'status' => 'proses-laporan',
|
'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;
|
break;
|
||||||
|
|
||||||
case 'sla':
|
case 'sla':
|
||||||
|
|
||||||
$permohonan->update([
|
$permohonan->update([
|
||||||
'status' => 'proses-sla',
|
'status' => 'proses-sla',
|
||||||
'keterangan' => $request->message
|
'keterangan' => $request->message,
|
||||||
]);
|
]);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'Konteks otorisasi tidak valid.'
|
'message' => 'Konteks otorisasi tidak valid.',
|
||||||
], 400);
|
], 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'message' => 'Otorisasi berhasil dilakukan.',
|
'message' => 'Otorisasi berhasil dilakukan.',
|
||||||
'data' => $permohonan
|
'data' => $permohonan,
|
||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public function dataForAuthorization(Request $request, $otorisator)
|
public function dataForAuthorization(Request $request, $otorisator)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (is_null($this->user) || !$this->user->can('debitur.view')) {
|
if (is_null($this->user) || !$this->user->can('debitur.view')) {
|
||||||
// abort(403, 'Sorry! You are not allowed to view users.');
|
// abort(403, 'Sorry! You are not allowed to view users.');
|
||||||
}
|
}
|
||||||
@@ -489,9 +502,11 @@ class PenilaianController extends Controller
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Filter berdasarkan region user yang login
|
// Filter berdasarkan region user yang login
|
||||||
|
if(Auth::user()->hasRole('senior-officer')) {
|
||||||
$query->whereHas('region.teams.teamsUsers', function ($q) {
|
$query->whereHas('region.teams.teamsUsers', function ($q) {
|
||||||
$q->where('user_id', Auth::id());
|
$q->where('user_id', Auth::id());
|
||||||
});
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Sorting berdasarkan sortField dan sortOrder
|
// Sorting berdasarkan sortField dan sortOrder
|
||||||
|
|||||||
@@ -44,6 +44,25 @@
|
|||||||
'approve_keterangan_bayar',
|
'approve_keterangan_bayar',
|
||||||
'approve_bayar_by',
|
'approve_bayar_by',
|
||||||
'approve_bayar_at',
|
'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()
|
protected static function boot()
|
||||||
|
|||||||
@@ -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'
|
||||||
|
]);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -13,6 +13,37 @@
|
|||||||
|
|
||||||
@include('lpj::component.detail-jaminan', ['backLink' => 'otorisator.'. $dataHeader . '.index'])
|
@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>
|
||||||
<div>
|
<div>
|
||||||
<button onclick="otorisatorData({{ $permohonan->id }})" type="button" class="btn btn-primary">
|
<button onclick="otorisatorData({{ $permohonan->id }})" type="button" class="btn btn-primary">
|
||||||
|
|||||||
Reference in New Issue
Block a user