package net.conselldemallorca.helium.webapp.v3.controller;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import javax.servlet.http.HttpServletRequest;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientTascaDto;
import net.conselldemallorca.helium.v3.core.api.dto.TascaDadaDto;
import net.conselldemallorca.helium.v3.core.api.dto.TascaDocumentDto;
import net.conselldemallorca.helium.v3.core.api.service.DissenyService;
import net.conselldemallorca.helium.v3.core.api.service.TascaService;
import net.conselldemallorca.helium.webapp.v3.helper.MissatgesHelper;
import net.conselldemallorca.helium.webapp.v3.helper.ModalHelper;
import net.conselldemallorca.helium.webapp.v3.helper.SessionHelper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.FieldError;
/**
* Controlador base per al llistat d'expedients.
*
* @author Limit Tecnologies <limit@limit.es>
*/
public class BaseTascaController extends BaseController {
protected String TAG_PARAM_REGEXP = "<!--helium:param-(.+?)-->";
protected static final String VARIABLE_TRAMITACIO_MASSIVA = "variableTramitacioMassiva";
protected static final String VARIABLE_COMMAND_BINDING_RESULT_TRAMITACIO = "variableBindingResultTramitacio";
@Autowired
protected TascaService tascaService;
@Autowired
protected DissenyService dissenyService;
protected String mostrarInformacioTascaPerPipelles(
HttpServletRequest request,
String tascaId,
Model model,
String pipellaActiva) {
ExpedientTascaDto tasca = tascaService.findAmbIdPerTramitacio(tascaId);
model.addAttribute("tasca", tasca);
List<Object> nomesLectura = new ArrayList<Object>();
List<TascaDadaDto> dades = tascaService.findDades(tascaId);
Iterator<TascaDadaDto> itDades = dades.iterator();
while (itDades.hasNext()) {
TascaDadaDto dada = itDades.next();
if (dada.isReadOnly()) {
setErrorValidate(request, tascaId, dada);
nomesLectura.add(dada);
}
}
List<TascaDocumentDto> documents = tascaService.findDocuments(tascaId);
Iterator<TascaDocumentDto> itDocuments = documents.iterator();
while (itDocuments.hasNext()) {
TascaDocumentDto document = itDocuments.next();
if (document.isReadOnly() && document.getId() != null) {
nomesLectura.add(document);
}
}
model.addAttribute("nomesLectura", nomesLectura);
model.addAttribute(
"hasFormulari",
tascaService.hasFormulari(tascaId));
model.addAttribute(
"hasDocuments",
tascaService.hasDocuments(tascaId));
model.addAttribute(
"hasSignatures",
tascaService.hasSignatures(tascaId));
if (pipellaActiva != null)
model.addAttribute("pipellaActiva", pipellaActiva);
else if (request.getParameter("pipellaActiva") != null)
model.addAttribute("pipellaActiva", request.getParameter("pipellaActiva").substring("pipella-".length()));
else
model.addAttribute("pipellaActiva", "form");
model.addAttribute("isModal", ModalHelper.isModal(request));
Map<String, Object> datosTramitacionMasiva = getDatosTramitacionMasiva(request);
if (datosTramitacionMasiva != null) {
model.addAttribute("tasquesTramitar", datosTramitacionMasiva.get("tasquesTramitar"));
}
//Si tenim error d'execució en segón pla, el mostrarem
if (tasca.getErrorFinalitzacio() != null && pipellaActiva != null) {
MissatgesHelper.error(request, "Error execució segon pla: " + tasca.getErrorFinalitzacio());
}
if (pipellaActiva != null &&
(pipellaActiva.equalsIgnoreCase("document") && request.getMethod().equalsIgnoreCase("POST")) ||
request.getRequestURI().split("/")[request.getRequestURI().split("/").length -1].equalsIgnoreCase("esborrar")){
if (ModalHelper.isModal(request)) {
return "redirect:/modal/v3/tasca/" + tascaId + "/" + pipellaActiva;
} else {
return "redirect:/v3/tasca/" + tascaId + "/" + pipellaActiva;
}
}else{
return "v3/tascaPipelles";
}
}
private void setErrorValidate(HttpServletRequest request, String tascaId, TascaDadaDto dada) {
Object bindingResult = SessionHelper.getAttribute(request,VARIABLE_COMMAND_BINDING_RESULT_TRAMITACIO+tascaId);
if (bindingResult != null && ((BindingResult) bindingResult).hasErrors()) {
for (FieldError error : ((BindingResult) bindingResult).getFieldErrors()) {
if (dada.getVarCodi().equals(error.getField())) {
dada.setError(getMessage(request, "lectura." + error.getCode()));
break;
}
}
}
}
protected String getReturnUrl(
HttpServletRequest request,
String tascaId,
String sufix) {
String suf = (sufix != null) ? "/" + sufix : "";
if (ModalHelper.isModal(request))
return "redirect:/modal/v3/tasca/" + tascaId + suf;
else
return "redirect:/v3/tasca/" + tascaId + suf;
}
protected String guardarDatosTramitacionMasiva(HttpServletRequest request, Set<Long> seleccio, String inici, Boolean correu) {
Map<String, Object> camps = new HashMap<String, Object>();
String[] tascaIds = new String[seleccio.size()];
int i = 0;
for (Long tId : seleccio) {
tascaIds[i++] = tId.toString();
}
Date iniciMassiva = new Date();
if (inici != null) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy HH:mm");
try {
iniciMassiva = sdf.parse(inici);
} catch (ParseException e) {}
}
camps.put("inici", iniciMassiva);
camps.put("correu", correu);
camps.put("tasquesTramitar", tascaIds);
SessionHelper.setAttribute(request,VARIABLE_TRAMITACIO_MASSIVA, camps);
return tascaIds[0];
}
@SuppressWarnings("unchecked")
protected Map<String, Object> getDatosTramitacionMasiva(HttpServletRequest request) {
Object obj = SessionHelper.getAttribute(request, VARIABLE_TRAMITACIO_MASSIVA);
if (obj instanceof Map) {
return (Map<String, Object>) obj;
}
return null;
}
protected Map<String, String> getFormRecursParams(String text) {
Map<String, String> params = new HashMap<String, String>();
Pattern pattern = Pattern.compile(TAG_PARAM_REGEXP);
Matcher matcher = pattern.matcher(text);
while (matcher.find()) {
String[] paramParts = matcher.group(1).split(":");
if (paramParts.length == 2) {
params.put(paramParts[0], paramParts[1]);
}
}
return params;
}
}