@RequestMapping("/determinaQuantidade")
  @ResponseBody
  public String determinaQuantidade(Integer idProdutoGrupo, Integer idGrupo) {

    ProdutoGrupo produto = manager.getReference(ProdutoGrupo.class, idProdutoGrupo);
    Grupo grupo = manager.getReference(Grupo.class, idGrupo);
    DeterminaQuantidades d = produtoGrupoDAO.determinaQuant(idGrupo);
    DeterQuantpadrao detPad = produtoGrupoDAO.deterQuantPadrao(idGrupo);

    DetalhesItemProducao detalhes = new DetalhesItemProducao();

    BigDecimal[] valores = pegaValores(produto.getIdProdutoGrupo(), grupo.getIdgrupo());
    // valores [0] = t - valorUnit;
    // valores [1] = p - preco;
    // valores [2] = q - quantDeter Bigdecimal;
    // valores [3] = d - Diaria Bigdecimal;

    double quantDeter = valores[2].doubleValue();
    double diarias = valores[3].doubleValue();

    double quantDiaria = quantDeter * diarias;

    if (d == null) {

      if (detPad == null) {
        novoDeterminaQuant(produto, grupo);
      } else {
        manager.remove(detPad);
        novoDeterminaQuant(produto, grupo);
      }

    } else {
      d.setProdutoGrupo(produto);
      d.setValorUnit(valores[0]);
      d.setPrecoTotal(valores[1]);
      d.setQuantDeterm(quantDeter);
      d.setDiarias(diarias);

      manager.merge(d);
    }

    String quant = valores[2].toString();
    String quantDia = String.valueOf(quantDiaria);

    String precs = valores[1].toString();
    precs = util.ConverteDolarParaReal(precs);

    String tots = valores[0].toString();
    tots = util.ConverteDolarParaReal(tots);

    detalhes.setDeterminaQuant(quantDia);
    detalhes.setPrecoTotal(precs);
    detalhes.setValorUnit(tots);

    Gson gson = new Gson();
    return gson.toJson(detalhes);
  }
  @RequestMapping("/atualizaCarta")
  public String atualizaCarta(
      CartaContratacao carta, Integer idFornecedor, Integer idLista, Integer idProdutoGrupo) {

    ArrayList<String> data = new ArrayList<String>();
    data = utilDatas.dataHojeFormatada();

    String dataHoje = "São Paulo, " + data.get(0) + " de " + data.get(1) + " de " + data.get(2);

    carta.setDataCabecalho(dataHoje);
    carta.setGerarCarta(true);
    carta.setAtualizacao(Calendar.getInstance());

    Usuario u = util.retornaUsuarioLogado();
    String usuario = u.getNome();
    carta.setUsuario(usuario);

    if (carta.getIdCarta() == null) {
      manager.persist(carta);
    } else {
      manager.detach(carta);
      manager.merge(carta);
    }

    return "redirect:itemListaAjax?idFornecedor="
        + idFornecedor
        + "&idLista="
        + idLista
        + "&idProdutoGrupo="
        + idProdutoGrupo;
  }
  @RequestMapping("/calculaDiferencaOutroFornecedor")
  @ResponseBody
  public String calculaDiferencaOutroFornecedor(String diferenca, String impostoOutroFornecedor) {

    BigDecimal divide = new BigDecimal("100");
    BigDecimal divide2 = new BigDecimal(impostoOutroFornecedor);
    BigDecimal B = divide2.divide(divide);

    BigDecimal valorDiferenca = new BigDecimal(util.formataValores(diferenca));
    BigDecimal Y = valorDiferenca.multiply(B);

    ProducaoValoresGJson valoresGJon = new ProducaoValoresGJson();
    valoresGJon.setValorPagamentoMesmoFornecedor(util.ConverteDolarParaReal(Y.toString()));
    Gson gson = new Gson();

    return gson.toJson(valoresGJon);
  }
  @RequestMapping("/calculaDiferencaFornecedor")
  @ResponseBody
  public String calculaDiferencaFornecedor(
      String itemValor, String contratacaoValor, String impostoMesmoFornecedor) {

    BigDecimal divide = new BigDecimal("100");
    BigDecimal divide2 = new BigDecimal(impostoMesmoFornecedor);
    BigDecimal B = divide2.divide(divide);

    BigDecimal valorItem = new BigDecimal(util.formataValores(itemValor));
    BigDecimal valorContratacao = new BigDecimal(util.formataValores(contratacaoValor));

    BigDecimal A = valorItem.subtract(valorContratacao);
    BigDecimal Y = A.multiply(B);

    BigDecimal X = valorContratacao.add(Y);

    ProducaoValoresGJson valoresGJon = new ProducaoValoresGJson();
    valoresGJon.setValorPagamentoMesmoFornecedor(util.ConverteDolarParaReal(X.toString()));
    Gson gson = new Gson();

    return gson.toJson(valoresGJon);
  }
  @RequestMapping("/salvaItem")
  public String salvaItem(Producao producao, Integer idProdutoGrupo)
      throws IOException, ParseException {
    ProdutoGrupo produtog = manager.find(ProdutoGrupo.class, idProdutoGrupo);
    Lista lista = manager.getReference(Lista.class, producao.getIdLista());

    Integer parcelas = producao.getNumParcelas();

    List<ValorPgtoAux> pagamentos = new ArrayList<ValorPgtoAux>();

    for (int i = 0; i < parcelas; i++) {

      ValorPgtoAux valor = new ValorPgtoAux();

      valor.setParcela(producao.getParcela().get(i));
      valor.setPrazo(producao.getPrazo().get(i));
      valor.setData(util.formataDatasStringParaCalendar(producao.getData().get(i) + " 08:00"));
      BigDecimal valorItem = util.valoresEmReais(producao.getValor().get(i));
      valor.setValor(valorItem);

      pagamentos.add(valor);
    }

    Empresa fornecedor = manager.getReference(Empresa.class, producao.getIdEmpresaTransiente());
    Usuario usuario = manager.getReference(Usuario.class, producao.getIdUsuario());
    LocalEvento localEvento = localEventoDAO.ultimoLocalEvento(lista.getIdJob().getIdJob());
    ProdutoGrupo produtoGrupo = manager.getReference(ProdutoGrupo.class, idProdutoGrupo);

    producao.setLista(lista);
    producao.setUsuario(usuario);
    producao.setIdEmpFornecedor(fornecedor);
    producao.setDataConsolidado(Calendar.getInstance());
    producao.setResponsavelContratacao(usuario.getNome());
    producao.setStatusProducao(StatusProducao.CONSOLIDADO);

    producao.setPrazoEntrega(
        utilDatas.formataDatasStringParaCalendar(producao.getpEntrega() + " " + "08:00"));

    if (localEvento == null) {
      producao.setPrazoPagamento(Calendar.getInstance().getTime());
    } else {
      Date cs = localEvento.getLocalEventoDataTermino();
      producao.setPrazoPagamento(
          utilDatas.SomaDias(
              cs, producao.getPrazo().get(0))); // Soma Termino do Evento + Dias para pagamento.
    }

    producao.setProdutoGrupo(produtoGrupo);
    producao.setValorItem(util.valoresEmReais(producao.getItemValor1()));
    producao.setValorContratacao(util.valoresEmReais(producao.getContratacaoValor1()));

    producao.setDiferenca(util.valoresEmReais(producao.getDiferencaValor1()));
    producao.setStatus(true);

    if (producao.getLocalEntrega().equals("localevento")) {
      if (localEvento == null) {
        producao.setReferenciaEntrega(producao.getLocalEntrega());
        producao.setLocalEntrega("Nenhum endereço cadastrado no Job");
      } else {
        producao.setReferenciaEntrega(producao.getLocalEntrega());
        producao.setLocalEntrega(localEvento.getLocalEventoEndereco());
      }
    } else {
      producao.setReferenciaEntrega(producao.getLocalEntrega());
      producao.setLocalEntrega("agencia");
    }

    /**
     * Verificar se existe mais algum item do Fornecedor
     *
     * <p>if(mais itens fornecedor === true){ fornecedorFinanceiro.setContratacao(true); }else{
     * fornecedorFinanceiro.setContratacao(false); }
     */

    // Verifica se item vai ser salvo ou atualizado

    if (producao.getIdProducao() == null) { // Será salvo
      manager.persist(producao);

    } else { // Será atualizado
      manager.detach(producao);
      manager.merge(producao);
    }

    auxDAOProducao.salvaFornecedorFinanceiro(producao, pagamentos);

    /*Contato contato = manager.getReference(Contato.class, producao.getContatoFornecedor());
    List<Comunicador> comunicador = contatoDAO.buscaUltimoComunicador(producao.getContatoFornecedor());

    if(FornecedorFinanceiro.getContratacao()  == true){
    	menuCarta.geraNovaCarta(producao, produtog,comunicador,contato);
    }else{

    }*/

    //	menuCarta.geraNovaCarta(producao, produtog,comunicador,contato);

    /**
     * Gerar carta de contratação
     *
     * <p>producao.setCartaContratacao(cartaContForn);
     */

    /*
    Contato contato = manager.getReference(Contato.class, producao.getContatoFornecedor());
    List<Comunicador> comunicador = contatoDAO.buscaUltimoComunicador(producao.getContatoFornecedor());

    if(producao.getIdProducao() == null || producao.getIdProducao().equals(null) || producao.getIdProducao().equals(" ")){
    	menuCarta.geraNovaCarta(producao, produtog,comunicador,contato);
    }else{
    	menuCarta.geraNovaCarta(producao, produtog,comunicador,contato);
    }*/

    return "redirect:itemListaAjax?idFornecedor="
        + produtog.getEmpresa().getIdEmpresa()
        + "&idLista="
        + lista.getIdLista()
        + "&idProdutoGrupo="
        + producao.getProdutoGrupo().getIdProdutoGrupo();
  }
  @RequestMapping("/salvaDetalhesItem")
  public String salvaDetalhesItem(ProdutoGrupo produtoGrupo) {

    String teste = produtoGrupo.getCustoProdutoTransiente();

    /**
     * Faz uma verificação se o valor unitário do item está zero ou nulo Se estiver preenche com o
     * valor 0,00
     */
    if (teste.equals("")) {
      produtoGrupo.setCustoProdutoTransiente("0,00");
    }

    // Teste

    String quant = produtoGrupo.getQuantidadeTransiente().replace(",", ".");
    produtoGrupo.setQuantidade(utilConv.converterStringParaDouble(quant));

    String quant2 = produtoGrupo.getQuantidade2Transiente().replace(",", ".");
    produtoGrupo.setQuantidade2(utilConv.converterStringParaDouble(quant2));

    String diaria = produtoGrupo.getDiariasTransiente().replace(",", ".");
    produtoGrupo.setDiarias(utilConv.converterStringParaDouble(diaria));

    // Fim Teste

    BigDecimal zero = new BigDecimal(0);

    Empresa empresa = manager.find(Empresa.class, produtoGrupo.getIdEmpresaTransiente());
    Produto produto = manager.find(Produto.class, produtoGrupo.getIdprodutoTransiente());
    Grupo grupo = manager.find(Grupo.class, produtoGrupo.getIdGrupoTransiente());
    Lista lista = manager.find(Lista.class, grupo.getIdLista().getIdLista());

    Usuario usuario = util.retornaUsuarioLogado();
    produtoGrupo.setUsuario(usuario);

    BigDecimal custoProduto =
        new BigDecimal(util.formataValores(produtoGrupo.getCustoProdutoTransiente()));

    if (produtoGrupo.isCustoComBvFornecedor()
        == false) { // 1 ----- Verifica se terá Custo com BV forn. incluso * Caiu em desuso ---- //
      produtoGrupo.setBvFornecedor(zero);
      produtoGrupo.setCustoComBvFornecedor(false);
      produtoGrupo.setBvFornecedorEmPorcentagem(false);
      produtoGrupo.setBvFornecedorValor(zero);
    } else {
      valoresProdutoGrupo.custoComBvFornecedorIncluso(produtoGrupo);
    }

    valoresProdutoGrupo.BvVenda(produtoGrupo, custoProduto, produtoGrupo.getIdGrupoTransiente());

    // 2 ----- Custo do produto sem impostos ou bv -------------- //
    produtoGrupo.setCustoProduto(custoProduto);
    produtoGrupo.setIdGrupo(grupo);
    produtoGrupo.setIdProduto(produto);
    produtoGrupo.setProduto(produto.getProduto());
    produtoGrupo.setAlteradoEm(Calendar.getInstance());
    produtoGrupo.setEmpresa(empresa);

    String al = Utilitaria.nomeAleatorio(12);

    produtoGrupo.setTidProdutoGrupo(al);

    manager.persist(produtoGrupo);

    // Verifica se é necessário uma quantidade Determinante nesse produto
    DeterminaQuantidades d = produtoGrupoDAO.determinaQuant(produtoGrupo.getIdGrupoTransiente());
    if (d == null) {
      novoDeterminaQuant(produtoGrupo, grupo);
    } else {
    }

    valoresEmGrupo.atualizaImpostoGrupo(
        grupo); /// ------ Setando valores no Grupo dos itens e na Lista do Grupo ------ //
    valoresNaLista.InsereValoresLista(
        grupo, lista); // / ------- Setar valores na lista --------- ///
    valoresNaLista.calculaValorLista(
        lista.getIdLista()); // / ------- Setar valores na lista --------- ///

    if (produtoGrupo.isSalvarEfechar() == true) {
      return "redirect:editaLinha?idGrupo=" + produtoGrupo.getIdGrupoTransiente();
    } else {
      return "redirect:descricaoItem?idProdutoGrupo="
          + produtoGrupo.getIdProdutoGrupo()
          + "&idGrupo="
          + produtoGrupo.getIdGrupoTransiente();
    }
  }