'Data Perusahaan', 'status' => $request->input('status', null), 'edit_status' => $request->input('edit_status', null), 'address' => $request->input('address', null), 'register_year' => $request->input('register_year', null), 'register_month' => $request->input('register_month', null), 'register_date' => $request->input('register_date', null), ]); } elseif (is_role(['3'])) { $user = User::with(['role', 'company.media.journalists'])->findOrFail(Auth::id()); $data = [ 'title' => 'Data Perusahaan', 'user' => $user, ]; return view('dashboard.companies.index', $data); } } public function editRequest() { if (! in_array(Auth::user()->company->edit_status, ['0', '2', '3'])) { abort(404); } return view('dashboard.companies.edit-request', [ 'title' => 'Permohonan Ubah Data Perusahaan', ]); } public function editRequestAction(Request $request) { try { if (! in_array(Auth::user()->company->edit_status, ['0', '2', '3'])) { abort(404); } $validatedData = $request->validate([ 'edit_description' => ['required'], ], [ 'edit_description.required' => 'Deskripsi wajib diisi.', ]); $user = User::with(['company'])->findOrFail(Auth::id()); $user->company->update([ 'edit_status' => '1', 'edit_description' => $validatedData['edit_description'], ]); } catch (\Exception $e) { Log::error('Company (editRequestAction): '.$e); return redirect()->route('dashboard.companies.index')->with('failed-status', 'Gagal melakukan permohonan edit data perusahaan.'); } return redirect()->route('dashboard.companies.index')->with('success-status', 'Berhasil melakukan permohonan edit data perusahaan.'); } public function edit() { if (Auth::user()->company->edit_status !== '2') { abort(404); } $user = User::with(['role', 'company.media.journalists'])->findOrFail(Auth::id()); return view('dashboard.companies.edit', [ 'title' => 'Ubah Data Perusahaan', 'user' => $user, ]); } public function update(CompanyRequest $request) { $validatedData = $request->validated(); try { if (Auth::user()->company->edit_status !== '2') { abort(404); } $company = User::with(['company'])->findOrFail(Auth::id())->company; $fileFieldMap = [ 'company_director_nik_doc' => 'director_nik_doc', 'company_deed_incorporation_doc' => 'deed_incorporation_doc', 'company_trade_license_doc' => 'trade_license_doc', 'company_tax_id_number_doc' => 'tax_id_number_doc', 'company_taxable_enterprise_doc' => 'taxable_enterprise_doc', 'company_annual_tax_return_doc' => 'annual_tax_return_doc', 'company_domicile_certificate_doc' => 'domicile_certificate_doc', 'company_profile_doc' => 'profile_doc', ]; $companyFileNames = []; foreach ($fileFieldMap as $requestKey => $dbField) { if ($request->hasFile($requestKey) && filled($validatedData[$requestKey])) { $companyFileNames[$requestKey] = store_file($validatedData[$requestKey], '/uploads/companies')['randomFileName']; } else { $companyFileNames[$requestKey] = $company->{$dbField}; } } DB::transaction(function () use ($company, $validatedData, $companyFileNames) { $company->update([ 'name' => $validatedData['company_name'], 'email' => $validatedData['company_email'], 'address' => $validatedData['company_address'], 'phone_number' => $validatedData['company_phone_number'], 'director_name' => $validatedData['company_director_name'], 'director_nik' => $validatedData['company_director_nik'], 'director_nik_doc' => $companyFileNames['company_director_nik_doc'], 'deed_incorporation' => $validatedData['company_deed_incorporation'], 'deed_incorporation_doc' => $companyFileNames['company_deed_incorporation_doc'], 'trade_license' => $validatedData['company_trade_license'], 'trade_license_doc' => $companyFileNames['company_trade_license_doc'], 'tax_id_number' => $validatedData['company_tax_id_number'], 'tax_id_number_doc' => $companyFileNames['company_tax_id_number_doc'], 'taxable_enterprise' => $validatedData['company_taxable_enterprise'], 'taxable_enterprise_doc' => $companyFileNames['company_taxable_enterprise_doc'], 'annual_tax_return' => $validatedData['company_annual_tax_return'], 'annual_tax_return_doc' => $companyFileNames['company_annual_tax_return_doc'], 'domicile_certificate' => $validatedData['company_domicile_certificate'], 'domicile_certificate_doc' => $companyFileNames['company_domicile_certificate_doc'], 'profile' => $validatedData['company_profile'], 'profile_doc' => $companyFileNames['company_profile_doc'], 'edit_description' => null, 'edit_status' => '0', ]); }); } catch (\Exception $e) { Log::error('Company (update): '.$e); return redirect()->route('dashboard.companies.index')->with('failed-status', 'Gagal mengubah data perusahaan.'); } return redirect()->route('dashboard.companies.index')->with('success-status', 'Berhasil mengubah data perusahaan.'); } public function show($id, $type) { $user = User::with(['role', 'company.media.journalists'])->findOrFail(decrypt_id($id)); $data = [ 'title' => 'Data Perusahaan', 'user' => $user, 'roles' => Role::all(), 'page' => 'company', 'purpose' => 'show', 'idnPage' => 'perusahaan', 'route' => 'companies', 'type' => $type, ]; switch ($type) { case 'account': return view('dashboard.users.profiles.account', $data); case 'login-activities': $data['loginActivities'] = LoginHistory::where('user_id', $user->id)->orderByDesc('id')->simplePaginate(20); return view('dashboard.users.profiles.login-activity', $data); case 'company': return view('dashboard.users.profiles.company', $data); case 'media': return view('dashboard.users.profiles.media', $data); case 'journalists': return view('dashboard.users.profiles.journalists', $data); default: abort(404); } } public function destroy($id) { return response()->json([ 'status' => 'warning', 'message' => 'Aksi belum tersedia.', ]); // try{ // $company = Company::with(['user', 'media.journalists'])->findOrFail(decrypt_id($id)); // DB::transaction(function(){ // }); // }catch(\Exception $e){ // Log::error('Gagal menghapus perusahaan: ' . $e->getMessage()); // return response()->json(['message' => 'Gagal menghapus perusahaan.'], 500); // } } public function process(Request $request, $id, $type) { $user = User::with(['role', 'company.media.journalists'])->findOrFail(decrypt_id($id)); if ($request->query('category') && ! in_array($request->query('category'), ['account-status', 'edit-request'])) { abort(404); } $data = [ 'title' => 'Data Perusahaan', 'user' => $user, 'roles' => Role::all(), 'page' => 'company', 'purpose' => 'process', 'idnPage' => 'perusahaan', 'route' => 'companies', 'type' => $type, 'category' => $request->query('category', null), ]; switch ($type) { case 'account': return view('dashboard.users.profiles.account', $data); case 'login-activities': $data['loginActivities'] = LoginHistory::where('user_id', $user->id) ->orderByDesc('id') ->simplePaginate(20); return view('dashboard.users.profiles.login-activity', $data); case 'company': return view('dashboard.users.profiles.company', $data); case 'media': return view('dashboard.users.profiles.media', $data); case 'journalists': return view('dashboard.users.profiles.journalists', $data); default: abort(404); } } public function processAcceptAction(Request $request, $id, $type, $category) { try { $user = User::with(['company'])->findOrFail(decrypt_id($id)); if (! in_array($category, ['account-status', 'edit-request'])) { abort(404); } if (! is_role(['1'])) { abort(403); } DB::transaction(function () use ($user, $category) { if ($category === 'account-status' && $user->status === '0') { $user->update(['status' => '1']); $announcement = Announcement::create([ 'headline' => 'Pendaftaran Media Anda Telah Disetujui!', 'content' => 'Selamat! Permohonan pendaftaran media Anda telah disetujui oleh tim kami.', 'enhancer_id' => auth()->id(), ]); $user->announcements()->attach($announcement->id); DB::afterCommit(fn () => Mail::to($user->email)->send( new AccountVerification($user, 'accepted') ) ); } elseif ($category === 'edit-request' && $user->company->edit_status === '1') { $user->company->update(['edit_status' => '2']); } }); return response()->json(['success' => true]); } catch (\Exception $e) { Log::error('Company (processAcceptAction): '.$e->getMessage()); return response()->json([ 'failed-status' => 'Gagal menyetujui'.($category === 'edit-request' ? ' permohonan edit' : '').' perusahaan.', ]); } } public function processRejectAction(Request $request, $id, $type, $category) { $validatedData = $request->validate([ 'rejection_reason' => ['required'], ], [ 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', ]); try { $user = User::with(['company'])->findOrFail(decrypt_id($id)); if (! in_array($category, ['account-status', 'edit-request'])) { abort(404); } if (! is_role(['1'])) { abort(403); } DB::transaction(function () use ($user, $category, $validatedData) { if ($category === 'account-status' && $user->status === '0') { $announcement = Announcement::create([ 'headline' => 'Pendaftaran Media Anda Belum Dapat Disetujui', 'content' => $validatedData['rejection_reason'], 'enhancer_id' => auth()->id(), ]); $user->announcements()->attach($announcement->id); $user->update(['status' => '2']); $user->company->update([ 'rejection_reason' => $validatedData['rejection_reason'], ]); DB::afterCommit( fn () => Mail::to($user->email)->send( new AccountVerification($user, 'rejected', $validatedData['rejection_reason']) ) ); } elseif ($category === 'edit-request' && $user->company->edit_status === '1') { $user->company->update([ 'edit_status' => '3', 'edit_rejection_reason' => $validatedData['rejection_reason'], ]); } }); return redirect() ->route('dashboard.companies.index') ->with('success-status', 'Berhasil menolak'.($category === 'edit-request' ? ' permohonan edit' : '').' perusahaan.'); } catch (\Exception $e) { Log::error('Company (processRejectAction): '.$e->getMessage()); return redirect() ->back() ->with('faileds-status', 'Gagal melakukan proses.'); } } public function export(Request $request) { try { $status = $request->input('status', null); $edit_status = $request->input('edit_status', null); $address = $request->input('address', null); $register_year = $request->input('register_year', null); $register_month = $request->input('register_month', null); $register_date = $request->input('register_date', null); $formattedNow = Carbon::parse(now())->locale('id')->translatedFormat('d-m-Y'); return Excel::download(new CompanyExport($status, $edit_status, $address, $register_year, $register_month, $register_date), 'companies-'.$formattedNow.'.xlsx'); } catch (\Exception $e) { Log::error('Company (export): '.$e); return redirect()->back()->with('failed-status', 'Gagal melakukan export data.'); } } public function filter(Request $request) { try { $filteredRequest = $request->except('_token'); $filterField = array_filter($filteredRequest, function ($value) { return filled($value); }); return redirect()->route('dashboard.companies.index', $filterField); } catch (\Exception $e) { Log::error('Company (filter): '.$e); return redirect()->back()->with('failed-status', 'Gagal melakukan filter data.'); } } public function printData($id) { try { $company = Company::with(['user.role'])->findOrFail(decrypt_id($id)); $pdf = Pdf::loadView('dashboard.companies.print', compact('company')); return $pdf->stream('perusahaan-'.slugify($company->name).'.pdf'); } catch (\Exception $e) { Log::error('Company (printData): '.$e); return redirect()->back()->with('failed-status', 'Gagal melakukan print data.'); } } }