$("#tutorial").on("click", function () {
  $("#geral-tab").trigger("click");
  const driver = new Driver({
    doneBtnText: "Sair",
    closeBtnText: "Fechar",
    nextBtnText: "Próximo",
    prevBtnText: "Anterior",
    allowClose: false,
    onHighlightStarted: (Element) => {
      if (Element.node.id == "geral") {
        if (!$("#multiCollapseExample1").hasClass("show"));
        $("#multiCollapseExample1").collapse("show");
      } else if (Element.node.id == "duplicatas") {
        if (!$("#collapseFiltros").hasClass("show")) {
          $("#duplicatas").collapse("show");
          $("#multiCollapseExample2").collapse("show");
        }
      }
    },
    onPrevious: (Element) => {
      if (
        Element.node.id == "dupicatas-tab" ||
        Element.node.id == "dupicatas"
      ) {
        if (!$("#duplicatas>a").hasClass("collapsed")) {
          $("#multiCollapseExample2").collapse("show");
        }
      } else if (Element.node.id == "historico") {
        if (!$("#duplicatas>a").hasClass("collapsed")) {
          $("#duplicatas").collapse("show");
        }
      }
    },
  });

  driver.defineSteps([
    {
      element: "#geral",
      popover: {
        title: "Aba Geral",
        description: "Clique aqui para abrir a aba geral.",
        position: "botton",
      },
    },
    {
      element: "#multiCollapseExample1",
      popover: {
        title: "Dados Gerais",
        description: "Esses são os campos que você informará os dados gerais.",
        position: "top",
      },
    },
    {
      element: "#duplicatas",
      popover: {
        title: "Aba Duplicatas",
        description: "Clique aqui para abrir aba duplicatas.",
        position: "top",
      },
    },
    {
      element: "#multiCollapseExample2",
      popover: {
        title: "Dados de Duplicatas",
        description: "Aqui ficam as duplicatas importadas.",
        position: "top",
      },
    },
    {
      element: "#btnVoltar",
      popover: {
        title: "Botão Voltar",
        description:
          "Ao clicar nesse botão você retorna para a tela de consulta de bloquetos.",
        position: "left",
      },
    },
    {
      element: "#btnImprimir",
      popover: {
        title: "Botão Imprimir",
        description:
          "Ao clicar nesse botão você irá imprimir as duplicatas filtradas.",
        position: "left",
      },
    },
    {
      element: "#btnVoltarTodas",
      popover: {
        title: "Botão Voltar Todas",
        description:
          "Ao clicar nesse botão você irá voltar todas as duplicatas.",
        position: "left",
      },
    },
    {
      element: "#btnVoltarDup",
      popover: {
        title: "Botão Voltar Duplicata",
        description:
          "Ao clicar nesse botão você irá voltar a duplicata selecionada.",
        position: "left",
      },
    },
    {
      element: "#btnRecalcular",
      popover: {
        title: "Botão Recalcular",
        description:
          "Ao clicar nesse botão você irá fazer o recalculo das duplicatas filtradas.",
        position: "left",
      },
    },
  ]);

  driver.start();
  driver.getHighlightedElement();
});

$(document).ready(async function () {
  let queryString = window.location.href;
  let parametros = queryString.split("/");
  let bloqueto = parametros[parametros.length - 1];
  let alterouTaxa = false;
  let alterouMulta = false;
  let nrBancoOriginal;
  let alterouVenctoDup = false;
  let vencimentoOrigDup;

  $("#txtAcrescimo").maskMoney({
    decimal: ".",
    thousands: "",
    precision: 2,
  });
  $("#txtTaxaAcrescimo").maskMoney({
    decimal: ".",
    thousands: "",
    precision: 2,
  });
  $("#txtMultaAtraso").maskMoney({
    decimal: ".",
    thousands: "",
    precision: 2,
  });

  $("#txtConta").autocompleta(
    1,
    `JSON={ "tabela":"CADCONTA", "camposSelect":[ "CADCONTA.CONTA CHAVE", "CADCONTA.DESCRICAO DESCRICAO" ], "innerjoin": [{ "tabela": "EMP_VALOR", "condicao": "(EMP_VALOR.TABELA = 'CADCONTA' AND EMP_VALOR.CAMPO = 'CODIGO' AND EMP_VALOR.VALOR = CADCONTA.CODIGO AND EMP_VALOR.EMP_ID = ${getCookie(
      "emp_id"
    )})" }], "where": ["((ATIVO <> 'N') OR (ATIVO IS NULL ))"]}`
  );
  $("#btnConta").pesquisa_serverside(
    ["#txtConta"],
    ["CONTA"],
    ["DESCRICAO"],
    `{ "tabela":"CADCONTA", "camposSelect":[ "CONTA", "DESCRICAO" ], "innerjoin": [{ "tabela": "EMP_VALOR", "condicao": "(EMP_VALOR.TABELA = 'CADCONTA' AND EMP_VALOR.CAMPO = 'CODIGO' AND EMP_VALOR.VALOR = CADCONTA.CODIGO AND EMP_VALOR.EMP_ID = '${getCookie(
      "emp_id"
    )}')" }], "where": ["((ATIVO <> 'N') OR (ATIVO IS NULL ))"]}`,
    "Pesquisa de Conta"
  );
  $("#btnAConta").on("click", function () {
    $("#txtConta").val("");
  });

  $("#txtAlterarBanco").autocompleta(
    1,
    `JSON={ "tabela":"CADBAN", "camposSelect":[ "BANCO CHAVE", "NOME_BANCO DESCRICAO" ], "where": null}`
  );
  $("#btnAlterarBanco").pesquisa_serverside(
    ["#txtAlterarBanco"],
    ["BANCO"],
    ["NOME_BANCO"],
    `{ "tabela":"CADBAN", "camposSelect":[ "BANCO", "NOME_BANCO" ], "where": null}`,
    "Pesquisa de Banco"
  );
  $("#btnAAlterarBanco").on("click", function () {
    $("#txtAlterarBanco").val("");
  });

  $("#cbLayoutGrafico").on("click", function () {
    if ($("#cbLayoutGrafico").is(":checked")) {
      $("#cbNossoNumero").prop("checked", true);
      $("#cbNossoNumero").prop("disabled", true);
    } else {
      $("#cbNossoNumero").prop("checked", false);
      $("#cbNossoNumero").prop("disabled", false);
    }
  });

  $("#cbProtesto1").on("click", function () {
    if ($("#cbProtesto1").is(":checked")) {
      $("#txtInstrucao1").prop("disabled", false);
    } else {
      $("#txtInstrucao1").prop("disabled", true);
      $("#txtInstrucao1").val("");
    }
  });

  $("#cbProtesto2").on("click", function () {
    if ($("#cbProtesto2").is(":checked")) {
      $("#txtInstrucao2").prop("disabled", false);
    } else {
      $("#txtInstrucao2").prop("disabled", true);
      $("#txtInstrucao2").val("");
    }
  });

  $("#cbAtualizaValor").on("click", function () {
    if ($("#cbAtualizaValor").is(":checked")) {
      $($("#cbCalcular").parents()[0]).removeClass("d-none");
    } else {
      $($("#cbCalcular").parents()[0]).addClass("d-none");
    }
  });

  $("#cbAtualizarVencimento").on("click", function () {
    if ($("#cbAtualizarVencimento").is(":checked")) {
      $($("#dtNovoVencimento").parents()[0]).removeClass("d-none");
    } else {
      $($("#dtNovoVencimento").parents()[0]).addClass("d-none");
    }
  });

  $("#btnVoltar").on("click", async function () {
    window.location.href = `${BASE_URI}/relbloqueto`;
    localStorage.removeItem("resgistros");
  });

  $(".collapse")
    .on("shown.bs.collapse", function (e) {
      let clicked = $(document).find(`[href='#${$(e.target).attr("id")}']`);

      clicked
        .parent()
        .find(".fa-angle-right")
        .removeClass("fa-angle-right")
        .addClass("fa-angle-down");
    })
    .on("hidden.bs.collapse", function (e) {
      let clicked = $(document).find(`[href='#${$(e.target).attr("id")}']`);

      clicked
        .parent()
        .find(".fa-angle-down")
        .removeClass("fa-angle-down")
        .addClass("fa-angle-right");
    });

  function retornaBotaoOpcoes(data) {
    var retorno =
      '<div style="text-align:start;"> ' +
      '    <button class="btn btn-info btn-sm dropdown-toggle btnVerificaOpcoes" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> ' +
      "      " +
      data +
      " " +
      "    </button> " +
      '    <div class="dropdown-menu"> ' +
      '    <button class="dropdown-item" type="button" title="Alterar Banco" id="btn-alterarBanco">Alterar Banco</button>     ' +
      '    <button class="dropdown-item" type="button" title="Alterar Todos os Banco" id="btn-alterarTodosBancos">Alterar Todos os Bancos</button>     ' +
      '    <button class="dropdown-item" type="button" title="Alterar Duplicata" id="btn-alterarDuplicata">Alterar Duplicata</button>     ' +
      '    <button class="dropdown-item" type="button" title="Alterar Todas as Contas" id="btn-alterarContas">Alterar Todas as Contas</button>     ' +
      // '    <button class="dropdown-item" type="button" title="Gerar Borderô" id="btn-gerarBordero">Gerar Borderô</button>     ' +
      "</div>";
    return retorno;
  }

  async function buscaDados(registros) {
    if ($.fn.DataTable.isDataTable("#tabelaDuplicatas")) {
      $("#tabelaDuplicatas").DataTable().destroy();
      $("#tabelaDuplicatas").empty();
    }
    $.LoadingOverlay("show");
    try {
      try {
        dataSetCols = [];
        const url = "/sisplan/relbloqueto/v1/consultarelbloqueto?";
        let numeros = [];
        let faturas = [];
        for (let i = 0; i < registros.length; i++) {
          numeros.push(registros[i].NUMERO);
          faturas.push(registros[i].FATURA);
        }
        numeros = await formataListas(numeros.toString());
        faturas = await formataListas(faturas.toString());
        const response = await requisicao(
          "GET",
          url,
          `NUMEROS=${numeros}&FATURAS=${faturas}&EMPRESA=${getCookie(
            "empresa"
          )}`,
          "",
          360000
        );

        if (!response) {
          return;
        }

        const jsonStr = await response.json();

        if (jsonStr.length == 0) {
          msgAlerta("Nenhum registro encontrado!");
          if ($.fn.DataTable.isDataTable("#tabelaDuplicatas")) {
            $("#tabelaDuplicatas").DataTable().destroy();
            $("#tabelaDuplicatas").empty();
          }
          return;
        }

        if (response.status != 200) {
          msgAlerta(jsonStr.mensagem);
          return;
        }

        $("#tabelaDuplicatas").DataTable({
          bPaginate: true,
          destroy: true,
          colReorder: true,
          autoWidth: true,
          columns: [
            { title: "Número", data: "NUMERO", },
            { title: "Fatura", data: "FATURA" },
            { title: "Banco", data: "BANCO" },
            { title: "Nr. Banco", data: "NRBANCO" },
            { title: "Nome Banco", data: "NOME_BANCO" },
            { title: "Codcli", data: "CODCLI" },
            { title: "Conta Cheque", data: "CONTA_CHEQUE" },
            { title: "Valor", data: "VALOR" },
            { title: "Valor Dup.", data: "VALOR_DUP" },
            { title: "Juros", data: "JUROS" },
            { title: "Dt. Emissao", data: "DT_EMISSAO" },
            { title: "Dt. Vencto", data: "DT_VENCTO" },
            { title: "Dt. Venc.to Orig", data: "DT_VENCTO_ORIG" },
            { title: "Perc. Juros Dia Atraso", data: "PERC_JUROS_DIA_ATRASO" },
            { title: "Valor Juros Dia Atraso", data: "VALOR_JUROS_DIA_ATRASO" },
            { title: "Multa Atraso", data: "MULTA_ATRASO" },
            { title: "Valor Calc. Dia Atraso", data: "VALOR_CALC_DIA_ATRASO" },
            { title: "Taxa", data: "TAXA" },
            { title: "Nome", data: "NOME" },
            { title: "CNPJ", data: "CNPJ" },
            { title: "CNPJ Cob", data: "CNPJ_COB" },
            { title: "Inscrição", data: "INSCRICAO" },
            { title: "Codrep", data: "CODREP" },
            { title: "End. Cob.", data: "END_COB" },
            { title: "Num. Cob.", data: "NUM_COB" },
            { title: "Comp. Cob.", data: "COMP_COB" },
            { title: "Endereço", data: "ENDERECO" },
            { title: "End. Num.", data: "END_NUM" },
            { title: "Complemento", data: "COMPLEMENTO" },
            { title: "Moeda", data: "MOEDA" },
            { title: "Desc Moe", data: "DESC_MOE" },
            { title: "DDD Fone", data: "DDD_FONE" },
            { title: "Telefone", data: "TELEFONE" },
            { title: "Fone Compl.", data: "FONE_COMPL" },
            { title: "DDD Cob.", data: "DDD_COB" },
            { title: "Fone Cob.", data: "FONE_COB" },
            { title: "Fone. Cob. Compl.", data: "FONE_COB_COMPL" },
            { title: "CEP", data: "CEP" },
            { title: "Est. CEP", data: "ESTCEP" },
            { title: "Nome CEP", data: "NOMCEP" },
            { title: "Taxa Ven.", data: "TAXAVEN" },
            { title: "Despesas", data: "DESPESAS" },
            { title: "Desconto", data: "DESCONTO" },
            { title: "Obs. Dup.", data: "OBSDUP" },
            { title: "Bordero", data: "BORDERO" },
            { title: "Endosso", data: "ENDOSSO" },
            { title: "Nome Endosso", data: "NOME_ENDOSSO" },
            { title: "CNPJ Endosso", data: "CNPJ_ENDOSSO" },
            { title: "Obs", data: "OBS" },
            { title: "Bairro", data: "BAIRRO" },
            { title: "Classe", data: "CLASSE" },
            { title: "Situação", data: "SITUACAO" },
            { title: "Obriga NFSE", data: "OBRIGA_NFSE" },
            { title: "Parcela", data: "PARCELA" },
            { title: "Dias Protesto", data: "DIAS_PROTESTO" },
            { title: "Bolecode", data: "BOLECODE" },
            { title: "Desc. Condpagto", data: "DESC_CONDPAGTO" },
            { title: "Conta", data: "CONTA" },
            { title: "Carteira", data: "CARTEIRA" },
            { title: "Retorno Api", data: "RETORNO_API" }
          ],
          data: jsonStr,
          columnDefs: [
            {
              targets: [0],
              render: function (data, type, row) {
                return retornaBotaoOpcoes(data);
              },
            },
            {
              type: "date-br",
              render(data) {
                return new Intl.DateTimeFormat("pt-BR").format(
                  new Date(`${data.split(" ")[0]} 23:59:59`)
                );
              },
              targets: [10, 11, 12],
            },
            {
              render(data) {
                return parseFloat(data).toLocaleString("pt-br", {
                  minimumFractionDigits: 2,
                });
              },
              targets: [7, 8, 9, 13, 14, 15, 16, 17],
              className: "pr-4 text-right",
            },
          ],
        });

        $("#tabelaDuplicatas tbody").on("click", "tr", async function () {
          if ($(this).hasClass("selected")) {
            $(this).removeClass("selected");
          } else {
            $("#tabelaDuplicatas")
              .DataTable()
              .$("tr.selected")
              .removeClass("selected");
            $(this).addClass("selected");
          }
        });

        setTimeout(() => {
          $("#btnRecalcular").click();
        }, 2000);
      } catch (err) {
        console.error(err);
        msgErro(`Não foi possível buscar os dados das duplicatas!`);
      }
    } finally {
      $.LoadingOverlay("hide");
    }
  }

  async function iniciaRotinaGravaBordero(callback) {
    $.LoadingOverlay("show");
    try {
      //    const statusCarteira = await buscaValor('CARTEIRA', ['SITUA_BCO'], ['CARTEIRA', 'CONTA'], [pegaChave('#txtCarteira'), pegaChave('#txtConta')]);
      let contaAnterior = "";
      let bancoAnterior = "";
      let listaNumeros = "";

      if ($("#txtConta").val() == "" || $("#rgCarteira").val() == "") {
        msgAlerta("Conta ou carteira inválida! Por favor, verifique.");
        $("#txtConta").trigger("focusin");
        return;
      }

      const datatableDuplicatas = $("#tabelaDuplicatas")
        .DataTable()
        .data()
        .toArray();
      const bancoFiltro = pegaChave("#txtBanco");

      for (i = 0; i < datatableDuplicatas.length; i++) {
        if (bancoFiltro != "") {
          if (bancoFiltro != datatableDuplicatas[i].BANCO) {
            msgErro(
              "Banco da duplicata " +
                datatableDuplicatas[i].NUMERO +
                " diferente do campo banco! Impossível continuar, verifique."
            );
            return;
          }
        }

        if (
          contaAnterior != datatableDuplicatas[i].CONTACHEQUE &&
          contaAnterior != ""
        ) {
          msgErro(
            "Para gerar borderô é necessário todas as duplicatas selecionadas serem da mesma conta! Impossível continuar, verifique."
          );
          return;
        }

        if (
          bancoAnterior != datatableDuplicatas[i].BANCO &&
          bancoAnterior != ""
        ) {
          msgErro(
            "Para gerar borderô é necessário todas as duplicatas selecionadas serem do mesmo banco! Impossível continuar, verifique."
          );
          return;
        }

        if (
          datatableDuplicatas[i].BORDERO != "0" &&
          datatableDuplicatas[i].BORDERO != ""
        ) {
          msgErro(
            "Duplicata nº: " +
              datatableDuplicatas[i].NUMERO +
              " já existe borderô informado. Favor excluir a mesma do borderô antigo para inserir no novo! Impossível continuar."
          );
          return;
        }

        if (listaNumeros == "") {
          listaNumeros = datatableDuplicatas[i].NUMERO;
        } else {
          listaNumeros = listaNumeros + ", " + datatableDuplicatas[i].NUMERO;
        }

        contaAnterior = datatableDuplicatas[i].CONTACHEQUE;
        bancoAnterior = datatableDuplicatas[i].BANCO;
      }

      const infoCarteira = await buscaValor(
        "CARTEIRA",
        ["*"],
        ["CONTA"],
        [`${pegaChave("#txtConta")}`]
      );

      const response = await requisicao(
        "POST",
        "/sisplan/relbloqueto/v1/gerabordero?",
        `CONTA=${pegaChave("#txtConta")}&CARTEIRA=${
          infoCarteira.CARTEIRA
        }&VARCART1=&DIASPROTESTO=${
          infoCarteira.DIASPROTESTO
        }&OCORRENCIA=&TXACRESC=${infoCarteira.TAXA1}&TXMULTA=${
          infoCarteira.TAXA2
        }&LISTANUMEROS=${listaNumeros}&GERALAYOUTGRAFICO=${
          $("#cbLayoutGrafico").is(":checked") ? true : false
        }`,
        null,
        120000
      );

      if (!response) {
        return;
      }

      if (response.status != 200) {
        let jsonStr = await response.json();
        msgErro(jsonStr.mensagem);
        return;
      }

      const jsonStr = await response.json();

      criaMensagemSucesso(
        "Borderô gerado com sucesso! Nº: " + String(jsonStr),
        callback
      );
    } catch (err) {
      console.error(err);
    } finally {
      $.LoadingOverlay("hide");
    }
  }

  $("#tabelaDuplicatas").on("click", "#btn-alterarBanco", async function () {
    $.LoadingOverlay("show");
    try {
      let data = $("#tabelaDuplicatas")
        .DataTable()
        .row($(this).parents("tr"))
        .data();

      if (data.NRBANCO != "") {
        msgAlerta(
          "Duplicata com o Nosso Numero gerado. Deseja Continuar?",
          async () => {
            $("#containerDuplicata").removeClass("d-none");
            $("#containerBanco").addClass("col-9");
            $("#containerBanco").addClass("col-md-9");
            $("#containerBanco").removeClass("col-12");
            $("#containerBanco").removeClass("col-md-12");
            $("#btnGravarBanco").removeClass("d-none");
            $("#btnGravarTodosBancos").addClass("d-none");
            $("#modal-alterarBanco").modal("show");
            $("#txtDuplicataBanco").val(data.NUMERO);
            insereValor("#txtAlterarBanco", data.BANCO, data.NOME_BANCO);
          },
          async () => {
            return;
          }
        );
      } else {
        $("#containerDuplicata").removeClass("d-none");
        $("#containerBanco").addClass("col-9");
        $("#containerBanco").addClass("col-md-9");
        $("#containerBanco").removeClass("col-12");
        $("#containerBanco").removeClass("col-md-12");
        $("#btnGravarBanco").removeClass("d-none");
        $("#btnGravarTodosBancos").addClass("d-none");
        $("#modal-alterarBanco").modal("show");
        $("#txtDuplicataBanco").val(data.NUMERO);
        insereValor("#txtAlterarBanco", data.BANCO, data.NOME_BANCO);
      }
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  $("#btnGravarBanco").on("click", async function () {
    $.LoadingOverlay("show");
    try {
      try {
        let numero = $("#txtDuplicataBanco").val();
        let banco = pegaChave("#txtAlterarBanco");
        // if (banco == '') {
        //     msgAlerta('Banco não informado!')
        //     return;
        // }
        let response = await requisicao(
          "POST",
          "/sisplan/relbloqueto/v1/alterarbanco?",
          `NUMERO=${encodeURIComponent(numero)}&BANCO=${banco}`,
          null
        );
        if (!response) {
          return;
        }
        if (response.status != 200) {
          let jsonStr = await response.json();
          msgErro(jsonStr.mensagem);
          return;
        }

        toastr
          .success(`Banco Alterado com sucesso!`, "Confirmação", {
            toastClass: "success",
            iconClasses: {
              error: "alert-error",
              info: "alert-info",
              success: "alert-success",
              warning: "alert-warning",
            },
            positionClass: "toast-top-center",
            progressBar: true,
            timeOut: 3000,
            fadeOut: 1000,
            onHidden() {
              data.remove().draw(false);
            },
          })
          .css({
            "margin-top": "20%",
            width: "500px",
            "max-width": "500px",
          });

        $("#modal-alterarBanco").modal("hide");
        let registros = JSON.parse(localStorage.getItem("registros"));
        await buscaDados(registros);
      } catch (err) {
        console.error(err);
      }
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  $("#tabelaDuplicatas").on(
    "click",
    "#btn-alterarTodosBancos",
    async function () {
      $.LoadingOverlay("show");
      try {
        let nrbancoPreenchido = false;

        $("#tabelaDuplicatas")
          .DataTable()
          .rows()
          .every(function () {
            let item = this.data();
            if (item.NRBANCO) {
              nrbancoPreenchido = true;
            }
          });

        if (nrbancoPreenchido) {
          msgAlerta(
            "Existem duplicatas com o Nosso Numero gerado. Deseja Continuar?",
            async () => {
              $("#containerDuplicata").addClass("d-none");
              $("#containerBanco").removeClass("col-9");
              $("#containerBanco").removeClass("col-md-9");
              $("#containerBanco").addClass("col-12");
              $("#containerBanco").addClass("col-md-12");
              $("#btnGravarBanco").addClass("d-none");
              $("#btnGravarTodosBancos").removeClass("d-none");
              $("#txtAlterarBanco").val("");
              $("#modal-alterarBanco").modal("show");
            },
            async () => {
              return;
            }
          );
        } else {
          $("#containerDuplicata").addClass("d-none");
          $("#containerBanco").removeClass("col-9");
          $("#containerBanco").removeClass("col-md-9");
          $("#containerBanco").addClass("col-12");
          $("#containerBanco").addClass("col-md-12");
          $("#btnGravarBanco").addClass("d-none");
          $("#btnGravarTodosBancos").removeClass("d-none");
          $("#txtAlterarBanco").val("");
          $("#modal-alterarBanco").modal("show");
        }
      } finally {
        $.LoadingOverlay("hide");
      }
    }
  );

  $("#btnGravarTodosBancos").on("click", async function () {
    $.LoadingOverlay("show");
    try {
      try {
        let banco = pegaChave("#txtAlterarBanco");
        // if (banco == '') {
        //     msgAlerta('Banco não informado!')
        //     return;
        // }
        let registros = JSON.parse(localStorage.getItem("registros"));
        let response;
        for (let i in registros) {
          response = await requisicao(
            "POST",
            "/sisplan/relbloqueto/v1/alterarbanco?",
            `NUMERO=${encodeURIComponent(registros[i].NUMERO)}&BANCO=${banco}`,
            null
          );
          if (!response) {
            return;
          }
          if (response.status != 200) {
            let jsonStr = await response.json();
            msgErro(jsonStr.mensagem);
            return;
          }
        }

        toastr
          .success(`Bancos Alterados com sucesso!`, "Confirmação", {
            toastClass: "success",
            iconClasses: {
              error: "alert-error",
              info: "alert-info",
              success: "alert-success",
              warning: "alert-warning",
            },
            positionClass: "toast-top-center",
            progressBar: true,
            timeOut: 3000,
            fadeOut: 1000,
            onHidden() {
              data.remove().draw(false);
            },
          })
          .css({
            "margin-top": "20%",
            width: "500px",
            "max-width": "500px",
          });

        $("#modal-alterarBanco").modal("hide");
        await buscaDados(registros);
      } catch (err) {
        console.error(err);
      }
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  $("#tabelaDuplicatas").on(
    "click",
    "#btn-alterarDuplicata",
    async function () {
      $.LoadingOverlay("show");
      try {
        let data = $("#tabelaDuplicatas")
          .DataTable()
          .row($(this).parents("tr"))
          .data();

        $("#modalAlterarDuplicata").modal("show");
        $("#txtDuplicataDup").val(data.NUMERO);
        if (data.NUMERO != "") {
          await preencheDadosAlteraDup(data.NUMERO);
        } else {
          msgAlerta("Ocorreu erro ao buscar os dados da duplicata!");
          return;
        }
      } finally {
        $.LoadingOverlay("hide");
      }
    }
  );

  function limpaCamposDup() {
    $("#txtClienteDup").val("");
    $("#txtContaDup").val("");
    $("#txtClasseGerDup").val("");
    $("#txtHistoricoDup").val("");
    $("#txtBancoDup").val("");
    $("#txtSituacaoDup").val("");
    $("#txtEndossoDup").val("");
    $("#txtMoedaDup").val("");
    $("#txtNrBancoDup").val("");
    $("#txtBorderoDup").val("");
    $("#txtCartaoNSUDup").val("");
    $("#txtDescProgramadoDup").val("");
    $("#txtJurosProgramadoDup").val("");
    $("#txtObsDup").val("");
    $("#dtEmissaoDup").val("");
    $("#dtVenctoDup").val("");
    $("#dtVenctoPrevDup").val("");
    $("#cbAlteraNum").prop("checked", false);
  }

  async function preencheDadosAlteraDup(numero) {
    $.LoadingOverlay("show");
    try {
      try {
        let cliente =
          (await buscaParametroERP("VEN", "1130", "19", "1")) == "S";
        let param20 =
          (await buscaParametroERP("VEN", "1130", "20", "1")) == "S";
        let param21 =
          (await buscaParametroERP("VEN", "1130", "21", "1")) == "S";
        let param43 =
          (await buscaParametroERP("VEN", "1130", "43", "1")) != "N";
        let paramFin30 =
          (await buscaParametroERP("FIN", "30", "1", "1")) == "S";

        if (paramFin30 || (await Existe("RECEBERB", ["NUMERO"], [numero]))) {
          cliente = false;
        }

        const pesquisaParam = {
          tabela: "RECEBER",
          camposSelect: [
            "RECEBER.DT_EMISSAO",
            "RECEBER.DT_VENCTO",
            "RECEBER.DT_PREVISAO",
            "RECEBER.CODCLI",
            "ENTIDADE.NOME",
            "RECEBER.CONTA_CHEQUE",
            "CADCONTA.DESCRICAO DESC_CONTA",
            "RECEBER.CLASSE",
            "CLASSE_GER.DESCRICAO DESC_CLASSE",
            "RECEBER.HISTORICO",
            "HISTCP.DESCRICAO DESC_HIST",
            "RECEBER.BANCO",
            "CADBAN.NOME_BANCO",
            "RECEBER.STATUS",
            "RECEBER.SITUACAO",
            "TABSIT.DESCRICAO DESC_SIT",
            "RECEBER.ENDOSSO",
            "ENTIDADE.CNPJ",
            "ENDOSSO.NOME NOME_ENDOSSO",
            "RECEBER.NRBANCO",
            "RECEBER.BORDERO",
            "RECEBER.CARTAO_NSU",
            "RECEBER.MOEDA",
            "MOEDA.DESCRICAO DESC_MOEDA",
            "RECEBER.OBS",
            "RECEBER.JUROS_PROGRAMADO",
            "RECEBER.DESC_PROGRAMADO",
          ],
          leftJoin: [
            {
              tabela: "ENTIDADE",
              condicao: "RECEBER.CODCLI = ENTIDADE.CODCLI ",
            },
            { tabela: "CADBAN", condicao: "CADBAN.BANCO = RECEBER.BANCO " },
            {
              tabela: "CLASSE_GER",
              condicao: "CLASSE_GER.CODIGO = RECEBER.CLASSE ",
            },
            {
              tabela: "HISTCP",
              condicao: "HISTCP.HISTORICO = RECEBER.HISTORICO ",
            },
            { tabela: "TABSIT", condicao: "TABSIT.CODIGO = RECEBER.SITUACAO " },
            {
              tabela: "CADCONTA",
              condicao: "CADCONTA.CONTA = RECEBER.CONTA_CHEQUE",
            },
            {
              tabela: "ENTIDADE",
              alias: "ENDOSSO",
              condicao: "ENDOSSO.CODCLI = RECEBER.ENDOSSO",
            },
            { tabela: "MOEDA", condicao: "MOEDA.CODMOE = RECEBER.MOEDA" },
          ],
          where: [`RECEBER.NUMERO = '${numero}'`],
        };

        let jsonStr = await retornaJsonPesquisaPadrao(
          JSON.stringify(pesquisaParam)
        );

        limpaCamposDup();
        if (jsonStr.length > 0) {
          insereValor("#txtClienteDup", jsonStr[0].CODCLI, jsonStr[0].NOME);
          insereValor(
            "#txtContaDup",
            jsonStr[0].CONTA_CHEQUE,
            jsonStr[0].DESC_CONTA
          );
          insereValor(
            "#txtClasseGerDup",
            jsonStr[0].CLASSE,
            jsonStr[0].DESC_CLASSE
          );
          insereValor(
            "#txtHistoricoDup",
            jsonStr[0].HISTORICO,
            jsonStr[0].DESC_HIST
          );
          insereValor("#txtBancoDup", jsonStr[0].BANCO, jsonStr[0].NOME_BANCO);
          insereValor(
            "#txtSituacaoDup",
            jsonStr[0].SITUACAO,
            jsonStr[0].DESC_SIT
          );
          insereValor(
            "#txtEndossoDup",
            jsonStr[0].ENDOSSO,
            jsonStr[0].NOME_ENDOSSO
          );
          insereValor("#txtMoedaDup", jsonStr[0].MOEDA, jsonStr[0].DESC_MOEDA);
          $("#txtNrBancoDup").val(jsonStr[0].NRBANCO);
          $("#txtBorderoDup").val(jsonStr[0].BORDERO);
          $("#txtCartaoNSUDup").val(jsonStr[0].CARTAO_NSU);
          $("#txtDescProgramadoDup").val(jsonStr[0].DESC_PROGRAMADO);
          $("#txtJurosProgramadoDup").val(jsonStr[0].JUROS_PROGRAMADO);
          $("#txtObsDup").val(jsonStr[0].OBS);
          $("#dtEmissaoDup").val(jsonStr[0].DT_EMISSAO.split(" ", -1)[0]);
          $("#dtVenctoDup").val(jsonStr[0].DT_VENCTO.split(" ", -1)[0]);
          $("#dtVenctoPrevDup").val(jsonStr[0].DT_PREVISAO.split(" ", -1)[0]);

          let emp_cnpj = await buscaValor(
            "EMPRESA",
            "EMP_CNPJ",
            "EMP_ID",
            getCookie("emp_id")
          );
          if (emp_cnpj == jsonStr[0].CNPJ && jsonStr[0].STATUS == "ANTE") {
            cliente = false;
          }
          cliente
            ? $("#panelCliente").removeClass("d-none")
            : $("#panelCliente").addClass("d-none");
          param20
            ? $("#panelConta").removeClass("d-none")
            : $("#panelConta").addClass("d-none");
          param21
            ? $("#panelVenctoPrev").removeClass("d-none")
            : $("#panelVenctoPrev").addClass("d-none");
          if (param43) {
            $("#panelEmissaoVencto").removeClass("d-none");
            $("#panelEndosso").removeClass("d-none");
            $("#panelNrBanco").removeClass("d-none");
            $("#panelCartaoNSU").removeClass("d-none");
            $("#panelBordero").removeClass("d-none");
            $("#panelMoeda").removeClass("d-none");
            $("#panelObs").removeClass("d-none");
            $("#panelDescProgramado").removeClass("d-none");
            $("#panelJurosProgramado").removeClass("d-none");
            $("#panelAlteraNum").removeClass("d-none");
            $("#panelObs").removeClass("d-none");
          } else {
            $("#panelEmissaoVencto").addClass("d-none");
            $("#panelEndosso").addClass("d-none");
            $("#panelNrBanco").addClass("d-none");
            $("#panelCartaoNSU").addClass("d-none");
            $("#panelBordero").addClass("d-none");
            $("#panelMoeda").addClass("d-none");
            $("#panelObs").addClass("d-none");
            $("#panelDescProgramado").addClass("d-none");
            $("#panelJurosProgramado").addClass("d-none");
            $("#panelAlteraNum").addClass("d-none");
            $("#panelObs").addClass("d-none");
          }

          nrBancoOriginal = jsonStr[0].NRBANCO;
          vencimentoOrigDup = $("#dtVenctoDup").val();
        }
      } catch (err) {
        console.error(err);
      }
    } finally {
      $.LoadingOverlay("hide");
    }
  }

  $("#btnGravarDuplicata").on("click", async function () {
    $.LoadingOverlay("show");
    try {
      let vencimento = $("#dtVenctoDup").val();
      let emissao = $("#dtEmissaoDup").val();

      let partesVencimento = vencimento.split("-");
      let anoVencimento = parseInt(partesVencimento[0], 10);
      let mesVencimento = parseInt(partesVencimento[1], 10);
      let diaVencimento = parseInt(partesVencimento[2], 10);

      let partesEmissao = emissao.split("-");
      let anoEmissao = parseInt(partesEmissao[0], 10);
      let mesEmissao = parseInt(partesEmissao[1], 10);
      let diaEmissao = parseInt(partesEmissao[2], 10);

      if (
        anoEmissao > anoVencimento ||
        (anoEmissao === anoVencimento && mesEmissao > mesVencimento) ||
        (anoEmissao === anoVencimento &&
          mesEmissao === mesVencimento &&
          diaEmissao > diaVencimento)
      ) {
        msgAlerta(
          "Data de vencimento não pode ser menor que data de emissão. Por favor verifique."
        );
        return;
      }

      if (
        !$("#panelCliente").hasClass("d-none") &&
        $("#txtClienteDup").val() == ""
      ) {
        msgAlerta("Cliente não informado. Por favor verifique.");
        return;
      }

      if (
        (await validaDescJurosBaixa($("#txtDuplicataDup").val())) &&
        $("#txtDescProgramadoDup").val() > 0
      ) {
        msgAlerta(
          "Não é possível Alterar desconto programado quando ja existem baixas."
        );
        return;
      }

      if (
        (await validaDescJurosBaixa($("#txtDuplicataDup").val(), false)) &&
        $("#txtJurosProgramadoDup").val() > 0
      ) {
        msgAlerta(
          "Não é possível Alterar juros programado quando ja existem baixas."
        );
        return;
      }

      if (
        buscaValor(
          "RECEBER",
          "BORDERO",
          "NUMERO",
          $("#txtDuplicataDup").val()
        ) &&
        vencimentoOrigDup != $("#dtVenctoDup").val()
      ) {
        msgAlerta(
          "Duplicata já enviada ao banco, gravar instrução de mudança de vencimento?",
          async () => {
            alterouVenctoDup = true;
          }
        );
      }

      if (nrBancoOriginal != $("#txtNrBancoDup").val()) {
        msgAlerta(
          `Nr.Banco informado Diferente do Original. Original: ${nrBancoOriginal} informado: ${$(
            "#txtNrBancoDup"
          ).val()}. Deseja continuar?`,
          async () => {
            msgAlerta(
              `Deseja Realmente Gravar os Dados?`,
              async () => {
                await gravaDadosDuplicata();
              },
              async () => {
                return;
              }
            );
          },
          async () => {
            return;
          }
        );
      } else {
        msgAlerta(
          `Deseja Realmente Gravar os Dados?`,
          async () => {
            await gravaDadosDuplicata();
          },
          async () => {
            return;
          }
        );
      }
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  async function retornaValoresDup() {
    let obs = "";
    numero = $("#txtDuplicataDup").val();
    emissao = !$("#panelEmissaoVencto").hasClass("d-none")
      ? formataDataBonita($("#dtEmissaoDup").val()) + " 00:00:00.000"
      : "";
    vencto = !$("#panelEmissaoVencto").hasClass("d-none")
      ? formataDataBonita($("#dtVenctoDup").val()) + " 00:00:00.000"
      : "";
    venctoprev = !$("#panelVenctoPrev").hasClass("d-none")
      ? formataDataBonita($("#dtVenctoPrevDup").val()) + " 00:00:00.000"
      : "";
    cliente = !$("#panelCliente").hasClass("d-none")
      ? pegaChave("#txtClienteDup")
      : "";
    conta = !$("#panelConta").hasClass("d-none")
      ? pegaChave("#txtContaDup")
      : "";
    endosso = !$("#panelEndosso").hasClass("d-none")
      ? pegaChave("#txtEndossoDup")
      : "";
    moeda = !$("#panelMoeda").hasClass("d-none")
      ? pegaChave("#txtMoedaDup")
      : "";
    nrbanco = !$("#panelNrBanco").hasClass("d-none")
      ? $("#txtNrBancoDup").val()
      : "";
    bordero = !$("#panelBordero").hasClass("d-none")
      ? $("#txtBorderoDup").val()
      : "";
    cartaonsu = !$("#panelCartaoNSU").hasClass("d-none")
      ? $("#txtCartaoNSUDup").val()
      : "";
    descprogramado = !$("#panelDescProgramado").hasClass("d-none")
      ? $("#txtDescProgramadoDup").val()
      : "";
    jurosprogramado = !$("#panelJurosProgramado").hasClass("d-none")
      ? $("#txtJurosProgramadoDup").val()
      : "";
    classe = pegaChave("#txtClasseGerDup");
    historico = pegaChave("#txtHistoricoDup");
    banco = pegaChave("#txtBancoDup");
    situacao = pegaChave("#txtSituacaoDup");
    alterouvencimento = alterouVenctoDup ? "S" : "N";
    alteransu = !$("#panelAlteraNum").hasClass("d-none")
      ? $("#cbAlteraNum").is(":checked")
        ? "S"
        : "N"
      : "";

    if ($("#cbObsDup").is(":checked")) {
      obs = await buscaValor(
        "RECEBER",
        "OBS",
        "NUMERO",
        JSON.parse(localStorage.getItem("registros").NUMERO)
      );
    } else {
      obs = $("#txtObs").val();
    }

    return (
      `NUMERO=${numero}` +
      `&EMISSAO=${emissao}` +
      `&VENCTO=${vencto}` +
      `&VENCTOPREV=${venctoprev}` +
      `&CLIENTE=${cliente}` +
      `&CONTA=${conta}` +
      `&ENDOSSO=${endosso}` +
      `&MOEDA=${moeda}` +
      `&NRBANCO=${nrbanco}` +
      `&BORDERO=${bordero}` +
      `&CARTAONSU=${cartaonsu}` +
      `&DESCPROGRAMADO=${descprogramado}` +
      `&JUROSPROGRAMADO=${jurosprogramado}` +
      `&OBS=${obs}` +
      `&CLASSE=${classe}` +
      `&HISTORICO=${historico}` +
      `&BANCO=${banco}` +
      `&SITUACAO=${situacao}` +
      `&ALTEROUVENCIMENTO=${alterouvencimento}` +
      `&ALTERANSU=${alteransu}`
    );
  }

  async function gravaDadosDuplicata() {
    try {
      let valores = await retornaValoresDup();
      let response = await requisicao(
        "POST",
        "/sisplan/relbloqueto/v1/alterarduplicata?",
        valores,
        null
      );
      if (!response) {
        return;
      }
      if (response.status != 200) {
        let jsonStr = await response.json();
        msgErro(jsonStr.mensagem);
        return;
      }

      toastr
        .success(`Duplicata Alterada com sucesso!`, "Confirmação", {
          toastClass: "success",
          iconClasses: {
            error: "alert-error",
            info: "alert-info",
            success: "alert-success",
            warning: "alert-warning",
          },
          positionClass: "toast-top-center",
          progressBar: true,
          timeOut: 3000,
          fadeOut: 1000,
          onHidden() {
            data.remove().draw(false);
          },
        })
        .css({
          "margin-top": "20%",
          width: "500px",
          "max-width": "500px",
        });

      $("#modalAlterarDuplicata").modal("hide");
      let registros = JSON.parse(localStorage.getItem("registros"));
      await buscaDados(registros);
    } catch (err) {
      console.error(err);
    }
  }

  $("#modalAlterarDuplicata").on("shown.bs.modal", async function () {
    $("#txtContaDup").autocompleta(
      1,
      `JSON={ "tabela":"CADCONTA", "camposSelect":[ "CADCONTA.CONTA CHAVE", "CADCONTA.DESCRICAO DESCRICAO" ], "innerjoin": [{ "tabela": "EMP_VALOR", "condicao": "(EMP_VALOR.TABELA = 'CADCONTA' AND EMP_VALOR.CAMPO = 'CODIGO' AND EMP_VALOR.VALOR = CADCONTA.CODIGO AND EMP_VALOR.EMP_ID = ${getCookie(
        "emp_id"
      )})" }], "where": ["((ATIVO <> 'N') OR (ATIVO IS NULL ))"]}`
    );
    $("#txtClienteDup").autocompleta(
      1,
      `JSON={ "tabela":"ENTIDADE", "camposSelect":[ "CODCLI CHAVE", "NOME DESCRICAO" ], "where": null}`
    );
    $("#txtClasseGerDup").autocompleta(
      1,
      `JSON={ "tabela":"CLASSE_GER", "camposSelect":[ "CODIGO CHAVE", "DESCRICAO DESCRICAO" ], "where": null}`
    );
    $("#txtHistoricoDup").autocompleta(
      1,
      `JSON={ "tabela":"HISTCP", "camposSelect":[ "HISTORICO CHAVE", "DESCRICAO DESCRICAO" ], "where": null}`
    );
    $("#txtBancoDup").autocompleta(
      1,
      `JSON={ "tabela":"CADBAN", "camposSelect":[ "BANCO CHAVE", "NOME_BANCO DESCRICAO" ], "where": null}`
    );
    $("#txtSituacaoDup").autocompleta(
      1,
      `JSON={ "tabela":"TABSIT", "camposSelect":[ "CODIGO CHAVE", "DESCRICAO DESCRICAO" ], "where": null}`
    );
    $("#txtMoedaDup").autocompleta(
      1,
      `JSON={ "tabela":"MOEDA", "camposSelect":[ "CODMOE CHAVE", "DESCRICAO DESCRICAO" ], "where": null}`
    );
    $("#txtEndossoDup").autocompleta(
      1,
      `JSON={ "tabela":"ENTIDADE", "camposSelect":[ "CODCLI CHAVE", "NOME DESCRICAO" ], "where": null}`
    );

    $("#btn-ContaDup").pesquisa_serverside(
      ["#txtContaDup"],
      ["CONTA"],
      ["DESCRICAO"],
      `{ "tabela":"CADCONTA", "camposSelect":[ "CONTA", "DESCRICAO" ], "innerjoin": [{ "tabela": "EMP_VALOR", "condicao": "(EMP_VALOR.TABELA = 'CADCONTA' AND EMP_VALOR.CAMPO = 'CODIGO' AND EMP_VALOR.VALOR = CADCONTA.CODIGO AND EMP_VALOR.EMP_ID = '${getCookie(
        "emp_id"
      )}')" }], "where": ["((ATIVO <> 'N') OR (ATIVO IS NULL ))"]}`,
      "Pesquisa de Conta"
    );
    $("#btn-ClienteDup").pesquisa_serverside(
      ["#txtClienteDup"],
      ["CODCLI"],
      ["NOME"],
      `{ "tabela":"ENTIDADE", "camposSelect":[ "CODCLI", "NOME" ], "where": null}`,
      "Pesquisa de Cliente"
    );
    $("#btn-ClasseGerDup").pesquisa_serverside(
      ["#txtClasseGerDup"],
      ["CODIGO"],
      ["DESCRICAO"],
      `{ "tabela":"CLASSE_GER", "camposSelect":[ "CODIGO", "DESCRICAO" ], "where": null}`,
      "Pesquisa de Classe Gerencial"
    );
    $("#btn-HistoricoDup").pesquisa_serverside(
      ["#txtHistoricoDup"],
      ["HISTORICO"],
      ["DESCRICAO"],
      `{ "tabela":"HISTCP", "camposSelect":[ "HISTORICO", "DESCRICAO" ], "where": null}`,
      "Pesquisa de Histórico"
    );
    $("#btn-BancoDup").pesquisa_serverside(
      ["#txtBancoDup"],
      ["BANCO"],
      ["NOME_BANCO"],
      `{ "tabela":"CADBAN", "camposSelect":[ "BANCO", "NOME_BANCO" ], "where": null}`,
      "Pesquisa de Banco"
    );
    $("#btn-SituacaoDup").pesquisa_serverside(
      ["#txtSituacaoDup"],
      ["CODIGO"],
      ["DESCRICAO"],
      `{ "tabela":"TABSIT", "camposSelect":[ "CODIGO", "DESCRICAO" ], "where": null}`,
      "Pesquisa de Situação"
    );
    $("#btn-MoedaDup").pesquisa_serverside(
      ["#txtMoedaDup"],
      ["CODMOE"],
      ["DESCRICAO"],
      `{ "tabela":"MOEDA", "camposSelect":[ "CODMOE", "DESCRICAO" ], "where": null}`,
      "Pesquisa de Moeda"
    );
    $("#btn-EndossoDup").pesquisa_serverside(
      ["#txtEndossoDup"],
      ["CODCLI"],
      ["NOME"],
      `{ "tabela":"ENTIDADE", "camposSelect":[ "CODCLI", "NOME" ], "where": null}`,
      "Pesquisa de Endosso"
    );

    $("#btn-limpa-ContaDup").on("click", function () {
      $("#txtContaDup").val("");
    });
    $("#btn-limpa-ClienteDup").on("click", function () {
      $("#txtClienteDup").val("");
    });
    $("#btn-limpa-ClasseGerDup").on("click", function () {
      $("#txtClasseGerDup").val("");
    });
    $("#btn-limpa-HistoricoDup").on("click", function () {
      $("#txtHistoricoDup").val("");
    });
    $("#btn-limpa-BancoDup").on("click", function () {
      $("#txtBancoDup").val("");
    });
    $("#btn-limpa-SituacaoDup").on("click", function () {
      $("#txtSituacaoDup").val("");
    });
    $("#btn-limpa-MoedaDup").on("click", function () {
      $("#txtMoedaDup").val("");
    });
    $("#btn-limpa-EndossoDup").on("click", function () {
      $("#txtEndossoDup").val("");
    });

    $("#txtDescProgramadoDup").maskMoney({
      decimal: ".",
      thousands: "",
      precision: 2,
    });

    $("#txtJurosProgramadoDup").maskMoney({
      decimal: ".",
      thousands: "",
      precision: 2,
    });
  });

  async function validaDescJurosBaixa(numero, desc = true) {
    try {
      let pesquisaParam;
      let jsonStr;
      let result = false;
      if (desc) {
        pesquisaParam = {
          tabela: "RECEBERB",
          camposSelect: ["DESCONTO"],
          where: [`NUMERO = '${numero} AND DESCONTO > 0'`],
        };

        jsonStr = await retornaJsonPesquisaPadrao(
          JSON.stringify(pesquisaParam)
        );

        if (jsonStr.length > 0) {
          result = true;
        }
      } else {
        pesquisaParam = {
          tabela: "RECEBERB",
          camposSelect: ["JUROS"],
          where: [`NUMERO = '${numero} AND JUROS > 0'`],
        };

        jsonStr = await retornaJsonPesquisaPadrao(
          JSON.stringify(pesquisaParam)
        );

        if (jsonStr.length > 0) {
          result = true;
        }
      }

      return result;
    } catch (err) {
      console.error(err);
    }
  }

  $("#tabelaDuplicatas").on("click", "#btn-alterarContas", function () {
    $.LoadingOverlay("show");
    try {
      let nrbancoPreenchido = false;

      $("#tabelaDuplicatas")
        .DataTable()
        .rows()
        .every(function () {
          let item = this.data();
          if (item.NRBANCO) {
            nrbancoPreenchido = true;
          }
        });

      if (nrbancoPreenchido) {
        msgAlerta("Duplicata com Nosso Numero gerado. Impossível Continuar!");
        return;
      }

      $("#modal-alterarContas").modal("show");
      $("#txtContaDup").val("");
      $("#txtAlterarConta").autocompleta(
        1,
        `JSON={ "tabela":"CADCONTA", "camposSelect":[ "CADCONTA.CONTA CHAVE", "CADCONTA.DESCRICAO DESCRICAO" ], "innerjoin": [{ "tabela": "EMP_VALOR", "condicao": "(EMP_VALOR.TABELA = 'CADCONTA' AND EMP_VALOR.CAMPO = 'CODIGO' AND EMP_VALOR.VALOR = CADCONTA.CODIGO AND EMP_VALOR.EMP_ID = ${getCookie(
          "emp_id"
        )})" }], "where": ["((ATIVO <> 'N') OR (ATIVO IS NULL ))"]}`
      );
      $("#btnAlterarConta").pesquisa_serverside(
        ["#txtAlterarConta"],
        ["CONTA"],
        ["DESCRICAO"],
        `{ "tabela":"CADCONTA", "camposSelect":[ "CONTA", "DESCRICAO" ], "innerjoin": [{ "tabela": "EMP_VALOR", "condicao": "(EMP_VALOR.TABELA = 'CADCONTA' AND EMP_VALOR.CAMPO = 'CODIGO' AND EMP_VALOR.VALOR = CADCONTA.CODIGO AND EMP_VALOR.EMP_ID = '${getCookie(
          "emp_id"
        )}')" }], "where": ["((ATIVO <> 'N') OR (ATIVO IS NULL ))"]}`,
        "Pesquisa de Conta"
      );
      $("#btn-limpa-ContaDup").on("click", function () {
        $("#txtContaDup").val("");
      });
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  $("#btnGravarConta").on("click", async function () {
    $.LoadingOverlay("show");
    try {
      try {
        let conta = pegaChave("#txtAlterarConta");
        if (conta == "") {
          msgAlerta("Conta não informada!");
          return;
        }
        let registros = JSON.parse(localStorage.getItem("registros"));
        let response;
        for (let i in registros) {
          response = await requisicao(
            "POST",
            "/sisplan/relbloqueto/v1/alterarconta?",
            `NUMERO=${encodeURIComponent(registros[i].NUMERO)}&CONTA=${conta}`,
            null
          );
          if (!response) {
            return;
          }
          if (response.status != 200) {
            let jsonStr = await response.json();
            msgErro(jsonStr.mensagem);
            return;
          }
        }

        toastr
          .success(`Contas Alteradas com sucesso!`, "Confirmação", {
            toastClass: "success",
            iconClasses: {
              error: "alert-error",
              info: "alert-info",
              success: "alert-success",
              warning: "alert-warning",
            },
            positionClass: "toast-top-center",
            progressBar: true,
            timeOut: 3000,
            fadeOut: 1000,
            onHidden() {
              data.remove().draw(false);
            },
          })
          .css({
            "margin-top": "20%",
            width: "500px",
            "max-width": "500px",
          });

        $("#modal-alterarContas").modal("hide");
        await buscaDados(registros);
      } catch (err) {
        console.error(err);
      }
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  $("#tabelaDuplicatas").on("click", "#btn-gerarBordero", function () {
    parent.document.querySelector("#menu_escenvio .nav-link").click();
  });

  retornaHintRelatorio("btnImprimir", "WFatBol + NUMERO DO BANCO");

  if (bloqueto == "create") {
    let registros = JSON.parse(localStorage.getItem("registros"));
    await buscaDados(registros);
    const conta = await buscaValor(
      "RECEBER",
      "CONTA_CHEQUE",
      "NUMERO",
      registros[0].NUMERO
    );
    insereValor("#txtConta", conta.CONTA_CHEQUE, {
      tabela: "CADCONTA",
      campoBusca: "DESCRICAO",
      campoWhere: "CONTA",
      valorWhere: conta.CONTA_CHEQUE,
    });
    $("#txtConta").focus();

    setTimeout(() => {
      $("#txtConta").trigger("blur");
    }, 100);
  }

  $("#btnAcrescimo").on("click", async function () {
    if ($("#txtAcrescimo").val() != "" && $("#txtAcrescimo").val() > 0) {
      if ($("#tabelaDuplicatas").DataTable().data().length > 0) {
        msgAlerta(
          "Você realmente deseja lançar acrescimo no receber?",
          async () => {
            $.LoadingOverlay("show");
            try {
              try {
                dataSetCols = [];
                const url = "/sisplan/relbloqueto/v1/adicionaacrescimo?";
                let numeros = [];
                let faturas = [];
                let registros = JSON.parse(localStorage.getItem("registros"));
                let acrescimo = $("#txtAcrescimo").val();
                for (let i = 0; i < registros.length; i++) {
                  numeros.push(registros[i].NUMERO);
                  faturas.push(registros[i].FATURA);
                }
                numeros = await formataListas(numeros.toString());
                faturas = await formataListas(faturas.toString());
                let response = await requisicao(
                  "POST",
                  url,
                  `NUMEROS=${numeros}&FATURAS=${faturas}&ACRESCIMO=${acrescimo}&EMPRESA=${getCookie(
                    "empresa"
                  )}`,
                  "",
                  360000
                );

                if (!response) {
                  return;
                }
                if (response.status != 200) {
                  let jsonStr = await response.json();
                  msgErro(jsonStr.mensagem);
                  return;
                }

                toastr
                  .success("Alteração efetuada com sucesso!", "Confirmação", {
                    toastClass: "success",
                    iconClasses: {
                      error: "alert-error",
                      info: "alert-info",
                      success: "alert-success",
                      warning: "alert-warning",
                    },
                    positionClass: "toast-top-center",
                    progressBar: true,
                    timeOut: 3000,
                    fadeOut: 1000,
                    onHidden() {
                      data.remove().draw(false);
                    },
                  })
                  .css({
                    "margin-top": "20%",
                    width: "500px",
                    "max-width": "500px",
                  });

                $("#txtAcrescimo").val("");

                await buscaDados(registros);
              } catch {
                console.error(err);
                msgErro(`Não foi possível aplicar o acrescimo no receber!`);
              }
            } finally {
              $.LoadingOverlay("hide");
            }
          }
        );
      }
    }
  });

  async function preencheDadosBanco(conta, carteira, padraoBoleto) {
    const pesquisaParam = {
      tabela: "CADCONTA",
      camposSelect: [
        "CADCONTA.CONTA",
        "CADCONTA.AGENCIA",
        "CADCONTA.BANCO",
        "CARTEIRA.GERA_NOSSO",
        "CARTEIRA.TAXA1",
        "CARTEIRA.TAXA2",
        "CARTEIRA.IMP_COBREBEM",
        "CARTEIRA.CARTEIRA",
        "CARTEIRA.ACEITE",
        "CARTEIRA.DESCRICAO2",
        "CARTEIRA.DESCRICAO3",
        "CADCONTA.AVALISTA",
        "CARTEIRA.DIASPROTESTO",
        "CARTEIRA.COD_PRACA_SACADO",
        "CARTEIRA.CONVENIO",
        "CARTEIRA.NR_BANCO AS SEQNRBANCO",
        "CARTEIRA.TIPO",
        "CARTEIRA.CEB",
        "CARTEIRA.LOCAL_PAGTO",
        "CARTEIRA.DESCRICAO2 as INSTRUCAO_1",
        "CARTEIRA.DESCRICAO3 AS INSTRUCAO_2",
        "CARTEIRA.PADRAO_INSTR_1",
        "CARTEIRA.PADRAO_INSTR_2",
        "CARTEIRA.INSTRUCAO_1 AS DADOS_1",
        "CARTEIRA.INSTRUCAO_2 AS DADOS_2",
        "CADCONTA.USA_AVALISTA_EMPTAB AS AVALISTA_EMP",
        "CADCONTA.AG_COOPERADO AGCOOPERADO",
        "CARTEIRA.IMP_BOLETO",
        "CARTEIRA.PADRAO_BOLETO",
        "CADCONTA.FDIC",
        "CADCONTA.CONTA_PAGADOR",
        "CARTEIRA.TIPO_DIAS_PROT",
        "CARTEIRA.TIPO_LAYOUT LAYOUT",
      ],
      leftJoin: [
        { tabela: "CARTEIRA", condicao: "CADCONTA.CONTA = CARTEIRA.CONTA" },
      ],
      where: [
        `CADCONTA.CONTA = '${conta}'` +
          `${
            carteira != "" && carteira != null
              ? `AND CARTEIRA.CARTEIRA = '${carteira}'`
              : ""
          }` +
          `${padraoBoleto ? `AND CARTEIRA.PADRAO_BOLETO = 'S'` : ""}`,
      ],
    };

    let jsonStr = await retornaJsonPesquisaPadrao(
      JSON.stringify(pesquisaParam)
    );

    return jsonStr;
  }

  async function buscaDadosBanco() {
    $.LoadingOverlay("show");
    try {
      let conta = pegaChave("#txtConta");
      let carteira = $("#rgCarteira").val();
      let consulta = await preencheDadosBanco(conta, carteira, true);

      if (consulta.length <= 0) {
        consulta = await preencheDadosBanco(conta, carteira, false);
      }

      let retorno = consulta[0];

      if (!retorno) {
        msgAlerta("Ocorreu um erro ao buscar os dados do banco!");
        return;
      }

      await preencheConta(conta);

      let nomeBanco = await buscaValor(
        "CADBAN",
        "NOME_BANCO",
        "BANCO",
        retorno.BANCO
      );
      $("#txtBanco").val(`[${retorno.BANCO}] - ${nomeBanco.NOME_BANCO}`);

      if (
        (await Existe(
          "CADBAN",
          ["BANCO", "INTEGRA_ENVIO"],
          [retorno.BANCO, "S"]
        )) &&
        ["001", "748", "756", "341"].includes(retorno.BANCO)
      ) {
        $("#btnIntegrar").removeClass("d-none");
        $("#divAmbiente").removeClass("d-none");
      } else {
        $("#btnIntegrar").addClass("d-none");
        $("#divAmbiente").addClass("d-none");
      }

      $("#txtInstrucao1").val(retorno.INSTRUCAO_1);
      $("#txtInstrucao2").val() == ""
        ? $("#txtInstrucao2").val(retorno.INSTRUCAO_2)
        : $("#txtInstrucao2").val();
      // if (retorno.IMP_COBREBEM == 'N') {
      //     $('#rgLayout').val('0')
      // } else {
      //     $('#rgLayout').val('1')
      // }

      if (retorno.LAYOUT == "Pré-Impresso") {
        $("#rgLayout").val(0);
      } else if (retorno.LAYOUT == "Padrão") {
        $("#rgLayout").val(1);
      } else if (retorno.LAYOUT == "Personalizado") {
        $("#rgLayout").val(2);
      } else if (retorno.LAYOUT == "Dois Boletos") {
        $("#rgLayout").val(3);
      } else {
        $("#rgLayout").val(0);
      }

      $("#rgLayout").trigger("change");
      $("#txtProtestar").val(retorno.DIASPROTESTO);

      $("#cbFdic").prop("checked", retorno.FDIC == "S");
      $("#txtContaPagador").val(retorno.CONTA_PAGADOR);

      if (retorno.TIPO_DIAS_PROT == "U") {
        $($("#cbModoDiasUteis").parents()[0]).removeClass("d-none");
        $("#cbModoDiasUteis").prop("checked", true);
      }

      if (retorno.GERA_NOSSO == "S") {
        $("#cbNossoNumero").prop("checked", true);
        $("#cbNossoNumero").prop("disabled", true);
        $("#cbNossoNumero").prop("checked", true);
      }
      $("#txtLocalPagamento").val() == ""
        ? $("#txtLocalPagamento").val(retorno.LOCAL_PAGTO)
        : $("#txtLocalPagamento").val();

      if (!alterouTaxa) {
        $("#txtTaxaAcrescimo").val(retorno.TAXA1);
      }

      if (!alterouMulta) {
        $("#txtMultaAtraso").val(retorno.TAXA2);
      }

      calculaDiasProtesto(retorno.TIPO_DIAS_PROT == "U");
    } finally {
      $.LoadingOverlay("hide");
    }
  }

  async function preencheConta(conta) {
    try {
      let optionExiste = false;
      const pesquisaParam = {
        tabela: "CARTEIRA",
        camposSelect: ["CARTEIRA"],
        where: [`CONTA = '${conta}'`],
      };

      let jsonStr = await retornaJsonPesquisaPadrao(
        JSON.stringify(pesquisaParam)
      );

      for (let i = 0; i < jsonStr.length; i++) {
        let retorno = jsonStr[i];

        $("#rgCarteira option").each(function () {
          if ($(this).val() == retorno.CARTEIRA) {
            optionExiste = true;
            return false;
          }
        });

        if (!optionExiste) {
          let novaOption = $("<option></option>")
            .attr("value", retorno.CARTEIRA)
            .text(retorno.CARTEIRA);
          $("#rgCarteira").append(novaOption);
        }
      }
    } catch (error) {
      console.error(error);
    }
  }

  $("#rgCarteira").on("change", async function () {
    if ($("#txtConta").val() != "") {
      await buscaDadosBanco();
    }
  });

  async function diaUtil(dia) {
    let data = new Date(dia);
    let diaDaSemana = data.getDay();
    let diaUtil = diaDaSemana >= 1 && diaDaSemana <= 5;

    const pesquisaParam = {
      tabela: "ANO",
      camposSelect: ["DIA_UTIL"],
      where: [`DATA = '${formataData(data)}' AND DIA_UTIL = 'N'`],
    };

    let jsonStr = await retornaJsonPesquisaPadrao(
      JSON.stringify(pesquisaParam)
    );

    return jsonStr.length == 0 && diaUtil;
  }

  $("#txtTaxaAcrescimo").on("blur", function () {
    if (
      $("#txtTaxaAcrescimo").val() != "" &&
      $("#txtTaxaAcrescimo").val() != 0
    ) {
      alterouTaxa = true;
    }
  });

  $("#txtMultaAtraso").on("blur", function () {
    if ($("#txtMultaAtraso").val() != "" && $("#txtMultaAtraso").val() != 0) {
      alterouMulta = true;
    }
  });

  async function calculaDiasProtesto(isDiaUtil) {
    if (isDiaUtil) {
      $("#tabelaDuplicatas")
        .DataTable()
        .rows()
        .every(function () {
          let dtVencimento = this.data()["DT_VENCTO"];
          let diasProtesto = 0;
          let vDias = parseInt($("#txtProtestar").val()) || 0;

          for (let i = 1; i <= vDias; i++) {
            if (!diaUtil(dtVencimento)) {
              diasProtesto++;
            }
          }

          let novoValor = vDias + diasProtesto;

          this.data()["DIAS_PROTESTO"] = novoValor;
          this.invalidate();
        });

      $("#tabelaDuplicatas").DataTable().draw();
    } else {
      $("#tabelaDuplicatas")
        .DataTable()
        .rows()
        .every(function () {
          let vDias = parseInt($("#txtProtestar").val()) || 0;

          let novoValor = this.data()["DIAS_PROTESTO"] + vDias;

          this.data()["DIAS_PROTESTO"] = novoValor;
          this.invalidate();
        });

      $("#tabelaDuplicatas").DataTable().draw();
    }
  }

  $("#txtConta").on("blur", async function () {
    if ($("#txtConta").val() != "") {
      await buscaDadosBanco();

      if ((await buscaValorSelectAmbiente()) == 2) {
        $("#selectAmbiente").val(2);
      } else {
        $("#selectAmbiente").val(1);
      }
    }
  });

  $("#btnVoltarDup").on("click", async function () {
    $.LoadingOverlay("show");
    try {
      const data = $("#tabelaDuplicatas tr.selected");
      if (data.length > 0) {
        const array = JSON.parse(localStorage.getItem("registros"));
        let selectedRow = $("#tabelaDuplicatas ").DataTable().row(data).data();
        let registro = array.find(function (e) {
          return (
            e.FATURA == selectedRow.FATURA &&
            e.NUMERO == selectedRow.NUMERO &&
            e.BORDERO == selectedRow.BORDERO &&
            e.CODCLI == selectedRow.CODCLI
          );
        });
        let arrayFiltrado = array.filter(function (e) {
          return (
            e.FATURA != registro.FATURA ||
            e.NUMERO != registro.NUMERO ||
            e.BORDERO != registro.BORDERO ||
            e.CODCLI != registro.CODCLI
          );
        });

        localStorage.removeItem("registros");
        localStorage.setItem("registros", JSON.stringify(arrayFiltrado));

        $("#tabelaDuplicatas").DataTable().row(data).remove().draw();
      } else {
        msgAlerta("Nenhuma duplicata selecionada!");
      }

      if ($("#tabelaDuplicatas").DataTable().data().length <= 0) {
        $("#btnVoltar").trigger("click");
      }
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  $("#btnVoltarTodas").on("click", async function () {
    $.LoadingOverlay("show");
    try {
      localStorage.removeItem("registros");
      $("#tabelaDuplicatas").DataTable().rows().remove().draw();
      $("#btnVoltar").trigger("click");
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  $("#txtObs").on("blur", async function () {
    $.LoadingOverlay("show");
    try {
      if ($("#txtObs").val() == "") {
        return;
      }
      let novoValor = $("#txtObs").val();
      let dadosSalvos = [];

      $("#tabelaDuplicatas")
        .DataTable()
        .rows()
        .every(function () {
          this.data()["OBS"] = novoValor;
          this.data()["OBS_ORIG"] = novoValor;
          dadosSalvos.push(this.data());
        });

      $("#tabelaDuplicatas").DataTable().rows().remove().draw();

      dadosSalvos.forEach(function (row) {
        $("#tabelaDuplicatas").DataTable().row.add(row);
      });

      $("#tabelaDuplicatas").DataTable().draw();
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  $("#rgLayout").on("change", function () {
    if ($("#rgLayout").val() == 0) {
      $("#cbLayoutGrafico").prop("disabled", false);
      $("#cbLayoutGrafico").prop("checked", true);
    } else {
      $("#cbLayoutGrafico").prop("disabled", true);
      $("#cbLayoutGrafico").prop("checked", false);
    }
  });

  $("#btnRecalcular").on("click", async function () {
    $.LoadingOverlay("show");
    try {
      if ($("#cbAtualizarVencimento").is(":checked")) {
        let dataAtual = new Date();
        let novaData = $("#dtNovoVencimento").val();

        let anoAtual = dataAtual.getFullYear();
        let mesAtual = dataAtual.getMonth() + 1;
        let diaAtual = dataAtual.getDate();

        let partesNovaData = novaData.split("-");
        let anoNovaData = parseInt(partesNovaData[0], 10);
        let mesNovaData = parseInt(partesNovaData[1], 10);
        let diaNovaData = parseInt(partesNovaData[2], 10);

        if (
          anoNovaData < anoAtual ||
          (anoNovaData === anoAtual && mesNovaData < mesAtual) ||
          (anoNovaData === anoAtual &&
            mesNovaData === mesAtual &&
            diaNovaData < diaAtual)
        ) {
          msgAlerta(
            "Atenção, nova data de vencimento informada é menor que a data de hoje. Impossível continuar!"
          );
          return;
        }

        let partesNovaDataValidacao = novaData.split("-");
        let anoNovaDataValidacao = parseInt(partesNovaDataValidacao[0], 10);
        let mesNovaDataValidacao = parseInt(partesNovaDataValidacao[1], 10) - 1;
        let diaNovaDataValidacao = parseInt(partesNovaDataValidacao[2], 10);

        let dataAtualObj = new Date(
          dataAtual.getFullYear(),
          dataAtual.getMonth(),
          dataAtual.getDate()
        );
        let novaDataObj = new Date(
          anoNovaDataValidacao,
          mesNovaDataValidacao,
          diaNovaDataValidacao
        );

        let diferencaEmMilissegundos =
          novaDataObj.getTime() - dataAtualObj.getTime();

        let diferencaEmDias = diferencaEmMilissegundos / (1000 * 60 * 60 * 24);

        if (diferencaEmDias > 60) {
          msgAlerta(
            "Atenção, a nova data de vencimento informada é maior que 60 dias a partir de hoje."
          );
          return;
        }
      }

      $("#tabelaDuplicatas")
        .DataTable()
        .rows()
        .every(async function () {
          let item = this.data();
          let dtNovoVencto = $("#dtNovoVencimento").val();

          item.PERC_JUROS_DIA_ATRASO =
            ((await buscaParametroERP("FIN", "540", "3", "1")) == "S"
              ? 0
              : item.TAXA) +
            $("#txtTaxaAcrescimo").val() / 30;
          item.VALOR_JUROS_DIA_ATRASO =
            (item.PERC_JUROS_DIA_ATRASO / 100) * item.VALOR_DUP;
          item.MULTA_ATRASO =
            ($("#txtMultaAtraso").val() / 100) * item.VALOR_DUP;

          let sData;
          if (
            $("#cbAtualizarVencimento").is(":checked") &&
            new Date(item.DT_VENCTO) < new Date(dtNovoVencto)
          ) {
            sData = dtNovoVencto;
          } else {
            sData = item.DT_VENCTO;
          }

          item.VALOR_CALC_DIA_ATRASO =
            item.VALOR_JUROS_DIA_ATRASO *
            (new Date(sData) - new Date(item.DT_VENCTO));

          if ($("#cbAtualizaValor").is(":checked")) {
            if (
              new Date(item.DT_VENCTO) <= new Date(dtNovoVencto) ||
              $("#cbCalcular").is(":checked")
            ) {
              item.VALOR = parseFloat(
                (
                  item.VALOR_DUP +
                  item.MULTA_ATRASO +
                  item.VALOR_CALC_DIA_ATRASO
                ).toFixed(2)
              );
            }

            if (item.OBS != "") {
              item.OBS =
                item.OBS_ORIG +
                " - Data Original = " +
                item.DT_VENCTO_ORIG +
                " - Valor Original = " +
                item.VALOR_DUP;
            } else {
              item.OBS =
                "Data Original.: " +
                item.DT_VENCTO_ORIG +
                " - Valor Original.: " +
                item.VALOR_DUP;
            }
          }

          if (
            $("#cbAtualizarVencimento").is(":checked") &&
            new Date(item.DT_VENCTO) < new Date(dtNovoVencto)
          ) {
            item.DT_VENCTO = dtNovoVencto;
          }

          this.data(item);
          this.invalidate();
        });

      $("#tabelaDuplicatas").DataTable().draw();
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  $("#btnBuscarInf").on("click", async function () {
    $.LoadingOverlay("show");
    try {
      let bordero = $("#tabelaDuplicatas").DataTable().row(0).data().BORDERO;
      let borderoIguais = true;
      let optionExiste = false;

      $("#tabelaDuplicatas")
        .DataTable()
        .rows()
        .every(function () {
          let item = this.data();
          if (item.BORDERO != bordero) {
            borderoIguais = false;
          }
          bordero = item.BORDERO;
        });

      if (borderoIguais) {
        if (!(await Existe("BORDERO", ["NUMERO"], [bordero]))) {
          msgAlerta("Bordero não existe. Impossível carregar dados.");
          return;
        } else {
          let conta = await buscaValor("BORDERO", "CONTA", "NUMERO", bordero);
          let descConta = await buscaValor(
            "CADCONTA",
            "DESCRICAO",
            "CONTA",
            conta.CONTA
          );
          insereValor("#txtConta", conta.CONTA, descConta.DESCRICAO);

          await preencheConta(conta.CONTA);

          $("#txtConta").focus();
        }
      } else {
        msgAlerta(
          "Impossível carregar informações, Existem Borderos diferentes selecionados!"
        );
        return;
      }
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  async function imprimirBoleto(
    numero = "",
    listaBoletos = "",
    imprimeBoletosNaMesmaPagina = false
  ) {
    let url = "";
    if (imprimeBoletosNaMesmaPagina && numero === "" && listaBoletos !== "") {
      url = `/sisplan/relbloqueto/v1/imprimirboleto?LISTA_NUMEROS=${listaBoletos}&IMPRIME_VARIOS_BOLETOS=true`;
    } else {
      url = `/sisplan/relbloqueto/v1/imprimirboleto?NUMERO=${numero}&IMPRIME_VARIOS_BOLETOS=false`;
    }
    try {
      $.LoadingOverlay("show");
      try {
        const bImprimeAutomatico = await verificaImprimirAutomatico(
          "BoletoRelBloqueto"
        );
        const arquivo = await GeraRelatorio(
          url + "&",
          "GET",
          1000000,
          false,
          "BoletoRelBloqueto"
        );
        if (arquivo != undefined) {
          if (!bImprimeAutomatico) {
            window.open(`${BASE_URI}/relatorios_api/pdf/` + arquivo, "_blank");
          }
          await limparRelatorios();
        }
        let registros = JSON.parse(localStorage.getItem("registros"));
        await buscaDados(registros);
      } catch (err) {
        console.error(err);
      }
    } finally {
      $.LoadingOverlay("hide");
    }
  }

  $("#btnImprimir").on("click", async function () {
    if ((await CopiaParametro("ESCRITURAL", 6)) == "1") {
      let existeBorderoDup = false;

      $("#tabelaDuplicatas")
        .DataTable()
        .rows()
        .every(async function () {
          let item = this.data();

          if (existeBorderoDup) {
            return;
          }

          if (item.BORDERO != "" || item.BORDERO != "0") {
            existeBorderoDup = true;
            return;
          }
        });

      if (!existeBorderoDup) {
        await msgAlerta("Deseja gravar o borderô?", async () => {
          await iniciaRotinaGravaBordero();
          await chamaImpressao();
        });
      } else {
        await chamaImpressao();
      }
    } else {
      await chamaImpressao();
    }
  });

  async function chamaImpressao() {
    let numeros = [];
    let existeDupSemSitu = false;
    const imprimeNoMesmoLayout = $("#cbImprimirNaMesmaPagina").is(":checked");

    $("#tabelaDuplicatas")
      .DataTable()
      .rows()
      .every(async function () {
        let item = this.data();

        if (existeDupSemSitu) {
          return;
        }

        if (item.SITUACAO == "") {
          existeDupSemSitu = true;
          return;
        }

        numeros.push(item.NUMERO);
      });

    if (existeDupSemSitu) {
      msgErro(
        "Existem duplicatas sem situação informada! Por favor, verifique e tente novamente."
      );
      return;
    }

    if (imprimeNoMesmoLayout) {
      await imprimirBoleto("", numeros.toString(), imprimeNoMesmoLayout);
    } else {
      for (let i = 0; i < numeros.length; i++) {
        await imprimirBoleto(numeros[i]);
      }
    }

    $("#btnVoltar").trigger("click");
  }

  $("#btnIntegrar").on("click", async function () {
    try {
      const conta = pegaChave("#txtConta");
      if (!conta || conta === "") {
        msgErro("Nenhuma conta informada, impossível continuar.");
        return;
      }

      const carteira = $("#rgCarteira").val();
      if (!carteira || carteira === "") {
        msgErro("Nenhuma carteira informada, impossível continuar.");
        return;
      }

      const data = $("#tabelaDuplicatas").DataTable().data().toArray();
      if (!data || data.length === 0) {
        msgErro("Nenhum registro para integrar, impossível continuar.");
        return;
      }

      let finalData;
      if (data.some((e) => e.RETORNO_API === "OK")) {
        $.LoadingOverlay("hide");
        await msgAguardaConfirmacao(
          "Existem boletos que já foram enviados ao banco, deseja fazer o reenvio?" +
            "\nSim - Enviar todos os boletos." +
            "\nNão - Enviar apenas os que não foram enviados ao banco.",
          async () => {
            finalData = data.map((e) => {
              return { ...e, RETORNO_API: "" };
            });
            rotinaGeraLog(
              "RELBLOQUETO",
              getCookie("cod_usuario"),
              "USUÁRIO FORÇOU O REENVIO DE BOLETOS JÁ INTEGRADOS ANTERIORMENTE COM O BANCO",
              "Movimentação"
            );
          },
          () => {
            finalData = data;
          }
        );
      } else {
        finalData = data;
      }

      $.LoadingOverlay("show");
      const validate = await gravarBorderoIntegracao();
      if (validate) {
        await executaRotinaInformacoesBoleto();
        switch (pegaChave("#txtBanco")) {
          case "001":
            await integraBancoBrasil(finalData);
            break;
          case "748":
            await integraSicredi(finalData);
            break;
          case "756":
            await integraSicoob(finalData);
            break;
          case "341":
            await integraItau(finalData);
            break;
          default:
            break;
        }
        criaMensagemSucesso("Integração realizada com sucesso!");
      }
    } catch (e) {
      console.log(e);
      msgErro(e);
    } finally {
      $.LoadingOverlay("hide");
      const registros = JSON.parse(localStorage.getItem("registros"));
      await buscaDados(registros);
      const conta = await buscaValor(
        "RECEBER",
        "CONTA_CHEQUE",
        "NUMERO",
        registros[0].NUMERO
      );
      insereValor("#txtConta", conta.CONTA_CHEQUE, {
        tabela: "CADCONTA",
        campoBusca: "DESCRICAO",
        campoWhere: "CONTA",
        valorWhere: conta.CONTA_CHEQUE,
      });
      $("#txtConta").focus();

      setTimeout(() => {
        $("#txtConta").trigger("blur");
      }, 100);
    }
  });

  async function gravarBorderoIntegracao() {
    const promise = new Promise(async (resolve) => {
      try {
        if ((await CopiaParametro("ESCRITURAL", 6)) != "1") {
          resolve(true);
          return;
        }

        let existeBorderoDup = false;
        $("#tabelaDuplicatas")
          .DataTable()
          .rows()
          .every(async function () {
            let item = this.data();

            if (existeBorderoDup) {
              return;
            }

            if (item.BORDERO != "" || item.BORDERO != "0") {
              existeBorderoDup = true;
              return;
            }
          });

        if (existeBorderoDup) {
          resolve(true);
          return;
        }
        await iniciaRotinaGravaBordero(() => {
          resolve(true);
        });
      } catch (e) {
        resolve(false);
      }
    });

    return promise;
  }

  async function integraBancoBrasil(data) {
    const dataClass = [];
    data.forEach((e) => {
      if (e.RETORNO_API !== "OK") {
        dataClass.push({
          numero: e.NUMERO,
          dtEmissao: e.DT_EMISSAO,
          dtVencto: e.DT_VENCTO,
          valor: e.VALOR,
          codcli: e.CODCLI,
          bairro: e.BAIRRO,
          cep: e.CEP,
          endereco: e.ENDERECO,
          cnpj: e.CNPJ,
          telefone: e.TELEFONE,
          nrBanco: e.NRBANCO,
        });
      }
    });

    const reqObject = {
      conta: pegaChave("#txtConta"),
      banco: pegaChave("#txtBanco"),
      carteira: $("#rgCarteira").val(),
      ambiente: $("#selectAmbiente").val(),
      itens: dataClass,
    };

    const response = await requisicao(
      "POST",
      "/sisplan/relbloqueto/v1/integrabancobrasil?",
      "",
      JSON.stringify(reqObject),
      360000
    );

    if (!response) {
      return;
    }

    if (response.status !== 200) {
      const jsonStr = await response.json();
      const { mensagem: errorMessage } = jsonStr?.mensagem;
      throw errorMessage;
    }
  }

  async function integraSicredi(data) {
    const dataClass = [];
    data.forEach((e) => {
      if (e.RETORNO_API !== "OK") {
        dataClass.push({
          numero: e.NUMERO,
          dtVencto: e.DT_VENCTO,
          fatura: e.FATURA,
          valor: e.VALOR,
          codcli: e.CODCLI,
          cep: e.CEP,
          endereco: e.ENDERECO,
          cnpj: e.CNPJ,
          nrBanco: e.NRBANCO,
        });
      }
    });

    const reqObject = {
      conta: pegaChave("#txtConta"),
      banco: pegaChave("#txtBanco"),
      ambiente: $("#selectAmbiente").val(),
      itens: dataClass,
    };

    const response = await requisicao(
      "POST",
      "/sisplan/relbloqueto/v1/integrasicredi?",
      "",
      JSON.stringify(reqObject),
      360000
    );

    if (!response) {
      return;
    }

    if (response.status !== 200) {
      const jsonStr = await response.json();
      const { mensagem: errorMessage } = jsonStr?.mensagem;
      throw errorMessage;
    }
  }

  async function integraSicoob(data) {
    const dataClass = [];
    data.forEach((e) => {
      if (e.RETORNO_API !== "OK") {
        dataClass.push({
          numero: e.NUMERO,
          dtEmissao: e.DT_EMISSAO,
          dtVencto: e.DT_VENCTO,
          valor: e.VALOR,
          codcli: e.CODCLI,
          bairro: e.BAIRRO,
          cep: e.CEP,
          endereco: e.ENDERECO,
          cnpj: e.CNPJ,
          telefone: e.TELEFONE,
          nrBanco: e.NRBANCO,
          parcela: e.PARCELA,
        });
      }
    });

    const reqObject = {
      conta: pegaChave("#txtConta"),
      banco: pegaChave("#txtBanco"),
      carteira: $("#rgCarteira").val(),
      ambiente: $("#selectAmbiente").val(),
      itens: dataClass,
    };

    const response = await requisicao(
      "POST",
      "/sisplan/relbloqueto/v1/integrasicoob?",
      "",
      JSON.stringify(reqObject),
      360000
    );

    if (!response) {
      return;
    }

    if (response.status !== 200) {
      const jsonStr = await response.json();
      const { mensagem: errorMessage } = jsonStr?.mensagem;
      throw errorMessage;
    }
  }

  async function integraItau(data) {
    const dataClass = [];
    data.forEach((e) => {
      if (e.RETORNO_API !== "OK") {
        dataClass.push({
          numero: e.NUMERO,
          dtEmissao: e.DT_EMISSAO,
          dtVencto: e.DT_VENCTO,
          valor: e.VALOR,
          codcli: e.CODCLI,
          cnpj: e.CNPJ,
          nrBanco: e.NRBANCO,
        });
      }
    });

    const reqObject = {
      conta: pegaChave("#txtConta"),
      banco: pegaChave("#txtBanco"),
      carteira: $("#rgCarteira").val(),
      ambiente: $("#selectAmbiente").val(),
      itens: dataClass,
    };

    const response = await requisicao(
      "POST",
      "/sisplan/relbloqueto/v1/integraitau?",
      "",
      JSON.stringify(reqObject),
      360000
    );

    if (!response) {
      return;
    }

    if (response.status !== 200) {
      const jsonStr = await response.json();
      const { mensagem: errorMessage } = jsonStr?.mensagem;
      throw errorMessage;
    }
  }


  async function buscaValorSelectAmbiente() {
    const pesquisaParam = {
      tabela: "INTEG_BANCARIA",
      camposSelect: ["INTEG_BANCARIA.AMBIENTE"],
      innerJoin: [
        {
          tabela: "CADCONTA",
          condicao: "INTEG_BANCARIA.ID_CONTA = CADCONTA.ID",
        },
      ],
      where: [`CADCONTA.CONTA = '${pegaChave("#txtConta")}'`],
    };

    const jsonStr = await retornaJsonPesquisaPadrao(
      JSON.stringify(pesquisaParam)
    );

    if (jsonStr != undefined || jsonStr.length > 0) {
      return jsonStr[0].AMBIENTE;
    }

    return 1;
  }

  async function executaRotinaInformacoesBoleto() {
    $.LoadingOverlay("show");
    try {
      if ((await CopiaParametro("ESCRITURAL", 6)) == "1") {
        let existeBorderoDup = false;

        $("#tabelaDuplicatas")
          .DataTable()
          .rows()
          .every(async function () {
            let item = this.data();

            if (existeBorderoDup) {
              return;
            }

            if (item.BORDERO != "" || item.BORDERO != "0") {
              existeBorderoDup = true;
              return;
            }
          });

        if (!existeBorderoDup) {
          await msgAlerta("Deseja gravar o borderô?", async () => {
            await iniciaRotinaGravaBordero();
            await rotinaImpressaoSemImprimir();
          });
        } else {
          await rotinaImpressaoSemImprimir();
        }
      } else {
        await rotinaImpressaoSemImprimir();
      }
    } catch (error) {
      console.error(error);
      msgAlerta(
        "Ocorreu um erro ao gerar a linha digitável, nr banco e código de barras ao integrar. Erro: " +
          error
      );
    } finally {
      $.LoadingOverlay("hide");
    }
  }

  async function rotinaImpressaoSemImprimir() {
    let numeros = [];
    let existeDupSemSitu = false;
    const geraVariosBoletosInfo = $("#cbImprimirNaMesmaPagina").is(":checked");

    $("#tabelaDuplicatas")
      .DataTable()
      .rows()
      .every(async function () {
        let item = this.data();

        if (existeDupSemSitu) {
          return;
        }

        if (item.SITUACAO == "") {
          existeDupSemSitu = true;
          return;
        }

        numeros.push(item.NUMERO);
      });

    if (existeDupSemSitu) {
      msgErro(
        "Existem duplicatas sem situação informada! Por favor, verifique e tente novamente."
      );
      return;
    }

    const url = '/sisplan/relbloqueto/v1/gerainfosboleto?';
    let params = '';

    if (geraVariosBoletosInfo) {
        params = `LISTA_NUMEROS=${numeros}&GERA_INFO_VARIOS_BOLETOS=true`;
        let response = await requisicao(
          "GET",
          url,
          params,
          null
        );
        if (!response) {
          return;
        };
        if (response.status != 200) {
          let jsonStr = await response.json();
          msgErro(jsonStr.mensagem);
          return;
        };
    } else {
      for (let i = 0; i < numeros.length; i++) {
        params = `NUMERO=${numeros[i]}&GERA_INFO_VARIOS_BOLETOS=false`;
        let response = await requisicao(
          "GET",
          url,
          params,
          null
        );
        if (!response) {
          return;
        };
        if (response.status != 200) {
          let jsonStr = await response.json();
          msgErro(jsonStr.mensagem);
          return;
        };
      };
    };
  };
});
