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

@@ -30,31 +30,44 @@ class ActivityController extends Controller
*/
public function progres_activity()
{
// Ambil user yang sedang login
$user = auth()->user();
$roles = $user->load('roles');
$regionId = null;
public function progres_activity()
{
// Ambil user yang sedang login
$user = auth()->user();
$roles = $user->load('roles');
// Cek apakah user memiliki role 'senior officer'
if ($roles->roles->pluck('name')->contains('senior officer')) {
$regionId = TeamsUsers::with('team.regions')
->where('user_id', $user->id)
->first()?->team->regions_id;
}
// Inisialisasi regionId dan teamId sebagai null agar bisa dinamis
$regionId = null;
$teamId = null;
$teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions'])
->whereHas('team', function ($q) use ($regionId) {
if ($regionId) {
$q->where('regions_id', $regionId);
}
})
->where('user_id', '!=', $user->id)
->get();
if ($roles->roles->pluck('name')->contains('senior-officer')) {
$userTeam = TeamsUsers::with('team')
->where('user_id', $user->id)
->first();
$regionId = $userTeam?->team->regions_id;
$teamId = $userTeam?->teams_id;
}
$teamsActivity = TeamsUsers::with(['user', 'team', 'team.regions', 'user.roles'])
->whereHas('team', function ($q) use ($regionId, $teamId) {
if ($regionId) {
$q->where('regions_id', $regionId);
}
if ($teamId) {
$q->where('id', $teamId); // Hanya tim yang sama
}
})
->where('user_id', '!=', $user->id)
->whereHas('user.roles', function ($query) {
// Filter hanya peran 'surveyor' atau 'surveyor-penilai'
$query->whereIn('name', ['surveyor', 'surveyor-penilai']);
})
->get();
return view('lpj::activity.progres_activity.index', compact('teamsActivity'));
}
return view('lpj::activity.progres_activity.index', compact('teamsActivity'));
}
public function senior()
@@ -194,13 +207,23 @@ class ActivityController extends Controller
public function dataTablesForActivity(Request $request, $id)
{
if (is_null($this->user) || !$this->user->can('debitur.view')) {
// abort(403, 'Sorry! You are not allowed to view users.');
}
// Query Penilaian dengan relasi yang diperlukan
$query = Penilaian::with(['permohonan', 'permohonan.debiture', 'permohonan.tujuanPenilaian', 'permohonan.debiture.documents.jenisJaminan'])
->where(function($q) use ($id) {
$q->where('surveyor_id', $id)
->orWhere('penilaian_id', $id)
->orWhere('penilai_surveyor_id', $id);
});
$query = Penilaian::with([
'permohonan',
'permohonan.debiture',
'permohonan.tujuanPenilaian',
'permohonan.debiture.documents.jenisJaminan',
'userPenilai'
])
->whereHas('userPenilai', function ($q) use ($id) {
$q->where('user_id', $id);
});
// Filter pencarian
if ($request->has('search') && !empty($request->get('search'))) {

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)]);
}
}

View File

@@ -6,6 +6,7 @@ use App\Http\Controllers\Controller;
use Illuminate\Http\RedirectResponse;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Response;
use Modules\Lpj\Models\Permohonan;
use Modules\Lpj\Models\Branch;
@@ -47,6 +48,7 @@ use Modules\Lpj\Http\Requests\FormSurveyorRequest;
class SurveyorController extends Controller
{
public $user;
/**
* Display a listing of the resource.
*/
@@ -118,6 +120,8 @@ class SurveyorController extends Controller
->where('permohonan_id', $id)
->get();
return view('lpj::surveyor.detail', compact(
'buttonDisable',
'fotojaminan',
@@ -513,6 +517,11 @@ class SurveyorController extends Controller
$query->whereRaw('LOWER(status) = ?', ['assign']);
$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');
$column = $request->get('sortField');
@@ -614,7 +623,6 @@ class SurveyorController extends Controller
'golMasySekitar',
'tingkatKeramaian',
'laluLintasLokasi'
));
}
@@ -693,7 +701,7 @@ class SurveyorController extends Controller
$spekKategoriBagunan = SpekKategoritBangunan::all();
$header = $this->getHeader($type);
return view('lpj::surveyor.data.form', compact('header','spekKategoriBagunan'));
return view('lpj::surveyor.data.form', compact('header', 'spekKategoriBagunan'));
}
@@ -713,7 +721,7 @@ class SurveyorController extends Controller
->with('error', 'Invalid type specified.');
}
if($type == 'spek-bangunan') {
if ($type == 'spek-bangunan') {
$validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id;
}
@@ -764,7 +772,7 @@ class SurveyorController extends Controller
}
return view('lpj::surveyor.data.form', compact('header', 'model','spekKategoriBagunan'));
return view('lpj::surveyor.data.form', compact('header', 'model', 'spekKategoriBagunan'));
}
@@ -774,7 +782,7 @@ class SurveyorController extends Controller
if ($validate) {
$modelClass = $this->getModelClass($type);
if($type == 'spek-bangunan') {
if ($type == 'spek-bangunan') {
$validate['spek_kategori_bagunan_id'] = $request->spek_kategori_bagunan_id;
}
@@ -931,6 +939,8 @@ class SurveyorController extends Controller
public function submitSurveyor(Request $request, $id)
{
$permohonan = Permohonan::find($id);
$permohonan->update([
'status' => 'done',
@@ -942,6 +952,11 @@ class SurveyorController extends Controller
}
public function validateSubmit(){
}
private function getModelClass(string $type): ?string
{
return $this->modelClasses[$type] ?? null;

View File

@@ -43,7 +43,7 @@ class TeamsController extends Controller
$user = $usersWithRole->filter(function ($user) {
return $user->roles->contains(function ($role) {
return $role->name === 'surveyor' || $role->name === 'surveyor-penilai';
return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'senior-officer';
});
});
@@ -112,7 +112,7 @@ class TeamsController extends Controller
$user = $usersWithRole->filter(function ($user) {
return $user->roles->contains(function ($role) {
return $role->name === 'surveyor' || $role->name === 'surveyor-penilai';
return $role->name === 'surveyor' || $role->name === 'surveyor-penilai' || $role->name === 'senior-officer';
});
});