$(document).ready(async function () {

  $('#tutorial').on('click', function () {
    $(document).ready(async function () {
      const driver = new Driver({
        doneBtnText: 'Sair',
        closeBtnText: 'Fechar',
        nextBtnText: 'Próximo',
        prevBtnText: 'Anterior',
        allowClose: false
      });
      driver.defineSteps([{
        element: '#btnFiltros',
        popover: {
          title: 'Botão Filtros',
          description: 'Clique aqui para abrir os filtros e realizar uma consulta.',
          position: 'right'
        }
      },
      {
        element: '#btnImprimir',
        popover: {
          title: 'Botão Imprimir',
          description: 'Clique aqui para imprimir um relatório.',
          position: 'right'
        }
      },
      {
        element: '#divRelatorio',
        popover: {
          title: 'Tabela com os Dados',
          description: 'Aqui, após clicar em consultar ficam os dados filtrados.',
          position: 'bottom'
        }
      }
      ]);
      driver.start();
    });
  });

  let activeColVis = '';

  let colunas = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'));

  if (colunas == null || colunas.relOrdemCompra == undefined) {
    localStorage.setItem('colunasInvisiveisRelatorios', JSON.stringify({ ...colunas, relOrdemCompra: [] }))
    colunas = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'))
  }

  await preencheOrdenacaoTela('RelatorioOrdemCompra');

  $('#btnConfirmarColunas').on('click', async function () {
    try {
      $.LoadingOverlay('show');

      const novasColunas = retornaNovasColunasInvisiveis();
      let cols = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'));

      if (activeColVis == 'buttonColVis') {
        tabela = '#tabelaOrdemCompra'
        localStorage.setItem('colunasInvisiveisRelatorios', JSON.stringify({ ...cols, relOrdemCompra: novasColunas }))
      }
      $(tabela).DataTable().columns().visible(true);

      $(tabela).DataTable().columns().every(
        function () {
          if ((novasColunas).indexOf(this.dataSrc()) != -1) {
            this.visible(false); 3
          }
        })
    } finally {
      $.LoadingOverlay('hide');
      $('#modal-ColunasVisiveis').modal('hide');
    }
  })

  $('#btnLimparFiltros').on('click', async function () {

    $('#dtEmissaoDe').val('')
    $('#dtEmissaoAte').val('')
    $('#dtEntregaDe').val('')
    $('#dtEntregaAte').val('')
    $('#dtEntregaItensDe').val('')
    $('#dtEntregaItensAte').val('')
    $('#dtEntregaItensOrigDe').val('')
    $('#dtEntregaItensOrigAte').val('')

    if ($('#cbPorGrade').prop('checked')) {
      $('#cbPorGrade').prop('checked', false);
    }

    $('#btnLimpaProduto').trigger('click');
    $('#btnLimpaMaterial').trigger('click');
    $('#btnLimpaServico').trigger('click');
    $('#btnLimpaCor').trigger('click');
    $('#btnLimpaFornecedor').trigger('click');
    $('#btnLimpaEntrega').trigger('click');
    $('#btnLimpaOrdemCompra').trigger('click');
    $('#btnLimpaTransporte').trigger('click');
    $('#btnLimpaPedido').trigger('click');
    $('#btnLimpaDeposito').trigger('click');
    $('#btnLimpaNumOf').trigger('click');
    $('#btnLimpaGrupoProd').trigger('click');
    $('#btnLimpaGrupoMat').trigger('click');
    $('#btnLimpaColecao').trigger('click');
    $('#btnLimpaMatLinha').trigger('click');
    $('#btnLimpaLinha').trigger('click');
    $('#btnLimpaClasse').trigger('click');
    $('#btnLimpaColecaoOC').trigger('click');
    $('#btnLimpaEtiqueta').trigger('click');
    $('#btnLimpaSubGrupo').trigger('click');
    $('#btnLimpaStatus').trigger('click');
    $('#btnLimpaStatusProd').trigger('click');
    $('#btnLimpaStatusOC').trigger('click');
    $('#btnLimpaUsuario').trigger('click');
    $('#btnLimpaComprador').trigger('click');
    $('#btnLimpaColecaoItem').trigger('click');
    $('#btnLimpaContainer').trigger('click');
    $('#btnLimpaCategoria').trigger('click');
  });

  $('#btnFiltros').on('click', async function () {
    $('#modal-filtros').modal('show');
  });

  $('#rdTipoProduto, #rdTipoMaterial, #rdTipoServico, #rdTipoTodos').on('change', function () {
    $('#txtProduto').empty().trigger('change')
    $('#txtMaterial').empty().trigger('change')
    $('#txtServico').empty().trigger('change')

    if ($('#rdTipoTodos').is(':checked')) {
      $('#inputCor').addClass('mt-1')
      $('#inputFornecedor').addClass('mt-1')
      $('#inputMaterial').removeClass('d-none')
      $('#inputProduto').removeClass('d-none')
      $('#inputServico').removeClass('d-none')
      $('#inputGrupoProduto').removeClass('d-none')
      $('#inputGrupoMaterial').removeClass('d-none')
      $('#inputLinhaMaterial').removeClass('d-none')
      $('#inputLinhaProduto').removeClass('d-none')
      $('#inputStatusMaterial').removeClass('d-none')
      $('#inputStatusProduto').removeClass('d-none')
    } else if ($('#rdTipoServico').is(':checked')) {
      $('#inputMaterial').addClass('d-none')
      $('#inputProduto').addClass('d-none')
      $('#inputGrupoProduto').addClass('d-none')
      $('#inputGrupoMaterial').addClass('d-none')
      $('#inputLinhaMaterial').addClass('d-none')
      $('#inputLinhaProduto').addClass('d-none')
      $('#inputStatusMaterial').addClass('d-none')
      $('#inputStatusProduto').addClass('d-none')
      $('#inputServico').removeClass('d-none')
    } else if ($('#rdTipoProduto').is(':checked')) {
      $('#inputMaterial').addClass('d-none')
      $('#inputServico').addClass('d-none')
      $('#inputGrupoMaterial').addClass('d-none')
      $('#inputLinhaMaterial').addClass('d-none')
      $('#inputStatusMaterial').addClass('d-none')
      $('#inputGrupoProduto').removeClass('d-none')
      $('#inputLinhaProduto').removeClass('d-none')
      $('#inputStatusProduto').removeClass('d-none')
      $('#inputProduto').removeClass('d-none')
      $('#inputCor').removeClass('mt-1')
      $('#inputFornecedor').removeClass('mt-1')
    } else {
      $('#inputMaterial').removeClass('d-none')
      $('#inputProduto').addClass('d-none')
      $('#inputServico').addClass('d-none')
      $('#inputGrupoProduto').addClass('d-none')
      $('#inputLinhaProduto').addClass('d-none')
      $('#inputStatusProduto').addClass('d-none')
      $('#inputGrupoMaterial').removeClass('d-none')
      $('#inputLinhaMaterial').removeClass('d-none')
      $('#inputStatusMaterial').removeClass('d-none')
      $('#inputCor').removeClass('mt-1')
      $('#inputFornecedor').removeClass('mt-1')
    }
  });

  async function retornaFiltros() {
    const empresas = $('.empresa_selecionada:checked').toArray().length > 0 ? $('.empresa_selecionada:checked').toArray().map(input => input.id.substring(input.id.indexOf('-') + 1, input.id.length))
      : [getCookie('emp_id')];
    const tipo_compra = $('#rdTipoTodos').is(':checked') ? '' : $('#rdTipoProduto').is(':checked') ? 'P' : $('#rdTipoServico').is(':checked') ? 'S' : $('#rdTipoMaterial').is(':checked') ? 'M' : '0';
    const buscar = $('#rdBuscarTodos').is(':checked') ? '' : $('#rdBuscarPendentes').is(':checked') ? '1' : $('#rdBuscarFinalizados').is(':checked') ? '2' : '0';
    const porGrade = $('#cbPorGrade').prop('checked') ? '1' : '0';
    const cod_item = [await formataListas($('#txtProduto').val().toString()), await formataListas($('#txtMaterial').val().toString()), await formataListas($('#txtServico').val().toString())].filter((a) => a != '').toString()

    const retorno =
      `DT_EMISSAO_DE=${$('#dtEmissaoDe').val()}` +
      `&DT_EMISSAO_ATE=${$('#dtEmissaoAte').val()}` +
      `&DT_ENTREGA_DE=${$('#dtEntregaDe').val()}` +
      `&DT_ENTREGA_ATE=${$('#dtEntregaAte').val()}` +
      `&DT_ENTREGA_ITENS_DE=${$('#dtEntregaItensDe').val()}` +
      `&DT_ENTREGA_ITENS_ATE=${$('#dtEntregaItensAte').val()}` +
      `&DT_ENTREGA_ITENS_ORIG_DE=${$('#dtEntregaItensOrigDe').val()}` +
      `&DT_ENTREGA_ITENS_ORIG_ATE=${$('#dtEntregaItensOrigAte').val()}` +
      `&COD_ITEM=${cod_item}` +
      `&TIPO_COMPRA=${tipo_compra}` +
      `&BUSCAR=${buscar}` +
      `&COR=${await formataListas($('#txtCor').val().toString())}` +
      `&ENTREGA=${await formataListas($('#txtEntrega').val().toString())}` +
      `&TRANSPORTE=${await formataListas($('#txtTransporte').val().toString())}` +
      `&NUMERO=${await formataListas($('#txtOrdemCompra').val().toString())}` +
      `&PEDIDO=${await formataListas($('#txtPedido').val().toString())}` +
      `&FORNECEDOR=${await formataListas($('#txtFornecedor').val().toString())}` +
      `&DEPOSITO=${await formataListas($('#txtDeposito').val().toString())}` +
      `&NUMERO_OF=${$('#txtNumeroOf').val()}` +
      `&GRUPO_PRODUTO=${await formataListas($('#txtGrupoProd').val().toString())}` +
      `&GRUPO_MATERIAL=${await formataListas($('#txtGrupoMat').val().toString())}` +
      `&COLECAO=${await formataListas($('#txtColecao').val().toString())}` +
      `&LINHA_MATERIAL=${await formataListas($('#txtMatLinha').val().toString())}` +
      `&LINHA_PRODUTO=${await formataListas($('#txtLinha').val().toString())}` +
      `&CLASSE=${await formataListas($('#txtClasse').val().toString())}` +
      `&COLECAO_OC=${await formataListas($('#txtColecaoOC').val().toString())}` +
      `&EMPRESAS=${empresas}` +
      `&ETIQUETA=${await formataListas($('#txtEtiqueta').val().toString())}` +
      `&SUBGRUPO=${await formataListas($('#txtSubGrupo').val().toString())}` +
      `&STATUS_MATERIAL=${await formataListas($('#txtStatus').val().toString())}` +
      `&STATUS_PRODUTO=${await formataListas($('#txtStatusProd').val().toString())}` +
      `&STATUS_OC=${await formataListas($('#txtStatusOC').val().toString())}` +
      `&USUARIO_PESQUISA=${await formataListas($('#txtUsuario').val().toString())}` +
      `&COMPRADOR=${await formataListas($('#txtComprador').val().toString())}` +
      `&COLECAO_ITEM=${await formataListas($('#txtColecaoItem').val().toString())}` +
      `&CONTAINER=${await formataListas($('#txtContainer').val().toString())}` +
      `&CATEGORIA=${await formataListas($('#txtCategoria').val().toString())}` +
      `&POR_GRADE=${porGrade}`;

    return retorno;
  }

  retornaHintRelatorio('btnImprimir', 'RelatorioOrdemCompra');

  $('#btnImprimir').on('click', async function () {
    try {
      $.LoadingOverlay('show');
      try {
        const url = `/sisplan/relordemcompra/v1/relordemcompra?`;
        const filtros = await retornaFiltros();
        const ordem = `&TELA_ORDENACAO=RelatorioOrdemCompra&ORDEM_ORDENACAO=${$('#txtOrdem').val()}&INDIVIDUAL=N`;
        const bImprimeAutomatico = await verificaImprimirAutomatico('RelatorioOrdemCompra');
        let arquivo = await GeraRelatorio(`${url}${filtros}${ordem}`, 'POST', 100000, false, 'RelatorioOrdemCompra');
        if (arquivo != undefined) {
          if (!bImprimeAutomatico) {
            window.open(`${BASE_URI}/relatorios_api/pdf/${arquivo}`, '_blank');
          }
          await limparRelatorios();
        }

      } catch (error) {
        console.error(error);
      }
    } finally {
      $.LoadingOverlay('hide');
    }
  });

  $('#btnConsultar').on('click', async function () {
    try {
      $.LoadingOverlay("show");
      const filtros = await retornaFiltros();
      var response = await requisicao('GET', '/sisplan/relordemcompra/v1/consultadados?', filtros, null, 500000);

      if (!response) {
        return;
      }

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

      if (jsonStr.length == 0) {
        msgAlerta('Nenhum registro encontrado.');
        return;
      }

      const columns = [
        { title: "Número", data: 'NUMERO' },
        { title: "Pedido", data: 'PEDIDO' },
        { title: "Codcli", data: 'CODCLI' },
        { title: "Nome", data: 'NOME' },
        { title: "Cnpj", data: 'CNPJ' },
        { title: "Código", data: 'CODIGO' },
        { title: "Descrição", data: 'DESCRICAO' },
        { title: "Unidade", data: 'UNIDADE' },
        { title: "Emissão", data: 'DT_EMISSAO' },
        { title: "Entrega", data: 'DT_ENTREGA' },
        { title: "Entraga Orig.", data: 'DT_ENTREGA_ORIG' },
        { title: "Código2 Material", data: 'MAT_CODIGO2' },
        { title: "Uni. Compra", data: 'UNI_COMPRA' },
        { title: "Divisor Comp.", data: 'DIVISOR_COMPRA' },
        { title: "Fone", data: 'FONE' },
        { title: "Endereço", data: 'ENDERECO' },
        { title: "Número Endereço", data: 'NUM_END' },
        { title: "Complemento", data: 'COMPLEMENTO' },
        { title: "Transportadora", data: 'TRANSPORTADORA' },
        { title: "Desc. Transp.", data: 'DESC_TRANSP' },
        { title: "Bairro", data: 'BAIRRO' },
        { title: "E-mail", data: 'EMAIL' },
        { title: "Conta", data: 'CONTA' },
        { title: "Agência", data: 'AGENCIA' },
        { title: "Banco", data: 'BANCO' },
        { title: "Situação", data: 'SITUACAO' },
        { title: "Obs", data: 'OBS' },
        { title: "Frete", data: 'FRETE' },
        { title: "Condição", data: 'CONDICAO' },
        { title: "Parcelas", data: 'PARCELAS' },
        { title: "Referência", data: 'REFERENCIA' },
        { title: "Usuário", data: 'USUARIO' },
        { title: "Liberação", data: 'LIBERACAO' },
        { title: "Qtde. Compra", data: 'QTDE_COMPRA' },
        { title: "Qtde", data: 'QTDE' },
        { title: "Qtde Original", data: 'QTDE_ORIG' },
        { title: "Qtde Baixada", data: 'QTDE_B' },
        { title: "Preço", data: 'PRECO' },
        { title: "Desconto", data: 'DESCONTO' },
        { title: "Desconto Item", data: 'DESCONTO_ITEM' },
        { title: "Cor", data: 'CODCOR' },
        { title: "Desc. Cor", data: 'DESCOR' },
        { title: "Classe", data: 'CLASSE' },
        { title: "Solicitação", data: 'SOLICITACAO' },
        { title: "Coleção OC", data: 'COLECAO_OC' },
        { title: "Desc. Coleção", data: 'DESC_COLECAO' },
        { title: "Número OF", data: 'NUM_OF' },
        { title: "Prod. OF", data: 'PROD_OF' },
        { title: "Desc. Prod. OF", data: 'DESC_PROD_OF' },
        { title: "Código2 OF", data: 'CODIGO2_OF' },
        { title: "Codcli OF", data: 'CODCLI_OF' },
        { title: "Nome Cliente OF", data: 'NOME_CLI_OF' },
        { title: "Qtde Cancelada", data: 'QTDE_CANC' },
        { title: "Grupo", data: 'GRUPO' },
        { title: "Grupo Material", data: 'MAT_GRUPO' },
        { title: "Código Cli. Entidade", data: 'COD_CLI_ENT' },
        { title: "Nome Entrega", data: 'NOME_ENTREGA' },
        { title: "Especifica", data: 'ESPECIFICA' },
        { title: "Data Atual", data: 'DT_ATUAL' },
        { title: "Preço Venda", data: 'PRECO_VENDA' },
        { title: "Estoque", data: 'ESTOQUE' },
        { title: "Entrega", data: 'ENTREGA' },
        { title: "Código2", data: 'CODIGO2' },
        { title: "Obs. Cor", data: 'OBS_COR' },
        { title: "Código2 Prod.", data: 'CODIGO2_PROD' },
        { title: "Descrição2 Prod.", data: 'DESCRICAO2_PROD' },
        { title: "Ipi", data: 'IPI' },
        { title: "Val. Ipi", data: 'VALIPI' },
        { title: "Tabela", data: 'TAB' },
        { title: "Tamanho", data: 'TAM' },
        { title: "Dias Entrega", data: 'DIAS_ENTREGA' },
        { title: "Posição", data: 'POSICAO' },
        { title: "Faixa", data: 'FAIXA' },
        { title: "Tipo Item", data: 'TP_ITEM' },
        { title: "Código Item OF", data: 'CO_ITEN_OF_NUM_OF' },
        { title: "Icms", data: 'ICMS' },
        { title: "Val. Ult. Compra", data: 'VLR_ULT_COMPRA' },
        { title: "Nota Entrada", data: 'NOTA_ENTRADA' },
        { title: "Nome Emp.", data: 'EMP_NOME' },
        { title: "Fantasia Emp.", data: 'EMP_FANTASIA' },
        { title: "Pat. Emp.", data: 'EMP_PAT' },
        { title: "Entrega Item", data: 'DT_ENTREGA_ITEM' },
        { title: "Entrega Orig. Item", data: 'DT_ENT_ORIG_ITEM' },
        { title: "Status OC", data: 'STATUS_OC' },
        { title: "Desc. Status OC", data: 'DESC_STATUS_OC' },
        { title: "Ordem OC", data: 'ORDEM_OC' },
        { title: "Comprador", data: 'COMPRADOR' },
        { title: "Nome Comprador", data: 'NOME_COMPRADOR' },
        { title: "Cor Complemento", data: 'COMPLEMENTO_COR' },
        { title: "Emissão NF", data: 'DT_EMISSAO_NF' },
        { title: "Depósito", data: 'DEPOSITO' },
        { title: "Sub Grupo", data: 'SUB_GRUPO' },
        { title: "Desc. Sub Grupo", data: 'DESC_SUB_GRUPO' },
        { title: "Chegada Prevista", data: 'DT_CHEGADA_PREV' },
        { title: "Col. Comp. Item", data: 'COL_CO_ITEN' },
        { title: "Desc. Col. Comp. Item", data: 'DESC_COL_CO_ITEN' },
        { title: "Categoria", data: 'CATEGORIA' },
        { title: "Desc. Categoria", data: 'DESC_CATEGORIA' },
        { title: "Container", data: 'CONTAINER' },
        { title: "Desc. Container", data: 'DESC_CONTAINER' }
      ]
      const colunasInvisiveis = JSON.parse(
        localStorage.getItem("colunasInvisiveisRelatorios")
      );


      criaDataTablePadrao('#tabelaOrdemCompra', true, true, true, true, true, true, true, jsonStr, columns, [], [8, 9, 10, 58, 81, 82, 89, 93], [], [], {}, '', 'buttonColVis', 'buttonExcel2');

      $('#tabelaOrdemCompra').DataTable().columns().every(
        function () {
          if ((colunasInvisiveis.relOrdemCompra).indexOf(this.dataSrc()) != -1) {
            this.visible(false);
          }
        }
      )
      await criaGraficosCabecalho()
      $('#modal-filtros').modal('hide');

      $('#buttonColVis').on('click', async function () {
        $.LoadingOverlay('show');
        activeColVis = 'buttonColVis'
        $('#modal-ColunasVisiveis').modal('show');
        $.LoadingOverlay('hide');
      })

      $('#buttonExcel2').on('click', async function () {
        const dados = $("#tabelaOrdemCompra").DataTable().data().toArray();
        await exportaCSV("", "", undefined, null, 'Relatório ordem de compra', '', '', 999, false, false, dados);
      })

    } catch (error) {
      console.log(error);
    } finally {
      $.LoadingOverlay("hide");
    }
  });

  $('#modal-ColunasVisiveis').on('show.bs.modal', function () {
    const cols = [];
    let tabela = ''
    let colunasInvisiveis = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'))

    if (activeColVis == 'buttonColVis') {
      tabela = '#tabelaOrdemCompra'
    }

    $(tabela).DataTable().columns().every(function () {
      cols.push({
        'title': $(this.header()).text().trim(),
        'data': this.dataSrc()
      })
    });

    if (activeColVis == 'buttonColVis') {
      adicionaColunas(cols, colunasInvisiveis.relOrdemCompra ?? [])
    }

  })

  $('#btnSelecionarEmpresas').on('click', function () {
    carregaEmpresasDisponiveis();
  });

  function addPesquisaAutocompleta() {
    componenteFiltro('produto', true, true);
    componenteFiltro('material', true, true);
    componenteFiltro('servico', true, true);
    componenteFiltro('cor', true, true);
    componenteFiltro('pedido', true, true);
    componenteFiltro('colecao', true, true);
    componenteFiltro('ordemCompra', true, true);
    componenteFiltro('notaEntra', true, true);
    componenteFiltro('fornecedor', true, true);
    componenteFiltro('deposito', true, true);
    componenteFiltro('matLinha', true, true);
    componenteFiltro('linha', true, true);
    componenteFiltro('classe', true, true);
    componenteFiltro('etiqueta', true, true);
    componenteFiltro('empresa', true, true);
    componenteFiltro('subGrupo', true, true);
    componenteFiltro('status', true, true);
    componenteFiltro('usuario', true, true);
    componenteFiltro('categoria', true, true);


    $('#txtEntrega').pesquisa_variosServerside(1, `{"tabela":"COMPRA", "camposSelect":[ "ENTIDADE.CODCLI", "ENTIDADE.NOME", "COMPRA.ENTREGA" ], "leftjoin": [{"tabela" : "ENTIDADE", "condicao" : "ENTIDADE.CODCLI= COMPRA.CODFOR"}]}`, "CODCLI", "NOME", "ENTREGA")
    $('#btnEntrega').pesquisa_serversideSel('#txtEntrega', `{"tabela":"COMPRA", "camposSelect":[ "ENTIDADE.CODCLI", "ENTIDADE.NOME", "COMPRA.ENTREGA" ], "leftjoin": [{"tabela" : "ENTIDADE", "condicao" : "ENTIDADE.CODCLI= COMPRA.CODFOR"}]}`, 'Pesquisa Entrega');
    $('#btnLimpaEntrega').on('click', function () { $('#txtEntrega').empty().trigger('change') })

    $('#txtTransporte').pesquisa_variosServerside(1, `{"tabela":"TABTRAN", "camposSelect":[ "TABTRAN.ID", "TABTRAN.NOME" ]}`, "ID", "NOME")
    $('#btnTransporte').pesquisa_serversideSel('#txtTransporte', `{"tabela":"TABTRAN", "camposSelect":[ "TABTRAN.ID", "TABTRAN.NOME" ]}`, 'Pesquisa Transporte');
    $('#btnLimpaTransporte').on('click', function () { $('#txtTransporte').empty().trigger('change') })

    $('#txtNumOf').pesquisa_variosServerside(1, `{"tabela":"CO_ITEN_OF", "camposSelect":[ "CO_ITEN_OF.NUM_OF", "CO_ITEN_OF.NUMERO" ]}`, "ID", "NOME")
    $('#btnNumOf').pesquisa_serversideSel('#txtNumOf', `{"tabela":"CO_ITEN_OF", "camposSelect":[ "CO_ITEN_OF.NUM_OF", "CO_ITEN_OF.NUMERO" ]}`, 'Pesquisa OF');
    $('#btnLimpaNumOf').on('click', function () { $('#txtNumOf').empty().trigger('change') })

    $('#txtGrupoProd').pesquisa_variosServerside(1, `{"tabela":"GRUPO_PA", "camposSelect":[ "GRUPO_PA.CODIGO", "GRUPO_PA.DESCRICAO" ]}`, "ID", "NOME")
    $('#btnGrupoProd').pesquisa_serversideSel('#txtGrupoProd', `{"tabela":"GRUPO_PA", "camposSelect":[ "GRUPO_PA.CODIGO", "GRUPO_PA.DESCRICAO" ]}`, 'Pesquisa Grupo de Produto');
    $('#btnLimpaGrupoProd').on('click', function () { $('#txtGrupoProd').empty().trigger('change') })

    $('#txtGrupoMat').pesquisa_variosServerside(1, `{"tabela":"GRUPO_MA", "camposSelect":[ "GRUPO_MA.CODIGO", "GRUPO_MA.DESCRICAO" ]}`, "ID", "NOME")
    $('#btnGrupoMat').pesquisa_serversideSel('#txtGrupoMat', `{"tabela":"GRUPO_MA", "camposSelect":[ "GRUPO_MA.CODIGO", "GRUPO_MA.DESCRICAO" ]}`, 'Pesquisa Grupo de Material');
    $('#btnLimpaGrupoMat').on('click', function () { $('#txtGrupoMat').empty().trigger('change') })

    $('#txtColecaoOC').pesquisa_variosServerside(1, `{"tabela":"COLECAO", "camposSelect":[ "COLECAO.CODIGO", "COLECAO.DESCRICAO" ]}`, "ID", "NOME")
    $('#btnColecaoOC').pesquisa_serversideSel('#txtColecaoOC', `{"tabela":"COLECAO", "camposSelect":[ "COLECAO.CODIGO", "COLECAO.DESCRICAO" ]}`, 'Pesquisa Coleção de OC');
    $('#btnLimpaColecaoOC').on('click', function () { $('#txtColecaoOC').empty().trigger('change') })

    $('#txtStatusProd').pesquisa_variosServerside(1, `{"tabela":"SITPROD", "camposSelect":[ "SITPROD.CODIGO", "SITPROD.DESCRICAO" ]}`, "CODIGO", "NOME")
    $('#btnStatusProd').pesquisa_serversideSel('#txtStatusProd', `{"tabela":"SITPROD", "camposSelect":[ "SITPROD.CODIGO", "SITPROD.DESCRICAO" ]}`, 'Pesquisa Status');
    $('#btnLimpaStatusProd').on('click', function () { $('#txtStatusProd').empty().trigger('change') })

    $('#txtStatusOC').pesquisa_variosServerside(1, `{"tabela":"SITPROD", "camposSelect":[ "SITPROD.CODIGO", "SITPROD.DESCRICAO" ]}`, "CODIGO", "NOME")
    $('#btnStatusOC').pesquisa_serversideSel('#txtStatusOC', `{"tabela":"SITPROD", "camposSelect":[ "SITPROD.CODIGO", "SITPROD.DESCRICAO" ]}`, 'Pesquisa Status');
    $('#btnLimpaStatusOC').on('click', function () { $('#txtStatusOC').empty().trigger('change') })

    $('#txtComprador').pesquisa_variosServerside(1, `{"tabela":"ENTIDADE", "camposSelect":[ "ENTIDADE.CODCLI", "ENTIDADE.NOME" ]}`, "CODIGO", "NOME")
    $('#btnComprador').pesquisa_serversideSel('#txtComprador', `{"tabela":"ENTIDADE", "camposSelect":[ "ENTIDADE.CODCLI", "ENTIDADE.NOME" ]}`, 'Pesquisa Comprador');
    $('#btnLimpaComprador').on('click', function () { $('#txtComprador').empty().trigger('change') })

    $('#txtColecaoItem').pesquisa_variosServerside(1, `{"tabela":"COLECAO", "camposSelect":[ "COLECAO.ID", "COLECAO.DESCRICAO" ]}`, "ID", "DESCRICAO")
    $('#btnColecaoItem').pesquisa_serversideSel('#txtColecaoItem', `{"tabela":"COLECAO", "camposSelect":[ "COLECAO.ID", "COLECAO.DESCRICAO" ]}`, 'Pesquisa Coleção Item');
    $('#btnLimpaColecaoItem').on('click', function () { $('#txtColecaoItem').empty().trigger('change') })

    $('#txtContainer').pesquisa_variosServerside(1, `{"tabela":"TIPO_CONTAINER", "camposSelect":[ "TIPO_CONTAINER.ID", "TIPO_CONTAINER.DESCRICAO", "TIPO_CONTAINER.CODIGO" ]}`, "ID", "DESCRICAO", "CODIGO")
    $('#btnContainer').pesquisa_serversideSel('#txtContainer', `{"tabela":"TIPO_CONTAINER", "camposSelect":[ "TIPO_CONTAINER.ID", "TIPO_CONTAINER.DESCRICAO", "TIPO_CONTAINER.CODIGO" ]}`, 'Pesquisa Container');
    $('#btnLimpaContainer').on('click', function () { $('#txtContainer').empty().trigger('change') })
  }

  async function criaGraficosCabecalho() {
    const dadosProduto = await carregaDadosOCProduto();
    const dadosMaterial = await carregaDadosOCMaterial();

    Graficos.criarGrafico({
      container: 'graficosRelOrdemCompra',
      tipo: 'pie',
      dados: dadosProduto,
      nomeSerie: 'Produto',
      colunasAgrupamento: ['NUMERO'],
      colunasValor: ['VALOR_PENDENTE'],
      title: 'Produto'
    })
    Graficos.criarGrafico({
      container: 'graficosRelOrdemCompra1',
      tipo: 'pie',
      dados: dadosMaterial,
      nomeSerie: 'Material',
      colunasAgrupamento: ['NUMERO'],
      colunasValor: ['VALOR_PENDENTE'],
      title: 'Material'
    })

  }

  async function carregaDadosOCProduto() {
    $.LoadingOverlay('show');
    try {
      let where = '';
      const ordemCompra = pegaValor('#txtOrdemCompra');
      const codigoCor = pegaValor('#txtCor');
      const codigoFornecedor = pegaValor('#txtFornecedor');
      const codigoUsuario = pegaValor('#txtUsuario');
      const codigoStatusProd = pegaValor('#txtStatusProd');
      const codigoProduto = pegaValor('#txtProduto');
      const codigoGrupoProd = pegaValor('#txtGrupoProd');
      const codigoLinha = pegaValor('#txtLinha');

      if (ordemCompra && ordemCompra.toString().trim() !== '') {
        const lista = await formataListas(ordemCompra.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND COMPRA.NUMERO IN (${lista})`;
        }
      }

      if (codigoCor && codigoCor.toString().trim() !== '') {
        const lista = await formataListas(codigoCor.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND CO_ITEN.COR IN (${lista})`;
        }
      }

      if (codigoFornecedor && codigoFornecedor.toString().trim() !== '') {
        const lista = await formataListas(codigoFornecedor.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND COMPRA.CODFOR IN (${lista})`;
        }
      }

      if (codigoUsuario && codigoUsuario.toString().trim() !== '') {
        const lista = await formataListas(codigoUsuario.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND COMPRA.USUARIO IN (${lista})`;
        }
      }

      if (codigoStatusProd && codigoStatusProd.toString().trim() !== '') {
        const lista = await formataListas(codigoStatusProd.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND SITPROD.CODIGO IN (${lista})`;
        }
      }

      if (codigoProduto && codigoProduto.toString().trim() !== '') {
        const lista = await formataListas(codigoProduto.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND PRODUTO.CODIGO IN (${lista})`;
        }
      }

      if (codigoGrupoProd && codigoGrupoProd.toString().trim() !== '') {
        const lista = await formataListas(codigoGrupoProd.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND GRUPO_PA.CODIGO IN (${lista})`;
        }
      }

      if (codigoLinha && codigoLinha.toString().trim() !== '') {
        const lista = await formataListas(codigoLinha.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND TABLIN.CODIGO IN (${lista})`;
        }
      }

      if ($("#dtEmissaoDe").val() != "01-01-1200" || $$("#dtEmissaoAte").val() != "01-12-2500") {
        where += ` and COMPRA.DT_EMISSAO >= '${$("#dtEmissaoDe").val()}' and COMPRA.DT_EMISSAO <= '${$("#dtEmissaoAte").val()}'`;
      }

      const pesquisaParam = {
        tabela: "COMPRA",
        camposSelect: [
          'COMPRA.NUMERO',
          'SUM(CAST(CO_ITEN.QTDE AS NUMERIC(10,2)) * CO_ITEN.PRECO) VALOR_PENDENTE',
          'SUM(CAST(CO_ITEN.QTDE_B AS NUMERIC(10,2)) * CAST(CO_ITEN.PRECO AS NUMERIC(10,2))) VALOR_BAIXADO'
        ],
        leftJoin: [
          { tabela: 'CO_ITEN', condicao: 'CO_ITEN.NUMERO = COMPRA.NUMERO' },
          { tabela: 'PRODUTO', condicao: 'PRODUTO.CODIGO = CO_ITEN.CODIGO' },
          { tabela: 'ENTIDADE', condicao: 'COMPRA.CODFOR = ENTIDADE.CODCLI' },
          { tabela: 'SITPROD', condicao: 'SITPROD.CODIGO = PRODUTO.STATUS' },
          { tabela: 'GRUPO_PA', condicao: 'GRUPO_PA.CODIGO = PRODUTO.GRUPO' },
          { tabela: 'TABLIN', condicao: 'TABLIN.CODIGO = PRODUTO.LINHA' },
        ],
        where: [`1=1 ${where} AND CO_ITEN.QTDE > 0 AND CO_ITEN.TP_ITEM = 'P'`],
        groupBy: [
          "COMPRA.NUMERO",
        ]
      };

      const jsonStr = await retornaJsonPesquisaPadrao(JSON.stringify(pesquisaParam));
      if (jsonStr.length == 0) {
        return [];
      }

      jsonStr.forEach(item => {
        const pendente = Number(item.VALOR_PENDENTE) || 0;
        const baixado = Number(item.VALOR_BAIXADO) || 0;

        if (pendente > 0) {
          item.VALOR_GRAFICO = pendente;
          item.NUMERO = `OC ${item.NUMERO} - Pendente`;
        } else if (baixado > 0) {
          item.VALOR_GRAFICO = baixado;
          item.NUMERO = `OC ${item.NUMERO} - Baixado`;
        } else {
          item.VALOR_GRAFICO = 0;
          item.NUMERO = `OC ${item.NUMERO}`;
        }
      });

      return jsonStr;
    } finally {
      $.LoadingOverlay('hide');
    }
  };

  async function carregaDadosOCMaterial() {
    $.LoadingOverlay('show');
    try {
      let where = '';
      const ordemCompra = pegaValor('#txtOrdemCompra');
      const codigoMaterial = pegaValor('#txtMaterial');
      const codigoCor = pegaValor('#txtCor');
      const codigoFornecedor = pegaValor('#txtFornecedor');
      const codigoUsuario = pegaValor('#txtUsuario');
      const codigoStatus = pegaValor('#txtStatus');
      const codigoGrupoMat = pegaValor('#txtGrupoMat');
      const codigoMatLinha = pegaValor('#txtMatLinha');


      if (ordemCompra && ordemCompra.toString().trim() !== '') {
        const lista = await formataListas(ordemCompra.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND COMPRA.NUMERO IN (${lista})`;
        }
      }

      if (codigoMaterial && codigoMaterial.toString().trim() !== '') {
        const lista = await formataListas(codigoMaterial.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND MATERIAL.CODIGO IN (${lista})`;
        }
      }

      if (codigoCor && codigoCor.toString().trim() !== '') {
        const lista = await formataListas(codigoCor.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND CO_ITEN.COR IN (${lista})`;
        }
      }
      if (codigoFornecedor && codigoFornecedor.toString().trim() !== '') {
        const lista = await formataListas(codigoFornecedor.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND COMPRA.CODFOR IN (${lista})`;
        }
      }
      if (codigoUsuario && codigoUsuario.toString().trim() !== '') {
        const lista = await formataListas(codigoUsuario.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND COMPRA.USUARIO IN (${lista})`;
        }
      }
      if (codigoStatus && codigoStatus.toString().trim() !== '') {
        const lista = await formataListas(codigoStatus.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND SITPROD.CODIGO IN (${lista})`;
        }
      }
      if (codigoGrupoMat && codigoGrupoMat.toString().trim() !== '') {
        const lista = await formataListas(codigoGrupoMat.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND GRUPO_MA.CODIGO IN (${lista})`;
        }
      }
      if (codigoMatLinha && codigoMatLinha.toString().trim() !== '') {
        const lista = await formataListas(codigoMatLinha.toString());
        if (lista && lista.toString().trim() !== '') {
          where += ` AND MAT_LINHA.CODIGO IN (${lista})`;
        }
      }

      if ($("#dtEmissaoDe").val() != "01-01-1200" || $$("#dtEmissaoAte").val() != "01-12-2500") {
        where += ` and COMPRA.DT_EMISSAO >= '${$("#dtEmissaoDe").val()}' and COMPRA.DT_EMISSAO <= '${$("#dtEmissaoAte").val()}'`;
      }

      const pesquisaParam = {
        tabela: "COMPRA",
        camposSelect: [
          'COMPRA.NUMERO',
          'SUM(CAST(CO_ITEN.QTDE AS NUMERIC(10,2)) * CO_ITEN.PRECO) VALOR_PENDENTE'

        ],
        leftJoin: [
          { tabela: 'CO_ITEN', condicao: 'CO_ITEN.NUMERO = COMPRA.NUMERO' },
          { tabela: 'MATERIAL', condicao: 'MATERIAL.CODIGO = CO_ITEN.CODIGO' },
          { tabela: 'ENTIDADE', condicao: 'COMPRA.CODFOR = ENTIDADE.CODCLI' },
          { tabela: 'SITPROD', condicao: 'SITPROD.CODIGO = MATERIAL.STATUS' },
          { tabela: 'GRUPO_MA', condicao: 'GRUPO_MA.CODIGO = MATERIAL.GRUPO' },
          { tabela: 'TABLIN', condicao: 'TABLIN.CODIGO = MATERIAL.LINHA' },
        ],
        where: [`1=1 ${where} AND CO_ITEN.QTDE > 0 AND CO_ITEN.TP_ITEM = 'M'`],
        groupBy: [
          "COMPRA.NUMERO",
        ]
      };

      const jsonStr = await retornaJsonPesquisaPadrao(JSON.stringify(pesquisaParam));
      if (jsonStr.length == 0) {
        return [];
      }

      jsonStr.forEach(item => {
        const pendente = Number(item.VALOR_PENDENTE) || 0;
        const baixado = Number(item.VALOR_BAIXADO) || 0;

        if (pendente > 0) {
          item.VALOR_GRAFICO = pendente;
          item.NUMERO = `OC ${item.NUMERO} - Pendente`;
        } else if (baixado > 0) {
          item.VALOR_GRAFICO = baixado;
          item.NUMERO = `OC ${item.NUMERO} - Baixado`;
        } else {
          item.VALOR_GRAFICO = 0;
          item.NUMERO = `OC ${item.NUMERO}`;
        }
      });

      return jsonStr;
    } finally {
      $.LoadingOverlay('hide');
    }
  };

  function innitDateAtual() {
    $('#dtEmissaoDe').val('1200-01-01');
    $('#dtEmissaoAte').val('2500-12-31');
    $('#dtEntregaDe').val('1200-01-01');
    $('#dtEntregaAte').val('2500-12-31');
    $('#dtEntregaItensDe').val('1200-01-01');
    $('#dtEntregaItensAte').val('2500-12-31');
    $('#dtEntregaItensOrigDe').val('1200-01-01');
    $('#dtEntregaItensOrigAte').val('2500-12-31');
  }

  addPesquisaAutocompleta();
  innitDateAtual();
});