package net.conselldemallorca.helium.webapp.mvc;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.text.DecimalFormat;
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.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.displaytag.properties.SortOrderEnum;
import org.displaytag.tags.TableTagParameters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.propertyeditors.CustomBooleanEditor;
import org.springframework.beans.propertyeditors.CustomDateEditor;
import org.springframework.beans.propertyeditors.CustomNumberEditor;
import org.springframework.security.acls.model.Permission;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.WebDataBinder;
import org.springframework.web.bind.annotation.InitBinder;
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 net.conselldemallorca.helium.core.model.dto.DadaIndexadaDto;
import net.conselldemallorca.helium.core.model.dto.ExpedientConsultaDissenyDto;
import net.conselldemallorca.helium.core.model.dto.ExpedientDto;
import net.conselldemallorca.helium.core.model.dto.ParellaCodiValorDto;
import net.conselldemallorca.helium.core.model.hibernate.Camp;
import net.conselldemallorca.helium.core.model.hibernate.Consulta;
import net.conselldemallorca.helium.core.model.hibernate.ConsultaCamp;
import net.conselldemallorca.helium.core.model.hibernate.ConsultaCamp.TipusConsultaCamp;
import net.conselldemallorca.helium.core.model.hibernate.Entorn;
import net.conselldemallorca.helium.core.model.hibernate.Estat;
import net.conselldemallorca.helium.core.model.hibernate.ExpedientTipus;
import net.conselldemallorca.helium.core.model.service.DissenyService;
import net.conselldemallorca.helium.core.model.service.ExpedientService;
import net.conselldemallorca.helium.core.model.service.PermissionService;
import net.conselldemallorca.helium.core.security.ExtendedPermission;
import net.conselldemallorca.helium.core.util.ExpedientCamps;
import net.conselldemallorca.helium.report.FieldValue;
import net.conselldemallorca.helium.v3.core.api.service.AdminService;
import net.conselldemallorca.helium.webapp.mvc.util.BaseController;
import net.conselldemallorca.helium.webapp.mvc.util.PaginatedList;
import net.conselldemallorca.helium.webapp.mvc.util.TascaFormUtil;
import net.conselldemallorca.helium.webapp.v3.helper.ObjectTypeEditorHelper;
/**
* Controlador per la gestiĆ³ de consultes dissenyades
*
* @author Limit Tecnologies <limit@limit.es>
*/
@Controller
public class ExpedientConsultaDissenyController extends BaseController {
public static final String VARIABLE_SESSIO_SELCON_COMMAND = "expedientTipusConsultaDissenyCommand";
public static final String VARIABLE_SESSIO_FILTRE_COMMAND = "expedientTipusConsultaFiltreCommand";
public static final String VARIABLE_SESSIO_IDS_MASSIUS_TE = "consultaExpedientsIdsMassiusTE";
public static final String VARIABLE_SESSIO_IDS_MASSIUS = "consultaExpedientsIdsMassius";
public static final String VARIABLE_SESSIO_PARAMS = "consultaExpedientsParams";
private DissenyService dissenyService;
private ExpedientService expedientService;
private PermissionService permissionService;
private AdminService adminService;
@Autowired
public ExpedientConsultaDissenyController(
DissenyService dissenyService,
ExpedientService expedientService,
PermissionService permissionService,
AdminService adminService) {
this.dissenyService = dissenyService;
this.expedientService = expedientService;
this.permissionService = permissionService;
this.adminService = adminService;
}
// @ModelAttribute("commandSeleccioConsulta")
// public ExpedientConsultaDissenyCommand populateCommandSeleccioConsulta(
// HttpServletRequest request,
// HttpSession session,
// @RequestParam(value = "expedientTipusId", required = false) Long expedientTipusId,
// @RequestParam(value = "consultaId", required = false) Long consultaId,
// @RequestParam(value = "canviar", required = false) Boolean canviar){
// ExpedientConsultaDissenyCommand command = (ExpedientConsultaDissenyCommand)session.getAttribute(VARIABLE_SESSIO_SELCON_COMMAND);
// if (command == null) {
// command = new ExpedientConsultaDissenyCommand();
// }
// if(expedientTipusId != null){
// command.setExpedientTipusId(expedientTipusId);
// }
// if (canviar != null && canviar.booleanValue()) {
// command.setConsultaId(consultaId);
// if (consultaId != null && expedientTipusId == null) {
// command.setExpedientTipusId(
// dissenyService.getConsultaById(consultaId).getExpedientTipus().getId());
// }
// session.removeAttribute(VARIABLE_SESSIO_FILTRE_COMMAND);
// }
// session.setAttribute(VARIABLE_SESSIO_SELCON_COMMAND, command);
// return command;
// }
// @ModelAttribute("commandFiltre")
// public Object populateCommandFiltre(HttpSession session) {
// ExpedientConsultaDissenyCommand commandSeleccioConsulta =
// (ExpedientConsultaDissenyCommand)session.getAttribute(VARIABLE_SESSIO_SELCON_COMMAND);
// if (commandSeleccioConsulta != null && commandSeleccioConsulta.getConsultaId() != null) {
// List<Camp> camps = dissenyService.findCampsPerCampsConsulta(
// commandSeleccioConsulta.getConsultaId(),
// TipusConsultaCamp.FILTRE,
// true);
// Object command = TascaFormUtil.getCommandForFiltre(
// camps,
// null,
// null,
// null);
// return command;
// }
// return null;
// }
@ModelAttribute
public void populateCommandSeleccioConsultaFiltre(
HttpServletRequest request,
HttpSession session,
@RequestParam(value = "expedientTipusId", required = false) Long expedientTipusId,
@RequestParam(value = "consultaId", required = false) Long consultaId,
@RequestParam(value = "canviar", required = false) Boolean canviar,
Model model){
ExpedientConsultaDissenyCommand command = (ExpedientConsultaDissenyCommand)session.getAttribute(VARIABLE_SESSIO_SELCON_COMMAND);
if (command == null) {
command = new ExpedientConsultaDissenyCommand();
}
if(expedientTipusId != null){
command.setExpedientTipusId(expedientTipusId);
}
if (canviar != null && canviar.booleanValue()) {
command.setConsultaId(consultaId);
if (consultaId != null && expedientTipusId == null) {
command.setExpedientTipusId(dissenyService.getConsultaById(consultaId).getExpedientTipus().getId());
}
session.removeAttribute(VARIABLE_SESSIO_FILTRE_COMMAND);
}
session.setAttribute(VARIABLE_SESSIO_SELCON_COMMAND, command);
model.addAttribute("commandSeleccioConsulta", command);
if (command != null && command.getConsultaId() != null) {
List<Camp> camps = dissenyService.findCampsPerCampsConsulta(
command.getConsultaId(),
TipusConsultaCamp.FILTRE,
true);
Object commandFiltre = TascaFormUtil.getCommandForFiltre(
camps,
null,
null,
null);
model.addAttribute("commandFiltre", commandFiltre);
}
}
@ModelAttribute("valorsBoolea")
public List<ParellaCodiValorDto> valorsBoolea() {
List<ParellaCodiValorDto> resposta = new ArrayList<ParellaCodiValorDto>();
resposta.add(new ParellaCodiValorDto("true", getMessage("comuns.si") ));
resposta.add(new ParellaCodiValorDto("false", getMessage("comuns.no") ));
return resposta;
}
@RequestMapping(value = "/expedient/dissenyAnular")
public String anular(
HttpServletRequest request,
@RequestParam(value = "id", required = true) Long id, @RequestParam(value = "motiu", required = true) String motiu) {
Entorn entorn = getEntornActiu(request);
if (entorn != null) {
ExpedientDto expedient = expedientService.getById(id);
if (potModificarExpedient(expedient)) {
try {
expedientService.anular(entorn.getId(), id, motiu);
missatgeInfo(request, getMessage("info.expedient.anulat") );
} catch (Exception ex) {
missatgeError(request, getMessage("error.anular.expedient"), ex.getLocalizedMessage());
logger.error("No s'ha pogut esborrar el registre", ex);
}
} else {
missatgeError(request, getMessage("error.permisos.anular.expedient"));
}
return "redirect:/expedient/consultaDisseny.html";
} else {
missatgeError(request, getMessage("error.no.entorn.selec") );
return "redirect:/index.html";
}
}
@RequestMapping(value = "/expedient/consultaDisseny")
public String consultaDisseny(
HttpServletRequest request,
@RequestParam(value = "page", required = false) String page,
@RequestParam(value = "sort", required = false) String sort,
@RequestParam(value = "dir", required = false) String dir,
@RequestParam(value = "objectsPerPage", required = false) String objectsPerPage,
HttpSession session,
ModelMap model) {
Entorn entorn = getEntornActiu(request);
if (entorn != null) {
ExpedientConsultaDissenyCommand commandSeleccio =
(ExpedientConsultaDissenyCommand)model.get("commandSeleccioConsulta");
populateModelCommon(entorn, model, commandSeleccio);
Object commandFiltre = session.getAttribute(VARIABLE_SESSIO_FILTRE_COMMAND);
if (commandFiltre != null && commandSeleccio != null && commandSeleccio.getConsultaId() != null) {
Consulta consulta = null;
if (adminService.mesuraTemporalIsActive()) {
consulta = dissenyService.getConsultaById(commandSeleccio.getConsultaId());
adminService.mesuraTemporalIniciar(
"INFORME: " + consulta.getCodi(),
"report",
null,
null,
"LLISTAT");
}
model.addAttribute("expedientTipusId", commandSeleccio.getExpedientTipusId());
List<Camp> camps = dissenyService.findCampsPerCampsConsulta(
commandSeleccio.getConsultaId(),
TipusConsultaCamp.FILTRE,
true);
Map<String, Object> valors = TascaFormUtil.getValorsFromCommand(
camps,
commandFiltre,
true,
true);
boolean export = request.getParameter(TableTagParameters.PARAMETER_EXPORTING) != null;
commandFiltre = TascaFormUtil.getCommandForFiltre(
camps,
valors,
null,
null);
model.addAttribute("commandFiltre", commandFiltre);
model.addAttribute(
"expedients",
getPaginaExpedients(
entorn.getId(),
commandSeleccio.getConsultaId(),
getValorsPerService(camps, valors),
page,
sort,
dir,
objectsPerPage,
export));
if (adminService.mesuraTemporalIsActive())
adminService.mesuraTemporalCalcular(
"INFORME: " + consulta.getCodi(),
"report",
null,
null,
"LLISTAT");
}
return "expedient/consultaDisseny";
} else {
missatgeError(request, getMessage("error.no.entorn.selec"));
return "redirect:/index.html";
}
}
@RequestMapping(value = "/expedient/consultaDissenyResultat", method = RequestMethod.POST)
public String consultaDissenyResultat(
HttpServletRequest request,
@RequestParam(value = "submit", required = false) String submit,
@RequestParam(value = "objectsPerPage", required = false) String objectsPerPage,
@ModelAttribute("commandFiltre") Object command,
HttpSession session,
BindingResult result,
ModelMap model) {
Entorn entorn = getEntornActiu(request);
if (entorn != null) {
ExpedientConsultaDissenyCommand commandSeleccio = (ExpedientConsultaDissenyCommand)model.get("commandSeleccioConsulta");
if (commandSeleccio.getConsultaId() != null) {
Consulta consulta = dissenyService.getConsultaById(commandSeleccio.getConsultaId());
if (permissionService.filterAllowed(
consulta.getExpedientTipus(),
ExpedientTipus.class,
new Permission[] {
ExtendedPermission.ADMINISTRATION,
ExtendedPermission.SUPERVISION,
ExtendedPermission.READ}) == null) {
missatgeError(request, getMessage("error.consulta.tipexp.noaut"));
return "redirect:/expedient/consultaDisseny.html";
}
}
if ("submit".equals(submit) || submit.length() == 0) {
if (result.hasErrors()) {
populateModelCommon(entorn, model, commandSeleccio);
return "expedient/consultaDisseny";
} else {
request.getSession().removeAttribute(ExpedientMassivaController.VARIABLE_SESSIO_IDS_MASSIUS_TE);
session.setAttribute(VARIABLE_SESSIO_FILTRE_COMMAND, command);
}
} else if ("informe".equals(submit)) {
if (result.hasErrors()) {
populateModelCommon(entorn, model, commandSeleccio);
return "expedient/consultaDisseny";
} else {
session.setAttribute(VARIABLE_SESSIO_FILTRE_COMMAND, command);
model.addAttribute("idsSeleccionats",request.getSession().getAttribute(VARIABLE_SESSIO_IDS_MASSIUS_TE));
return "redirect:/expedient/consultaDissenyInforme.html";
}
} else if ("netejar".equals(submit)) {
session.removeAttribute(VARIABLE_SESSIO_FILTRE_COMMAND);
request.getSession().removeAttribute(ExpedientMassivaController.VARIABLE_SESSIO_IDS_MASSIUS);
request.getSession().removeAttribute(ExpedientMassivaController.VARIABLE_SESSIO_IDS_MASSIUS_TE);
commandSeleccio.setMassivaActiu(false);
} else if ("ejecucionMasivaTotsTipus".equals(submit)) {
request.getSession().removeAttribute(ExpedientMassivaController.VARIABLE_SESSIO_IDS_MASSIUS);
request.getSession().removeAttribute(ExpedientMassivaController.VARIABLE_SESSIO_IDS_MASSIUS_TE);
return "redirect:/expedient/massivaInfoTE.html?massivaInfoTots=true&expedientTipusId="+commandSeleccio.getExpedientTipusId();
}
model.addAttribute("objectsPerPage", objectsPerPage);
if ("clean".equals(submit)) {
request.getSession().removeAttribute(ExpedientMassivaController.VARIABLE_SESSIO_IDS_MASSIUS);
request.getSession().removeAttribute(ExpedientMassivaController.VARIABLE_SESSIO_IDS_MASSIUS_TE);
}
return "redirect:/expedient/consultaDisseny.html";
} else {
missatgeError(request, getMessage("error.no.entorn.selec"));
return "redirect:/index.html";
}
}
@RequestMapping(value = "/expedient/consultaDissenyInformeParams", method = RequestMethod.POST)
public String consultaDissenyInformeParams(
HttpServletRequest request,
HttpSession session,
ModelMap model) {
ExpedientConsultaDissenyCommand commandSeleccioConsulta =
(ExpedientConsultaDissenyCommand)session.getAttribute(
VARIABLE_SESSIO_SELCON_COMMAND);
if (commandSeleccioConsulta != null && commandSeleccioConsulta.getConsultaId() != null) {
List<ConsultaCamp> params = dissenyService.findCampsConsulta(
commandSeleccioConsulta.getConsultaId(),
TipusConsultaCamp.PARAM);
Map<String, Object> valorsParams = new HashMap<String, Object>();
for (ConsultaCamp param: params) {
String valorRequest = request.getParameter(param.getCampCodi());
Object paramValor = null;
switch (param.getParamTipus()) {
case TEXT:
if (valorRequest != null && valorRequest.length() > 0)
paramValor = valorRequest;
break;
case SENCER:
if (valorRequest != null && valorRequest.length() > 0)
paramValor = new Long(valorRequest);
break;
case FLOTANT:
if (valorRequest != null && valorRequest.length() > 0)
paramValor = new Double(valorRequest);
break;
case DATA:
if (valorRequest != null && valorRequest.length() > 0) {
SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
try {
paramValor = sdf.parse(valorRequest);
} catch (Exception ignored) {}
}
break;
case BOOLEAN:
paramValor = new Boolean(valorRequest != null);
break;
}
if (paramValor != null)
valorsParams.put(
param.getCampCodi(),
paramValor);
}
session.setAttribute(VARIABLE_SESSIO_PARAMS, valorsParams);
}
return "redirect:consultaDissenyInforme.html";
}
@SuppressWarnings("unchecked")
@RequestMapping(value = "/expedient/consultaDissenyInforme")
public String consultaDissenyInforme(
HttpServletRequest request,
@RequestParam(value = "expedientTipId", required = false) Long expedientTipId,
HttpSession session,
ModelMap model){
Entorn entorn = getEntornActiu(request);
List<Long> ids = new ArrayList<Long>();
if(request.getSession().getAttribute(VARIABLE_SESSIO_IDS_MASSIUS_TE)!=null){
ids = (List<Long>) request.getSession().getAttribute(VARIABLE_SESSIO_IDS_MASSIUS_TE);
}
if (entorn != null) {
ExpedientConsultaDissenyCommand commandSeleccio =
(ExpedientConsultaDissenyCommand)model.get("commandSeleccioConsulta");
populateModelCommon(entorn, model, commandSeleccio);
Object commandFiltre = session.getAttribute(VARIABLE_SESSIO_FILTRE_COMMAND);
if (commandSeleccio.getExpedientTipusId() == null){
commandSeleccio.setExpedientTipusId(expedientTipId);
}
if (commandFiltre != null) {
populateModelCommon(entorn, model, commandSeleccio);
Consulta consulta = dissenyService.getConsultaById(commandSeleccio.getConsultaId());
adminService.mesuraTemporalIniciar(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
null);
if (consulta.getInformeNom() != null) {
model.addAttribute("commandFiltre", commandFiltre);
adminService.mesuraTemporalIniciar(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
"Camps");
List<Camp> camps = dissenyService.findCampsPerCampsConsulta(
commandSeleccio.getConsultaId(),
TipusConsultaCamp.FILTRE,
true);
adminService.mesuraTemporalCalcular(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
"Camps");
adminService.mesuraTemporalIniciar(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
"Valors");
Map<String, Object> valors = TascaFormUtil.getValorsFromCommand(
camps,
commandFiltre,
true,
true);
adminService.mesuraTemporalCalcular(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
"Valors");
adminService.mesuraTemporalIniciar(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
"Valors per service");
Map<String, Object> valoresConsulta = getValorsPerService(camps, valors);
adminService.mesuraTemporalCalcular(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
"Valors per service");
adminService.mesuraTemporalIniciar(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
"Recuperar consulta disseny");
List<ExpedientConsultaDissenyDto> expedients = expedientService.findAmbEntornConsultaDisseny(
entorn.getId(),
commandSeleccio.getConsultaId(),
valoresConsulta,
ExpedientCamps.EXPEDIENT_CAMP_ID,
true,
ids);
List<ExpedientConsultaDissenyDto> expedientsTE = new ArrayList<ExpedientConsultaDissenyDto>();
adminService.mesuraTemporalCalcular(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
"Recuperar consulta disseny");
adminService.mesuraTemporalIniciar(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
"Generar datos datasource");
if (expedientsTE.size() > 0) {
model.addAttribute(
JasperReportsView.MODEL_ATTRIBUTE_REPORTDATA,
getDadesDatasource(expedientsTE));
} else {
model.addAttribute(
JasperReportsView.MODEL_ATTRIBUTE_REPORTDATA,
getDadesDatasource(expedients));
}
String extensio = consulta.getInformeNom().substring(
consulta.getInformeNom().lastIndexOf(".") + 1);
String formatExportacio = consulta.getFormatExport();
request.setAttribute("formatJR", formatExportacio);
String nom = consulta.getInformeNom().substring(0,
consulta.getInformeNom().lastIndexOf("."));
if ("zip".equals(extensio)) {
HashMap<String, byte[]> reports = unZipReports(consulta
.getInformeContingut());
model.addAttribute(
JasperReportsView.MODEL_ATTRIBUTE_REPORTCONTENT,
reports.get(nom + ".jrxml"));
reports.remove(nom + ".jrxml");
model.addAttribute(
JasperReportsView.MODEL_ATTRIBUTE_SUBREPORTS,
reports);
} else {
model.addAttribute(
JasperReportsView.MODEL_ATTRIBUTE_REPORTCONTENT,
consulta.getInformeContingut());
}
model.addAttribute(
JasperReportsView.MODEL_ATTRIBUTE_CONSULTA,
consulta.getCodi());
List<ConsultaCamp> params = dissenyService.findCampsConsulta(
consulta.getId(),
TipusConsultaCamp.PARAM);
if (params != null && !params.isEmpty()) {
model.addAttribute(
JasperReportsView.MODEL_ATTRIBUTE_PARAMS,
session.getAttribute(VARIABLE_SESSIO_PARAMS));
}
adminService.mesuraTemporalCalcular(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
"Generar datos datasource");
adminService.mesuraTemporalCalcular(
"INFORME: " + consulta.getCodi(),
"report",
consulta.getExpedientTipus().getNom(),
null,
null);
return "jasperReportsView";
} else {
missatgeError(request, getMessage("error.consulta.informe.nonhiha"));
}
} else {
missatgeError(request, getMessage("error.consulta.informe.nofiltre"));
}
return "redirect:/expedient/consultaDisseny.html";
} else {
missatgeError(request, getMessage("error.no.entorn.selec"));
return "redirect:/index.html";
}
}
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.setAutoGrowNestedPaths(false);
binder.registerCustomEditor(
Long.class,
new CustomNumberEditor(Long.class, true));
binder.registerCustomEditor(
Double.class,
new CustomNumberEditor(Double.class, true));
binder.registerCustomEditor(
BigDecimal.class,
new CustomNumberEditor(
BigDecimal.class,
new DecimalFormat("#,##0.00"),
true));
binder.registerCustomEditor(
Boolean.class,
new CustomBooleanEditor(true));
binder.registerCustomEditor(
Date.class,
new CustomDateEditor(new SimpleDateFormat("dd/MM/yyyy"), true));
binder.registerCustomEditor(
Object.class,
new ObjectTypeEditorHelper());
}
public class ExpedientConsultaDissenyCommand {
private Long expedientTipusId;
private Long consultaId;
private boolean massivaActiu = true;
public Long getExpedientTipusId() {
return expedientTipusId;
}
public void setExpedientTipusId(Long expedientTipusId) {
this.expedientTipusId = expedientTipusId;
}
public Long getConsultaId() {
return consultaId;
}
public void setConsultaId(Long consultaId) {
this.consultaId = consultaId;
}
public boolean isMassivaActiu() {
return massivaActiu;
}
public void setMassivaActiu(boolean massivaActiu) {
this.massivaActiu = massivaActiu;
}
}
private void populateModelCommon(
Entorn entorn,
ModelMap model,
ExpedientConsultaDissenyCommand commandSeleccio) {
List<ExpedientTipus> tipus = dissenyService.findExpedientTipusAmbEntornOrdenat(entorn.getId(), "nom");
permissionService.filterAllowed(
tipus,
ExpedientTipus.class,
new Permission[] {
ExtendedPermission.ADMINISTRATION,
ExtendedPermission.SUPERVISION,
ExtendedPermission.READ});
model.addAttribute("expedientTipus", tipus);
if (commandSeleccio != null) {
List<Consulta> consultes = dissenyService.findConsultesAmbEntornIExpedientTipusOrdenat(
entorn.getId(),
commandSeleccio.getExpedientTipusId());
Iterator<Consulta> it = consultes.iterator();
while (it.hasNext()) {
Consulta consulta = it.next();
boolean hiEs = false;
for (ExpedientTipus expedientTipus: tipus) {
if (consulta.getExpedientTipus().equals(expedientTipus)) {
hiEs = true;
break;
}
}
if (!hiEs || consulta.isOcultarActiu())
it.remove();
}
model.addAttribute("consultes", consultes);
if (commandSeleccio.getConsultaId() != null) {
model.addAttribute(
"consulta",
dissenyService.getConsultaById(commandSeleccio.getConsultaId()));
model.addAttribute(
"campsFiltre",
dissenyService.findCampsPerCampsConsulta(
commandSeleccio.getConsultaId(),
TipusConsultaCamp.FILTRE,
true));
model.addAttribute(
"campsInforme",
dissenyService.findCampsPerCampsConsulta(
commandSeleccio.getConsultaId(),
TipusConsultaCamp.INFORME,
true));
List<ConsultaCamp> params = dissenyService.findCampsConsulta(
commandSeleccio.getConsultaId(),
TipusConsultaCamp.PARAM);
model.addAttribute("paramsInforme", params);
model.addAttribute(
"paramsCommand",
TascaFormUtil.getCommandForParams(
params,
null,
null,
null));
}
if (commandSeleccio.getExpedientTipusId() != null) {
List<Estat> estats = dissenyService.findEstatAmbExpedientTipus(commandSeleccio.getExpedientTipusId());
afegirEstatsInicialIFinal(estats);
model.addAttribute("estats", estats);
}
}
}
private void afegirEstatsInicialIFinal(List<Estat> estats) {
Estat iniciat = new Estat();
iniciat.setId(Long.parseLong("0"));
iniciat.setCodi("0");
iniciat.setNom( getMessage("expedient.consulta.iniciat") );
estats.add(0, iniciat);
Estat finalitzat = new Estat();
finalitzat.setId(Long.parseLong("-1"));
finalitzat.setCodi("-1");
finalitzat.setNom( getMessage("expedient.consulta.finalitzat") );
estats.add(finalitzat);
}
private List<Map<String, FieldValue>> getDadesDatasource(List<ExpedientConsultaDissenyDto> expedients) {
List<Map<String, FieldValue>> dadesDataSource = new ArrayList<Map<String, FieldValue>>();
for (ExpedientConsultaDissenyDto dadesExpedient: expedients) {
ExpedientDto expedient = dadesExpedient.getExpedient();
Map<String, FieldValue> mapFila = new HashMap<String, FieldValue>();
for (String clau: dadesExpedient.getDadesExpedient().keySet()) {
DadaIndexadaDto dada = dadesExpedient.getDadesExpedient().get(clau);
mapFila.put(
dada.getReportFieldName(),
toReportField(expedient, dada));
}
dadesDataSource.add(mapFila);
}
return dadesDataSource;
}
private FieldValue toReportField(ExpedientDto expedient, DadaIndexadaDto dadaIndex) {
FieldValue field = new FieldValue(
dadaIndex.getDefinicioProcesCodi(),
dadaIndex.getReportFieldName(),
dadaIndex.getEtiqueta());
if (!dadaIndex.isMultiple()) {
field.setValor(dadaIndex.getValor());
if ("expedient%estat".equals(field.getCampCodi())) {
if (expedient.getDataFi() != null) {
field.setValorMostrar(this.getMessage("expedient.consulta.finalitzat"));
} else {
if (expedient.getEstat() != null)
field.setValorMostrar(expedient.getEstat().getNom());
else
field.setValorMostrar(this.getMessage("expedient.consulta.iniciat"));
}
} else {
field.setValorMostrar(dadaIndex.getValorMostrar());
}
if (dadaIndex.isOrdenarPerValorMostrar())
field.setValorOrdre(dadaIndex.getValorMostrar());
else
field.setValorOrdre(dadaIndex.getValorIndex());
} else {
field.setValorMultiple(dadaIndex.getValorMultiple());
field.setValorMostrarMultiple(dadaIndex.getValorMostrarMultiple());
field.setValorOrdreMultiple(dadaIndex.getValorIndexMultiple());
if (dadaIndex.isOrdenarPerValorMostrar()){
field.setValorOrdreMultiple(dadaIndex.getValorMostrarMultiple());
}
else
// {
// String valorsMult="[";
// List<String> valorsMostrar = new ArrayList<String>();
// for(Object valMult:dadaIndex.getValorMultiple()){
// if(valMult instanceof String){
// valorsMult+=(String)valMult;
// }
// }
// valorsMult = valorsMult.trim();
// valorsMult = valorsMult+"]";
// valorsMostrar.add(valorsMult);
// field.setValorOrdreMultiple(valorsMostrar);
// field.setValorMostrar(valorsMult);
// field.setValorMostrarMultiple(valorsMostrar);
//
// }
field.setValorOrdreMultiple(dadaIndex.getValorIndexMultiple());
}
field.setMultiple(dadaIndex.isMultiple());
return field;
}
private PaginatedList getPaginaExpedients(
Long entornId,
Long consultaId,
Map<String, Object> valors,
String page,
String sort,
String dir,
String objectsPerPage,
boolean export) {
int maxResults = getObjectsPerPage(objectsPerPage);
int pagina = (page != null) ? new Integer(page).intValue() : 1;
int firstRow = (pagina - 1) * maxResults;
boolean isAsc = (dir == null) || "asc".equals(dir);
// Si no s'especifica columna per cercar ordena en sentit descendent
if (sort == null || sort.length() == 0)
isAsc = false;
//
PaginatedList paginatedList = new PaginatedList();
int fullsize = expedientService.countAmbEntornConsultaDisseny(
entornId,
consultaId,
valors);
paginatedList.setFullListSize(fullsize);
paginatedList.setObjectsPerPage(export? fullsize : maxResults);
paginatedList.setPageNumber(export? 1 : pagina);
String sortOk = (sort != null && sort.length() > 0) ? sort : "dataInici";
paginatedList.setSortCriterion(sortOk);
paginatedList.setSortDirection((isAsc) ? SortOrderEnum.ASCENDING : SortOrderEnum.DESCENDING);
List<ExpedientConsultaDissenyDto> dadesExpedients = expedientService.findAmbEntornConsultaDisseny(
entornId,
consultaId,
valors,
sort,
isAsc,
(export? 0 : firstRow),
(export? fullsize : maxResults));
paginatedList.setList(dadesExpedients);
// ------ //
/*for (ExpedientConsultaDissenyDto dadesExpedient: dadesExpedients) {
mostrarDadesExpedient(dadesExpedient);
}*/
// ------ //
return paginatedList;
}
public HashMap<String, byte[]> unZipReports(byte[] zipContent) {
byte[] buffer = new byte[4096];
HashMap<String, byte[]> docs = new HashMap<String, byte[]>();
try {
// get the zip file content
ZipInputStream zis = new ZipInputStream(new ByteArrayInputStream(
zipContent));
// get the zipped file list entry
ZipEntry ze = zis.getNextEntry();
while (ze != null) {
String fileName = ze.getName();
byte[] fileContent;
ByteArrayOutputStream fos = new ByteArrayOutputStream();
int len;
while ((len = zis.read(buffer)) > 0) {
fos.write(buffer, 0, len);
}
fos.close();
fileContent = fos.toByteArray();
docs.put(fileName, fileContent);
ze = zis.getNextEntry();
}
zis.closeEntry();
zis.close();
} catch (IOException ex) {
ex.printStackTrace();
}
return docs;
}
public static Map<String, Object> getValorsPerService(
List<Camp> camps,
Map<String, Object> valors) {
Map<String, Object> valorsPerService = new HashMap<String, Object>();
for (Camp camp: camps) {
String clau = TascaFormUtil.getCampCodi(
camp,
true,
false);
if (camp.getDefinicioProces() != null) {
String definicioProcesKey = camp.getDefinicioProces().getJbpmKey();
String clauPerService = definicioProcesKey + clau.substring(definicioProcesKey.length()).replaceFirst("_", ".");
valorsPerService.put(
clauPerService,
valors.get(clau));
} else {
valorsPerService.put(
clau,
valors.get(clau));
}
}
return valorsPerService;
}
private boolean potModificarExpedient(ExpedientDto expedient) {
return permissionService.filterAllowed(
expedient.getTipus(),
ExpedientTipus.class,
new Permission[] {
ExtendedPermission.ADMINISTRATION,
ExtendedPermission.WRITE}) != null;
}
private static final Log logger = LogFactory.getLog(ExpedientConsultaDissenyController.class);
}