udistrital / Cumplidos_y_certificaciones_documentacion

0 stars 0 forks source link

Implementar firma electrónica para el certificado de DVE #212

Open JuanCamiloMartinezLopez opened 4 days ago

JuanCamiloMartinezLopez commented 4 days ago

Se requiere implementar el servicio de firma electrónica en la generación de certificados de DVE

Sub Tareas

Criterios de aceptación

Requerimientos

No aplica

Definition of Ready - DoR

Definition of Done - DoD - Desarrollo

stevencol commented 1 day ago

Se inicia con actividad iniciando por la creación del servicio

stevencol commented 18 hours ago

Al iniciar con la actividad, se evidencia que en la rama master ya se encuentra un servicio de firma electrónica, por lo que se creó una rama a partir de la rama feature/viewCertificacionesDve, donde se encuentra la generación de documentos a la que se desea implementar la firma electrónica y se une con master

stevencol commented 17 hours ago

También se detecta que ya existe un método para firmar el documento, pero dicho método se encuentra en un componente, por lo que no se puede reutilizar de una manera correcta. Por lo tanto, se creó un servicio para la firma del documento, donde se consulta el documento y se crea la lista de responsables.

stevencol commented 7 hours ago

Se implementó el servicio ya creado de firma electrónica en CrearCertificacionesDveService. Donde temporalmente se utilizan datos de prueba, obteniendo el base64 del archivo firmado:

async firmarDocumento(file: any, nombreArchivo: string): Promise<string> {
    let docsAFirmar = [
      {
        IdDocumento: 12,
        nombre: nombreArchivo + ".pdf",
        metadatos: {},
        descripcion: "",
        file: file,
        firmantes: [
          {
            nombre: "solicituDeFirma.NombreResponsable,",
            cargo: "Supervisor",
            tipoId: "CC",
            identificacion: "88194457",
          },
        ],
        representantes: [],
      },
    ];

    try {
      return new Promise((resolve, reject) => {
        this.firmaElectronicaService
          .uploadFilesElectronicSign(docsAFirmar)
          .subscribe({
            next: (response: any) => {
              if ( response &&response.length > 0) {
                resolve(response[0].file);
              } else {
                reject("No se recibió una respuesta válida.");
              }
            },
            error: (error) => {
              reject(error);
            },
          });
      });
    } catch (error) {
      console.log(error);
    }
  }

Con esa respuesta se captura. Ya no se descarga el documento directamente, sino que se utiliza su blob y se envía al método anterior de la siguiente manera, el cual envía el PDF en base64 y responde el mismo, pero firmado

this.pdf.create().getBlob(async (blob) => {
        let pdfBase64 = await this.firmarDocumento(
          blob,
          informacionCertificacionDve.informacionDve.nombre_docente
        );
        const descarga = document.createElement("a");
        descarga.href = "data:application/pdf;base64," + pdfBase64;
        descarga.download = `${informacionCertificacionDve.informacionDve.nombre_docente}.pdf`;
        descarga.click();
      });