/** * */ package net.conselldemallorca.helium.webapp.mvc; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import javax.servlet.http.HttpServletRequest; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.support.SessionStatus; import net.conselldemallorca.helium.core.model.dto.ExecucioMassivaDto; import net.conselldemallorca.helium.core.model.dto.TascaDto; import net.conselldemallorca.helium.core.model.hibernate.Camp; import net.conselldemallorca.helium.core.model.hibernate.CampTasca; import net.conselldemallorca.helium.core.model.hibernate.Entorn; import net.conselldemallorca.helium.core.model.hibernate.ExecucioMassiva.ExecucioMassivaTipus; import net.conselldemallorca.helium.core.model.service.DissenyService; import net.conselldemallorca.helium.core.model.service.ExecucioMassivaService; import net.conselldemallorca.helium.core.model.service.TascaService; import net.conselldemallorca.helium.webapp.mvc.util.TascaFormUtil; import net.conselldemallorca.helium.webapp.mvc.util.TramitacioMassiva; /** * Controlador per la gestió dels formularis dels camps de tipus registre * a dins les tasques * * @author Limit Tecnologies <limit@limit.es> */ @Controller public class TascaRegistreController extends CommonRegistreController { private TascaService tascaService; private ExecucioMassivaService execucioMassivaService; @Autowired public TascaRegistreController( TascaService tascaService, DissenyService dissenyService, ExecucioMassivaService execucioMassivaService) { super(dissenyService); this.tascaService = tascaService; this.execucioMassivaService = execucioMassivaService; } @Override public void populateOthers( HttpServletRequest request, String id, Object command, ModelMap model) { Entorn entorn = getEntornActiu(request); if (entorn != null) { TascaDto tasca = tascaService.getById( entorn.getId(), id, null, null, false, false); List<Camp> camps = new ArrayList<Camp>(); for (CampTasca campTasca: tasca.getCamps()) camps.add(campTasca.getCamp()); model.addAttribute( "tasca", tascaService.getById( entorn.getId(), id, null, TascaFormUtil.getValorsFromCommand( camps, command, true, false), true, false)); } } @RequestMapping(value = "/tasca/registre", method = RequestMethod.GET) public String registreGet(HttpServletRequest request) { return super.registreGet(request); } @RequestMapping(value = "/tasca/registre", method = RequestMethod.POST) public String registrePost( HttpServletRequest request, @RequestParam(value = "id", required = true) String id, @RequestParam(value = "registreId", required = true) Long registreId, @RequestParam(value = "index", required = false) Integer index, @RequestParam(value = "submit", required = true) String submit, @ModelAttribute("command") Object command, BindingResult result, SessionStatus status, ModelMap model) { return super.registrePost(request, id, registreId, index, submit, command, result, status, model); } @Override public void esborrarRegistre( HttpServletRequest request, String id, String campCodi, boolean multiple, int index) { Entorn entorn = getEntornActiu(request); tascaService.esborrarRegistre(entorn.getId(), id, campCodi, index); if (TramitacioMassiva.isTramitacioMassivaActiu(request, id)) { String[] tascaIds = TramitacioMassiva.getTasquesTramitacioMassiva(request, id); if (tascaIds.length > 1) { String[] parametresTram = TramitacioMassiva.getParamsTramitacioMassiva(request, id); try { TascaDto task = tascaService.getByIdSenseComprovacio(id); Long expTipusId = task.getExpedient().getTipus().getId(); // La primera tasca ja s'ha executat. Programam massivament la resta de tasques // ---------------------------------------------------------------------------- String[] tIds = new String[tascaIds.length - 1]; int j = 0; for (int i = 0; i < tascaIds.length; i++) { if (!tascaIds[i].equals(id)) { tIds[j++] = tascaIds[i]; } } // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (parametresTram[0] != null) { try { dInici = sdf.parse(parametresTram[0]); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (parametresTram[1] != null && parametresTram[1].equals("true")) bCorreu = true; // Authentication auth = SecurityContextHolder.getContext().getAuthentication(); ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setTascaIds(tIds); dto.setExpedientTipusId(expTipusId); dto.setTipus(ExecucioMassivaTipus.EXECUTAR_TASCA); dto.setParam1("RegEsborrar"); Object[] params = new Object[3]; params[0] = entorn.getId(); params[1] = campCodi; params[2] = Integer.valueOf(index); // params[3] = auth.getCredentials(); // List<String> rols = new ArrayList<String>(); // for (GrantedAuthority gauth : auth.getAuthorities()) { // rols.add(gauth.getAuthority()); // } // params[4] = rols; dto.setParam2(execucioMassivaService.serialize(params)); execucioMassivaService.crearExecucioMassiva(dto); missatgeInfo(request, getMessage("info.tasca.massiu.registre.esborrar", new Object[] {tIds.length})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); } } } } @Override public Object[] getValorRegistre( HttpServletRequest request, Long entornId, String id, String campCodi) { return (Object[])tascaService.getVariable(entornId, id, campCodi); } @Override public void guardarRegistre( HttpServletRequest request, String id, String campCodi, boolean multiple, Object[] valors, int index) { Entorn entorn = getEntornActiu(request); tascaService.guardarRegistre(entorn.getId(), id, campCodi, valors, index); if (TramitacioMassiva.isTramitacioMassivaActiu(request, id)) { String[] tascaIds = TramitacioMassiva.getTasquesTramitacioMassiva(request, id); if (tascaIds.length > 1) { String[] parametresTram = TramitacioMassiva.getParamsTramitacioMassiva(request, id); try { TascaDto task = tascaService.getByIdSenseComprovacio(id); Long expTipusId = task.getExpedient().getTipus().getId(); // La primera tasca ja s'ha executat. Programam massivament la resta de tasques // ---------------------------------------------------------------------------- String[] tIds = new String[tascaIds.length - 1]; int j = 0; for (int i = 0; i < tascaIds.length; i++) { if (!tascaIds[i].equals(id)) { tIds[j++] = tascaIds[i]; } } // Obtenim informació de l'execució massiva // Data d'inici SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm"); Date dInici = new Date(); if (parametresTram[0] != null) { try { dInici = sdf.parse(parametresTram[0]); } catch (ParseException pe) {}; } // Enviar correu Boolean bCorreu = false; if (parametresTram[1] != null && parametresTram[1].equals("true")) bCorreu = true; // Authentication auth = SecurityContextHolder.getContext().getAuthentication(); ExecucioMassivaDto dto = new ExecucioMassivaDto(); dto.setDataInici(dInici); dto.setEnviarCorreu(bCorreu); dto.setTascaIds(tIds); dto.setExpedientTipusId(expTipusId); dto.setTipus(ExecucioMassivaTipus.EXECUTAR_TASCA); dto.setParam1("RegGuardar"); Object[] params = new Object[4]; params[0] = entorn.getId(); params[1] = campCodi; params[2] = valors; params[3] = Integer.valueOf(index); // params[4] = auth.getCredentials(); // List<String> rols = new ArrayList<String>(); // for (GrantedAuthority gauth : auth.getAuthorities()) { // rols.add(gauth.getAuthority()); // } // params[5] = rols; dto.setParam2(execucioMassivaService.serialize(params)); execucioMassivaService.crearExecucioMassiva(dto); missatgeInfo(request, getMessage("info.tasca.massiu.registre.guardar", new Object[] {tIds.length})); } catch (Exception e) { missatgeError(request, getMessage("error.no.massiu")); } } } } @Override public void guardarRegistre( HttpServletRequest request, String id, String campCodi, boolean multiple, Object[] valors) { // Entorn entorn = getEntornActiu(request); // tascaService.guardarRegistre(entorn.getId(), id, campCodi, valors); guardarRegistre(request, id, campCodi, multiple, valors, -1); } @Override public String redirectUrl(String id, String campCodi) { return "redirect:/tasca/form.html?id=" + id; } @Override public String registreUrl() { return "tasca/registre"; } }