Explorar el Código

feat: add FranchiseeDashboardController and related routes; update permissions for franchisee students and contracts

ebagabee hace 1 semana
padre
commit
c66226913c

+ 42 - 0
app/Http/Controllers/FranchiseeDashboardController.php

@@ -0,0 +1,42 @@
+<?php
+
+namespace App\Http\Controllers;
+
+use App\Http\Controllers\Concerns\ResolvesActiveUnit;
+use App\Models\Student;
+use App\Models\StudentContract;
+use Illuminate\Http\JsonResponse;
+
+class FranchiseeDashboardController extends Controller
+{
+    use ResolvesActiveUnit;
+
+    public function summary(): JsonResponse
+    {
+        $unitId = $this->activeUnitId();
+        abort_if(!$unitId, 404, 'Unidade não encontrada.');
+
+        $students = Student::where('unit_id', $unitId)->get(['id', 'name', 'birth_date', 'created_at']);
+        $contracts = StudentContract::where('unit_id', $unitId)->get(['id', 'status']);
+
+        return $this->successResponse(payload: [
+            'students_count' => $students->count(),
+            'contracts' => [
+                'active' => $contracts->where('status', 'active')->count(),
+                'frozen' => $contracts->where('status', 'frozen')->count(),
+                'cancelled' => $contracts->where('status', 'cancelled')->count(),
+            ],
+            'birthdays' => $students
+                ->filter(fn (Student $student) => $student->birth_date?->month === now()->month)
+                ->map(fn (Student $student) => [
+                    'day' => $student->birth_date->day,
+                    'name' => $student->name,
+                ])
+                ->sortBy('day')
+                ->values(),
+            'enrollments' => $students->map(fn (Student $student) => [
+                'created_at' => $student->created_at?->toISOString(),
+            ])->values(),
+        ]);
+    }
+}

+ 1 - 0
database/seeders/PermissionSeeder.php

@@ -67,6 +67,7 @@ public function run(): void
                 'integrations' => 'APIs',
                 'support' => 'Suporte',
                 'activities' => 'Atividades',
+                'orders' => 'Pedidos',
             ])->map(fn (string $description, string $scope) => [
                 'scope' => "franchisee_{$scope}",
                 'description' => $description,

+ 1 - 1
routes/authRoutes/class_package_unit.php

@@ -5,7 +5,7 @@
 
 Route::controller(ClassPackageUnitController::class)->prefix('class-package-unit')->group(function () {
     Route::get('/', 'index')->middleware('permission:class-package-unit,view');
-    Route::get('/visible', 'byUnit')->middleware('permission:franchisee_students|franchisee_packages,view');
+    Route::get('/visible', 'byUnit')->middleware('permission:franchisee_packages,view');
     Route::post('/', 'store')->middleware('permission:class-package-unit,add');
     Route::get('/{id}', 'show')->middleware('permission:class-package-unit,view');
     Route::put('/{id}', 'update')->middleware('permission:class-package-unit,edit');

+ 21 - 0
routes/authRoutes/franchisee_contracts.php

@@ -0,0 +1,21 @@
+<?php
+
+use App\Http\Controllers\StudentContractController;
+use App\Http\Controllers\StudentMediaController;
+use Illuminate\Support\Facades\Route;
+
+Route::prefix('franchisee/contracts')->group(function () {
+    Route::get('/', [StudentContractController::class, 'index'])->middleware('permission:franchisee_contracts,view');
+    Route::post('/', [StudentContractController::class, 'store'])->middleware('permission:franchisee_contracts,add');
+    Route::get('/{id}', [StudentContractController::class, 'show'])->whereNumber('id')->middleware('permission:franchisee_contracts,view');
+    Route::put('/{id}', [StudentContractController::class, 'update'])->whereNumber('id')->middleware('permission:franchisee_contracts,edit');
+    Route::post('/{id}/file', [StudentContractController::class, 'attachFile'])->whereNumber('id')->middleware('permission:franchisee_contracts,edit');
+    Route::get('/{id}/installments', [StudentContractController::class, 'installments'])->whereNumber('id')->middleware('permission:franchisee_contracts,view');
+    Route::post('/{id}/freeze', [StudentContractController::class, 'freeze'])->whereNumber('id')->middleware('permission:franchisee_contracts,edit');
+    Route::post('/{id}/cancel', [StudentContractController::class, 'cancel'])->whereNumber('id')->middleware('permission:franchisee_contracts,edit');
+    Route::post('/{id}/reactivate', [StudentContractController::class, 'reactivate'])->whereNumber('id')->middleware('permission:franchisee_contracts,edit');
+    Route::delete('/{id}', [StudentContractController::class, 'destroy'])->whereNumber('id')->middleware('permission:franchisee_contracts,delete');
+
+    Route::get('/medias', [StudentMediaController::class, 'index'])->middleware('permission:franchisee_contracts,view');
+    Route::delete('/medias/{id}', [StudentMediaController::class, 'destroy'])->whereNumber('id')->middleware('permission:franchisee_contracts,edit');
+});

+ 8 - 19
routes/authRoutes/franchisee_dashboard.php

@@ -1,27 +1,16 @@
 <?php
 
-use App\Http\Controllers\ClassController;
+use App\Http\Controllers\FranchiseeDashboardController;
 use App\Http\Controllers\HolidayController;
-use App\Http\Controllers\ProductOrderController;
 use Illuminate\Support\Facades\Route;
 
-// Dashboard da unidade: indicadores, feriados e atalhos rápidos.
-Route::controller(ClassController::class)->prefix('class')->group(function () {
-    Route::get('/', 'index')->middleware('permission:franchisee_dashboard,view');
-    Route::get('/{id}/students', 'students')->whereNumber('id')
+Route::prefix('franchisee/dashboard')->group(function () {
+    Route::get('/summary', [FranchiseeDashboardController::class, 'summary'])
         ->middleware('permission:franchisee_dashboard,view');
-    Route::post('/{id}/attendances', 'saveAttendance')->whereNumber('id')
-        ->middleware('permission:franchisee_dashboard,edit');
-});
-
-Route::controller(ProductOrderController::class)->prefix('product-order')->group(function () {
-    Route::post('/', 'store')->middleware('permission:franchisee_dashboard,add');
-});
 
-Route::controller(HolidayController::class)->prefix('holiday')->group(function () {
-    Route::get('/', 'index')->middleware('permission:franchisee_dashboard,view');
-    Route::post('/', 'store')->middleware('permission:franchisee_dashboard,add');
-    Route::get('/{id}', 'show')->whereNumber('id')->middleware('permission:franchisee_dashboard,view');
-    Route::put('/{id}', 'update')->whereNumber('id')->middleware('permission:franchisee_dashboard,edit');
-    Route::delete('/{id}', 'destroy')->whereNumber('id')->middleware('permission:franchisee_dashboard,delete');
+    Route::get('/holidays', [HolidayController::class, 'index'])->middleware('permission:franchisee_dashboard,view');
+    Route::post('/holidays', [HolidayController::class, 'store'])->middleware('permission:franchisee_dashboard,add');
+    Route::get('/holidays/{id}', [HolidayController::class, 'show'])->whereNumber('id')->middleware('permission:franchisee_dashboard,view');
+    Route::put('/holidays/{id}', [HolidayController::class, 'update'])->whereNumber('id')->middleware('permission:franchisee_dashboard,edit');
+    Route::delete('/holidays/{id}', [HolidayController::class, 'destroy'])->whereNumber('id')->middleware('permission:franchisee_dashboard,delete');
 });

+ 19 - 41
routes/authRoutes/franchisee_students.php

@@ -1,54 +1,32 @@
 <?php
 
-use App\Http\Controllers\StudentContractController;
 use App\Http\Controllers\StudentController;
 use App\Http\Controllers\StudentHistoryController;
 use App\Http\Controllers\StudentMediaController;
 use App\Http\Controllers\StudentResponsibleController;
 use Illuminate\Support\Facades\Route;
 
-Route::controller(StudentController::class)->prefix('student')->group(function () {
-    Route::get('/', 'index')->middleware('permission:franchisee_dashboard|franchisee_students,view');
-    Route::post('/', 'store')->middleware('permission:franchisee_students,add');
-    Route::get('/{id}', 'show')->whereNumber('id')->middleware('permission:franchisee_students,view');
-    Route::put('/{id}', 'update')->whereNumber('id')->middleware('permission:franchisee_students,edit');
-    Route::delete('/{id}', 'destroy')->whereNumber('id')->middleware('permission:franchisee_students,delete');
-});
+Route::prefix('franchisee/students')->group(function () {
+    Route::get('/', [StudentController::class, 'index'])->middleware('permission:franchisee_students,view');
+    Route::post('/', [StudentController::class, 'store'])->middleware('permission:franchisee_students,add');
+    Route::get('/{id}', [StudentController::class, 'show'])->whereNumber('id')->middleware('permission:franchisee_students,view');
+    Route::put('/{id}', [StudentController::class, 'update'])->whereNumber('id')->middleware('permission:franchisee_students,edit');
+    Route::delete('/{id}', [StudentController::class, 'destroy'])->whereNumber('id')->middleware('permission:franchisee_students,delete');
 
-Route::controller(StudentContractController::class)->prefix('student-contract')->group(function () {
-    Route::get('/', 'index')->middleware('permission:franchisee_dashboard|franchisee_students,view');
-    Route::post('/', 'store')->middleware('permission:franchisee_dashboard|franchisee_students,add');
-    Route::get('/{id}', 'show')->whereNumber('id')->middleware('permission:franchisee_students,view');
-    Route::put('/{id}', 'update')->whereNumber('id')->middleware('permission:franchisee_students,edit');
-    Route::post('/{id}/file', 'attachFile')->whereNumber('id')->middleware('permission:franchisee_students,edit');
-    Route::get('/{id}/installments', 'installments')->whereNumber('id')->middleware('permission:franchisee_students,view');
-    Route::post('/{id}/freeze', 'freeze')->whereNumber('id')->middleware('permission:franchisee_students,edit');
-    Route::post('/{id}/cancel', 'cancel')->whereNumber('id')->middleware('permission:franchisee_students,edit');
-    Route::post('/{id}/reactivate', 'reactivate')->whereNumber('id')->middleware('permission:franchisee_students,edit');
-    Route::delete('/{id}', 'destroy')->whereNumber('id')->middleware('permission:franchisee_students,delete');
-});
+    Route::get('/histories', [StudentHistoryController::class, 'index'])->middleware('permission:franchisee_students,view');
+    Route::post('/histories', [StudentHistoryController::class, 'store'])->middleware('permission:franchisee_students,add');
+    Route::get('/histories/{id}', [StudentHistoryController::class, 'show'])->whereNumber('id')->middleware('permission:franchisee_students,view');
+    Route::put('/histories/{id}', [StudentHistoryController::class, 'update'])->whereNumber('id')->middleware('permission:franchisee_students,edit');
+    Route::delete('/histories/{id}', [StudentHistoryController::class, 'destroy'])->whereNumber('id')->middleware('permission:franchisee_students,delete');
 
-Route::controller(StudentHistoryController::class)->prefix('student-history')->group(function () {
-    Route::get('/', 'index')->middleware('permission:franchisee_students,view');
-    Route::post('/', 'store')->middleware('permission:franchisee_students,add');
-    Route::get('/{id}', 'show')->whereNumber('id')->middleware('permission:franchisee_students,view');
-    Route::put('/{id}', 'update')->whereNumber('id')->middleware('permission:franchisee_students,edit');
-    Route::delete('/{id}', 'destroy')->whereNumber('id')->middleware('permission:franchisee_students,delete');
-});
+    Route::get('/medias', [StudentMediaController::class, 'index'])->middleware('permission:franchisee_students,view');
+    Route::post('/medias', [StudentMediaController::class, 'store'])->middleware('permission:franchisee_students,add');
+    Route::put('/medias/{id}', [StudentMediaController::class, 'update'])->whereNumber('id')->middleware('permission:franchisee_students,edit');
+    Route::delete('/medias/{id}', [StudentMediaController::class, 'destroy'])->whereNumber('id')->middleware('permission:franchisee_students,delete');
 
-Route::controller(StudentMediaController::class)->prefix('student-media')->group(function () {
-    Route::get('/', 'index')->middleware('permission:franchisee_students,view');
-    Route::post('/', 'store')->middleware('permission:franchisee_students,add');
-    Route::put('/{id}', 'update')->whereNumber('id')->middleware('permission:franchisee_students,edit');
-    Route::delete('/{id}', 'destroy')->whereNumber('id')->middleware('permission:franchisee_students,delete');
-});
+    Route::get('/{studentId}/responsible', [StudentResponsibleController::class, 'getByStudent'])->whereNumber('studentId')->middleware('permission:franchisee_students,view');
+    Route::post('/responsibles', [StudentResponsibleController::class, 'store'])->middleware('permission:franchisee_students,add');
+    Route::put('/responsibles/{id}', [StudentResponsibleController::class, 'update'])->whereNumber('id')->middleware('permission:franchisee_students,edit');
+    Route::delete('/responsibles/{id}', [StudentResponsibleController::class, 'destroy'])->whereNumber('id')->middleware('permission:franchisee_students,delete');
 
-Route::controller(StudentResponsibleController::class)->group(function () {
-    Route::get('/student/{studentId}/responsible', 'getByStudent')->whereNumber('studentId')
-        ->middleware('permission:franchisee_students,view');
-    Route::post('/student-responsible', 'store')->middleware('permission:franchisee_students,add');
-    Route::put('/student-responsible/{id}', 'update')->whereNumber('id')
-        ->middleware('permission:franchisee_students,edit');
-    Route::delete('/student-responsible/{id}', 'destroy')->whereNumber('id')
-        ->middleware('permission:franchisee_students,delete');
 });

+ 1 - 1
routes/authRoutes/unit_financial.php

@@ -4,7 +4,7 @@
 use App\Http\Controllers\UnitFinancialController;
 
 Route::controller(UnitFinancialController::class)->prefix('unit-financial')->group(function () {
-    Route::get('/me', 'showMe')->middleware('permission:franchisee_students|franchisee_financial,view');
+    Route::get('/me', 'showMe')->middleware('permission:franchisee_financial,view');
     Route::post('/me', 'upsertMe');
 
 });