]; // Se guarda el registro $query = $this->taskService->addFile($data); $newFile['id'] = $query['body']->id; // Id del archivo $newFile['url'] = $filePath; // Ruta del archivo array_push($this->files, $newFile); // Se agrega el archivo al array de archivos } else { // Se emite el mensaje $this->emit('messageToast', ['type' => 'error', 'message' => 'No se a detectado ningun archivo']); } } else { if ($this->file) { // Agrego al archivo al array de archivos a guardar $this->files_not_save[] = $this->file; } else { // Se emite el mensaje $this->emit('messageToast', ['type' => 'error', 'message' => 'No se a detectado ningun archivo']); } } // se cierra la modal $this->emit('hideModal'); // Se limpia el campo de archivo $this->file = null; } /** * Método privado que permite subir archivos a una tarea * @param int $task_id El id de la tarea a la que se le suben los archivos * @return void */ private function uploadFile($task_id) { // Si existen archivos para guardar if (count($this->files_not_save) > 0) { // Se recorre el array de archivos foreach($this->files_not_save as $file){ $name = $file->getClientOriginalName(); // Nombre del archivo $filePath = $file->storeAs('tasks/'.$task_id, $name, 's3'); // Ruta del archivo // Array de datos $data = [ 'aca_tasks_id' => $task_id, 'url' => $filePath, 'created_by' => Auth::user()->id ]; // Se guarda el registro $query = $this->taskService->addFile($data); } } // Se limpia el array de archivos unset($this->files_not_save); $this->files_not_save = []; } /** * Eiminar archivo del array de archivos a guardar * @param int $key La posición del archivo en el array * @return void */ public function deleteDocumentArray($key) { // Se elimina el archivo del array unset($this->files_not_save[$key]); } /** * Eiminar archivo del array de archivos a guardar * @param int $id El id del archivo * @param string $url La ruta del archivo * @param int $key La posición del archivo en el array * @return void */ public function deleteDocument($id, $url, $key) { // Array de datos $data = [ 'aca_task_files_id' => $id, 'deleted_by' => Auth::user()->id ]; // Se elimina el archivo de la base de datos $query = $this->taskService->removeFile($data); // Se valida el resultado if($query['ok']){ Storage::disk('s3')->delete($url); // Se elimina el archivo del servidor unset($this->files[$key]); // Se elimina el archivo del array // Se emite el mensaje $this->emit('messageToast', ['type' => 'success', 'message' => 'Archivo eliminado.']); }else{ // Se emite el mensaje $this->emit('messageToast', ['type' => 'error', 'message' => $query['body']]); } } } /** * Función para programar una tarea * * @return void */ public function program() { // Se consulta la tarea para preservar la configuración individual // cuando se reprograma solamente a un estudiante. $task = $this->taskService->getItem($this->task_id)['body']; $isIndividual = !empty($this->matriculation_id); if ($isIndividual) { // Reenviar a un estudiante NO cambia la política general de la tarea. $perTaskSetting = $task['allow_late_submission'] ?? null; $allowLate = $perTaskSetting === null ? (bool) $this->lateTask : ((bool) $this->lateTask && (bool) $perTaskSetting); } else { // Un docente decide la política de la tarea cuando programa para la clase. $allowLate = (bool) $this->allow_late_submission; if ($allowLate && !$this->lateTask) { $this->emit('messageToast', [ 'type' => 'error', 'message' => 'La entrega tardía no está habilitada para el colegio.' ]); return; } } $rules = [ 'delivery_date' => 'required|date', 'delivery_hour' => 'required', 'late_delivery_date' => $allowLate ? 'required|date|after:delivery_date' : 'nullable|date', ]; if (!$isIndividual) { $rules['aca_periods_id'] = 'required'; $rules['aca_type_activities_id'] = 'required'; $rules['allow_late_submission'] = 'required|boolean'; $rules['late_penalty_percentage'] = $allowLate ? 'required|numeric|between:0,100' : 'nullable|numeric|between:0,100'; } $validated = $this->validate($rules); if ($isIndividual) { $validated['aca_matriculations_id'] = $this->matriculation_id; $validated['aca_periods_id'] = $task['aca_periods_id']; $validated['aca_type_activities_id'] = $task['aca_type_activities_id']; } else { // Se persistirá una configuración explícita solo para la tarea. $validated['allow_late_submission'] = $allowLate ? 1 : 0; $validated['late_penalty_percentage'] = $allowLate ? (float) $validated['late_penalty_percentage'] : null; } // Si la entrega tardía está desactivada, no enviar fecha extraordinaria. $validated['late_delivery_date'] = $allowLate ? $validated['late_delivery_date'] : null; // Periodo de evaluación correspondiente. $period = $this->periodService->getItem($validated['aca_periods_id'])['body']; $periodEndDate = substr($period['end_date'], 0, 10); if ($validated['delivery_date'] > $periodEndDate) { $this->emit('messageToast', [ 'type' => 'error', 'message' => 'La tarea debe estar en el rango de fecha del periodo seleccionado.' ]); return; } if ($allowLate && $validated['late_delivery_date'] > $periodEndDate) { $this->emit('messageToast', [ 'type' => 'error', 'message' => 'La fecha de entrega tardía no puede superar el fin del periodo.' ]); return; } // La validación after:delivery_date también impide la misma fecha. // Asegurar que la política global nunca cambie desde el reenvío individual. if ($isIndividual) { unset($validated['allow_late_submission'], $validated['late_penalty_percentage']); } $validated['send'] = 1; $validated['updated_by'] = Auth::user()->id; // Se valida si existe el id del registro a actualizar if ($this->task_id) { // Se actualiza los datos $query = $this->taskService->program($validated, $this->task_id); // Se valida la respuesta if($query['ok']){ // Se consulta las tareas asociadas a la matrícula $task_matriculations = $this->taskMatriculationService->getItems(['aca_tasks_id' => $this->task_id])['body']; // se genera una notificación para cada tarea foreach($task_matriculations as $task_matriculation){ // Se emite el mensaje $message = 'Se ha programado una tarea de '.$task['name'].' para '. $task_matriculation['matriculation']['student']['full_name']; if(isset($task_matriculation['matriculation']['student']['user_school']['users_id']) && isset($task_matriculation['matriculation']['student']['representative']['user_school']['users_id'])){ $this->createNotification($message, [$task_matriculation['matriculation']['student']['user_school']['users_id'], $task_matriculation['matriculation']['student']['representative']['user_school']['users_id']]); } } //Se coloca la tarea como enviada session(['task_send' => 1]); // Se redirecciona a la vista de tareas return redirect()->to('/academy/teacher/class/tasks'); }else{ // Se emite el mensaje $this->emit('messageToast', ['type' => 'error', 'message' => $query['body']]); } Santillana Práctica

Accede al contenido de la plataforma a través del sitio web o descargando el aplicativo móvil:)


Compatible con iPad, tabletas Android, Mac, Windows y móviles Android e iOS.

¿Qué es?

Práctica es una plataforma que requiere de conexión a Internet para acceder a todos los componentes educativos.

¿Para qué sirve?

Esta plataforma fue desarrollada para tener acceso a tareas, mensajes y recordatorios que facilitan de manera práctica el proceso de aprendizaje.

¿Cómo reviso mis contenidos?

Haz clic aquí para mirar el video de cómo ingresar a tu espacio digital.