🔧 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 Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Auth;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
use Barryvdh\DomPDF\Facade\Pdf;
|
||||
use Illuminate\Support\Facades\Storage;
|
||||
use Illuminate\Support\Carbon;
|
||||
use Exception;
|
||||
use Modules\Lpj\Models\Debiture;
|
||||
use Modules\Lpj\Models\LaporanExternal;
|
||||
use Modules\Lpj\Models\Permohonan;
|
||||
@@ -106,6 +108,9 @@ class SurveyorController extends Controller
|
||||
$provinces = Province::all();
|
||||
$bentukTanah = BentukTanah::all();
|
||||
|
||||
// Jalankan cleanup inspeksi otomatis untuk permohonan ini
|
||||
$this->cleanupInspeksiData($id);
|
||||
|
||||
// Get all inspeksi data for this permohonan
|
||||
if (strtolower($permohonan->tujuanPenilaian->name) == 'rap') {
|
||||
$inspeksiData = Inspeksi::where('permohonan_id', $id)
|
||||
@@ -237,7 +242,7 @@ class SurveyorController extends Controller
|
||||
], 200);
|
||||
|
||||
} catch (\Exception $e) {
|
||||
\Log::error('Denah Store Error: ' . $e->getMessage());
|
||||
Log::error('Denah Store Error: ' . $e->getMessage());
|
||||
return response()->json([
|
||||
'success' => false,
|
||||
'message' => 'Gagal menyimpan data: ' . $e->getMessage()
|
||||
@@ -1063,7 +1068,7 @@ class SurveyorController extends Controller
|
||||
return null;
|
||||
|
||||
} 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());
|
||||
}
|
||||
}
|
||||
@@ -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