'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']) && in_array($category, ['account-status', 'edit-request'])) { if ($category === 'account-status' && $user->status === '0') { $user->update([ 'status' => '1', ]); Mail::to($user->email)->send(new AccountVerification($user, 'accepted')); } elseif ($category === 'edit-request' && $user->company->edit_status === '1') { $user->company->update([ 'edit_status' => '2', ]); } } } catch (\Exception $e) { Log::error('Company (processAcceptAction): '.$e); return response()->json([ 'failed-status' => 'Gagal menyetujui'.($category === 'edit-request' ? ' permohonan edit' : '').' perusahaan.', ]); } } public function processRejectAction(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']) && in_array($category, ['account-status', 'edit-request'])) { $validatedData = $request->validate([ 'rejection_reason' => ['required'], ], [ 'rejection_reason.required' => 'Alasan penolakan wajib diisi.', ]); if ($category === 'account-status' && $user->status === '0') { $user->update([ 'status' => '2', ]); $user->company->update([ 'rejection_reason' => $validatedData['rejection_reason'], ]); 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'], ]); } } } catch (\Exception $e) { Log::error('Company (processRejectAction): '.$e); return redirect()->back()->with('faileds-status', 'Gagal melakukan proses.'); } return redirect()->route('dashboard.companies.index')->with('success-status', 'Berhasil menolak'.($category === 'edit-request' ? ' permohonan edit' : '').' perusahaan.'); } 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.'); } } }