/**
  * Save the details of a projet
  *
  * @param map
  * @param tdrId
  * @return
  */
 @RequestMapping(method = RequestMethod.POST, value = "/projet/save")
 public String save(@Valid @ModelAttribute("projet") Projet projet, BindingResult result) {
   if (result
       .hasErrors()) { // validation check, see
                       // http://www.mkyong.com/spring-mvc/spring-3-mvc-and-jsr303-valid-example/
     return "redirect:/projet/details/" + projet.getId();
   }
   projet.computeTotalBenef();
   projetService.update(projet);
   return "redirect:/projet/details/" + projet.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(method = RequestMethod.POST, value = "/projet/add")
 public String add(@Valid @ModelAttribute("projet") Projet projet, BindingResult result) {
   if (result.hasErrors()) {
     if (projet != null) {
       // result.getModel().put("projet", projet); // for form
       return "redirect:newProjet?tdrId=" + projet.getTdr().getId();
       // TODO should return "newProjet" but at next save then projet is null !?!
     }
     return "redirect:/tdr/list";
   }
   // Tdr tdr = tdrService.getById(projet.getTdr().getId());projet.setTdr(tdr); // done by
   // initProjet()
   projet.computeTotalBenef();
   projetService.create(projet);
   return "redirect:list?tdrId=" + projet.getTdr().getId();
 }
 @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();
 }