/**
*
*/
package net.conselldemallorca.helium.webapp.v3.controller;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
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.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import javax.activation.MimetypesFileTypeMap;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import net.conselldemallorca.helium.core.model.dto.ParellaCodiValorDto;
import net.conselldemallorca.helium.report.FieldValue;
import net.conselldemallorca.helium.v3.core.api.dto.ConsultaDto;
import net.conselldemallorca.helium.v3.core.api.dto.DadaIndexadaDto;
import net.conselldemallorca.helium.v3.core.api.dto.EstatDto;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientCamps;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientConsultaDissenyDto;
import net.conselldemallorca.helium.v3.core.api.dto.ExpedientDto;
import net.conselldemallorca.helium.v3.core.api.dto.PaginaDto;
import net.conselldemallorca.helium.v3.core.api.dto.TascaDadaDto;
import net.conselldemallorca.helium.v3.core.api.service.ExpedientService;
import net.conselldemallorca.helium.webapp.mvc.JasperReportsView;
import net.conselldemallorca.helium.webapp.v3.datatables.DatatablesPagina;
import net.conselldemallorca.helium.webapp.v3.helper.MissatgesHelper;
import net.conselldemallorca.helium.webapp.v3.helper.ObjectTypeEditorHelper;
import net.conselldemallorca.helium.webapp.v3.helper.PaginacioHelper;
import net.conselldemallorca.helium.webapp.v3.helper.SessionHelper;
import net.conselldemallorca.helium.webapp.v3.helper.SessionHelper.SessionManager;
import net.conselldemallorca.helium.webapp.v3.helper.TascaFormHelper;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRichTextString;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.DataFormat;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.stereotype.Controller;
import org.springframework.ui.Model;
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.PathVariable;
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.annotation.ResponseBody;
/**
* Controlador per al llistat d'expedients.
*
* @author Limit Tecnologies <limit@limit.es>
*/
@Controller
@RequestMapping("/v3/informe")
public class ExpedientInformeController extends BaseExpedientController {
// Variables exportació
private HSSFWorkbook wb;
private HSSFCellStyle headerStyle;
private HSSFCellStyle cellStyle;
private HSSFCellStyle dStyle;
private HSSFFont bold;
private HSSFCellStyle cellGreyStyle;
private HSSFCellStyle greyStyle;
private HSSFCellStyle dGreyStyle;
private HSSFFont greyFont;
@Autowired
private ExpedientService expedientService;
@ModelAttribute("expedientInformeCommand")
public Object getFiltreCommand(
HttpServletRequest request,
Long consultaId) {
if (consultaId == null)
return null;
Object filtreCommand = SessionHelper.getAttribute(request,SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS + consultaId);
if (filtreCommand != null) {
return filtreCommand;
}
Map<String, Object> campsAddicionals = new HashMap<String, Object>();
Map<String, Class<?>> campsAddicionalsClasses = new HashMap<String, Class<?>>();
// UsuariPreferenciesDto preferenciesUsuari = SessionHelper.getSessionManager(request).getPreferenciesUsuari();
// boolean nomesPendents = false;
// if (preferenciesUsuari != null)
// nomesPendents = preferenciesUsuari.isFiltroTareasActivas();
campsAddicionals.put("consultaId", consultaId);
campsAddicionals.put("nomesMeves", false);
campsAddicionals.put("nomesAlertes", false);
campsAddicionals.put("mostrarAnulats", false);
campsAddicionals.put("nomesTasquesPersonals", false);
campsAddicionals.put("nomesTasquesGrup", false);
campsAddicionalsClasses.put("nomesMeves", Boolean.class);
campsAddicionalsClasses.put("nomesAlertes", Boolean.class);
campsAddicionalsClasses.put("mostrarAnulats", Boolean.class);
campsAddicionalsClasses.put("consultaId", Long.class);
campsAddicionalsClasses.put("nomesTasquesPersonals", Boolean.class);
campsAddicionalsClasses.put("nomesTasquesGrup", Boolean.class);
List<TascaDadaDto> campsFiltre = expedientService.findConsultaFiltre(consultaId);
return TascaFormHelper.getCommandBuitForCamps(
campsFiltre,
campsAddicionals,
campsAddicionalsClasses,
true);
}
@ModelAttribute("expedientInformeParametrosCommand")
public Object getFiltreParameterCommand(
HttpServletRequest request,
Long consultaId) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Object filtreCommand = SessionHelper.getAttribute(request, SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS_PARAM);
if (filtreCommand != null)
return filtreCommand;
if (consultaId == null)
return null;
List<TascaDadaDto> campsFiltre = expedientService.findConsultaInformeParams(consultaId);
return TascaFormHelper.getCommandBuitForCamps(
campsFiltre,
new HashMap<String, Object>(),
new HashMap<String, Class<?>>(),
true);
}
@RequestMapping(method = RequestMethod.GET)
public String getConsulta(
HttpServletRequest request,
@RequestParam(value = "consultaId", required = true) Long consultaId,
Model model) {
ConsultaDto consulta = dissenyService.findConsulteById(consultaId);
model.addAttribute("consulta", consulta);
model.addAttribute("campsFiltre", expedientService.findConsultaFiltre(consultaId));
model.addAttribute("campsInforme", expedientService.findConsultaInforme(consultaId));
model.addAttribute("campsInformeParams", expedientService.findConsultaInformeParams(consultaId));
List<EstatDto> estats = dissenyService.findEstatByExpedientTipus(consulta.getExpedientTipus().getId());
estats.add(0, new EstatDto(0L, "0", getMessage(request, "expedient.consulta.iniciat")));
estats.add(new EstatDto(-1L, "-1", getMessage(request, "expedient.consulta.finalitzat")));
model.addAttribute("estats", estats);
SessionHelper.removeAttribute(request, SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS + consultaId);
Object filtreCommand = getFiltreCommand(request, consultaId);
SessionHelper.setAttribute(request, SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS + consultaId, filtreCommand);
model.addAttribute("expedientInformeCommand", filtreCommand);
return "v3/expedientInforme";
}
@RequestMapping(method = RequestMethod.POST)
public String post(
HttpServletRequest request,
@RequestParam(value = "consultaId", required = true) Long consultaId,
@Valid @ModelAttribute("expedientInformeCommand") Object filtreCommand,
BindingResult bindingResult,
@RequestParam(value = "accio", required = false) String accio,
Model model) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
if ("netejar".equals(accio)) {
SessionHelper.removeAttribute(request, SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS + consultaId);
filtreCommand = getFiltreCommand(request, consultaId);
} else {
ConsultaDto consulta = dissenyService.findConsulteById(consultaId);
model.addAttribute("consulta", consulta);
model.addAttribute("campsFiltre", expedientService.findConsultaFiltre(consultaId));
model.addAttribute("campsInforme", expedientService.findConsultaInforme(consultaId));
model.addAttribute("campsInformeParams", expedientService.findConsultaInformeParams(consultaId));
List<EstatDto> estats = dissenyService.findEstatByExpedientTipus(consulta.getExpedientTipus().getId());
estats.add(0, new EstatDto(0L, "0", getMessage(request, "expedient.consulta.iniciat")));
estats.add(new EstatDto(-1L, "-1", getMessage(request, "expedient.consulta.finalitzat")));
model.addAttribute("estats", estats);
}
SessionHelper.setAttribute(
request,
SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS + consultaId,
filtreCommand);
model.addAttribute("expedientInformeCommand", filtreCommand);
return "v3/expedientInforme";
}
@RequestMapping(value = "/{consultaId}/datatable", method = RequestMethod.GET)
@ResponseBody
public DatatablesPagina<ExpedientConsultaDissenyDto> datatable(
HttpServletRequest request,
@PathVariable Long consultaId,
HttpSession session,
Model model) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Object filtreCommand = SessionHelper.getAttribute(
request,
SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS + consultaId);
List<TascaDadaDto> campsFiltre = expedientService.findConsultaFiltre(consultaId);
Map<String, Object> valors = TascaFormHelper.getValorsFromCommand(
campsFiltre,
filtreCommand,
true);
PaginaDto<ExpedientConsultaDissenyDto> listaExpedients = expedientService.findConsultaInformePaginat(
consultaId,
getValorsPerService(filtreCommand,campsFiltre, valors),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesMeves"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesAlertes"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "mostrarAnulats"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesTasquesPersonals"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesTasquesGrup"),
PaginacioHelper.getPaginacioDtoFromDatatable(request)
);
SessionHelper.setAttribute(
request,
SessionHelper.VARIABLE_SESSIO_COMMAND_VALUES+consultaId,
valors);
return PaginacioHelper.getPaginaPerDatatables(
request,
listaExpedients);
}
@RequestMapping(value = "/{consultaId}/exportar_excel", method = RequestMethod.GET)
public void exportarExcel(
HttpServletRequest request,
HttpServletResponse response,
@PathVariable Long consultaId,
HttpSession session,
Model model) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
@SuppressWarnings("unchecked")
Map<String, Object> valors = (Map<String, Object>) session.getAttribute(SessionHelper.VARIABLE_SESSIO_COMMAND_VALUES+consultaId);
Object filtreCommand = SessionHelper.getAttribute(
request,
SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS + consultaId);
List<ExpedientConsultaDissenyDto> expedientsConsultaDissenyDto = expedientService.findConsultaDissenyPaginat(
consultaId,
valors,
null,
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesMeves"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesAlertes"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "mostrarAnulats"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesTasquesPersonals"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesTasquesGrup"),
null);
exportXLS(request, response, session, expedientsConsultaDissenyDto);
}
@RequestMapping(value = "/{consultaId}/mostrar_informe_params", method = RequestMethod.GET)
public String mostrarInformeParams(
HttpServletRequest request,
@PathVariable Long consultaId,
Model model) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
SessionHelper.removeAttribute(request, SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS_PARAM);
Object parametrosCommand = getFiltreParameterCommand(request, consultaId);
SessionHelper.setAttribute(request, SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS_PARAM, parametrosCommand);
model.addAttribute("expedientInformeParametrosCommand", parametrosCommand);
model.addAttribute("campsInformeParams", expedientService.findConsultaInformeParams(consultaId));
return "v3/expedientInformeParams";
}
@RequestMapping(value = "/{consultaId}/mostrar_informe_params", method = RequestMethod.POST)
public String mostrarInformeParams(
HttpServletRequest request,
@PathVariable Long consultaId,
@Valid @ModelAttribute("expedientInformeParametrosCommand") Object parametrosCommand,
BindingResult bindingResult,
@RequestParam(value = "accio", required = false) String accio,
HttpSession session,
Model model) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Map<String, Object> valors = TascaFormHelper.getValorsFromCommand(
expedientService.findConsultaInformeParams(consultaId),
parametrosCommand,
true);
model.addAttribute(JasperReportsView.MODEL_ATTRIBUTE_PARAMS, valors);
return generarReport(session, consultaId, model, request);
}
@RequestMapping(value = "/{consultaId}/mostrar_informe", method = RequestMethod.GET)
public String descargar(
HttpServletRequest request,
@PathVariable Long consultaId,
HttpSession session,
Model model) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
return generarReport(session, consultaId, model, request);
}
private String generarReport(HttpSession session, Long consultaId, Model model, HttpServletRequest request) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
@SuppressWarnings("unchecked")
Map<String, Object> valors = (Map<String, Object>) session.getAttribute(SessionHelper.VARIABLE_SESSIO_COMMAND_VALUES+consultaId);
// Només volem mostrar els expedients seleccionats (o tots si no se n'ha seleccionat cap)
SessionManager sessionManager = SessionHelper.getSessionManager(request);
Set<Long> expedientsIds = sessionManager.getSeleccioInforme(consultaId);
Object filtreCommand = SessionHelper.getAttribute(
request,
SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS + consultaId);
List<ExpedientConsultaDissenyDto> expedientsConsultaDissenyDto = expedientService.findConsultaDissenyPaginat(
consultaId,
valors,
null,
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesMeves"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesAlertes"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "mostrarAnulats"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesTasquesPersonals"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesTasquesGrup"),
expedientsIds);
if (expedientsConsultaDissenyDto.isEmpty()) {
MissatgesHelper.error(request, getMessage(request, "error.consulta.informe.expedients.nonhiha"));
getConsulta(request,consultaId,model);
return "redirect:/v3/informe/"+consultaId;
}
model.addAttribute(
JasperReportsView.MODEL_ATTRIBUTE_REPORTDATA,
getDadesDatasource(request, expedientsConsultaDissenyDto));
ConsultaDto consulta = dissenyService.findConsulteById(consultaId);
String extensio = consulta.getInformeNom().substring(
consulta.getInformeNom().lastIndexOf(".") + 1).toLowerCase();
String nom = consulta.getInformeNom().substring(0,
consulta.getInformeNom().lastIndexOf("."));
String formatExportacio = consulta.getFormatExport();
request.setAttribute("formatJR", formatExportacio);
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());
return "jasperReportsView";
}
private 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;
}
private List<Map<String, FieldValue>> getDadesDatasource(HttpServletRequest request, 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);
String fieldName = dada.getReportFieldName();
if (ExpedientCamps.EXPEDIENT_CAMP_ESTAT_JSP.equals(clau))
fieldName = ExpedientCamps.EXPEDIENT_CAMP_ESTAT.replace('$', '%');
mapFila.put(fieldName, toReportField(request, expedient, dada));
}
dadesDataSource.add(mapFila);
}
return dadesDataSource;
}
private FieldValue toReportField(HttpServletRequest request, ExpedientDto expedient, DadaIndexadaDto dadaIndex) {
FieldValue field = new FieldValue(
dadaIndex.getDefinicioProcesCodi(),
dadaIndex.getReportFieldName(),
dadaIndex.getEtiqueta());
if (!dadaIndex.isMultiple()) {
field.setValor(dadaIndex.getValor());
if (ExpedientCamps.EXPEDIENT_CAMP_ESTAT_JSP.equals(field.getCampCodi())) {
if (expedient.getDataFi() != null) {
field.setValorMostrar(getMessage(request, "expedient.consulta.finalitzat"));
} else {
if (expedient.getEstat() != null)
field.setValorMostrar(expedient.getEstat().getNom());
else
field.setValorMostrar(getMessage(request, "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 {
field.setValorOrdreMultiple(dadaIndex.getValorIndexMultiple());
}
}
field.setMultiple(dadaIndex.isMultiple());
return field;
}
@SuppressWarnings("static-access")
private Map<String, Object> getValorsPerService(Object filtreCommand, List<TascaDadaDto> camps, Map<String, Object> valors) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Map<String, Object> valorsPerService = new HashMap<String, Object>();
for (TascaDadaDto camp : camps) {
String clau = (camp.getDefinicioProcesKey() == null) ? camp.getVarCodi() : camp.getDefinicioProcesKey() + "." + camp.getVarCodi();
clau = camp.getVarCodi().replace(ExpedientCamps.EXPEDIENT_PREFIX_JSP, ExpedientCamps.EXPEDIENT_PREFIX);
if (camp.getCampTipus().BOOLEAN.equals(camp.getCampTipus()) && PropertyUtils.isReadable(filtreCommand, camp.getVarCodi())) {
Boolean valor = (Boolean) PropertyUtils.getSimpleProperty(filtreCommand, camp.getVarCodi());
valors.put(camp.getVarCodi(), valor);
}
valorsPerService.put(clau, valors.get(camp.getVarCodi()));
}
return valorsPerService;
}
@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());
}
private void createHeader(HSSFSheet sheet, List<ExpedientConsultaDissenyDto> expedientsConsultaDissenyDto) {
int rowNum = 0;
int colNum = 0;
// Capçalera
HSSFRow xlsRow = sheet.createRow(rowNum++);
HSSFCell cell;
cell = xlsRow.createCell(colNum++);
cell.setCellValue(new HSSFRichTextString(StringUtils.capitalize("Expedient")));
cell.setCellStyle(headerStyle);
Iterator<Entry<String, DadaIndexadaDto>> it = expedientsConsultaDissenyDto.get(0).getDadesExpedient().entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, DadaIndexadaDto> e = (Map.Entry<String, DadaIndexadaDto>)it.next();
sheet.autoSizeColumn(colNum);
cell = xlsRow.createCell(colNum++);
cell.setCellValue(new HSSFRichTextString(StringUtils.capitalize(e.getValue().getEtiqueta())));
cell.setCellStyle(headerStyle);
}
}
private void exportXLS(HttpServletRequest request, HttpServletResponse response, HttpSession session, List<ExpedientConsultaDissenyDto> expedientsConsultaDissenyDto) {
wb = new HSSFWorkbook();
bold = wb.createFont();
bold.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
bold.setColor(HSSFColor.WHITE.index);
greyFont = wb.createFont();
greyFont.setColor(HSSFColor.GREY_25_PERCENT.index);
greyFont.setCharSet(HSSFFont.ANSI_CHARSET);
cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat("dd/MM/yyyy HH:mm"));
cellStyle.setWrapText(true);
cellGreyStyle = wb.createCellStyle();
cellGreyStyle.setDataFormat(wb.getCreationHelper().createDataFormat().getFormat("dd/MM/yyyy HH:mm"));
cellGreyStyle.setWrapText(true);
cellGreyStyle.setFont(greyFont);
headerStyle = wb.createCellStyle();
headerStyle.setFillPattern(HSSFCellStyle.FINE_DOTS);
headerStyle.setFillBackgroundColor(HSSFColor.GREY_80_PERCENT.index);
headerStyle.setFont(bold);
greyStyle = wb.createCellStyle();
greyStyle.setFont(greyFont);
DataFormat format = wb.createDataFormat();
dStyle = wb.createCellStyle();
dStyle.setDataFormat(format.getFormat("0.00"));
dGreyStyle = wb.createCellStyle();
dGreyStyle.setFont(greyFont);
dGreyStyle.setDataFormat(format.getFormat("0.00"));
// GENERAL
HSSFSheet sheet = wb.createSheet("Hoja 1");
if (!expedientsConsultaDissenyDto.isEmpty())
createHeader(sheet, expedientsConsultaDissenyDto);
int rowNum = 1;
for (ExpedientConsultaDissenyDto expedientConsultaDissenyDto : expedientsConsultaDissenyDto) {
try {
HSSFRow xlsRow = sheet.createRow(rowNum++);
int colNum = 0;
ExpedientDto exp = expedientConsultaDissenyDto.getExpedient();
Map<String, DadaIndexadaDto> dades = expedientConsultaDissenyDto.getDadesExpedient();
String titol = "";
if (exp != null) {
if (exp.getNumero() != null)
titol = "[" + exp.getNumero() + "]";
if (exp.getTitol() != null)
titol += (titol.length() > 0 ? " " : "") + exp.getTitol();
if (titol.length() == 0)
titol = exp.getNumeroDefault();
}
sheet.autoSizeColumn(colNum);
HSSFCell cell = xlsRow.createCell(colNum++);
cell.setCellValue(titol);
cell.setCellStyle(dStyle);
Iterator<Entry<String, DadaIndexadaDto>> it = dades.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<String, DadaIndexadaDto> e = (Map.Entry<String, DadaIndexadaDto>)it.next();
sheet.autoSizeColumn(colNum);
cell = xlsRow.createCell(colNum++);
DadaIndexadaDto val = e.getValue();
cell.setCellValue(StringEscapeUtils.unescapeHtml(val.getValorMostrar()));
cell.setCellStyle(dStyle);
}
} catch (Exception e) {
logger.error("Export Excel: No s'ha pogut crear la línia: " + rowNum + " - amb ID: " + expedientConsultaDissenyDto.getExpedient().getId(), e);
}
}
try {
String fileName = "Informe.xls";
response.setHeader("Pragma", "");
response.setHeader("Expires", "");
response.setHeader("Cache-Control", "");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
response.setContentType(new MimetypesFileTypeMap().getContentType(fileName));
wb.write( response.getOutputStream() );
} catch (Exception e) {
logger.error("Mesures temporals: No s'ha pogut realitzar la exportació.");
}
}
@RequestMapping(value = "/{consultaId}/selection", method = RequestMethod.POST)
@ResponseBody
public Set<Long> seleccio(
HttpServletRequest request,
@PathVariable Long consultaId,
@RequestParam(value = "ids", required = false) String ids) {
SessionManager sessionManager = SessionHelper.getSessionManager(request);
Set<Long> seleccio = sessionManager.getSeleccioInforme(consultaId);
if (seleccio == null) {
seleccio = new HashSet<Long>();
sessionManager.setSeleccioInforme(seleccio, consultaId);
}
if (ids != null) {
String[] idsparts = (ids.contains(",")) ? ids.split(",") : new String[] {ids};
for (String id: idsparts) {
try {
long l = Long.parseLong(id.trim());
if (l >= 0) {
seleccio.add(l);
} else {
seleccio.remove(-l);
}
} catch (NumberFormatException ex) {}
}
}
return seleccio;
}
@RequestMapping(value = "/{consultaId}/seleccioTots")
@ResponseBody
public Set<Long> seleccionarTots(
HttpServletRequest request,
@PathVariable Long consultaId) throws IllegalAccessException, InvocationTargetException, NoSuchMethodException {
Object filtreCommand = getFiltreCommand(request, consultaId);
List<TascaDadaDto> campsFiltre = expedientService.findConsultaFiltre(consultaId);
Map<String, Object> valors = TascaFormHelper.getValorsFromCommand(
campsFiltre,
filtreCommand,
true);
List<Long> ids = expedientService.findIdsPerConsultaInforme(
consultaId,
getValorsPerService(filtreCommand,campsFiltre, valors),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesMeves"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesAlertes"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "mostrarAnulats"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesTasquesPersonals"),
(Boolean) PropertyUtils.getSimpleProperty(filtreCommand, "nomesTasquesGrup"));
SessionManager sessionManager = SessionHelper.getSessionManager(request);
Set<Long> seleccio = sessionManager.getSeleccioInforme(consultaId);
if (seleccio == null) {
seleccio = new HashSet<Long>();
sessionManager.setSeleccioInforme(seleccio, consultaId);
}
if (ids != null) {
for (Long id: ids) {
try {
if (id >= 0) {
seleccio.add(id);
} else {
seleccio.remove(-id);
}
} catch (NumberFormatException ex) {}
}
Iterator<Long> iterador = seleccio.iterator();
while( iterador.hasNext() ) {
if (!ids.contains(iterador.next())) {
iterador.remove();
}
}
}
return seleccio;
}
@RequestMapping(value = "/{consultaId}/seleccioNetejar")
@ResponseBody
public Set<Long> seleccioNetejar(
HttpServletRequest request,
@PathVariable Long consultaId) {
SessionManager sessionManager = SessionHelper.getSessionManager(request);
Set<Long> ids = sessionManager.getSeleccioInforme(consultaId);
ids.clear();
return ids;
}
@ModelAttribute("valorsBoolea")
public List<ParellaCodiValorDto> valorsBoolea(HttpServletRequest request) {
List<ParellaCodiValorDto> resposta = new ArrayList<ParellaCodiValorDto>();
resposta.add(new ParellaCodiValorDto("true", getMessage(request, "comuns.si")));
resposta.add(new ParellaCodiValorDto("false", getMessage(request, "comuns.no")));
return resposta;
}
@ModelAttribute("listTerminis")
public List<ParellaCodiValorDto> valors12(HttpServletRequest request) {
List<ParellaCodiValorDto> resposta = new ArrayList<ParellaCodiValorDto>();
for (int i=0; i <= 12 ; i++)
resposta.add(new ParellaCodiValorDto(String.valueOf(i), i));
return resposta;
}
private static final Logger logger = LoggerFactory.getLogger(ExpedientInformeController.class);
}