"use-strict";

import CustomDataTable from "../../../../assets/js/app/CustomDataTable.js?v=2.0.0";
import DepartamentoEmpresa from "../models/departamentoEmpresaModel.js?v=2.0.0";
import Empleado from "../models/empleadoModel.js?v=2.0.0";
import {
  descargarArchivo,
  mostrarMensajes,
  mostrarToastify,
  obtenerHTMLBadge,
  obtenerHTMLBotonesDropdown,
  obtenerNombreModulo,
  validarCorreoElectronico,
} from "../../../../assets/js/app/funcionesGenerales.js?v=2.0.0";
import metodosFormularios from "../../../../assets/js/app/metodosFormularios.js?v=2.0.0";
import Planilla from "../models/planillaModel.js?v=2.0.0";
import TipoPlanilla from "../models/tipoPlanillaModel.js?v=2.0.0";
import { DOMINIO_EMAIL } from "../../../../assets/js/app/constantes.js?v=2.0.0";

!(function () {
  document.getElementById("spnDominioEmail").innerHTML = `@${DOMINIO_EMAIL}`;
  document.getElementById("cbo-anio").addEventListener("change", function () {
    configuracion.buscarPlanillas();
  });

  document
    .getElementById("cbo-tipoPlanilla")
    .addEventListener("change", function () {
      configuracion.buscarPlanillas();
    });

  document
    .getElementById("cbo-planilla")
    .addEventListener("change", function () {
      configuracion.buscar();
    });

  document
    .getElementById("chk-todosDepartamentos")
    .addEventListener("change", function () {
      configDepartamento.evaluarTodosDepartamentos(this.checked);
    });

  document.getElementById("btn-enviar").addEventListener("click", function () {
    configDepartamento.procesarMasivo({ tipoAccion: "Enviar" });
  });

  document
    .getElementById("btn-descargar")
    .addEventListener("click", function () {
      configDepartamento.procesarMasivo({ tipoAccion: "Descargar" });
    });

  document.querySelector("#descripcion-form") &&
    document
      .querySelector("#descripcion-form")
      .addEventListener("submit", (e) => {
        e.preventDefault();
        configEmpleado.guardarDescripcion();
      });

  document.querySelector("#correo-form") &&
    document.querySelector("#correo-form").addEventListener("submit", (e) => {
      e.preventDefault();
      configEmpleado.guardarCorreo();
    });

  document.addEventListener("click", function (e) {
    let target = e.target;

    if (target.classList.contains("mostrar-empleados"))
      configDepartamento.mostrarEmpleados(target.dataset.id);

    if (target.classList.contains("configurar-correo"))
      configEmpleado.configurarCorreo(target.dataset.id);

    if (target.classList.contains("configurar-descripcion"))
      configEmpleado.configurarDescripcion(target.dataset.id);

    if (target.classList.contains("enviar-correo"))
      configEmpleado.documentoPago({
        id: target.dataset.id,
        tipoAccion: "Enviar",
      });

    if (target.classList.contains("descargar-boleta"))
      configEmpleado.documentoPago({
        id: target.dataset.id,
        tipoAccion: "Descargar",
      });
  });
})();

window.onload = () => {
  inicializarTablas()
    .then(() => configuracion.inicializar())
    .then(() => {
      document.querySelector(".loader") &&
        document.querySelector(".loader").classList.add("d-none");
    })
    .catch(mostrarMensajes.error);
};

function inicializarTablas() {
  return new Promise((resolve, reject) => {
    try {
      configDepartamento.tabla = new CustomDataTable({
        id: "departamentos-tbl",
        alineadoIzquierda: [4],
        noOrdenable: [1, 9],
      });

      configEmpleado.tabla = new CustomDataTable({
        id: "empleados-tbl",
        alineadoIzquierda: [3, 4],
        noOrdenable: [7],
      });

      resolve();
    } catch (err) {
      reject(err);
    }
  });
}

const configuracion = {
  data: {},
  departamentos: {},
  campos: {
    anio: document.querySelector("#cbo-anio"),
    tipoPlanilla: document.querySelector("#cbo-tipoPlanilla"),
    planilla: document.querySelector("#cbo-planilla"),
  },
  inicializar: function () {
    return new Promise(async (resolve, reject) => {
      try {
        let anioActual = moment().format("YYYY");
        let opcionesAnio = [];

        for (let anio = anioActual; anio > anioActual - 5; anio--) {
          opcionesAnio.push(`<option value="${anio}">${anio}</option>`);
        }

        this.campos.anio.innerHTML = opcionesAnio.join("");

        const { data: tiposPlanilla = [] } =
          await TipoPlanilla.obtenerPorUsuario();

        let opciones = tiposPlanilla.map(
          (tipoPlanilla) =>
            `<option value="${tipoPlanilla.codtipoplanilla}">${tipoPlanilla.tipoPlanilla}</option>`
        );

        opciones.length == 0 &&
          opciones.push(
            `<option selected value="">No hay tipos de planilla disponibles</option>`
          );

        this.campos.tipoPlanilla.innerHTML = opciones.join("");

        const anio = this.campos.anio.value,
          codtipoplanilla = this.campos.tipoPlanilla.value;

        if (anio && codtipoplanilla) {
          await this.buscarPlanillas();
        }

        resolve();
      } catch (err) {
        reject(err);
      }
    });
  },
  buscarPlanillas: async function () {
    const anio = this.campos.anio.value,
      codtipoplanilla = this.campos.tipoPlanilla.value;

    this.data = {};

    if (!!!anio || !!!codtipoplanilla) return;

    try {
      const { data: planillas = [] } = await Planilla.obtenerPorTipoPlanilla({
        anio,
        codtipoplanilla,
      });

      planillas.forEach(
        (planilla) => (this.data[planilla.correlativo] = planilla)
      );

      let opciones = planillas.map(
        (planilla) =>
          `<option value="${planilla.correlativo}">${planilla.descripcion}</option>`
      );

      opciones.length == 0 &&
        opciones.push(
          `<option selected value="">No hay planillas disponibles</option>`
        );

      this.campos.planilla.innerHTML = opciones.join("");
      $(`#${this.campos.planilla.id}`).selectpicker("destroy").selectpicker();

      await this.buscar();
    } catch (err) {
      throw err;
    }
  },
  buscar: async function () {
    const anio = this.campos.anio.value,
      codtipoplanilla = this.campos.tipoPlanilla.value,
      correlativo = this.campos.planilla.value;

    try {
      await configDepartamento.buscar({ anio, codtipoplanilla, correlativo });
    } catch (err) {
      throw err;
    }
  },
  obtenerSeleccion: function () {
    return {
      anio: this.campos.anio.value,
      codtipoplanilla: this.campos.tipoPlanilla.value,
      correlativo: this.campos.planilla.value,
      planilla: this.data[this.campos.planilla.value],
      labels: {
        anio: this.campos.anio.options[this.campos.anio.selectedIndex].text,
        codtipoplanilla:
          this.campos.tipoPlanilla.options[
            this.campos.tipoPlanilla.selectedIndex
          ].text,
        correlativo:
          this.campos.planilla.options[this.campos.planilla.selectedIndex].text,
      },
    };
  },
  bloquearCampos: function () {
    document.getElementById("btn-enviar").disabled = true;
    document.getElementById("btn-descargar").disabled = true;
    document.getElementById("chk-todosDepartamentos").disabled = true;
    this.campos.anio.disabled = true;
    this.campos.tipoPlanilla.disabled = true;
    this.campos.planilla.disabled = true;

    $(`#${this.campos.planilla.id}`).selectpicker("destroy").selectpicker();
  },
  desbloquearCampos: function () {
    document.getElementById("btn-enviar").disabled = false;
    document.getElementById("btn-descargar").disabled = false;
    document.getElementById("chk-todosDepartamentos").disabled = false;
    this.campos.planilla.disabled = false;
    this.campos.tipoPlanilla.disabled = false;
    this.campos.planilla.disabled = false;

    $(`#${this.campos.planilla.id}`).selectpicker("destroy").selectpicker();
  },
};

const configDepartamento = {
  id: 0,
  cnt: 0,
  data: {},
  tabla: null,
  buscar: async function ({ anio, codtipoplanilla, correlativo }) {
    try {
      await this.limpiar();

      if (!!!anio || !!!codtipoplanilla || !!!correlativo) return;

      const { data: departamentos = [] } =
        await DepartamentoEmpresa.obtenerParaDocumentosPago({
          anio,
          codtipoplanilla,
          correlativo,
        });

      departamentos.forEach((departamento) => {
        this.cnt++;
        this.data[this.cnt] = departamento;

        const fila = this.prepararParaFila({
          datos: departamento,
          id: this.cnt,
        });

        this.tabla.agregarFila({
          datos: fila,
          idFila: `trDepartamento${this.cnt}`,
        });
      });

      this.tabla.redibujar();

      this.evaluarTodosDepartamentos(
        document.getElementById("chk-todosDepartamentos").checked
      );
    } catch (err) {
      throw err;
    }
  },
  prepararParaFila: function ({ datos, id }) {
    let checkbox = `<div class="d-flex justify-content-center">
            <div class="form-check">
              <input type="checkbox" id="chkDepartamento${id}" class="form-check-input" onchange="void(0);">
              <label for="chkDepartamento${id}" class="form-check-label"></label>
            </div>
          </div>`,
      badgeEnvios = obtenerHTMLBadge({
        tipo: "warning",
        texto: "N/A",
      }),
      badgeGeneracion = obtenerHTMLBadge({
        tipo: "error",
        texto: "Pendiente",
      }),
      totalEmpleadosEmail = parseInt(datos.totalEmails),
      totalEmpleados = parseInt(datos.totalEmpleados),
      totalEnviados = parseInt(datos.totalEnvios),
      totalGeneraciones = parseInt(datos.totalGenerados);

    if (datos.totalEmails > 0) {
      if (totalEnviados >= totalEmpleadosEmail) {
        badgeEnvios = obtenerHTMLBadge({
          tipo: "success",
          texto: "Enviados",
        });
      } else if (totalEnviados > 0) {
        badgeEnvios = obtenerHTMLBadge({
          tipo: "warning",
          texto: "Parcial",
        });
      } else {
        badgeEnvios = obtenerHTMLBadge({
          tipo: "error",
          texto: "Pendiente",
        });
      }
    }

    if (totalGeneraciones > 0) {
      if (totalGeneraciones >= totalEmpleados) {
        badgeGeneracion = obtenerHTMLBadge({
          tipo: "success",
          texto: "Generados",
        });
      } else {
        badgeGeneracion = obtenerHTMLBadge({
          tipo: "warning",
          texto: "Parcial",
        });
      }
    }

    return {
      0: datos.coddepartamento,
      1: checkbox,
      2: `${badgeEnvios}`,
      3: `${badgeGeneracion}`,
      4: datos.nombreDepartamento,
      5: datos.totalEmpleados,
      6: datos.totalEmails,
      7: datos.totalEnvios,
      8: datos.totalGenerados,
      9: obtenerHTMLBotonesDropdown([
        {
          tipo: "custom",
          texto: "Empleados",
          icono: "fas fa-users",
          selectorClase: "mostrar-empleados",
          selectorId: id,
        },
      ]),
    };
  },
  evaluarTodosDepartamentos: function (marcado = false) {
    this.tabla.tabla.rows().every(function (rowIdx, tableLoop, rowLoop) {
      let row = this.node(),
        checkbox = row.querySelector("input[type=checkbox]");
      checkbox && (checkbox.checked = marcado);
    });
  },
  mostrarEmpleados: async function (id = 0) {
    if (id == 0) return;

    const departamento = this.data[id],
      {
        codtipoplanilla,
        correlativo,
        labels: { codtipoplanilla: tipoPlanilla, correlativo: planilla },
      } = configuracion.obtenerSeleccion();

    try {
      await configEmpleado.buscar({
        coddepartamento: departamento.coddepartamento,
        codtipoplanilla,
        correlativo,
      });

      document.getElementById("spn-departamento").innerHTML =
        departamento.nombreDepartamento;
      document.getElementById("spn-periodo").innerHTML =
        "Planilla " + tipoPlanilla + " - " + planilla;

      configEmpleado.modales.mostrar("empleados");
    } catch (err) {
      mostrarMensajes.error(err);
    }
  },
  procesarMasivo: async function ({ tipoAccion = "Descargar" }) {
    const departamentosSeleccionados = [];

    try {
      this.tabla.tabla.rows().every(function (rowIdx, tableLoop, rowLoop) {
        const fila = this.node();
        let idFila = fila.id.replace("trDepartamento", ""),
          departamento = configDepartamento.data[idFila],
          checkbox = fila.querySelector("input[type=checkbox]");

        if (checkbox && checkbox.checked) {
          departamentosSeleccionados.push({ ...departamento, id: idFila });
        }
      });

      if (departamentosSeleccionados.length == 0) {
        mostrarMensajes.warning({
          message: "No se ha seleccionado ningún departamento",
        });

        return;
      }

      const filasSeleccionadas = departamentosSeleccionados.map(
        (departamento) => departamento.id
      );
      const { codtipoplanilla, correlativo, planilla } =
        configuracion.obtenerSeleccion();

      const mensaje =
        tipoAccion == "Enviar"
          ? `Se enviarán los documentos a los departamentos seleccionados, omitiendo a todos aquellos a los que ya se les envió el documento, este proceso puede tardar varios minutos`
          : "Se generarán los documentos agrupados por departamento, este proceso puede tardar varios minutos";

      const confirmacion = await mostrarMensajes.confirm({
        message: mensaje,
        confirmButtonText: "Si, continuar",
      });

      if (!confirmacion) return;

      const loader = document.querySelector(".loader");
      const arrNombresArchivos = [];

      loader && loader.classList.remove("d-none");

      configuracion.bloquearCampos();

      this.tabla.tabla.rows().every(function (rowIdx, tableLoop, rowLoop) {
        const loading = `<div class="d-flex justify-content-center"><div class="lds-ring"><div></div><div></div><div></div><div></div></div></div>`;
        let idFila = this.node().id.replace("trDepartamento", "");
        if (filasSeleccionadas.includes(idFila)) {
          this.node().cells[3].innerHTML = loading;
          if (tipoAccion == "Enviar") this.node().cells[2].innerHTML = loading;
        }

        let checkbox = this.node().querySelector("input[type=checkbox]");
        checkbox && (checkbox.disabled = true);
        this.node().cells[9].querySelector("button").disabled = true;
      });

      let idProceso = 0,
        badge = "";

      for (const departamento of departamentosSeleccionados) {
        console.log(
          `Construyendo documentos del departamento: ${departamento.nombreDepartamento}`
        );

        try {
          let respuesta = await DepartamentoEmpresa.procesarDocumentosPago({
            coddepartamento: departamento.coddepartamento,
            correlativo,
            esAguinaldo: planilla.aguinaldo,
            codtipoplanilla,
            idProceso,
            tipoAccion,
          });

          switch (respuesta.message) {
            case "success":
              idProceso = respuesta.idProceso;
              arrNombresArchivos.push(respuesta.nombreArchivo);
              badge = obtenerHTMLBadge({
                tipo: "success",
                texto: "Completado",
              });

              this.tabla.tabla
                .row(`#trDepartamento${departamento.id}`)
                .node().cells[3].innerHTML = badge;

              if (tipoAccion == "Enviar") {
                this.tabla.tabla
                  .row(`#trDepartamento${departamento.id}`)
                  .node().cells[2].innerHTML = badge;
              }
              break;
            default:
              badge = obtenerHTMLBadge({
                tipo: "danger",
                texto: "Error",
              });

              this.tabla.tabla
                .row(`#trDepartamento${departamento.id}`)
                .node().cells[3].innerHTML = badge;

              if (tipoAccion == "Enviar") {
                this.tabla.tabla
                  .row(`#trDepartamento${departamento.id}`)
                  .node().cells[2].innerHTML = badge;
              }

              console.error({
                err,
                departamento: departamento.nombreDepartamento,
              });
              break;
          }
        } catch (err) {
          badge = obtenerHTMLBadge({
            tipo: "danger",
            texto: "Error",
          });

          this.tabla.tabla
            .row(`#trDepartamento${departamento.id}`)
            .node().cells[3].innerHTML = badge;

          if (tipoAccion == "Enviar") {
            this.tabla.tabla
              .row(`#trDepartamento${departamento.id}`)
              .node().cells[2].innerHTML = badge;
          }

          console.error({ err, departamento: departamento.nombreDepartamento });
        }
      }

      loader && loader.classList.add("d-none");

      if (tipoAccion == "Descargar") {
        let archivoZip = new JSZip();

        let url = "";

        function obtenerArchivoAsyn(url) {
          return new Promise((resolve, reject) => {
            JSZipUtils.getBinaryContent(url, async function (err, data) {
              if (err) {
                reject(err);
              } else {
                resolve(data);
              }
            });
          });
        }

        for (const nombreArchivo of arrNombresArchivos) {
          url = `main/${obtenerNombreModulo()}/docs/documentosPago/${nombreArchivo}`;
          try {
            const data = await obtenerArchivoAsyn(url);
            archivoZip.file(nombreArchivo, data, { binary: true });
          } catch (err) {
            throw err;
          }
        }

        const content = await archivoZip.generateAsync({ type: "base64" });
        let link = document.createElement("a");
        link.setAttribute("href", "data:application/zip;base64," + content);
        link.setAttribute("download", `DocumentosPago.zip`);
        link.style.display = "none";
        document.body.appendChild(link);
        link.click();
        document.body.removeChild(link);
      }

      let mensajeFinal =
        tipoAccion == "Enviar"
          ? `Los documentos se procesaron y fueron enviados exitosamente`
          : `Se han generado los documentos de forma exitosa`;

      mostrarMensajes.success({
        message: mensajeFinal,
      });

      configuracion.desbloquearCampos();

      configuracion.buscar();
    } catch (err) {
      mostrarMensajes.error(err);
    }
  },
  limpiar: function () {
    return new Promise((resolve) => {
      this.data = {};
      this.id = 0;
      this.cnt = 0;
      this.tabla.limpiar().redibujar();
      resolve();
    });
  },
};

const configEmpleado = {
  id: 0,
  cnt: 0,
  data: {},
  tabla: null,
  campos: {
    nombreEmpleado: document.getElementById("txt-empleado"),
    email: document.getElementById("txt-email"),
    nombreEmpleadoDescripcion: document.getElementById(
      "txt-empleado-descripcion"
    ),
    descripcion: document.getElementById("txt-descripcion"),
  },
  modales: {
    empleados: "modal-empleados",
    email: "modal-email",
    descripcion: "modal-descripcion",
    mostrar: (modal = "empleados") =>
      $(`#${configEmpleado.modales[modal]}`).modal("show"),
    ocultar: (modal = "empleados") =>
      $(`#${configEmpleado.modales[modal]}`).modal("hide"),
  },
  buscar: async function ({ coddepartamento, codtipoplanilla, correlativo }) {
    try {
      await this.limpiar();

      const { data: empleados = [] } = await Empleado.obtenerParaDocumentosPago(
        {
          coddepartamento,
          codtipoplanilla,
          correlativo,
        }
      );

      empleados.forEach((empleado) => {
        this.cnt++;
        this.data[this.cnt] = empleado;

        const fila = this.prepararParaFila({
          datos: empleado,
          id: this.cnt,
        });

        this.tabla.agregarFila({
          datos: fila,
          idFila: `trEmpleado${this.cnt}`,
        });
      });

      this.tabla.redibujar();
    } catch (err) {
      throw err;
    }
  },
  prepararParaFila: function ({ datos, id }) {
    let badgeEnvio = obtenerHTMLBadge({
        tipo: "success",
        texto: "Enviado",
      }),
      badgeGeneracion = obtenerHTMLBadge({
        tipo: "success",
        texto: "Generado",
      }),
      botones = [
        {
          tipo: "custom",
          texto: "Configurar correo",
          icono: "fas fa-user-cog",
          selectorClase: "configurar-correo",
          selectorId: id,
        },
        {
          tipo: "custom",
          texto: "Enviar",
          icono: "fas fa-paper-plane",
          selectorClase: "enviar-correo",
          selectorId: id,
        },
        {
          tipo: "custom",
          texto: "Descargar",
          icono: "fas fa-download",
          selectorClase: "descargar-boleta",
          selectorId: id,
        },
      ];

    if (datos.codtipoplanilla == "7") {
      botones.unshift({
        tipo: "custom",
        texto: "Configurar descripción de documento",
        icono: "fas fa-cogs",
        selectorClase: "configurar-descripcion",
        selectorId: id,
      });
    }

    !datos.enviado &&
      (badgeEnvio = obtenerHTMLBadge({
        tipo: "warning",
        texto: "Pendiente",
      }));

    !datos.generado &&
      (badgeGeneracion = obtenerHTMLBadge({
        tipo: "warning",
        texto: "Pendiente",
      }));

    return {
      0: id,
      1: badgeEnvio,
      2: badgeGeneracion,
      3: `<span style="font-size:12px !important;">${datos.nombrePuesto}</span>`,
      4: `<span style="font-size:12px !important;">${datos.nombreCompleto}</span>`,
      5: datos.email,
      6: `$${parseFloat(datos.salarioLiquido).toLocaleString("en-US")}`,
      7: obtenerHTMLBotonesDropdown(botones),
    };
  },
  configurarCorreo: async function (id = 0) {
    try {
      await metodosFormularios.limpiar({ id: "correo-form" });

      this.id = id;

      let empleado = this.data[id],
        arrEmail =
          empleado.email != null ? empleado.email.split("@") : ["", ""];

      this.campos.nombreEmpleado.value = empleado.nombreCompleto;
      this.campos.email.value = arrEmail[0];

      this.modales.mostrar("email");
    } catch (err) {
      mostrarMensajes.error(err);
    }
  },
  configurarDescripcion: async function (id = 0) {
    try {
      await metodosFormularios.limpiar({ id: "descripcion-form" });

      this.id = id;

      let empleado = this.data[id];

      this.campos.nombreEmpleadoDescripcion.value = empleado.nombreCompleto;
      this.campos.descripcion.value = empleado.descripcionRecibo;

      this.modales.mostrar("descripcion");
    } catch (err) {
      mostrarMensajes.error(err);
    }
  },
  guardarCorreo: async function () {
    if (!metodosFormularios.validar({ id: "correo-form" })) return;

    try {
      const empleado = new Empleado(this.data[this.id]);

      empleado.email = `${this.campos.email.value}@${DOMINIO_EMAIL}`;

      const respuesta = await empleado.actualizarEmail();

      switch (respuesta.message) {
        case "success":
          this.data[this.id].email = empleado.email;

          this.tabla
            .actualizarFila({
              datos: { 5: empleado.email },
              idFila: `trEmpleado${this.id}`,
            })
            .redibujar();

          mostrarToastify({
            type: "success",
            message: "Correo actualizado correctamente",
          });

          this.modales.ocultar("email");
          break;
        default:
          mostrarMensajes.error(respuesta);
          break;
      }
    } catch (err) {
      mostrarMensajes.error(err);
    }
  },
  guardarDescripcion: async function () {
    if (!metodosFormularios.validar({ id: "descripcion-form" })) return;

    try {
      const empleado = new Empleado(this.data[this.id]);

      empleado.descripcionRecibo = this.campos.descripcion.value;

      const respuesta = await empleado.actualizarDescripcionRecibo();

      switch (respuesta.message) {
        case "success":
          this.data[this.id].descripcionRecibo = empleado.descripcionRecibo;

          mostrarToastify({
            type: "success",
            message: "Descripción actualizada correctamente",
          });

          this.modales.ocultar("descripcion");
          break;
        default:
          mostrarMensajes.error(respuesta);
          break;
      }
    } catch (err) {
      mostrarMensajes.error(err);
    }
  },
  documentoPago: async function ({ id, tipoAccion = "Descargar" }) {
    const empleado = new Empleado(this.data[id]);

    try {
      if (
        tipoAccion == "Enviar" &&
        (!empleado.email ||
          empleado.email == null ||
          empleado.email.trim() == "")
      ) {
        mostrarToastify({
          type: "warning",
          message: "El empleado no tiene un correo electrónico configurado",
        });

        return;
      }

      if (
        tipoAccion == "Enviar" &&
        !validarCorreoElectronico({ email: empleado.email })
      ) {
        mostrarToastify({
          type: "warning",
          message: "El correo electrónico del empleado no es válido",
        });

        return;
      }

      const { planilla, codtipoplanilla, correlativo } =
        configuracion.obtenerSeleccion();

      const respuesta = await empleado.construirDocumentoPago({
        codtipoplanilla,
        correlativo,
        aguinaldo: planilla.aguinaldo,
        tipoAccion,
      });

      switch (respuesta.message) {
        case "success":
          if (tipoAccion == "Enviar") {
            mostrarMensajes.success({
              message: "Documento enviado correctamente",
            });
            return;
          }

          if (tipoAccion == "Descargar") {
            let url = `main/${obtenerNombreModulo()}/docs/documentosPago/${
              respuesta.nombreArchivo
            }`;

            descargarArchivo({ nombreArchivo: respuesta.nombreArchivo, url });
          }
          break;
        default:
          mostrarMensajes.error(respuesta);
          break;
      }
    } catch (err) {
      mostrarMensajes.error(err);
    }
  },
  limpiar: function () {
    return new Promise((resolve) => {
      this.data = {};
      this.id = 0;
      this.cnt = 0;
      this.tabla.limpiar().redibujar();
      resolve();
    });
  },
};
