@RequestMapping(method = RequestMethod.POST, value = "/projet/approve")
 public String approve(@Valid @ModelAttribute("projet") Projet projet, BindingResult result) {
   if (result.hasErrors()) {
     return "projets";
   }
   // projetService.approve(projet);
   projet.computeTotalBenef();
   projetService.update(projet);
   try {
     projet.setStatus("approved");
     projetService.update(projet);
     // tdrService.computeTdb(projet.getTdr());
     tdrService.computeTdb(tdrService.getById(projet.getTdr().getId()));
     tdrService.publish(projet.getTdr());
   } catch (Exception ex) {
     // TODO better error gestion
     ex.printStackTrace();
   }
   return "redirect:list?tdrId=" + projet.getTdr().getId();
 }
 // LATER put in a separate controller for only create & update requests
 @ModelAttribute("projet")
 public Projet initProjet(
     @RequestParam(value = "id", required = false) Long projetId,
     @RequestParam(value = "tdrId", required = false) Long tdrId) {
   if (projetId != null) {
     return projetService.getById(projetId);
   } else if (tdrId != null) {
     Projet projet = new Projet();
     projet.setStatus("created");
     Tdr tdr = tdrService.getById(tdrId);
     projet.setTdr(tdr);
     return projet;
   }
   return null;
 }
  @RequestMapping("projet/list")
  public String list(
      @RequestParam(value = "tdrId", required = false) Long tdrId, Map<String, Object> map) {
    List<Projet> projets;
    Tdr tdr = null;
    if (tdrId != null && tdrId != 0) {

      tdr = tdrService.getById(tdrId);
      if (tdr != null) {
        projets = projetService.listByTdr(tdrId);
        // projets = tdr.getProjets(); // NO no session
        // projets = tdrService.getProjets(tdr);
      } else {
        throw new RuntimeException("no tdr for tdrId " + tdrId); // TODO better
      }
    } else {
      projets = projetService.list();
    }
    map.put("projets", projets);
    // map.put("projet", new Projet()); // done by initProjet()
    map.put("tdr", tdr);
    map.put("tdrId", tdrId);
    return "projets";
  }