package net.conselldemallorca.helium.webapp.v3.controller;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.beans.propertyeditors.StringTrimmerEditor;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
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.ResponseBody;
import net.conselldemallorca.helium.v3.core.api.dto.EntornDto;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientTipusDto;
import net.conselldemallorca.helium.v3.core.api.dto.PaginacioParamsDto;
import net.conselldemallorca.helium.v3.core.api.dto.PermisDto;
import net.conselldemallorca.helium.v3.core.api.dto.SequenciaAnyDto;
import net.conselldemallorca.helium.v3.core.api.service.AplicacioService;
import net.conselldemallorca.helium.v3.core.api.service.DissenyService;
import net.conselldemallorca.helium.v3.core.api.service.ExpedientTipusService;
import net.conselldemallorca.helium.webapp.v3.command.ExpedientTipusCommand;
import net.conselldemallorca.helium.webapp.v3.command.ExpedientTipusCommand.Creacio;
import net.conselldemallorca.helium.webapp.v3.command.ExpedientTipusCommand.Modificacio;
import net.conselldemallorca.helium.webapp.v3.command.PermisCommand;
import net.conselldemallorca.helium.webapp.v3.helper.ConversioTipusHelper;
import net.conselldemallorca.helium.webapp.v3.helper.DatatablesHelper;
import net.conselldemallorca.helium.webapp.v3.helper.DatatablesHelper.DatatablesResponse;
import net.conselldemallorca.helium.webapp.v3.helper.MissatgesHelper;
import net.conselldemallorca.helium.webapp.v3.helper.SessionHelper;
/**
* Controlador per al manteniment de tipus d'expedient.
*
* @author Limit Tecnologies <limit@limit.es>
*/
@Controller(value = "expedientTipusControllerV3")
@RequestMapping("/v3/expedientTipus")
public class ExpedientTipusController extends BaseExpedientController {
@Autowired
private ExpedientTipusService expedientTipusService;
@Autowired
private AplicacioService aplicacioService;
@Autowired
private DissenyService dissenyService;
@Autowired
private ConversioTipusHelper conversioTipusHelper;
@RequestMapping(method = RequestMethod.GET)
public String llistat(
HttpServletRequest request,
Model model) {
return "v3/expedientTipusLlistat";
}
@RequestMapping(value="/datatable", method = RequestMethod.GET)
@ResponseBody
DatatablesResponse datatable(
HttpServletRequest request,
Model model) {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
PaginacioParamsDto paginacioParams = DatatablesHelper.getPaginacioDtoFromRequest(request);
return DatatablesHelper.getDatatableResponse(
request,
null,
expedientTipusService.findPerDatatable(
entornActual.getId(),
paginacioParams.getFiltre(),
paginacioParams));
}
@RequestMapping(value = "/{expedientTipusId}", method = RequestMethod.GET)
public String info(
HttpServletRequest request,
@PathVariable Long expedientTipusId,
Model model) {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
ExpedientTipusDto expedientTipus = expedientTipusService.findAmbIdPerDissenyar(
entornActual.getId(),
expedientTipusId);
model.addAttribute("expedientTipus", expedientTipus);
if (request.getParameter("pipellaActiva") != null)
model.addAttribute("pipellaActiva", request.getParameter("pipellaActiva"));
else
model.addAttribute("pipellaActiva", "dades");
// Responsable per defecte
if (expedientTipus.getResponsableDefecteCodi() != null) {
model.addAttribute(
"responsableDefecte",
aplicacioService.findPersonaAmbCodi(
expedientTipus.getResponsableDefecteCodi()));
}
model.addAttribute(
"definicioProcesInicial",
dissenyService.findDarreraDefinicioProcesForExpedientTipus(expedientTipusId));
return "v3/expedientTipusInfo";
}
@RequestMapping(value = "/new", method = RequestMethod.GET)
public String nou(
HttpServletRequest request,
Model model) {
model.addAttribute("expedientTipusCommand", new ExpedientTipusCommand());
return "v3/expedientTipusForm";
}
@RequestMapping(value = "/new", method = RequestMethod.POST)
public String nouPost(
HttpServletRequest request,
@Validated(Creacio.class) ExpedientTipusCommand command,
BindingResult bindingResult,
Model model) {
if (bindingResult.hasErrors()) {
return "v3/expedientTipusForm";
} else {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
// Transforma els llistats d'anys i valors
List<Integer> sequenciesAny = new ArrayList<Integer>();
List<Long> sequenciesValor = new ArrayList<Long>();
for (int i = 0; i < command.getSequenciesAny().size(); i++ ){
sequenciesAny.add(Integer.parseInt(command.getSequenciesAny().get(i)));
sequenciesValor.add(Long.parseLong(command.getSequenciesValor().get(i)));
}
expedientTipusService.create(
entornActual.getId(),
conversioTipusHelper.convertir(
command,
ExpedientTipusDto.class),
sequenciesAny,
sequenciesValor);
return getModalControllerReturnValueSuccess(
request,
"redirect:/v3/expedientTipus",
"expedient.tipus.controller.creat");
}
}
@RequestMapping(value = "/{id}/update", method = RequestMethod.GET)
public String modificar(
HttpServletRequest request,
@PathVariable Long id,
Model model) {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
ExpedientTipusDto dto = expedientTipusService.findAmbIdPerDissenyar(
entornActual.getId(),
id);
ExpedientTipusCommand command = conversioTipusHelper.convertir(
dto,
ExpedientTipusCommand.class);
for (Integer key: dto.getSequenciaAny().keySet()) {
SequenciaAnyDto any = dto.getSequenciaAny().get(key);
command.getSequenciesAny().add(any.getAny().toString());
command.getSequenciesValor().add(any.getSequencia().toString());
}
model.addAttribute("expedientTipusCommand", command);
return "v3/expedientTipusForm";
}
@RequestMapping(value = "/{id}/update", method = RequestMethod.POST)
public String modificarPost(
HttpServletRequest request,
@PathVariable Long id,
@Validated(Modificacio.class) ExpedientTipusCommand command,
BindingResult bindingResult,
Model model) {
if (bindingResult.hasErrors()) {
return "v3/expedientTipusForm";
} else {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
// Transforma els llistats d'anys i valors
List<Integer> sequenciesAny = new ArrayList<Integer>();
List<Long> sequenciesValor = new ArrayList<Long>();
for (int i = 0; i < command.getSequenciesAny().size(); i++ ){
sequenciesAny.add(Integer.parseInt(command.getSequenciesAny().get(i)));
sequenciesValor.add(Long.parseLong(command.getSequenciesValor().get(i)));
}
expedientTipusService.update(
entornActual.getId(),
conversioTipusHelper.convertir(
command,
ExpedientTipusDto.class),
sequenciesAny,
sequenciesValor);
return getModalControllerReturnValueSuccess(
request,
"redirect:/v3/expedientTipus",
"expedient.tipus.controller.modificat");
}
}
@RequestMapping(value = "/{id}/delete", method = RequestMethod.GET)
public String delete(
HttpServletRequest request,
@PathVariable Long id,
Model model) {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
if (!expedientService.existsExpedientAmbEntornTipusITitol(
entornActual.getId(),
id,
null)) {
expedientTipusService.delete(
entornActual.getId(),
id);
MissatgesHelper.success(
request,
getMessage(
request,
"expedient.tipus.controller.eliminat"));
} else {
MissatgesHelper.error(
request,
getMessage(
request,
"expedient.tipus.controller.eliminar.expedients.relacionats"));
}
return "redirect:/v3/expedientTipus";
}
@RequestMapping(value = "/{id}/permis", method = RequestMethod.GET)
public String permisGet(
HttpServletRequest request,
@PathVariable Long id,
Model model) {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
model.addAttribute(
"expedientTipus",
expedientTipusService.findAmbIdPerDissenyar(
entornActual.getId(),
id));
return "v3/expedientTipusPermis";
}
@RequestMapping(value = "/{id}/permis/new", method = RequestMethod.GET)
public String permisNewGet(
HttpServletRequest request,
@PathVariable Long id,
Model model) {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
model.addAttribute(
"expedientTipus",
expedientTipusService.findAmbIdPerDissenyar(
entornActual.getId(),
id));
model.addAttribute(new PermisCommand());
return "v3/expedientTipusPermisForm";
}
@RequestMapping(value = "/{id}/permis/new", method = RequestMethod.POST)
public String permisNewPost(
HttpServletRequest request,
@PathVariable Long id,
@Valid PermisCommand command,
BindingResult bindingResult,
Model model) {
return permisUpdatePost(
request,
id,
null,
command,
bindingResult,
model);
}
@RequestMapping(value = "/{id}/permis/{permisId}", method = RequestMethod.GET)
public String permisUpdateGet(
HttpServletRequest request,
@PathVariable Long id,
@PathVariable Long permisId,
Model model) {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
model.addAttribute(
"expedientTipus",
expedientTipusService.findAmbIdPerDissenyar(
entornActual.getId(),
id));
PermisDto permis = expedientTipusService.permisFindById(
entornActual.getId(),
id,
permisId);
model.addAttribute(
conversioTipusHelper.convertir(
permis,
PermisCommand.class));
return "v3/expedientTipusPermisForm";
}
@RequestMapping(value = "/{id}/permis/{permisId}", method = RequestMethod.POST)
public String permisUpdatePost(
HttpServletRequest request,
@PathVariable Long id,
@PathVariable Long permisId,
@Valid PermisCommand command,
BindingResult bindingResult,
Model model) {
if (bindingResult.hasErrors()) {
return "v3/expedientTipusPermisForm";
} else {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
expedientTipusService.permisUpdate(
entornActual.getId(),
id,
conversioTipusHelper.convertir(
command,
PermisDto.class));
return getModalControllerReturnValueSuccess(
request,
"redirect:/v3/expedientTipus/" + id + "/permis",
"expedient.tipus.controller.permis.actualitzat");
}
}
@RequestMapping(value = "/{id}/permis/{permisId}/delete")
public String permisDelete(
HttpServletRequest request,
@PathVariable Long id,
@PathVariable Long permisId,
Model model) {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
expedientTipusService.permisDelete(
entornActual.getId(),
id,
permisId);
model.addAttribute(
"expedientTipus",
expedientTipusService.findAmbIdPerDissenyar(
entornActual.getId(),
id));
model.addAttribute(new PermisCommand());
return "redirect:/v3/expedientTipus/" + id + "/permis";
}
@RequestMapping(value = "/{id}/permis/datatable", method = RequestMethod.GET)
@ResponseBody
DatatablesResponse permisDatatable(
HttpServletRequest request,
@PathVariable Long id,
Model model) {
EntornDto entornActual = SessionHelper.getSessionManager(request).getEntornActual();
return DatatablesHelper.getDatatableResponse(
request,
null,
expedientTipusService.permisFindAll(
entornActual.getId(),
id));
}
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(String.class, new StringTrimmerEditor(true));
SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, true));
}
}