From 50258a116a9b9951670127479d1db7aed9b07e65 Mon Sep 17 00:00:00 2001 From: aanol Date: Wed, 7 May 2025 15:11:58 +0545 Subject: [PATCH] fully working now --- .../Auth/AuthenticatedSessionController.php | 2 +- .../Http/Controllers/CompanyController.php | 74 +++++++++++++++ .../Http/Controllers/EmployeeController.php | 69 ++++++++++++++ crm-panel/app/Models/Company.php | 11 ++- crm-panel/app/Models/Employee.php | 12 ++- .../database/seeders/AdminUserSeeder.php | 19 ++++ crm-panel/database/seeders/CompanySeeder.php | 31 +++++++ crm-panel/database/seeders/DatabaseSeeder.php | 13 ++- crm-panel/database/seeders/EmployeeSeeder.php | 37 ++++++++ .../views/companies/create.blade.php | 27 ++++++ .../resources/views/companies/edit.blade.php | 31 +++++++ .../resources/views/companies/index.blade.php | 50 +++++++++++ .../resources/views/companies/show.blade.php | 21 +++++ crm-panel/resources/views/dashboard.blade.php | 21 +++-- .../views/employees/create.blade.php | 37 ++++++++ .../resources/views/employees/edit.blade.php | 37 ++++++++ .../resources/views/employees/index.blade.php | 42 +++++++++ .../resources/views/employees/show.blade.php | 15 ++++ .../resources/views/layouts/app.blade.php | 89 ++++++++----------- crm-panel/routes/web.php | 16 ++-- 20 files changed, 574 insertions(+), 80 deletions(-) create mode 100644 crm-panel/app/Http/Controllers/CompanyController.php create mode 100644 crm-panel/app/Http/Controllers/EmployeeController.php create mode 100644 crm-panel/database/seeders/AdminUserSeeder.php create mode 100644 crm-panel/database/seeders/CompanySeeder.php create mode 100644 crm-panel/database/seeders/EmployeeSeeder.php create mode 100644 crm-panel/resources/views/companies/create.blade.php create mode 100644 crm-panel/resources/views/companies/edit.blade.php create mode 100644 crm-panel/resources/views/companies/index.blade.php create mode 100644 crm-panel/resources/views/companies/show.blade.php create mode 100644 crm-panel/resources/views/employees/create.blade.php create mode 100644 crm-panel/resources/views/employees/edit.blade.php create mode 100644 crm-panel/resources/views/employees/index.blade.php create mode 100644 crm-panel/resources/views/employees/show.blade.php diff --git a/crm-panel/app/Http/Controllers/Auth/AuthenticatedSessionController.php b/crm-panel/app/Http/Controllers/Auth/AuthenticatedSessionController.php index 613bcd9..4b75c5d 100644 --- a/crm-panel/app/Http/Controllers/Auth/AuthenticatedSessionController.php +++ b/crm-panel/app/Http/Controllers/Auth/AuthenticatedSessionController.php @@ -42,6 +42,6 @@ class AuthenticatedSessionController extends Controller $request->session()->regenerateToken(); - return redirect('/'); + return redirect()->route('login'); } } diff --git a/crm-panel/app/Http/Controllers/CompanyController.php b/crm-panel/app/Http/Controllers/CompanyController.php new file mode 100644 index 0000000..8870904 --- /dev/null +++ b/crm-panel/app/Http/Controllers/CompanyController.php @@ -0,0 +1,74 @@ +validate([ + 'name' => 'required', + 'email' => 'nullable|email', + 'logo' => 'nullable|image|dimensions:min_width=100,min_height=100', + 'website' => 'nullable|url', + ]); + + if ($request->hasFile('logo')) { + $path = $request->file('logo')->store('public/logos'); + $request->merge(['logo' => $path]); + } + + Company::create($request->all()); + + return redirect()->route('companies.index')->with('success', 'Company created successfully.'); + } + + public function show(Company $company) + { + return view('companies.show', compact('company')); + } + + public function edit(Company $company) + { + return view('companies.edit', compact('company')); + } + + public function update(Request $request, Company $company) + { + $request->validate([ + 'name' => 'required', + 'email' => 'nullable|email', + 'logo' => 'nullable|image|dimensions:min_width=100,min_height=100', + 'website' => 'nullable|url', + ]); + + if ($request->hasFile('logo')) { + $path = $request->file('logo')->store('public/logos'); + $company->logo = $path; + } + + $company->update($request->all()); + + return redirect()->route('companies.index')->with('success', 'Company updated successfully.'); + } + + public function destroy(Company $company) + { + $company->delete(); + return redirect()->route('companies.index')->with('success', 'Company deleted successfully.'); + } +} diff --git a/crm-panel/app/Http/Controllers/EmployeeController.php b/crm-panel/app/Http/Controllers/EmployeeController.php new file mode 100644 index 0000000..2839f1f --- /dev/null +++ b/crm-panel/app/Http/Controllers/EmployeeController.php @@ -0,0 +1,69 @@ +validate([ + 'first_name' => 'required', + 'last_name' => 'required', + 'company_id' => 'required|exists:companies,id', + 'email' => 'nullable|email', + 'phone' => 'nullable|string', + ]); + + Employee::create($request->all()); + + return redirect()->route('employees.index'); + } + + public function show(Employee $employee) + { + return view('employees.show', compact('employee')); + } + + public function edit(Employee $employee) + { + $companies = Company::all(); + return view('employees.edit', compact('employee', 'companies')); + } + + public function update(Request $request, Employee $employee) + { + $request->validate([ + 'first_name' => 'required', + 'last_name' => 'required', + 'company_id' => 'required|exists:companies,id', + 'email' => 'nullable|email', + 'phone' => 'nullable|string', + ]); + + $employee->update($request->all()); + + return redirect()->route('employees.index'); + } + + public function destroy(Employee $employee) + { + $employee->delete(); + return redirect()->route('employees.index'); + } +} diff --git a/crm-panel/app/Models/Company.php b/crm-panel/app/Models/Company.php index 5323f59..3fb045c 100644 --- a/crm-panel/app/Models/Company.php +++ b/crm-panel/app/Models/Company.php @@ -2,9 +2,18 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Company extends Model { - // + use HasFactory; + + // Define fillable fields for mass assignment + protected $fillable = [ + 'name', + 'email', + 'logo', + 'website', + ]; } diff --git a/crm-panel/app/Models/Employee.php b/crm-panel/app/Models/Employee.php index 69fdf81..0526dd9 100644 --- a/crm-panel/app/Models/Employee.php +++ b/crm-panel/app/Models/Employee.php @@ -2,9 +2,19 @@ namespace App\Models; +use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Employee extends Model { - // + use HasFactory; + + // Add these fields to allow mass assignment + protected $fillable = [ + 'first_name', + 'last_name', + 'company_id', + 'email', + 'phone', + ]; } diff --git a/crm-panel/database/seeders/AdminUserSeeder.php b/crm-panel/database/seeders/AdminUserSeeder.php new file mode 100644 index 0000000..023443b --- /dev/null +++ b/crm-panel/database/seeders/AdminUserSeeder.php @@ -0,0 +1,19 @@ + 'admin@admin.com' + ], [ + 'name' => 'Admin', + 'password' => Hash::make('password') + ]); + } +} diff --git a/crm-panel/database/seeders/CompanySeeder.php b/crm-panel/database/seeders/CompanySeeder.php new file mode 100644 index 0000000..1484dc1 --- /dev/null +++ b/crm-panel/database/seeders/CompanySeeder.php @@ -0,0 +1,31 @@ + 'TechCorp', + 'email' => 'techcorp@example.com', + 'logo' => 'techcorp_logo.png', // Add a default logo or adjust the logic accordingly + 'website' => 'https://techcorp.com', + ]); + + Company::create([ + 'name' => 'Web Solutions', + 'email' => 'websolutions@example.com', + 'logo' => 'websolutions_logo.png', + 'website' => 'https://websolutions.com', + ]); + } +} diff --git a/crm-panel/database/seeders/DatabaseSeeder.php b/crm-panel/database/seeders/DatabaseSeeder.php index d01a0ef..48507da 100644 --- a/crm-panel/database/seeders/DatabaseSeeder.php +++ b/crm-panel/database/seeders/DatabaseSeeder.php @@ -3,7 +3,6 @@ namespace Database\Seeders; use App\Models\User; -// use Illuminate\Database\Console\Seeds\WithoutModelEvents; use Illuminate\Database\Seeder; class DatabaseSeeder extends Seeder @@ -13,11 +12,11 @@ class DatabaseSeeder extends Seeder */ public function run(): void { - // User::factory(10)->create(); - - User::factory()->create([ - 'name' => 'Test User', - 'email' => 'test@example.com', - ]); + // Call admin seeder + $this->call(AdminUserSeeder::class); + $this->call([ + CompanySeeder::class, + EmployeeSeeder::class + ]); } } diff --git a/crm-panel/database/seeders/EmployeeSeeder.php b/crm-panel/database/seeders/EmployeeSeeder.php new file mode 100644 index 0000000..71b28eb --- /dev/null +++ b/crm-panel/database/seeders/EmployeeSeeder.php @@ -0,0 +1,37 @@ +first(); + $company2 = Company::where('name', 'Web Solutions')->first(); + + Employee::create([ + 'first_name' => 'John', + 'last_name' => 'Doe', + 'company_id' => $company1->id, + 'email' => 'john.doe@techcorp.com', + 'phone' => '123-456-7890', + ]); + + Employee::create([ + 'first_name' => 'Jane', + 'last_name' => 'Smith', + 'company_id' => $company2->id, + 'email' => 'jane.smith@websolutions.com', + 'phone' => '987-654-3210', + ]); + } +} diff --git a/crm-panel/resources/views/companies/create.blade.php b/crm-panel/resources/views/companies/create.blade.php new file mode 100644 index 0000000..db0b76d --- /dev/null +++ b/crm-panel/resources/views/companies/create.blade.php @@ -0,0 +1,27 @@ +@extends('layouts.app') + +@section('content') +
+

Add Company

+
+ @csrf +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+@endsection diff --git a/crm-panel/resources/views/companies/edit.blade.php b/crm-panel/resources/views/companies/edit.blade.php new file mode 100644 index 0000000..6ded200 --- /dev/null +++ b/crm-panel/resources/views/companies/edit.blade.php @@ -0,0 +1,31 @@ +@extends('layouts.app') + +@section('content') +
+

Edit Company

+
+ @csrf + @method('PUT') +
+ + +
+
+ + +
+
+ + + @if($company->logo) + Logo + @endif +
+
+ + +
+ +
+
+@endsection diff --git a/crm-panel/resources/views/companies/index.blade.php b/crm-panel/resources/views/companies/index.blade.php new file mode 100644 index 0000000..1fcc3f6 --- /dev/null +++ b/crm-panel/resources/views/companies/index.blade.php @@ -0,0 +1,50 @@ +@extends('layouts.app') + +@section('content') +
+

Companies

+ Add Company + + @if (session('success')) +
{{ session('success') }}
+ @endif + + + + + + + + + + + + + @foreach($companies as $company) + + + + + + + + @endforeach + +
NameEmailLogoWebsiteActions
{{ $company->name }}{{ $company->email }} + @if($company->logo) + Logo + @else + N/A + @endif + {{ $company->website }} + View + Edit +
+ @csrf + @method('DELETE') + +
+
+ {{ $companies->links() }} +
+@endsection diff --git a/crm-panel/resources/views/companies/show.blade.php b/crm-panel/resources/views/companies/show.blade.php new file mode 100644 index 0000000..8d1eb49 --- /dev/null +++ b/crm-panel/resources/views/companies/show.blade.php @@ -0,0 +1,21 @@ +@extends('layouts.app') + +@section('content') +
+

Company Details

+ + Back to List +
+@endsection diff --git a/crm-panel/resources/views/dashboard.blade.php b/crm-panel/resources/views/dashboard.blade.php index 3088c40..d41a6ae 100644 --- a/crm-panel/resources/views/dashboard.blade.php +++ b/crm-panel/resources/views/dashboard.blade.php @@ -1,12 +1,11 @@ - - - - - - Dashboard - - +@extends('layouts.app') + +@section('content') +

Dashboard

- Back to Home - - + +
+@endsection diff --git a/crm-panel/resources/views/employees/create.blade.php b/crm-panel/resources/views/employees/create.blade.php new file mode 100644 index 0000000..bf98866 --- /dev/null +++ b/crm-panel/resources/views/employees/create.blade.php @@ -0,0 +1,37 @@ +@extends('layouts.app') + +@section('content') +
+

Add New Employee

+ +
+ @csrf +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+@endsection diff --git a/crm-panel/resources/views/employees/edit.blade.php b/crm-panel/resources/views/employees/edit.blade.php new file mode 100644 index 0000000..b6e572e --- /dev/null +++ b/crm-panel/resources/views/employees/edit.blade.php @@ -0,0 +1,37 @@ +@extends('layouts.app') + +@section('content') +
+

Edit Employee

+ +
+ @csrf + @method('PUT') +
+ + +
+
+ + +
+
+ + +
+
+ + +
+
+ + +
+ +
+
+@endsection diff --git a/crm-panel/resources/views/employees/index.blade.php b/crm-panel/resources/views/employees/index.blade.php new file mode 100644 index 0000000..1165742 --- /dev/null +++ b/crm-panel/resources/views/employees/index.blade.php @@ -0,0 +1,42 @@ +@extends('layouts.app') + +@section('content') +
+

Employees

+ Add Employee + + + + + + + + + + + + + + @foreach($employees as $employee) + + + + + + + + + @endforeach + +
First NameLast NameCompanyEmailPhoneActions
{{ $employee->first_name }}{{ $employee->last_name }}{{ $employee->company->name ?? 'N/A' }}{{ $employee->email }}{{ $employee->phone }} + View + Edit +
+ @csrf + @method('DELETE') + +
+
+ {{ $employees->links() }} +
+@endsection diff --git a/crm-panel/resources/views/employees/show.blade.php b/crm-panel/resources/views/employees/show.blade.php new file mode 100644 index 0000000..9f4ac95 --- /dev/null +++ b/crm-panel/resources/views/employees/show.blade.php @@ -0,0 +1,15 @@ +@extends('layouts.app') + +@section('content') +
+

Employee Details

+ + Back to List +
+@endsection diff --git a/crm-panel/resources/views/layouts/app.blade.php b/crm-panel/resources/views/layouts/app.blade.php index a6970da..f94784e 100644 --- a/crm-panel/resources/views/layouts/app.blade.php +++ b/crm-panel/resources/views/layouts/app.blade.php @@ -18,59 +18,48 @@
-
-
@yield('content') diff --git a/crm-panel/routes/web.php b/crm-panel/routes/web.php index d1fc8c4..3be33ae 100644 --- a/crm-panel/routes/web.php +++ b/crm-panel/routes/web.php @@ -1,6 +1,7 @@ middleware(['auth', 'verified'])->name('dashboard'); Route::middleware('auth')->group(function () { - Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit'); - Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update'); - Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy'); + Route::resource('companies', CompanyController::class); + Route::resource('employees', EmployeeController::class); }); -require __DIR__.'/auth.php'; +Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'])->name('logout'); -Auth::routes(); - -Route::get('/home', [App\Http\Controllers\HomeController::class, 'index'])->name('home'); +require __DIR__.'/auth.php'; \ No newline at end of file