3.4.12. Documento de confidencialidad - diezMalena/api_FCTFiller GitHub Wiki

Objetivo

El documento de confidencialidad es un documento que rellena el alumno y firma con la intención de guardar confidencialidad y secreto con respecto a la empresa en la que realizará sus FCT. Este Anexo se va a rellenar automaticamente con tan solo el dni del alumno logueado en la aplicación y se descargará automaticamente, ahorrando mucho trabajo.

Rellenar Anexo

  • Para acceder a rellenar este Anexo, primero debes acceder al CRUD de anexos de los alumnos y después al botón rellenar, la funcionalidad de estas acciones se explica en este enlace : Anexos-alumnos

Screenshot_12

  • Al pulsar el botón Generar Anexo se llama a la función onSubmit() , se comprueba de que tipo de anexo se esta haciendo la petición y se llama a la función del servidor rellenarAnexoXV() que recibe como parametro una request, que contiene el dni del alumno solicitante y el codigo de anexo, que es el nombre del fichero que se va a rellenar, por ejemplo: AnexoXV_13c_2022_.docx.

  • Esta función contiene estas variables necesarias para rellenar el anexo:

        $fecha = Carbon::now();
        $dni_alumno = $req->get('dni');
        $dni_tutor = $this->getDniTutorDelAlumno($dni_alumno);
        $nombre_archivo = $req->get('cod_anexo');
        $nombre_alumno = $this->getNombreAlumno($dni_alumno);
        $nombre_ciclo = $this->getNombreCicloAlumno($dni_alumno);
        $centro_estudios = $this->getCentroEstudiosYLocalidad($dni_alumno);
        $familia_profesional = $this->getDescripcionFamiliaProfesional($nombre_ciclo[0]->nombre_ciclo);
  • Variables almacenamiento del alumno:
  • Estas variables indican, de donde se saca la plantilla que vamos a rellenar , donde se va a almacenar estando ya rellena y también $rutaCarpeta que se refiere a la ruta de la carpeta del tutor, para poder usar la función php Auxiliar::existeCarpeta($rutaCarpeta) que nos permitirá revisar si la carpeta existe y sino, la creara.
            $rutaOriginal = 'anexos' . DIRECTORY_SEPARATOR . 'plantillas' . DIRECTORY_SEPARATOR . 'AnexoXV.docx';
            $rutaCarpeta = public_path($dni_alumno . DIRECTORY_SEPARATOR . 'AnexoXV');
            $rutaDestino = $dni_alumno  . DIRECTORY_SEPARATOR . 'AnexoXV' . DIRECTORY_SEPARATOR . $nombre_archivo;
            Auxiliar::existeCarpeta($rutaCarpeta);
  • Variables almacenamiento del alumno:
  • Con el mismo significado que para los alumnos
        $rutaCarpetaTutor = public_path($dni_tutor[0]->dni_profesor . DIRECTORY_SEPARATOR . 'AnexoXV');
            $rutaDestinoTutor = $dni_tutor[0]->dni_profesor . DIRECTORY_SEPARATOR . 'AnexoXV' . DIRECTORY_SEPARATOR . $nombre_archivo;
            Auxiliar::existeCarpeta($rutaCarpetaTutor);
  • Habilitamos el anexo
            Anexo::where('ruta_anexo', 'like', "%$nombre_archivo")->update([
                'habilitado' => 1,
            ]);
  • Añadimos el anexo a la base de datos referenciando esta vez al tutor, por que para el alumno, en base de datos este anexo ya existe
            $existeAnexo = Anexo::where('tipo_anexo', '=', 'AnexoXV')->where('ruta_anexo', 'like', "$rutaDestinoTutor")->get();

            if (count($existeAnexo) == 0) {
                Anexo::create(['tipo_anexo' => 'AnexoXV', 'ruta_anexo' => $rutaDestinoTutor, 'habilitado' => 1]);
            }
  • Preparamos los datos para rellenar el .docx
            $auxPrefijos = ['alumno', 'ciclo', 'centro', 'familia_profesional'];
            $auxDatos = [$nombre_alumno, $nombre_ciclo[0], $centro_estudios[0], $familia_profesional[0]];
            $datos = Auxiliar::modelsToArray($auxDatos, $auxPrefijos);

            $datos = $datos +  [
                'dia' => $fecha->day,
                'mes' => Parametros::MESES[$fecha->month],
                'year' => $fecha->year,
                'dni' => $dni_alumno,
                'curso' => '2º'

            ];
  • Rellenamos el documento y lo almacenamos para alumno y para profesor
            $template = new TemplateProcessor($rutaOriginal);
            $template->setValues($datos);
            $template->saveAs($rutaDestino);
            $template = new TemplateProcessor($rutaOriginal);
            $template->setValues($datos);
            $template->saveAs($rutaDestinoTutor);
  • Y finalmente devuelve un archivo que se descargará automaticamente para el usuario
 return response()->download(public_path($rutaDestino));
  • En Angular el archivo será recibido gracias a estos parametros
import * as FileSaver from 'file-saver';

 const blob = new Blob([response], { type: 'application/octet-stream' });
          FileSaver.saveAs(blob, this.codAnexo);