211 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			211 lines
		
	
	
		
			6.5 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| 
 | |
| namespace App\Http\Controllers;
 | |
| 
 | |
| use App\Models\Perusahaan;
 | |
| use App\Models\JenisKegiatan;
 | |
| use App\Http\Requests\PerusahaanRequest;
 | |
| use App\Models\JenisDokIL;
 | |
| use App\Models\Kabupaten;
 | |
| use App\Models\Kecamatan;
 | |
| use App\Models\Kelurahan;
 | |
| use App\Models\Verifikator;
 | |
| use Illuminate\Http\Request;
 | |
| use Illuminate\Http\JsonResponse;
 | |
| use Illuminate\Support\Facades\DB;
 | |
| use Illuminate\Support\Facades\Log;
 | |
| use Illuminate\Support\Facades\Storage;
 | |
| use Inertia\Inertia;
 | |
| use Illuminate\Support\Facades\Session;
 | |
| 
 | |
| class PerusahaanController extends Controller
 | |
| {
 | |
|     public function index()
 | |
|     {
 | |
|         try {
 | |
|             $perusahaan = Perusahaan::with('jenisKegiatan', 'kelurahan.kecamatan.kabupaten', 'verifikator', 'jenisDokIL')->get();
 | |
| 
 | |
|             return Inertia::render('admin/perusahaan/index_perusahaan', [
 | |
|                'perusahaan' => $perusahaan,
 | |
|                 'jenisKegiatan' => JenisKegiatan::all(),
 | |
|                 'jenisDokIL' => JenisDokIL::all(),
 | |
|                 'verifikator' => Verifikator::all(),
 | |
|                 'kabupaten' => Kabupaten::all(),
 | |
|                 'kecamatan' => Kecamatan::all(),
 | |
|                 'kelurahan' => Kelurahan::all(),
 | |
|             ]);
 | |
| 
 | |
|         } catch (\Exception $e) {
 | |
|             Log::error('Error fetching data: ' . $e->getMessage());
 | |
|             return back()->with('error', 'Terjadi kesalahan saat memuat data.');
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     // public function store(Request $request)
 | |
|     // {
 | |
|     //     $request->validate([
 | |
|     //         'ILDokumen' => 'required|file|mimes:pdf|max:20480',
 | |
|     //     ]);
 | |
| 
 | |
|     //     try {
 | |
|     //         return DB::transaction(function () use ($request) {
 | |
|     //             if ($request->hasFile('ILDokumen')) {
 | |
|     //                 $file = $request->file('ILDokumen');
 | |
|     //                 $fileName = time() . '_' . $file->getClientOriginalName();
 | |
| 
 | |
|     //                 if (!Storage::exists('public/files/il')) {
 | |
|     //                     Storage::makeDirectory('public/files/il');
 | |
|     //                 }
 | |
| 
 | |
|     //                 $path = $file->storeAs('files/il', $fileName, 'public');
 | |
| 
 | |
|     //                 $request->merge(['ILDokumen' => $path]);
 | |
|     //             }
 | |
| 
 | |
|     //             $perusahaan = Perusahaan::create($request->all());
 | |
| 
 | |
|     //             return response()->json([
 | |
|     //                 'message' => 'Perusahaan berhasil ditambahkan',
 | |
|     //                 'data' => $perusahaan
 | |
|     //             ]);
 | |
|     //         });
 | |
|     //     } catch (\Exception $e) {
 | |
|     //         if (isset($path) && Storage::exists($path)) {
 | |
|     //             Storage::delete($path);
 | |
|     //         }
 | |
| 
 | |
|     //         return response()->json([
 | |
|     //             'message' => 'Error: ' . $e->getMessage()
 | |
|     //         ], 500);
 | |
|     //     }
 | |
|     // }
 | |
| 
 | |
|     public function store(Request $request)
 | |
| {
 | |
|     $request->validate([
 | |
|         'NomorInduk' => 'required|string|unique:Perusahaan',
 | |
|         'NamaPerusahaan' => 'required|string',
 | |
|         'JenisKegiatanId' => 'required|string',
 | |
|         'VerifikatorId' => 'required|string',
 | |
|         'KelurahanId' => 'required|string',
 | |
|         'Email' => 'required|email',
 | |
|     ]);
 | |
| 
 | |
|     try {
 | |
|         DB::beginTransaction();
 | |
| 
 | |
|         $data = $request->all();
 | |
| 
 | |
|         if ($request->hasFile('ILDokumen')) {
 | |
|             $file = $request->file('ILDokumen');
 | |
| 
 | |
|             if (!$file->isValid()) {
 | |
|                 throw new \Exception('Invalid PDF file');
 | |
|             }
 | |
| 
 | |
|             $fileName = time() . '_' . $file->getClientOriginalName();
 | |
|             $path = $file->storeAs('files/il', $fileName, 'public');
 | |
| 
 | |
|             if ($path === false) {
 | |
|                 throw new \Exception('Failed to store PDF file');
 | |
|             }
 | |
| 
 | |
|             $data['ILDokumen'] = $path;
 | |
|         }
 | |
| 
 | |
|         // Convert boolean string to actual boolean
 | |
|         $data['IsPublish'] = filter_var($request->input('IsPublish'), FILTER_VALIDATE_BOOLEAN);
 | |
|         $data['ReportLocked'] = filter_var($request->input('ReportLocked'), FILTER_VALIDATE_BOOLEAN);
 | |
| 
 | |
|         $perusahaan = Perusahaan::create($data);
 | |
| 
 | |
|         DB::commit();
 | |
| 
 | |
|         return redirect()
 | |
|         ->route('admin.perusahaan.index')
 | |
|         ->with('success', 'Perusahaan berhasil ditambahkan');
 | |
| 
 | |
|     } catch (\Exception $e) {
 | |
|         DB::rollBack();
 | |
| 
 | |
|         if (isset($path) && Storage::disk('public')->exists($path)) {
 | |
|             Storage::disk('public')->delete($path);
 | |
|         }
 | |
| 
 | |
|         Log::error('Error creating perusahaan: ' . $e->getMessage());
 | |
| 
 | |
|         return response()->json([
 | |
|             'message' => 'Error: ' . $e->getMessage()
 | |
|         ], 500);
 | |
|     }
 | |
| }
 | |
| 
 | |
|     public function show(Perusahaan $perusahaan): JsonResponse
 | |
|     {
 | |
|         $perusahaan->load([
 | |
|             'JenisKegiatan',
 | |
|             'Kelurahan',
 | |
|             'JenisDokIL',
 | |
|             'Verifikator',
 | |
|             'Kawasan'
 | |
|         ]);
 | |
| 
 | |
|         return response()->json([
 | |
|             'status' => 'success',
 | |
|             'data' => $perusahaan
 | |
|         ]);
 | |
|     }
 | |
| 
 | |
|     // public function update(PerusahaanRequest $request, Perusahaan $perusahaan): JsonResponse
 | |
|     // {
 | |
|     //     $perusahaan->update($request->validated());
 | |
| 
 | |
|     //     return response()->json([
 | |
|     //         'status' => 'success',
 | |
|     //         'message' => 'Data perusahaan berhasil diperbarui',
 | |
|     //         'data' => $perusahaan
 | |
|     //     ]);
 | |
|     // }
 | |
| 
 | |
|     public function update(PerusahaanRequest $request, Perusahaan $perusahaan)
 | |
|     {
 | |
|         try {
 | |
|             DB::beginTransaction();
 | |
| 
 | |
|             $data = $request->validated();
 | |
| 
 | |
|             if (!$request->hasFile('ILDokumen')) {
 | |
|                 unset($data['ILDokumen']);
 | |
|             } else {
 | |
|                 if ($perusahaan->ILDokumen && Storage::disk('public')->exists($perusahaan->ILDokumen)) {
 | |
|                     Storage::disk('public')->delete($perusahaan->SanksiFile);
 | |
|                 }
 | |
| 
 | |
|                 $fileName = time() . '_' . $request->file('ILDokumen')->getClientOriginalName();
 | |
|                 $path = $request->file('ILDokumen')->storeAs('files/il', $fileName, 'public');
 | |
|                 $data['ILDokumen'] = $path;
 | |
|             }
 | |
| 
 | |
|             $perusahaan->update($data);
 | |
| 
 | |
|             DB::commit();
 | |
| 
 | |
|             return redirect()->route('admin.perusahaan.index')->with('success', 'Perusahaan berhasil diperbarui');
 | |
|         } catch (\Exception $e) {
 | |
|             DB::rollBack();
 | |
|             Log::error('Error updating perusahaan: ' . $e->getMessage());
 | |
|             return response()->json(['message' => 'Error: ' . $e->getMessage()], 500);
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     public function destroy(Perusahaan $perusahaan): JsonResponse
 | |
|     {
 | |
|         $perusahaan->delete();
 | |
| 
 | |
|         return response()->json([
 | |
|             'status' => 'success',
 | |
|             'message' => 'Data perusahaan berhasil dihapus'
 | |
|         ]);
 | |
|     }
 | |
| }
 |