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')
+
+@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')
+
+@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
+
+
+
+
+ Name |
+ Email |
+ Logo |
+ Website |
+ Actions |
+
+
+
+ @foreach($companies as $company)
+
+ {{ $company->name }} |
+ {{ $company->email }} |
+
+ @if($company->logo)
+
+ @else
+ N/A
+ @endif
+ |
+ {{ $company->website }} |
+
+ View
+ Edit
+
+ |
+
+ @endforeach
+
+
+ {{ $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
+
+ - Name: {{ $company->name }}
+ - Email: {{ $company->email }}
+ -
+ Logo:
+ @if($company->logo)
+
+ @else
+ N/A
+ @endif
+
+ - Website: {{ $company->website }}
+
+
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')
+
+@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')
+
+@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')
+
+@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
+
+
+
+
+ First Name |
+ Last Name |
+ Company |
+ Email |
+ Phone |
+ Actions |
+
+
+
+ @foreach($employees as $employee)
+
+ {{ $employee->first_name }} |
+ {{ $employee->last_name }} |
+ {{ $employee->company->name ?? 'N/A' }} |
+ {{ $employee->email }} |
+ {{ $employee->phone }} |
+
+ View
+ Edit
+
+ |
+
+ @endforeach
+
+
+ {{ $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
+
+ - First Name: {{ $employee->first_name }}
+ - Last Name: {{ $employee->last_name }}
+ - Company: {{ $employee->company->name ?? 'N/A' }}
+ - Email: {{ $employee->email }}
+ - Phone: {{ $employee->phone }}
+
+
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