$('#tutorial').on('click', function () {
  $(document).ready(async function () {
    const driver = new Driver({
      doneBtnText: 'Sair',
      closeBtnText: 'Fechar',
      nextBtnText: 'Próximo',
      prevBtnText: 'Anterior',
      allowClose: false,
      animate: true,
      onNext: (Element) => {
        if ((Element.node.id == 'avancar1')) {
          $('#avancar1').trigger('click');
        };
        if ((Element.node.id == 'avancar2')) {
          $('#avancar2').trigger('click');
        };
        if ((Element.node.id == 'avancar3')) {
          $('#avancar3').trigger('click');
        };
      }
    });

    driver.defineSteps([{
      element: '#formcard1',
      popover: {
        title: 'Dados Gerais',
        description: 'Aqui estão os campos disponíveis para o cadastro.',
        position: 'top'
      }
    },
    {
      element: '#txtPeriodo',
      popover: {
        title: 'Campos Obrigatórios',
        description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
        position: 'top'
      }
    },
    {
      element: '#txtNumeroOrdem',
      popover: {
        title: 'Campos Obrigatórios',
        description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
        position: 'top'
      }
    },
    {
      element: '#txtCliente',
      popover: {
        title: 'Campos Obrigatórios',
        description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
        position: 'top'
      }
    },
    {
      element: '#txtFaccao',
      popover: {
        title: 'Campos Obrigatórios',
        description: 'Esse é um campo obrigatório, para identificá-los, você verá um * ao lado do nome.',
        position: 'top'
      }
    },
    {
      element: "#btnVoltar",
      popover: {
        title: "Botão Voltar",
        description:
          "Ao clicar nesse botão você retorna para a tela de consulta.",
        position: "left",
      },
    },
    {
      element: '#avancar1',
      popover: {
        title: 'Botão Avançar',
        description: 'Clique aqui para ir para a próxima aba.',
        position: 'left'
      }
    },
    {
      element: '#formcard2',
      popover: {
        title: 'Itens da OF',
        description: 'Aqui estão os itens e baixas da OF.',
        position: 'top'
      }
    },
    {
      element: '#txtProduto',
      popover: {
        title: 'Campo Produto',
        description: 'Ao sair deste campo monta a grade do Produto.',
        position: 'top'
      }
    },
    {
      element: '#voltar2',
      popover: {
        title: 'Botão para Voltar',
        description: 'Clique aqui para voltar a página anterior.',
        position: 'top'
      }
    },
    {
      element: '#btnBaixar',
      popover: {
        title: 'Botão Baixar',
        description: 'Clique aqui para para baixar os Itens da OF.',
        position: 'top'
      }
    },
    {
      element: '#btnCancBaixas',
      popover: {
        title: 'Cancelar Baixas',
        description: 'Clique aqui para cancelar as baixas da OF.',
        position: 'top'
      }
    },
    {
      element: '#btnFinalizar',
      popover: {
        title: 'Botão Finalizar',
        description: 'Clique aqui para finalizar a OF.',
        position: 'left'
      }
    },
    {
      element: '#btnGravar',
      popover: {
        title: 'Botão Gravar',
        description: 'Clique aqui para gravar os dados da OF.',
        position: 'left'
      }
    }
    ]);
    driver.start();
  });
});

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

  $('#msform').validate({
    debug: false,
    ignore: "",
    rules: {
      txtParte: {
        required: true,
      },
      txtSetor: {
        required: true,
      },
      txtEmpresaDestino: {
        required: true,
      },
      txtQualidade: {
        required: true,
      },
      txtTipoBaixa: {
        required: true,
      },
      txtDeposito: {
        required: true,
      },
      txtProximoSetor: {
        required: true,
      }
    },
    messages: {
      txtParte: {
        required: "Informe a parte."
      },
      txtSetor: {
        required: "Informe um setor."
      },
      txtEmpresaDestino: {
        required: "Informe a empresa destino."
      },
      txtQualidade: {
        required: "Informe uma qualidade."
      },
      txtTipoBaixa: {
        required: "Informe um Tipo de Baixa."
      },
      txtDeposito: {
        required: "Informe um Depósito."
      },
      txtProximoSetor: {
        required: "Informe um setor."
      }
    },
    errorElement: 'span',
    errorPlacement(error, element) {
      error.addClass('invalid-feedback');
      element.closest('.form-group').append(error);
    },
    highlight(element) {
      $(element).addClass('is-invalid');
    },
    unhighlight(element) {
      $(element).removeClass('is-invalid');
    }
  });

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

  // aqui so valida se nao existe tem que criar para nao dar erro
  if (colunas == null || colunas.movimentacaoFaccaoCores == undefined) {
    localStorage.setItem('colunasInvisiveisRelatorios', JSON.stringify({ ...colunas, movimentacaoFaccaoCores: ['EMPRESA'] }))
    colunas = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'))
  }


  $('#account').css('cursor', 'pointer');
  $('#payment').css('cursor', 'pointer');

  let queryString = window.location.href;
  let parametros = queryString.split('/');
  let ordemproducao = parametros[parametros.length - 1];

  let contaFs = 1;
  $('#account').on('click', function () {
    if (contaFs == 2) {
      $('#voltar2').trigger('click');
    }
  });

  $('#payment').on('click', function () {
    if (contaFs == 1) {
      $('#avancar1').trigger('click');
    } else if (contaFs == 3) {
      $('#voltar3').trigger('click');
    }
  });

  $('#confirm').on('click', function () {
    if (contaFs == 2) {
      $('#avancar2').trigger('click');
    }
  });

  $('#btnVoltar').on('click', async function () {
    await deletaRegistro("MOVIMENTACAOFACCAO", getCookie("usuario"), parametros[5]);
    window.location.href = `${BASE_URI}/movimentacaofaccao`;
  });

  $("#btnGravar").click(async function () {
    $.LoadingOverlay('show');
    try {
      await validaMovimentacao();
      await movimentaOF();
    } catch (error) {
      console.error(error);
      msgErro(`Não foi possível fazer a movimentação: ${error}`);
    } finally {
      $.LoadingOverlay('hide');
    }
  });

  $(".next").click(async function () {
    let validator = $("#msform").validate();
    let liberado = true;

    if ($(this).attr("id") == "avancar2") {
      validator.element("#txtParte");
      validator.element("#txtSetor");
      validator.element("#txtEmpresaDestino");

      if (!$('.ultimoSetor').hasClass('d-none')) {
        validator.element("#txtQualidade");
        validator.element("#txtTipoBaixa");
        validator.element("#txtDeposito");
        if (!(validator.element("#txtParte") && validator.element("#txtSetor") && validator.element("#txtEmpresaDestino") && validator.element("#txtQualidade")
          && validator.element("#txtTipoBaixa") && validator.element("#txtDeposito"))) {
          liberado = false;
        }
      } else {
        validator.element("#txtProximoSetor");
        if (!(validator.element("#txtParte") && validator.element("#txtSetor") && validator.element("#txtEmpresaDestino") && validator.element("#txtProximoSetor"))) {
          liberado = false;
        }
      }
      await buscaItensMovimentacao();
    }

    if (liberado) {
      contaFs += 1;
      currentFs = $(this).parent();
      nextFs = $(this).parent().next();

      $("#progressbar li").eq($("fieldset").index(nextFs)).addClass("active");

      nextFs.show();
      currentFs.animate(
        {
          opacity: 0,
        },
        {
          step(now) {
            opacity = 1 - now;

            currentFs.css({
              display: "none",
              position: "relative",
            });
            nextFs.css({
              opacity,
            });
          },
          duration: 600,
        }
      );
    } else {
      msgAlerta('Necessário informar os campos obrigatórios!');
    }
  });

  $(".previous").click(function () {
    contaFs -= 1;

    currentFs = $(this).parent();
    previousFs = $(this).parent().prev();
    $("#progressbar li")
      .eq($("fieldset").index(currentFs))
      .removeClass("active");
    previousFs.show();
    currentFs.animate(
      {
        opacity: 0,
      },
      {
        step(now) {
          opacity = 1 - now;
          currentFs.css({
            display: "none",
            position: "relative",
          });
          previousFs.css({
            opacity,
          });
        },
        duration: 600,
      }
    );
  });

  await BuscaDadosOF(ordemproducao);

  async function BuscaDadosOF(Numero) {
    try {
      $.LoadingOverlay('show');
      try {
        const params = `NUMERO=${Numero}&PENDENTE=N`
        const response = await requisicao('GET', '/buscaordemproducao?', params, undefined, 120000);

        if (!response) {
          return;
        }

        let jsonStr = await response.json();
        jsonStr = jsonStr.resultado[0];
        $("#txtNumeroOrdem").val(Numero);
        $("#txtNumeroOrdemMov").val(Numero);
        $('#txtPedido').val(jsonStr.pedido);
        $("#txtProgramacao").val(jsonStr.programacao);
        insereValor("#txtProduto", jsonStr.codigo, jsonStr.descricao);
        $("#txtDtCadastro").val(jsonStr.dtCadastro != undefined ? jsonStr.dtCadastro.slice(0, 10) : 0);
        $("#txtDtInicio").val(jsonStr.dtInicio != undefined ? jsonStr.dtInicio.slice(0, 10) : 0);
        $("#txtDtFim").val(jsonStr.dtFim != undefined ? jsonStr.dtFim.slice(0, 10) : 0);
        $("#txtObs").val(jsonStr.observacao);
        setarDataAtual('txtDtProducao');
        setarDataAtual('txtDtRetorno');
        await buscaCores(jsonStr.cores);
        CriaPesquisasTela();
        await adicionaPartes(jsonStr.partes);
      } catch (error) {
        console.error(error);
        msgErro(`Não foi possível buscar os dados ${error}`);
      }
    } finally {
      $.LoadingOverlay('hide');
    };
  }

  $('#cbPartes').on('change', async function () {
    await buscaResumo($(this).val());
  });

  async function adicionaPartes(partes) {
    let componente = $('#cbPartes');

    partes.forEach(parte => {
      componente.append($('<option>', {
        value: parte.codigo,
        text: `${parte.codigo} - ${parte.descricao}`
      }))
    })
    await buscaResumo($('#cbPartes').val())
    insereValor('#txtParte', partes[0].codigo, partes[0].descricao);
    $('#txtParte').trigger('focusout');
  }

  async function buscaResumo(parte) {
    try {
      $.LoadingOverlay('show');
      try {
        const params = `NUMERO=${$('#txtNumeroOrdem').val()}&PARTE=${parte}`;
        const response = await requisicao('GET', '/buscaresumoprod?', params, undefined, 120000);

        if (!response) {
          return;
        }

        let jsonStr = await response.json();
        if (jsonStr.resultado) {
          jsonStr = jsonStr.resultado;

          if ($.fn.DataTable.isDataTable('#tabelaResumo')) {
            $('#tabelaResumo').DataTable().destroy();
            $('#tabelaResumo').empty();
          }

          if (jsonStr.length == 0) {
            msgAlerta('Não foi possivel buscar o resumo da ordem de produção.');
            return;
          }

          const colunasItens = jsonStr.length > 0 ? Object.entries(jsonStr[0]).map(item => ({
            title: item[0],
            data: item[0]
          })) : [];

          $('#tabelaResumo').DataTable({
            search: false,
            filter: false,
            order: [],
            sort: true,
            destroy: true,
            "language": {
              "sEmptyTable": "Nenhum registro encontrado",
              "sInfo": "_TOTAL_ registros",
              "sInfoEmpty": " 0 registros",
              "sInfoFiltered": "(Filtrados de _MAX_ registros)",
              "sInfoPostFix": "",
              "sInfoThousands": ".",
              "sLengthMenu": "_MENU_ resultados",
              "sLoadingRecords": "Carregando...",
              "sProcessing": "Processando...",
              "sZeroRecords": "Nenhum registro encontrado",
              "sSearch": "Pesquisar",
              "oPaginate": {
                "sNext": "Próximo",
                "sPrevious": "Anterior",
                "sFirst": "Primeiro",
                "sLast": "Último"
              },
              "oAria": {
                "sSortAscending": ": Ordenar colunas de forma ascendente",
                "sSortDescending": ": Ordenar colunas de forma descendente"
              }
            },
            "createdRow": function (row, data, dataIndex) {
              if (data.cor === 'verde') {
                $('td', row).css('color', '#75BE25')
              } else if (data.cor === 'vermelho') {
                $('td', row).css('color', 'red')
              } else if (data.cor === 'azul') {
                $('td', row).css('color', '#2195f0')
              }
            },
            "columnDefs": [{
              "targets": 1,
              "visible": false
            }],
            "autoWidth": true,
            "data": jsonStr,
            "columns": colunasItens,
            autoWidth: true,
            "colReorder": true
          });

          const colunasInvisiveis = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'));
          $('#tabelaResumo_length').prepend('<button class="buttonColVis" id="buttonColVis"><i class="fas fa-cogs"></i></button>');
          $('#tabelaResumo_length').prepend('<button class="buttonExcel" id="buttonExcel"><i class="fas fa-file-excel"></i></button>');

          $('#buttonColVis').prop('title', 'Configurar colunas visíveis')
          $('#buttonExcel').prop('title', 'Exportar')

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

          $('#buttonExcel').on('click', async function () {
            const filtros = `NUMERO=${$('#txtNumeroOrdem').val()}&PARTE=${$('#cbPartes').val()}`;
            const url = `/buscaresumoprod?`;

            await exportaCSV(url, filtros, false, null, 'Resumo da ordem de produção', '#tabelaResumo');
          })

          $('#tabelaResumo').DataTable().columns().every(function () {
            if ((colunasInvisiveis.movimentacaoFaccaoCores).indexOf(this.dataSrc()) != -1) {
              this.visible(false);
            }
          });
        }
      } catch (error) {
        console.error(error);
        msgErro(`Não foi possível buscar os dados ${error}`);
      }
    } finally {
      $.LoadingOverlay('hide');
    };
  }

  function CriaPesquisasTela() {
    $('#txtParte').autocompleta(1, `JSON={
      "tabela": "FACCAO",
      "camposSelect": ["TIPO_APL.CODIGO CHAVE", "TIPO_APL.DESCRICAO"],
      "innerJoin": [{ "tabela": "TIPO_APL", "condicao": "FACCAO.PARTE = TIPO_APL.CODIGO" }],
      "where": ["FACCAO.NUMERO = '${$('#txtNumeroOrdem').val()}'"],
      "groupBy": ["TIPO_APL.CODIGO", "TIPO_APL.DESCRICAO"]
    }`);

    $('#btn-Parte').pesquisa_serverside(['#txtParte'], ['TIPO_APL.CODIGO'], ['TIPO_APL.DESCRICAO'], `{
      "tabela":"FACCAO",
      "camposSelect": ["TIPO_APL.CODIGO", "TIPO_APL.DESCRICAO"],
      "innerJoin": [{"tabela": "TIPO_APL", "condicao": "FACCAO.PARTE = TIPO_APL.CODIGO" }],
      "where": ["FACCAO.NUMERO = '${$('#txtNumeroOrdem').val()}'"],
      "groupBy": ["TIPO_APL.CODIGO", "TIPO_APL.DESCRICAO"]
    }`, 'Pesquisa Parte');

    $('#btn-limpa-Parte').on('click', function () {
      $('#txtParte').val('');
      $('#txtSetor').val('');
      $('#txtProximoSetor').val('');
    });

    $('#txtEmpresaDestino').autocompleta(1, `JSON={
      "tabela": "ENTIDADE",
      "camposSelect": ["ENTIDADE.CODCLI CHAVE", "ENTIDADE.NOME DESCRICAO"],
      "where": ["ENTIDADE.TIPO_ENTIDADE LIKE '[PERCENTUAL]T[PERCENTUAL]'"]
    }`);

    $('#btn-EmpresaDestino').pesquisa_serverside(['#txtEmpresaDestino'], ['ENTIDADE.CODCLI'], ['ENTIDADE.NOME'], `{
      "tabela": "ENTIDADE",
      "camposSelect": ["ENTIDADE.CODCLI", "ENTIDADE.NOME"],
      "where": ["ENTIDADE.TIPO_ENTIDADE LIKE '[PERCENTUAL]T[PERCENTUAL]'"]
    }`, 'Pesquisa Entidade');

    $('#btn-limpa-EmpresaDestino').on('click', function () {
      $('#txtEmpresaDestino').val('');
    });

    $('#txtCelulaDestino').autocompleta(1, `JSON={
      "tabela": "CELULA",
      "camposSelect": ["CELULA.CODIGO CHAVE", "CELULA.DESCRICAO"],
      "where": null
    }`);

    $('#btn-CelulaDestino').pesquisa_serverside(['#txtCelulaDestino'], ['CELULA.CODIGO'], ['CELULA.DESCRICAO'], `{
      "tabela": "CELULA",
      "camposSelect": ["CELULA.CODIGO", "CELULA.DESCRICAO"],
      "where": null
    }`, 'Pesquisa Celula');

    $('#btn-limpa-CelulaDestino').on('click', function () {
      $('#txtCelulaDestino').val('');
    });

    $('#txtParte').on("focusout", function () {
      $('#txtSetor').unbind('autocompleta');
      $('#btn-Setor').unbind('pesquisa_serverside');

      if ($(this).val() == '') {
        $('#txtSetor').val('');
        $('#txtProximoSetor').val('');
      } else {
        $('#txtSetor').autocompleta(1, `JSON={ 
          "tabela": "FACCAO", 
          "camposSelect": ["FACCAO.OP CHAVE", "CADFLUXO.DESCRICAO"],
          "leftJoin": [
            {"tabela": "CADFLUXO", "condicao": "CADFLUXO.CODIGO = FACCAO.OP"},
            {"tabela": "FAC_SETOR", "condicao": "FAC_SETOR.SETOR = FACCAO.OP AND FAC_SETOR.NUMERO = FACCAO.NUMERO AND FAC_SETOR.PARTE = FACCAO.PARTE"}
          ], 
          "where": [
            "FACCAO.NUMERO = '${$('#txtNumeroOrdem').val()}'",
            "FACCAO.PARTE = '${pegaChave(this)}'",
            "(FACCAO.QT_ORIG > (FACCAO.QUANT [SOMA] FACCAO.QUANT_I [SOMA] FACCAO.QUANT_2 [SOMA] FACCAO.QUANT_F))"
          ],
          "groupBy": ["FACCAO.OP", "CADFLUXO.DESCRICAO"]
        }`);

        $('#btn-Setor').pesquisa_serverside(['#txtSetor'], ['FACCAO.OP'], ['CADFLUXO.DESCRICAO'], `{
          "tabela": "FACCAO", 
          "camposSelect": ["FACCAO.OP", "CADFLUXO.DESCRICAO", "FAC_SETOR.ORDEM"],
          "leftJoin": [
            {"tabela": "CADFLUXO", "condicao": "CADFLUXO.CODIGO = FACCAO.OP"},
            {"tabela": "FAC_SETOR", "condicao": "FAC_SETOR.SETOR = FACCAO.OP AND FAC_SETOR.NUMERO = FACCAO.NUMERO AND FAC_SETOR.PARTE = FACCAO.PARTE"}
          ], 
          "where": [
            "FACCAO.NUMERO = '${$('#txtNumeroOrdem').val()}'",
            "FACCAO.PARTE = '${pegaChave(this)}'",
            "(FACCAO.QT_ORIG > (FACCAO.QUANT + FACCAO.QUANT_I + FACCAO.QUANT_2 + FACCAO.QUANT_F))"
          ],
          "groupBy": ["FACCAO.OP", "CADFLUXO.DESCRICAO", "FAC_SETOR.ORDEM"],
          "orderBy": ["FAC_SETOR.ORDEM"]
        }`, 'Pesquisa Setor');
      }
    });

    $('#btn-limpa-Setor').on('click', function () {
      $('#txtSetor').val('');
    });

    $('#txtSetor').on("focusout", async function () {
      $('#txtProximoSetor').unbind('autocompleta');
      $('#btn-Setor').unbind('pesquisa');

      const setor = pegaChave(this);
      const parte = pegaChave('#txtParte');

      if ((setor != '') && (parte != '')) {
        await buscaMovimento(setor, parte);
        await consultaEmpresa(setor, parte, $('#cbMovimento').val());
        await validaUltimoSetor(setor, parte);
      }

      if (setor != '') {
        await validaCamposFuncionario(setor);
      }

      if ($(this).val() == '') {
        $('#txtProximoSetor').val('');
      } else {
        $('#txtProximoSetor').autocompleta(1, `JSON={ 
          "tabela": "FAC_SETOR", 
          "camposSelect": ["FAC_SETOR.SETOR CHAVE", "CADFLUXO.DESCRICAO"],
          "innerJoin": [{"tabela": "CADFLUXO", "condicao": "CADFLUXO.CODIGO = FAC_SETOR.SETOR"}], 
          "where": [
            "FAC_SETOR.NUMERO = '${$('#txtNumeroOrdem').val()}'",
            "FAC_SETOR.PARTE = '${pegaChave('#txtParte')}'",
            "FAC_SETOR.ORDEM_ORIG > (SELECT MAX(FACSETOR.ORDEM_ORIG) FROM [FAC_SETOR] FACSETOR WHERE FACSETOR.NUMERO = '${$('#txtNumeroOrdem').val()}' AND FACSETOR.PARTE = '${pegaChave('#txtParte')}' AND FACSETOR.SETOR = '${pegaChave(this)}')"
          ],
          "groupBy": ["FAC_SETOR.SETOR", "CADFLUXO.DESCRICAO", "FAC_SETOR.ORDEM_ORIG"],
          "orderBy": ["FAC_SETOR.ORDEM_ORIG DESC"],
          "limit": 1 
        }`);

        $("#btn-ProximoSetor").pesquisa(
          "#txtProximoSetor",
          "SETOR",
          "DESCRICAO",
          `/sisplan/funcoes/v1/pesquisa?JSON={
            "tabela": "FAC_SETOR", 
            "camposSelect": ["FAC_SETOR.SETOR", "CADFLUXO.DESCRICAO"],
            "innerJoin": [{"tabela": "CADFLUXO", "condicao": "CADFLUXO.CODIGO = FAC_SETOR.SETOR"}], 
            "where": [
              "FAC_SETOR.NUMERO = '${$('#txtNumeroOrdem').val()}'",
              "FAC_SETOR.PARTE = '${pegaChave('#txtParte')}'",
              "FAC_SETOR.ORDEM_ORIG > (SELECT MAX(FACSETOR.ORDEM_ORIG) FROM [FAC_SETOR] FACSETOR WHERE FACSETOR.NUMERO = '${$('#txtNumeroOrdem').val()}' AND FACSETOR.PARTE = '${pegaChave('#txtParte')}' AND FACSETOR.SETOR = '${pegaChave(this)}')"
            ],
            "groupBy": ["FAC_SETOR.SETOR", "CADFLUXO.DESCRICAO", "FAC_SETOR.ORDEM_ORIG"],
            "orderBy": ["FAC_SETOR.ORDEM_ORIG"],
            "limit": 1 
          }`,
          "Pesquisa Setor",
          "setor"
        );
      }
    });

    $('#btn-limpa-ProximoSetor').on('click', function () {
      $('#txtProximoSetor').val('');
    });

    $('#txtQualidade').autocompleta(1, `JSON={
      "tabela": "TABQUL",
      "camposSelect": ["TABQUL.CODIGO CHAVE", "TABQUL.DESCRICAO"],
      "where": null
    }`);

    $('#btn-Qualidade').pesquisa_serverside(['#txtQualidade'], ['TABQUL.CODIGO'], ['TABQUL.DESCRICAO'], `{
      "tabela": "TABQUL",
      "camposSelect": ["TABQUL.CODIGO", "TABQUL.DESCRICAO"],
      "where": null
    }`, 'Pesquisa Qualidade');

    $('#btn-limpa-Qualidade').on('click', function () {
      $('#txtQualidade').val('');
    });

    $('#txtTipoBaixa').autocompleta(1, `JSON={
      "tabela": "TABBAI",
      "camposSelect": ["TABBAI.CODIGO CHAVE", "TABBAI.DESCRICAO"],
      "where": null
    }`);

    $('#btn-TipoBaixa').pesquisa_serverside(['#txtTipoBaixa'], ['TABBAI.CODIGO'], ['TABBAI.DESCRICAO'], `{
      "tabela": "TABBAI",
      "camposSelect": ["TABBAI.CODIGO", "TABBAI.DESCRICAO"],
      "where": null
    }`, 'Pesquisa Tipo de Baixa');

    $('#btn-limpa-TipoBaixa').on('click', function () {
      $('#txtTipoBaixa').val('');
    });

    $('#txtDeposito').autocompleta(1, `JSON={
      "tabela": "DEPOSITO",
      "camposSelect": ["DEPOSITO.CODIGO CHAVE", "DEPOSITO.DESCRICAO"],
      "where": null
    }`);

    $('#btn-Deposito').pesquisa_serverside(['#txtDeposito'], ['DEPOSITO.CODIGO'], ['DEPOSITO.DESCRICAO'], `{
      "tabela": "DEPOSITO",
      "camposSelect": ["DEPOSITO.CODIGO", "DEPOSITO.DESCRICAO"],
      "where": null
    }`, 'Pesquisa Depósito');

    $('#btn-limpa-Deposito').on('click', function () {
      $('#txtDeposito').val('');
    });

    $('#txtTipoBaixaConsumo').autocompleta(1, `JSON={
      "tabela": "TABBAI",
      "camposSelect": ["TABBAI.CODIGO CHAVE", "TABBAI.DESCRICAO"],
      "where": null
    }`);

    $('#btn-TipoBaixaConsumo').pesquisa_serverside(['#txtTipoBaixaConsumo'], ['TABBAI.CODIGO'], ['TABBAI.DESCRICAO'], `{
      "tabela": "TABBAI",
      "camposSelect": ["TABBAI.CODIGO", "TABBAI.DESCRICAO"],
      "where": null
    }`, 'Pesquisa Tipo de Baixa');

    $('#btn-limpa-TipoBaixaConsumo').on('click', function () {
      $('#txtTipoBaixaConsumo').val('');
    });

    $('#txtDepositoConsumo').autocompleta(1, `JSON={
      "tabela": "DEPOSITO",
      "camposSelect": ["DEPOSITO.CODIGO CHAVE", "DEPOSITO.DESCRICAO"],
      "where": null
    }`);

    $('#btn-DepositoConsumo').pesquisa_serverside(['#txtDepositoConsumo'], ['DEPOSITO.CODIGO'], ['DEPOSITO.DESCRICAO'], `{
      "tabela": "DEPOSITO",
      "camposSelect": ["DEPOSITO.CODIGO", "DEPOSITO.DESCRICAO"],
      "where": null
    }`, 'Pesquisa Depósito');

    $('#btn-limpa-DepositoConsumo').on('click', function () {
      $('#txtDepositoConsumo').val('');
    });

    $('#txtFuncionario').autocompleta(1, `JSON={
      "tabela": "PESSOAL",
      "camposSelect": ["PESSOAL.CODIGO CHAVE", "PESSOAL.NOME DESCRICAO"],
      "where": null
    }`);

    $('#btn-Funcionario').pesquisa_serverside(['#txtFuncionario'], ['PESSOAL.CODIGO'], ['PESSOAL.NOME'], `{
      "tabela": "PESSOAL",
      "camposSelect": ["PESSOAL.CODIGO", "PESSOAL.NOME"],
      "where": null
    }`, 'Pesquisa Funcionário');

    $('#btn-limpa-Funcionario').on('click', function () {
      $('#txtFuncionario').val('');
    });

    $('#txtMotivo').autocompleta(1, `JSON={
      "tabela": "MENSAGEM",
      "camposSelect": ["MENSAGEM.CODMEN CHAVE", "MENSAGEM.DESCRICAO"],
      "where": null
    }`);

    $('#btn-Motivo').pesquisa_serverside(['#txtMotivo'], ['MENSAGEM.CODMEN'], ['MENSAGEM.DESCRICAO'], `{
      "tabela": "MENSAGEM",
      "camposSelect": ["MENSAGEM.CODMEN", "MENSAGEM.DESCRICAO"],
      "where": null
    }`, 'Pesquisa Motivo');

    $('#btn-limpa-Motivo').on('click', function () {
      $('#txtMotivo').val('');
    });
  }

  async function buscaCores(cores) {
    $.LoadingOverlay("show");
    try {
      if ($.fn.DataTable.isDataTable('#tabelaCores')) {
        $('#tabelaCores').DataTable().destroy();
        $('#tabelaCores').empty();
      }

      if (cores.length == 0) {
        msgAlerta('Não foi possivel buscar as cores da ordem de produção.');
        return;
      }

      const colunasItens = cores.length > 0 ? Object.entries(cores[0]).map(item => ({
        title: item[0],
        data: item[0]
      })) : [];

      $('#tabelaCores').DataTable({
        search: false,
        filter: false,
        order: [],
        sort: true,
        destroy: true,
        "language": {
          "sEmptyTable": "Nenhum registro encontrado",
          "sInfo": "_TOTAL_ registros",
          "sInfoEmpty": " 0 registros",
          "sInfoFiltered": "(Filtrados de _MAX_ registros)",
          "sInfoPostFix": "",
          "sInfoThousands": ".",
          "sLengthMenu": "_MENU_ resultados",
          "sLoadingRecords": "Carregando...",
          "sProcessing": "Processando...",
          "sZeroRecords": "Nenhum registro encontrado",
          "sSearch": "Pesquisar",
          "oPaginate": {
            "sNext": "Próximo",
            "sPrevious": "Anterior",
            "sFirst": "Primeiro",
            "sLast": "Último"
          },
          "oAria": {
            "sSortAscending": ": Ordenar colunas de forma ascendente",
            "sSortDescending": ": Ordenar colunas de forma descendente"
          }
        },

        "autoWidth": true,
        "data": cores,
        "columns": colunasItens,
        autoWidth: true,
        "colReorder": true
      });

      const colunasInvisiveis = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'));
      $('#tabelaCores_length').prepend('<button class="buttonColVis" id="buttonColVis"><i class="fas fa-cogs"></i></button>');
      $('#tabelaCores_length').prepend('<button class="buttonExcel" id="buttonExcel"><i class="fas fa-file-excel"></i></button>');

      $('#buttonColVis').prop('title', 'Configurar colunas visíveis')
      $('#buttonExcel').prop('title', 'Exportar')

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

      $('#buttonExcel').on('click', async function () {
        const filtros = `NUMERO=${Numero}&PENDENTE=N`;
        const url = `/buscaordemproducao?`;

        await exportaCSV(url, filtros, false, null, 'Cores da ordem de produção', '#tabelaCores');
      })

      $('#tabelaCores').DataTable().columns().every(function () {
        if ((colunasInvisiveis.movimentacaoFaccaoCores).indexOf(this.dataSrc()) != -1) {
          this.visible(false);
        }
      });
    } catch (error) {
      console.log(error)
    } finally {
      $.LoadingOverlay('hide');
    }
  }

  $('#modal-ColunasVisiveis').on('show.bs.modal', function () {
    const cols = [];

    let colunasInvisiveis = JSON.parse(localStorage.getItem('colunasInvisiveisRelatorios'))

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

    adicionaColunas(cols, colunasInvisiveis.movimentacaoFaccaoCores ?? ['EMPRESA']);
  })

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

      const novasColunas = retornaNovasColunasInvisiveis();

      localStorage.setItem('colunasInvisiveisRelatorios', JSON.stringify({ ...colunas, movimentacaoFaccaoCores: novasColunas }))

      $('#tabelaCores').DataTable().columns().visible(true);

      $('#tabelaCores').DataTable().columns().every(function () {
        if ((novasColunas).indexOf(this.dataSrc()) != -1) {
          this.visible(false);
        }
      })

    } finally {
      $.LoadingOverlay('hide');
      $('#modal-ColunasVisiveis').modal('hide');
    }
  })

  $('#cbMovimento').on('change', async function () {
    const setor = pegaChave('#txtSetor');
    const parte = pegaChave('#txtParte');
    if ((setor != '') && (parte != '')) {
      await consultaEmpresa(setor, parte, $('#cbMovimento').val());
    }
  });

  $('#modal-baixa-consumo').on('show.bs.modal', async function () {
    await buscaDeposito('txtDepositoConsumo');
    await buscaTipoBaixa('txtTipoBaixaConsumo');
  });

  $('#btnConfirmarConsumos').on('click', async function () {
    $('#modal-baixa-consumo').modal('hide');
  });

  async function buscaMovimento(setor, parte) {
    try {
      $.LoadingOverlay('show');
      try {
        const params = `NUMERO=${$('#txtNumeroOrdemMov').val()}&SETOR=${setor}&PARTE=${parte}`;
        const response = await requisicao('GET', '/buscamovimentofaccao?', params, undefined, 120000);

        if (!response) {
          return;
        }

        let jsonStr = await response.json();
        jsonStr = jsonStr.resultado;

        let componente = $('#cbMovimento');
        componente.empty();

        jsonStr.forEach(parte => {
          componente.append($('<option>', {
            value: parte.movimento,
            text: parte.movimento
          }))
        })
      } catch (error) {
        console.error(error);
        msgErro(`Não foi possível buscar os movimentos do setor ${error}`);
      }
    } finally {
      $.LoadingOverlay('hide');
    };
  }

  async function consultaEmpresa(setor, parte, movimento) {
    try {
      $.LoadingOverlay('show');
      try {
        const dadosSelect = {
          tabela: 'FACCAO',
          camposSelect: ['FACCAO.CODCLI', 'ENTIDADE.NOME'],
          leftJoin: [{ tabela: 'ENTIDADE', condicao: 'ENTIDADE.CODCLI = FACCAO.CODCLI' }],
          where: [`FACCAO.NUMERO = '${$('#txtNumeroOrdemMov').val()}' AND FACCAO.OP = '${setor}' AND FACCAO.PARTE = '${parte}' AND FACCAO.MOV = '${movimento}'`],
          groupBy: ['FACCAO.CODCLI', 'ENTIDADE.NOME']
        };

        const retornoSelect = await retornaJsonPesquisaPadrao(JSON.stringify(dadosSelect));

        if (!retornoSelect) {
          msgAlerta('Não foi possível buscar os dados da empresa.');
          return;
        }

        insereValor('#txtEmpresa', retornoSelect[0].CODCLI, retornoSelect[0].NOME);
        insereValor('#txtEmpresaDestino', retornoSelect[0].CODCLI, retornoSelect[0].NOME);
      } catch (error) {
        console.error(error);
        msgErro(`Não foi possível buscar a empresa ${error}`);
      }
    } finally {
      $.LoadingOverlay('hide');
    };
  }

  async function buscaItensMovimentacao() {
    try {
      $.LoadingOverlay('show');
      try {
        const params = `NUMERO=${$('#txtNumeroOrdemMov').val()}&SETOR=${pegaChave('#txtSetor')}&PARTE=${pegaChave('#txtParte')}&MOVIMENTO=${$('#cbMovimento').val()}&CODCLI=${pegaChave('#txtEmpresa')}&NAO_ZERAR=N&BPENDENTE=true&BSETORANTERIOR=true`;
        const response = await requisicao('GET', '/buscaitensmovfaccao?', params, undefined, 120000);

        if (!response) {
          return;
        }

        let jsonStr = await response.json();
        if (!jsonStr.resultado) {
          msgAlerta('Não foi possível buscar os itens. Verifique se o setor a ser movimentado ainda está pendente.');
          return;
        }
        jsonStr = jsonStr.resultado[0];

        if ($.fn.DataTable.isDataTable('#tabelaItens')) {
          $('#tabelaItens').DataTable().destroy();
          $('#tabelaItens').empty();
        };

        const titulos = [
          { title: "Codigo", data: "CODIGO" },
          { title: "Cor", data: "COR" },
          { title: "Desc. Cor", data: "DESC_COR" },
          { title: "Tam", data: "TAM" },
          { title: "Orig.", data: "QUANT_ORIG" },
          { title: "Saldo", data: "SALDO" },
          { title: "Quant.", data: "QUANT" },
          { title: "Segunda", data: "QUANT_SEGUNDA" },
          { title: "Incomp.", data: "QUANT_INCOMPLETA" },
          { title: "Perdida", data: "QUANT_PERDIDA" },
          { title: "Identificador", data: "IDENTIFICADOR" }
        ];

        const codigo = jsonStr.codigo;
        let jsonObject;

        let i = 0;
        jsonObject = jsonStr.gradeCores.reduce(function (result, gradeCor) {
          let tamanhosRenomeados = extrairRenomearTamanhos(gradeCor.tamanhos);
          tamanhosRenomeados.forEach(function (tamanhoRenomeado, index) {
            result.push({
              CODIGO: codigo,
              COR: gradeCor.cor,
              DESC_COR: gradeCor.descricao,
              TAM: tamanhoRenomeado.TAM,
              QUANT_ORIG: tamanhoRenomeado.QUANT_ORIG,
              SALDO: tamanhoRenomeado.SALDO,
              QUANT: `<input type="number" class="input-default focus form-control camposGrade" id="QUANT${i}" value="${tamanhoRenomeado.QUANT}">`,
              QUANT_SEGUNDA: `<input type="number" class="input-default focus form-control camposGrade" id="QUANT_SEGUNDA${i}" value="${tamanhoRenomeado.QUANT_SEGUNDA}">`,
              QUANT_PERDIDA: `<input type="number" class="input-default focus form-control camposGrade" id="QUANT_PERDIDA${i}" value="${tamanhoRenomeado.QUANT_PERDIDA}">`,
              QUANT_INCOMPLETA: `<input type="number" class="input-default focus form-control camposGrade" id="QUANT_INCOMPLETA${i}" value="${tamanhoRenomeado.QUANT_INCOMPLETA}">`,
              IDENTIFICADOR: tamanhoRenomeado.IDENTIFICADOR
            });
            i++;
          });
          return result;
        }, []);

        $("#tabelaItens").DataTable({
          destroy: true,
          filter: false,
          paging: false,
          language: {
            sEmptyTable: "Nenhum registro encontrado",
            sInfo: "_TOTAL_ registros",
            sInfoEmpty: " 0 registros",
            sInfoFiltered: "(Filtrados de _MAX_ registros)",
            sInfoPostFix: "",
            sInfoThousands: ".",
            sLengthMenu: "_MENU_ resultados",
            sLoadingRecords: "Carregando...",
            sProcessing: "Processando...",
            sZeroRecords: "Nenhum registro encontrado",
            sSearch: "Pesquisar",
            oPaginate: {
              sNext: "Próximo",
              sPrevious: "Anterior",
              sFirst: "Primeiro",
              sLast: "Último",
            },
            oAria: {
              sSortAscending: ": Ordenar colunas de forma ascendente",
              sSortDescending: ": Ordenar colunas de forma descendente",
            },
          },
          autoWidth: true,
          columns: titulos,
          data: jsonObject,
          columnDefs: [
            {
              targets: [10],
              visible: false,
            }
          ]
        });

        $('.camposGrade').on('focusout', function () {
          const inputValue = $(this).val();
          if (!Number.isInteger(parseFloat(inputValue))) {
            msgAlerta('Permitido apenas números inteiros!');
            $(this).val(0);
          }
        });
      } catch (error) {
        console.error(error);
        msgErro(`Não foi possível buscar os movimentos do setor ${error}`);
      }
    } finally {
      $.LoadingOverlay('hide');
    };
  }

  function extrairRenomearTamanhos(tamanhos) {
    return tamanhos.map(function (tamanho) {
      return {
        TAM: tamanho.tam,
        QUANT: tamanho.quant,
        QUANT_INCOMPLETA: tamanho.quant_I,
        QUANT_ORIG: tamanho.quant_Orig,
        QUANT_SEGUNDA: tamanho.quant_2,
        QUANT_PERDIDA: tamanho.quant_F,
        SALDO: tamanho.saldo,
        IDENTIFICADOR: tamanho.identificador
      };
    });
  }

  async function validaUltimoSetor(setor, parte) {
    const ordem = await buscaValor('FAC_SETOR', 'ORDEM', `PARTE = '${parte}' AND SETOR = '${setor}' AND NUMERO`, $('#txtNumeroOrdemMov').val());
    if (ordem.ORDEM == '99') {
      $('.ultimoSetor').removeClass('d-none');
      $('#txtProximoSetor').prop('disabled', true);
      $('#btn-ProximoSetor').prop('disabled', true);
      $('#btn-limpa-ProximoSetor').prop('disabled', true);
      $('#txtProximoSetor').prop('required', false);
      insereValor('#txtQualidade', '1', '1');
      const response = await requisicao('GET', '/buscatipobaixamovfaccao?', '', undefined, 120000);
      if (response) {
        const jsonStr = await response.json();
        insereValor('#txtTipoBaixa', jsonStr.mensagem, jsonStr.mensagem);
      }

      buscaDeposito('txtDeposito');
    } else {
      $('.ultimoSetor').addClass('d-none');
      $('#txtProximoSetor').prop('disabled', false);
      $('#btn-ProximoSetor').prop('disabled', false);
      $('#btn-limpa-ProximoSetor').prop('disabled', false);
      $('#txtProximoSetor').prop('required', true);
    }
  }

  async function validaMovimentacao() {
    const movFaccao = retornaObjeto();
    const response = await requisicao('POST', '/sisplan/movimentacaofaccao/v1/validarmovimentofaccao?', `CODUSUARIO=${getCookie('cod_usuario')}`, JSON.stringify(movFaccao), 120000);

    if (!response) {
      return;
    }

    if (response.status != 200) {
      let jsonStr = await response.json();
      throw new Error(jsonStr.mensagem.mensagem);
    }
    validaMotivo();
  }

  function retornaObjeto() {
    try {
      const movFaccao = {};
      movFaccao.CodCli = pegaChave('#txtEmpresa');
      movFaccao.Numero = $('#txtNumeroOrdem').val();
      movFaccao.Codigo = pegaChave('#txtProduto');
      movFaccao.Parte = pegaChave('#txtParte');
      movFaccao.Setor = pegaChave('#txtSetor');
      movFaccao.SetorDestino = pegaChave('#txtProximoSetor');
      movFaccao.Mov = $('#cbMovimento').val();
      movFaccao.GradeCores = retornaGradeCores();
      movFaccao.Terceiro = pegaChave('#txtEmpresaDestino');
      movFaccao.DtR = pegaValor('#txtDtRetorno');
      movFaccao.DtS = pegaValor('#txtDtProducao');
      movFaccao.Funcionario = pegaChave('#txtFuncionario');
      movFaccao.CelulaDestino = pegaChave('#txtCelulaDestino');
      movFaccao.Deposito = pegaChave('#txtDeposito');
      movFaccao.Qualidade = pegaChave('#txtQualidade');
      movFaccao.TipoBaixa = pegaChave('#txtTipoBaixa');
      movFaccao.Qualidade2 = pegaChave('#txtQualidade');
      movFaccao.Caixa = $('#txtCaixa').val();
      movFaccao.Maquina = $('#txtMaquina').val();
      movFaccao.Pedido = $('#txtPedido').val();
      movFaccao.Programacao = $('#txtProgramacao').val();
      movFaccao.Motivo = pegaChave('#txtMotivo');
      movFaccao.Observacao = $('#txtObs').val();
      return movFaccao;
    } catch (error) {
      console.log('Rotina retornaObjeto ' + error);
    }
  }

  function retornaGradeCores() {
    try {
      let MovCor = [];
      let MovTam = [];
      const maxIndex = $("#tabelaItens").DataTable().data().count() - 1;
      let retorno = {};
      let cor = '';
      $("#tabelaItens").DataTable().data().toArray().forEach((item, index) => {
        if (cor == item.COR) {
          MovTam.push(retornaTamanhos(item, index));
          retorno.Tamanhos = MovTam;
          if (maxIndex == index) {
            MovCor.push(retorno);
          }
        } else {
          if (index != 0) {
            retorno.Tamanhos = MovTam;
            MovCor.push(retorno);
          }
          retorno = {};
          MovTam = [];
          retorno.Cor = item.COR;
          retorno.Descricao = item.DESC_COR;
          MovTam.push(retornaTamanhos(item, index));
          if (maxIndex == index) {
            retorno.Tamanhos = MovTam;
            MovCor.push(retorno);
          }
        }
        cor = item.COR;
      });
      return MovCor;
    } catch (error) {
      console.log('Rotina retornaGradeCores ' + error);
    }
  }

  function retornaTamanhos(item, index) {
    const MovTam = {};
    try {
      MovTam.Tam = item.TAM;
      MovTam.Identificador = item.IDENTIFICADOR;
      MovTam.Quant = $(`#QUANT${index}`).val();
      MovTam.Quant_I = $(`#QUANT_INCOMPLETA${index}`).val();
      MovTam.Quant_Orig = item.QUANT_ORIG;
      MovTam.Quant_F = $(`#QUANT_PERDIDA${index}`).val();
      MovTam.Quant_2 = $(`#QUANT_SEGUNDA${index}`).val();
      MovTam.Saldo = item.SALDO;
      return MovTam;
    } catch (error) {
      console.log('Rotina retornaTamanhos ' + error);
    }
  }

  async function validaCamposFuncionario(setor) {
    try {
      const params = `SETOR=${setor}`
      const response = await requisicao('GET', '/usafuncionariomov?', params);

      if (!response) {
        return;
      }

      if (response.status == 200) {
        let jsonStr = await response.json();
        if (jsonStr.mensagem == 'S') {
          $('.habilitaFunc').removeClass('d-none');
        } else {
          $('.habilitaFunc').addClass('d-none');
        }
      }
    } catch (error) {
      console.log('Rotina validaCamposFuncionario ' + error)
    }
  }

  function validaMotivo() {
    try {
      let bMotivo = false;
      $("#tabelaItens").DataTable().data().toArray().some((item, index) => {
        if ((parseFloat($(`#QUANT_SEGUNDA${index}`).val()) > 0) || (parseFloat($(`#QUANT_PERDIDA${index}`).val()) > 0)) {
          bMotivo = true;
          return true;
        }
      })

      if (bMotivo) {
        $('.divMotivo').removeClass('d-none');
        let validator = $("#msform").validate();
        validator.element("#txtMotivo");
        if (!(validator.element("#txtMotivo"))) {
          msgAlerta('Necessário informar o Motivo!')
        }
      } else {
        $('.divMotivo').addClass('d-none');
      }
    } catch (error) {
      console.log('Rotina validaMotivo ' + error)
    }
  }

  async function baixaConsumoSubProduto() {
    $.LoadingOverlay('show');
    try {
      const params = `SETOR=${pegaChave('#txtSetor')}`;
      const response = await requisicao('GET', '/baixaconsumoprodutofaccao?', params);

      if (!response) {
        return;
      }

      if (response.status == 200) {
        let jsonStr = await response.json();
        if (jsonStr.mensagem == 'S') {
          const responseLancamento = await requisicao('POST', '/proximolancamentofaccao?');

          if (!responseLancamento) {
            return;
          }

          if (responseLancamento.status == 200) {
            const lancamento = await responseLancamento.json();
            if (!lancamento.mensagem) {
              throw new Error('Não foi possível gerar o próximo lançamento.');
            }
            $('#txtLancamento').val(lancamento.mensagem);
            const params = retornaObjeto();
            const responseSubProduto = await requisicao('POST', '/buscasubprodutosfaccao?', '', JSON.stringify(params));

            if (!responseSubProduto) {
              return;
            }
      
            if (responseSubProduto.status == 200) {
              let retorno = await responseSubProduto.json(); 
              retorno = retorno.resultado;
              retorno.lancamento = $('#txtLancamento').val();
              retorno.numero = $('#txtNumeroOrdemMov').val();
            }
            
            $('#modal-baixa-consumo').modal('show');
          }
        }
      }
    } catch (error) {
      console.log('Rotina baixaConsumoSubProduto ' + error)
    } finally {
      $.LoadingOverlay('hide');
    }
  }

  async function buscaDeposito(componente) {
    const responseDeposito = await requisicao('GET', '/buscadepositomovfaccao?', `NUMERO=${$('#txtNumeroOrdemMov').val()}`, undefined, 120000);
    if (responseDeposito) {
      const jsonStr = await responseDeposito.json();
      insereValor(`#${componente}`, jsonStr.mensagem, jsonStr.mensagem);
    }
  }

  async function buscaTipoBaixa(componente) {
    const responseDeposito = await requisicao('GET', '/consumotipobaixapadrao?');
    if (responseDeposito) {
      const jsonStr = await responseDeposito.json();
      insereValor(`#${componente}`, jsonStr.mensagem, jsonStr.mensagem);
    }
  }

  async function movimentaOF() {
    await baixaConsumoSubProduto();
  }
});