@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("/itemListaAjax")
  public ModelAndView itemListaAjax(Integer idFornecedor, Integer idLista, Integer idProdutoGrupo)
      throws InterruptedException {

    Lista lista = manager.find(Lista.class, idLista);
    LocalEvento localEvento = localEventoDAO.ultimoLocalEvento(lista.getIdJob().getIdJob());
    ProdutoGrupo produtoGrupo = manager.find(ProdutoGrupo.class, idProdutoGrupo);

    /* ------------------------------------------------------------------------------------------- */
    // Relacionado a carta de contratação
    /**
     * É necessário verificar: Se o fornecedor tem um ou mais itens Se tiver só um item ou mais e
     * concluido(s), exibir a carta Não concluidos, não exibir
     */

    /*if(menuProducaoDAO.ConfereItemProducao(idProdutoGrupo).isEmpty()){

    }else{
    	Producao producao = manager.find(Producao.class, produtoGrupo.getProducao().getIdProducao());
    	CartaContratacao carta = manager.find(CartaContratacao.class, producao.getCartaContracao().getIdCarta());
    	MV.addObject("carta", carta);
    }*/

    /**
     * Verificar: Se tem outro fornecedor com valor de contratação Se tiver só um item ou mais desse
     * outro fornecedor e concluido(s), exibir a carta desse outro fornecedor Não concluidos, não
     * exibir
     */

    /*MV.addObject("outraCarta", outraCarta); exemplo*/

    /** Enviar carta Modelo para pegar dados estáticos */
    CartaContratacao cartaModelo = manager.find(CartaContratacao.class, 1);
    MV.addObject("outraCarta", cartaModelo);

    ArrayList<String> datas = utilDatas.dataHojeFormatada();
    MV.addObject("dataHoje", datas);

    /* ------------------------------------------------------------------------------------------- */

    MV.setViewName("menuProducao/detalhesItensProducao");

    MV.addObject(
        "fornecedor", empresaDAO.infoEmpresaProducao(produtoGrupo.getEmpresa().getIdEmpresa()));
    MV.addObject("contatoFornecedor", empresaDAO.listaContatoEmpresa(idFornecedor));
    MV.addObject("tipoPagamento", pagamentoDAO.listaTipoPagamento());
    MV.addObject("usuarios", usuarioDAO.usuariosProducao());
    MV.addObject("idLista", idLista);
    MV.addObject("idProdutoGrupo", idProdutoGrupo);
    MV.addObject("produtoGrupo", produtoGrupo);
    MV.addObject("producao", menuProducaoDAO.listaProducao(idProdutoGrupo));

    MV.addObject("InfoJobs", localEvento);
    MV.addObject("fornecedoresLista", empresaDAO.listaFornecedores());
    MV.addObject("lista", lista);

    return MV;
  }
  @RequestMapping("/calculaPrazo")
  public ModelAndView calculaPrazo(Integer diasPrazo, Integer idLista, String nameInput) {
    MV.setViewName("menuProducao/vencimentoAjax");

    Lista lista = manager.getReference(Lista.class, idLista);
    LocalEvento localEvento = localEventoDAO.ultimoLocalEvento(lista.getIdJob().getIdJob());

    Date cs = localEvento.getLocalEventoDataTermino();
    MV.addObject("dataPrazo", utilDatas.SomaDias(cs, diasPrazo));
    MV.addObject("nameInput", nameInput);

    return MV;
  }
  @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();
  }