Selaa lähdekoodia

Correction of the relationship between tasks/students

FREDY 7 tuntia sitten
vanhempi
commit
a5de225953

+ 82 - 67
Back/backendP-Educativa/app/Http/Controllers/Api/TareasController.php

@@ -193,83 +193,98 @@ class TareasController extends Controller
 
 
 
-    public function crear(Request $request)
-    {
-
-        $carpetaBase = config('custom.s3_carpeta_base');
-
-        $periodoService = new PeriodoService();
-        $carpetaPeriodo = $periodoService->obtenerPeriodoActivoNombre();
-
-        $rutaBucket = 'tareas/';
+   public function crear(Request $request)
+{
+    $carpetaBase = config('custom.s3_carpeta_base');
+    $periodoService = new PeriodoService();
+    $carpetaPeriodo = $periodoService->obtenerPeriodoActivoNombre();
+    $rutaBucket = 'tareas/';
+
+    try {
+        // Procesar adjuntos (base64)
+        $adjuntos = [];
+
+        if ($request->has('bases64')) {
+            foreach ($request->bases64 as $file) {
+                $fileInfo = explode(';', $file['base64'])[0];
+                $fileExtension = explode('/', $fileInfo)[1];
+
+                switch ($fileExtension) {
+                    case 'vnd.openxmlformats-officedocument.wordprocessingml.document':
+                        $fileExtension = 'docx';
+                        break;
+                    case 'vnd.openxmlformats-officedocument.spreadsheetml.sheet':
+                        $fileExtension = 'xlsx';
+                        break;
+                    case 'vnd.openxmlformats-officedocument.presentationml.presentation':
+                        $fileExtension = 'pptx';
+                        break;
+                }
 
-        try {
-            // Procesar adjuntoTarea (por si mandas archivos en base64 como en circulares)
-            $adjuntos = [];
+                $fileData = substr($file['base64'], strpos($file['base64'], ',') + 1);
+                $fileData = str_replace(' ', '+', $fileData);
+                $contenidoArchivo = base64_decode($fileData);
 
-            if ($request->has('bases64')) {
-                foreach ($request->bases64 as $file) {
-                    $fileInfo = explode(';', $file['base64'])[0];
-                    $fileExtension = explode('/', $fileInfo)[1];
+                $fileName = $file['id'] . '-' . $file['nombre'] . '.' . $fileExtension;
+                $pathS3 = $carpetaBase . '/' . $carpetaPeriodo . '/' . $rutaBucket . $fileName;
 
-                    switch ($fileExtension) {
-                        case 'vnd.openxmlformats-officedocument.wordprocessingml.document':
-                            $fileExtension = 'docx';
-                            break;
-                        case 'vnd.openxmlformats-officedocument.spreadsheetml.sheet':
-                            $fileExtension = 'xlsx';
-                            break;
-                        case 'vnd.openxmlformats-officedocument.presentationml.presentation':
-                            $fileExtension = 'pptx';
-                            break;
-                    }
+                // Subir al S3
+                Storage::disk('s3')->put($pathS3, $contenidoArchivo, 'public');
 
-                    $fileData = substr($file['base64'], strpos($file['base64'], ',') + 1);
-                    $fileData = str_replace(' ', '+', $fileData);
-                    $contenidoArchivo = base64_decode($fileData);
+                $adjuntos[] = [
+                    'id' => $file['id'],
+                    'nombre' => $file['nombre'],
+                    'ruta' => Storage::disk('s3')->url($pathS3)
+                ];
+            }
+        }
 
-                    $fileName = $file['id'] . '-' . $file['nombre'] . '.' . $fileExtension;
-                    $pathS3 = $carpetaBase . '/' . $carpetaPeriodo . '/' . $rutaBucket . $fileName;
+        // ✅ Insertar tarea principal
+        DB::table('tareas')->insert([
+            'idEscuela' => 'COlEGIOABC',
+            'idMateriaTarea' => $request->idMateriaTarea,
+            'idTipoTarea' => $request->idTipoTarea,
+            'tituloTarea' => $request->tituloTarea,
+            'descripcionTarea' => $request->descripcionTarea,
+            'vinculoTarea' => $request->vinculoTarea,
+            'adjuntoTarea' => json_encode($adjuntos),
+            'fechaPublicacion' => $request->fechaPublicacion,
+            'fechaEntrega' => $request->fechaEntrega,
+            'estado' => 'Completa',
+            'entregaDigital' => $request->entregaDigital ?? 'No',
+            'calificacion' => $request->calificacion ?? 'No',
+            'retroalimentacion' => $request->retroalimentacion ?? 'No',
+            'descargarTareas' => $request->descargarTareas ?? 'No',
+            'idUsuario' => $request->idUsuario,
+        ]);
 
-                    // Subir al s3
-                    Storage::disk('s3')->put($pathS3, $contenidoArchivo, 'public');
+        // 🆕 Obtener el ID de la tarea recién insertada
+        $idTareaNueva = DB::getPdo()->lastInsertId();
 
-                    $adjuntos[] = [
-                        'id' => $file['id'],
-                        'nombre' => $file['nombre'],
-                        'ruta' => Storage::disk('s3')->url($pathS3)
-                    ];
-                }
-            }
+        // 🧠 Obtener alumnos relacionados con la materia
+        $alumnos = $this->obtenerAlumnosPorMateria($request->idMateriaTarea);
 
-            // Insertar tarea en la base de datos
-            DB::table('tareas')->insert([
-                'idEscuela' => 'COlEGIOABC',
-                'idMateriaTarea' => $request->idMateriaTarea,
-                'idTipoTarea' => $request->idTipoTarea,
-                'tituloTarea' => $request->tituloTarea,
-                'descripcionTarea' => $request->descripcionTarea,
-                'vinculoTarea' => $request->vinculoTarea,
-                'adjuntoTarea' => json_encode($adjuntos),
-                'fechaPublicacion' => $request->fechaPublicacion,
-                'fechaEntrega' => $request->fechaEntrega,
-                'estado' => 'Completa',
-                // estos por default en 'No' si no vienen en la request
-                'entregaDigital' => $request->entregaDigital ?? 'No',
-                'calificacion' => $request->calificacion ?? 'No',
-                'retroalimentacion' => $request->retroalimentacion ?? 'No',
-                'descargarTareas' => $request->descargarTareas ?? 'No',
-                'idUsuario' => $request->idUsuario,
+        // 🔁 Asignar tarea a cada alumno encontrado
+        foreach ($alumnos as $alumno) {
+            DB::table('tareas_usuarios_colegioabc')->insert([
+                'idTarea' => $idTareaNueva,
+                'idUsuario' => $alumno->idUsuario,
+                'completa' => 0
             ]);
-
-            return response()->json([
-                'mensaje' => 'Tarea creada exitosamente',
-                'idTarea' => DB::getPdo()->lastInsertId()
-            ], 201);
-        } catch (\Exception $e) {
-            return response()->json(['mensaje' => 'Error al crear la tarea: ' . $e->getMessage()], 500);
         }
+
+        return response()->json([
+            'mensaje' => 'Tarea creada y asignada exitosamente',
+            'idTarea' => $idTareaNueva,
+            'asignados' => count($alumnos)
+        ], 201);
+
+    } catch (\Exception $e) {
+        return response()->json([
+            'mensaje' => 'Error al crear la tarea: ' . $e->getMessage()
+        ], 500);
     }
+}
 
     public function actualizar(Request $request, $idTarea)
     {
@@ -502,4 +517,4 @@ class TareasController extends Controller
     }
 
 
-}
+}