update assigment lintas region

This commit is contained in:
majid
2024-11-05 08:29:27 +07:00
parent e466e5e7ff
commit 10c9567b4f
19 changed files with 699 additions and 252 deletions

View File

@@ -5,14 +5,18 @@ 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;
class PenilaianController extends Controller
{
@@ -37,17 +41,84 @@ class PenilaianController extends Controller
if ($validatedData) {
try {
$penilaian = Penilaian::create($validatedData);
DB::beginTransaction();
$penilaian = Penilaian::create($validatedData);
$validatedData['penilaian_id'] = $penilaian->id;
$teams_ids = [];
$user_ids = [];
$roles = [];
if ($validatedData['surveyor_id'] === 'pilih_dari_region') {
$surveyor_region_id = $validatedData['surveyor_region_id'];
// Hapus team_id sebelumnya di Permohonan jika ada
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
if ($permohonan) {
$permohonan->update([
'region_id' => $surveyor_region_id,
]);
}
$teams_ids[] = $surveyor_region_id;
$user_ids[] = null;
$roles[] = 'surveyor';
} else {
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
$teams_ids[] = $validatedData['teams_id'];
$user_ids[] = $validatedData['surveyor_id'];
$roles[] = 'surveyor';
}
if ($validatedData['penilai_id'] === 'pilih_dari_region') {
$penilaian_region_id = $validatedData['penilai_region_id'];
// Hapus team_id sebelumnya di Permohonan jika ada
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
if ($permohonan) {
$permohonan->update([
'region_id' => $penilaian_region_id,
]);
}
$teams_ids[] = $penilaian_region_id;
$user_ids[] = null;
$roles[] = 'penilai';
} else {
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi)->first();
$teams_ids[] = $validatedData['teams_id'];
$user_ids[] = $validatedData['penilai_id'];
$roles[] = 'penilai';
}
foreach ($teams_ids as $key => $teams_id) {
PenilaianTeam::create([
'penilaian_id' => $validatedData['penilaian_id'],
'team_id' => $teams_id,
'user_id' => $user_ids[$key],
'role' => $roles[$key],
]);
}
if ($validatedData['surveyor_id'] === 'pilih_dari_region' || $validatedData['penilai_id'] === 'pilih_dari_region') {
$status = 'registered';
} else {
$status = 'assign';
}
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi);
$permohonan->update([
'status' => 'assign',
'status' => $status,
]);
DB::commit();
return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil disimpan');
} catch (Exception $e) {
return redirect()->route('penilaian.index')->with('error', $e->getMessage());
DB::rollBack();
return response()->json(array('error' => $e->getMessage()));
}
}
}
@@ -63,22 +134,43 @@ class PenilaianController extends Controller
/**
* Update the specified resource in storage.
*/
public function update(PenilaianRequest $request, $id)
public function update(Request $request, $id)
{
$validate = $request->validated();
if ($validate) {
try {
$penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->firstOrFail();
$penilaian->update($validate);
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi);
$permohonan->update([
'status' => 'assign',
]);
try {
DB::beginTransaction();
$penilaian = Penilaian::where('nomor_registrasi', $request->nomor_registrasi)->first();
$penilaianId = $penilaian->id;
$penilainTeam = PenilaianTeam::where('penilaian_id', $penilaianId)->get();
foreach ($penilainTeam as $item) {
if ($item->role === 'surveyor' && $item->user_id === null) {
$item->update([
'user_id' => $request->surveyor_id,
'role' => 'surveyor',
]);
}
if ($item->role === 'penilai' && $item->user_id === null) {
$item->update([
'user_id' => $request->penilai_id,
'role' => 'penilai',
]);
}
return redirect()->route('penilaian.index', $id)->with('success', 'Penilaian berhasil diubah');
} catch (Exception $e) {
return redirect()->route('penilaian.index', $id)->with('error', $e->getMessage());
}
$permohonan = Permohonan::where('nomor_registrasi', $request->nomor_registrasi);
$permohonan->update([
'status' => 'assign',
]);
DB::commit();
return redirect()->route('penilaian.index')->with('success', 'Penilaian berhasil disimpan');
} catch (Exception $e) {
DB::rollBack();
return response()->json(array('error' => $e->getMessage()));
}
}
@@ -87,29 +179,36 @@ class PenilaianController extends Controller
*/
public function assignment($id)
{
$permohonan = Permohonan::with(
[
'user',
'debiture.province',
'debiture.city',
'debiture.district',
'debiture.village',
'branch',
'tujuanPenilaian',
],
)->findOrFail($id);
$permohonan = Permohonan::with([
'user',
'debiture.province',
'debiture.city',
'debiture.district',
'debiture.village',
'branch',
'tujuanPenilaian',
])->findOrFail($id);
$idPenilaian = $permohonan->jenis_penilaian_id;
$idPenilaian = $permohonan->jenis_penilaian_id;
$idRegion = $permohonan->region_id;
$jenisPenilaian = JenisPenilaian::find($idPenilaian);
$userTeam = Teams::with(['regions', 'teamsUsers.user'])
->whereHas('regions', function ($q) use ($idRegion) {
$q->where('id', $idRegion);
})
->get();
$teamPenilai = Teams::with(['regions', 'teamsUsers', 'teamsUsers.user'])
->whereHas('regions', function ($q) use ($idRegion) {
$q->where('id', $idRegion);
})->get();
$teamPenilai = $userTeam->flatMap(function ($team) {
return $team->teamsUsers->filter(function ($teamUser) {
return $teamUser->user->roles->contains(function ($role) {
return $role->name === 'surveyor' || $role->name === 'surveyor-penilai';
});
})->map(function ($teamUser) {
return $teamUser->user;
});
})->unique('id');
$existingTeamIds = $teamPenilai->pluck('id')->toArray();
@@ -117,19 +216,29 @@ class PenilaianController extends Controller
->whereNotIn('id', $existingTeamIds)
->get();
$regionName = null;
foreach ($teamPenilai as $item) {
foreach ($userTeam as $item) {
$regionName = $item->regions;
}
// $regionName = $userTeam->first()?->regions->name;
// dd($teamPenilai);
$penilaian = Penilaian::where('nomor_registrasi', $permohonan->nomor_registrasi)->first();
return view('lpj::penilaian.form', compact('permohonan', 'teamPenilai', 'jenisPenilaian', 'penilaian', 'regionName', 'updateTeamPenilai'));
}
$penilaianTeam = collect();
if ($penilaian && $penilaian->id) {
$penilaianTeam = PenilaianTeam::where('penilaian_id', $penilaian->id)->get();
}
// return response()->json([
// 'penilaianTeam' => $penilaianTeam
// ]);
return view('lpj::penilaian.form', compact('permohonan', 'teamPenilai', 'jenisPenilaian', 'penilaian', 'regionName', 'updateTeamPenilai', 'penilaianTeam'));
}
/**
* Remove the specified resource from storage.
*/
@@ -167,8 +276,9 @@ class PenilaianController extends Controller
public function dataForDatatables(Request $request)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
// abort(403, 'Sorry! You are not allowed to view users.');
}
$query = Permohonan::query();
@@ -187,6 +297,9 @@ class PenilaianController extends Controller
}
$query->whereRaw('LOWER(status) = ?', ['registered']);
$query->whereHas('region.teams.teamsUsers.user', function ($q) {
$q->where('id', Auth::user()->id);
});
if ($request->has('sortOrder') && !empty($request->get('sortOrder'))) {
$order = $request->get('sortOrder');
@@ -209,7 +322,7 @@ class PenilaianController extends Controller
}
$filteredRecords = $query->count();
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian'])->get();
$data = $query->with(['user', 'debiture', 'branch', 'tujuanPenilaian', 'region.teams.teamsUsers.user'])->get();
$pageCount = ceil($totalRecords / $size);
@@ -312,7 +425,7 @@ class PenilaianController extends Controller
if (!empty($otorisator)) {
if ($status == 'proses') {
$query->whereIn('status_bayar', ['sudah_bayar', 'belum_bayar']);
}else{
} else {
$query->whereRaw('LOWER(status) = ?', [strtolower($status)]);
}
}