paginate(10); return view('companies.index', compact('companies')); } /** * Show the form for creating a new resource. */ public function create() { return view('companies.form'); } /** * Store a newly created resource in storage. */ public function store(Request $request) { $validated = $request->validate([ 'name' => 'required|string|max:255', 'commercial_name' => 'required|string|max:255', 'status' => 'required|in:active,closed', 'address' => 'nullable|string|max:255', 'postal_code' => 'nullable|string|max:10', 'city' => 'nullable|string|max:100', 'country' => 'nullable|string|max:100', 'phone' => 'nullable|string|max:20', 'email' => 'nullable|email|max:255', 'cif' => 'nullable|string|max:20', 'logo' => 'nullable|image|max:2048|mimes:jpg,jpeg,png,gif', ]); // Manejar la carga del logo if ($request->hasFile('logo')) { $validated['logo'] = $request->file('logo')->store('companies/logos', 'public'); } Company::create($validated); return redirect()->route('companies.index') ->with('success', 'Empresa creada exitosamente.'); } /** * Display the specified resource. */ public function show(Company $company) { $company->load(['contacts' => function($query) { $query->withPivot('position'); }]); $contacts = $company->contacts()->paginate(5); $projects = $company->contacts()->paginate(5);//$company->projects()->paginate(5); $availableUsers = User::whereDoesntHave('companies', function($query) use ($company) { $query->where('company_id', $company->id); })->get(); return view('companies.show', compact('company', 'contacts', 'projects', 'availableUsers')); } /** * Show the form for editing the specified resource. */ public function edit(Company $company) { return view('companies.form', compact('company')); } /** * Update the specified resource in storage. */ public function update(Request $request, Company $company) { $validated = $request->validate([ 'name' => 'required|string|max:255', 'commercial_name' => 'required|string|max:255', 'status' => 'required|in:active,closed', 'address' => 'nullable|string|max:255', 'postal_code' => 'nullable|string|max:10', 'city' => 'nullable|string|max:100', 'country' => 'nullable|string|max:100', 'phone' => 'nullable|string|max:20', 'email' => 'nullable|email|max:255', 'cif' => 'nullable|string|max:20', 'logo' => 'nullable|image|max:2048|mimes:jpg,jpeg,png,gif', ]); // Manejar la actualización del logo if ($request->hasFile('logo')) { // Eliminar el logo anterior si existe if ($company->logo && Storage::disk('public')->exists($company->logo)) { Storage::disk('public')->delete($company->logo); } $validated['logo'] = $request->file('logo')->store('companies/logos', 'public'); } elseif ($request->has('remove_logo')) { // Eliminar el logo si se seleccionó la opción de eliminar if ($company->logo && Storage::disk('public')->exists($company->logo)) { Storage::disk('public')->delete($company->logo); } $validated['logo'] = null; } else { // Mantener el logo existente $validated['logo'] = $company->logo; } $company->update($validated); return redirect()->route('companies.index') ->with('success', 'Empresa actualizada exitosamente.'); } /** * Remove the specified resource from storage. */ public function destroy(Company $company) { // Eliminar el logo si existe if ($company->logo && Storage::disk('public')->exists($company->logo)) { Storage::disk('public')->delete($company->logo); } $company->delete(); return redirect()->route('companies.index') ->with('success', 'Empresa eliminada exitosamente.'); } }