|
|
@@ -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
|
|
|
}
|
|
|
|
|
|
|
|
|
-}
|
|
|
+}
|