package com.axxx.dps.apv.web.controller;
import java.util.List;
import java.util.Map;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import com.axxx.dps.apv.model.Projet;
import com.axxx.dps.apv.model.Tdr;
import com.axxx.dps.apv.service.ProjetService;
import com.axxx.dps.apv.service.TdrService;
@Controller
public class ProjetController {
@Autowired
private ProjetService projetService;
@Autowired
private TdrService tdrService;
@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";
}
// 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();
}
/**
* 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();
}
@RequestMapping(method=RequestMethod.GET, value="projet/delete/{projetId}")
public String delete(@PathVariable("projetId") long projetId) {
projetService.delete(projetId);
return "redirect:/projet/list";
}
@RequestMapping(method=RequestMethod.GET, value="projet/details/{projetId}")
public String details(Map<String, Object> map, @PathVariable("projetId") long projetId) {
Projet projet = projetService.getById(projetId);
map.put("projet", projet);
return "projetDetails";
}
@RequestMapping(method=RequestMethod.GET, value="/projet/newProjet")
public String newProjet(@RequestParam("tdrId") long tdrId, Map<String, Object> map) {
//map.put("projet", new Projet()); // for formg tdrId, Map<String, Object> map) {
//map.put("projet", new Projet()); // for form
map.put("tdrId", tdrId);
return "newProjet";
}
@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() ;
}
}