diff --git a/app/Http/Controllers/SurveyorController.php b/app/Http/Controllers/SurveyorController.php index f5eb6a9..5d17de3 100644 --- a/app/Http/Controllers/SurveyorController.php +++ b/app/Http/Controllers/SurveyorController.php @@ -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() + ]); + } + } }