🔧 feat(SurveyorController): Tambahkan cleanup inspeksi otomatis pada method show
Menambahkan fungsi cleanupInspeksiData() untuk membersihkan data inspeksi lama secara otomatis saat menampilkan detail permohonan - Method cleanupInspeksiData() dipanggil otomatis di method show() line 112 - Implementasi cleanup berbasis created_by dengan grouping data - Soft delete data inspeksi tanpa dokument_id jika ada data lengkap dengan dokument_id - Transaction handling dengan DB::beginTransaction() dan DB::rollback() untuk konsistensi data - Comprehensive logging untuk audit trail setiap operasi cleanup - Error handling individual per data dengan continue pada exception - Validasi mutual exclusion antara data dengan dan tanpa dokument_id - Integrasi dengan Auth::id() untuk tracking user yang melakukan akses
This commit is contained in:
@@ -9,9 +9,11 @@ use Maatwebsite\Excel\Facades\Excel;
|
|||||||
use Modules\Lpj\Exports\BasicDataSurveyorExport;
|
use Modules\Lpj\Exports\BasicDataSurveyorExport;
|
||||||
use Illuminate\Support\Facades\DB;
|
use Illuminate\Support\Facades\DB;
|
||||||
use Illuminate\Support\Facades\Auth;
|
use Illuminate\Support\Facades\Auth;
|
||||||
|
use Illuminate\Support\Facades\Log;
|
||||||
use Barryvdh\DomPDF\Facade\Pdf;
|
use Barryvdh\DomPDF\Facade\Pdf;
|
||||||
use Illuminate\Support\Facades\Storage;
|
use Illuminate\Support\Facades\Storage;
|
||||||
use Illuminate\Support\Carbon;
|
use Illuminate\Support\Carbon;
|
||||||
|
use Exception;
|
||||||
use Modules\Lpj\Models\Debiture;
|
use Modules\Lpj\Models\Debiture;
|
||||||
use Modules\Lpj\Models\LaporanExternal;
|
use Modules\Lpj\Models\LaporanExternal;
|
||||||
use Modules\Lpj\Models\Permohonan;
|
use Modules\Lpj\Models\Permohonan;
|
||||||
@@ -106,6 +108,9 @@ class SurveyorController extends Controller
|
|||||||
$provinces = Province::all();
|
$provinces = Province::all();
|
||||||
$bentukTanah = BentukTanah::all();
|
$bentukTanah = BentukTanah::all();
|
||||||
|
|
||||||
|
// Jalankan cleanup inspeksi otomatis untuk permohonan ini
|
||||||
|
$this->cleanupInspeksiData($id);
|
||||||
|
|
||||||
// Get all inspeksi data for this permohonan
|
// Get all inspeksi data for this permohonan
|
||||||
if (strtolower($permohonan->tujuanPenilaian->name) == 'rap') {
|
if (strtolower($permohonan->tujuanPenilaian->name) == 'rap') {
|
||||||
$inspeksiData = Inspeksi::where('permohonan_id', $id)
|
$inspeksiData = Inspeksi::where('permohonan_id', $id)
|
||||||
@@ -237,7 +242,7 @@ class SurveyorController extends Controller
|
|||||||
], 200);
|
], 200);
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
\Log::error('Denah Store Error: ' . $e->getMessage());
|
Log::error('Denah Store Error: ' . $e->getMessage());
|
||||||
return response()->json([
|
return response()->json([
|
||||||
'success' => false,
|
'success' => false,
|
||||||
'message' => 'Gagal menyimpan data: ' . $e->getMessage()
|
'message' => 'Gagal menyimpan data: ' . $e->getMessage()
|
||||||
@@ -1063,7 +1068,7 @@ class SurveyorController extends Controller
|
|||||||
return null;
|
return null;
|
||||||
|
|
||||||
} catch (\Exception $e) {
|
} catch (\Exception $e) {
|
||||||
\Log::error('File upload error: ' . $e->getMessage());
|
Log::error('File upload error: ' . $e->getMessage());
|
||||||
throw new \Exception("Gagal mengupload file: " . $e->getMessage());
|
throw new \Exception("Gagal mengupload file: " . $e->getMessage());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2893,5 +2898,99 @@ class SurveyorController extends Controller
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Fungsi untuk cleanup data inspeksi otomatis
|
||||||
|
* Menghapus data inspeksi tanpa dokument_id jika ada data lain dengan dokument_id yang sama
|
||||||
|
*/
|
||||||
|
private function cleanupInspeksiData($permohonanId)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
Log::info('SurveyorController: Memulai cleanup inspeksi otomatis', [
|
||||||
|
'permohonan_id' => $permohonanId,
|
||||||
|
'user_id' => Auth::id()
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Ambil data inspeksi yang memiliki dokument_id (data lengkap)
|
||||||
|
$dataWithDokument = Inspeksi::where('permohonan_id', $permohonanId)
|
||||||
|
->whereNotNull('dokument_id')
|
||||||
|
->whereNull('deleted_at')
|
||||||
|
->get();
|
||||||
|
|
||||||
|
// Ambil data inspeksi yang tidak memiliki dokument_id (data yang akan di-cleanup)
|
||||||
|
$dataWithoutDokument = Inspeksi::where('permohonan_id', $permohonanId)
|
||||||
|
->whereNull('dokument_id')
|
||||||
|
->whereNull('deleted_at')
|
||||||
|
->get();
|
||||||
|
|
||||||
|
// Jika ada data tanpa dokument_id, cek apakah ada data dengan dokument_id yang sama
|
||||||
|
if ($dataWithoutDokument->isNotEmpty() && $dataWithDokument->isNotEmpty()) {
|
||||||
|
|
||||||
|
// Group data dengan dokument_id by created_by
|
||||||
|
$groupedDataWithDokument = $dataWithDokument->groupBy('created_by');
|
||||||
|
|
||||||
|
// Group data tanpa dokument_id by created_by
|
||||||
|
$groupedDataWithoutDokument = $dataWithoutDokument->groupBy('created_by');
|
||||||
|
|
||||||
|
// Proses cleanup untuk setiap user
|
||||||
|
foreach ($groupedDataWithDokument as $userId => $userDataWithDokument) {
|
||||||
|
|
||||||
|
// Cek apakah user ini juga memiliki data tanpa dokument_id
|
||||||
|
if (isset($groupedDataWithoutDokument[$userId])) {
|
||||||
|
|
||||||
|
// Ambil salah satu data dengan dokument_id sebagai referensi untuk logging
|
||||||
|
$referenceData = $userDataWithDokument->first();
|
||||||
|
|
||||||
|
Log::info('SurveyorController: Menemukan data lengkap untuk user, akan menghapus data tidak lengkap', [
|
||||||
|
'user_id' => $userId,
|
||||||
|
'permohonan_id' => $permohonanId,
|
||||||
|
'reference_dokument_id' => $referenceData->dokument_id,
|
||||||
|
'data_count_to_delete' => $groupedDataWithoutDokument[$userId]->count()
|
||||||
|
]);
|
||||||
|
|
||||||
|
// Ambil semua data tanpa dokument_id untuk user ini
|
||||||
|
$userDataWithoutDokument = $groupedDataWithoutDokument[$userId];
|
||||||
|
|
||||||
|
// Soft delete data tanpa dokument_id
|
||||||
|
foreach ($userDataWithoutDokument as $dataToDelete) {
|
||||||
|
DB::beginTransaction();
|
||||||
|
try {
|
||||||
|
// Soft delete data
|
||||||
|
$dataToDelete->delete();
|
||||||
|
|
||||||
|
Log::info('SurveyorController: Data inspeksi berhasil di-soft delete', [
|
||||||
|
'id' => $dataToDelete->id,
|
||||||
|
'permohonan_id' => $dataToDelete->permohonan_id,
|
||||||
|
'dokument_id' => $dataToDelete->dokument_id,
|
||||||
|
'created_by' => $dataToDelete->created_by,
|
||||||
|
'deleted_at' => now()
|
||||||
|
]);
|
||||||
|
|
||||||
|
DB::commit();
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
DB::rollback();
|
||||||
|
Log::error('SurveyorController: Gagal menghapus data inspeksi', [
|
||||||
|
'id' => $dataToDelete->id,
|
||||||
|
'error' => $e->getMessage()
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Log::info('SurveyorController: Cleanup inspeksi otomatis selesai', [
|
||||||
|
'permohonan_id' => $permohonanId,
|
||||||
|
'data_with_dokument' => $dataWithDokument->count(),
|
||||||
|
'data_without_dokument' => $dataWithoutDokument->count()
|
||||||
|
]);
|
||||||
|
|
||||||
|
} catch (\Exception $e) {
|
||||||
|
Log::error('SurveyorController: Error saat cleanup inspeksi otomatis', [
|
||||||
|
'permohonan_id' => $permohonanId,
|
||||||
|
'error' => $e->getMessage(),
|
||||||
|
'trace' => $e->getTraceAsString()
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user