/**
*
*/
package net.conselldemallorca.helium.webapp.mvc;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
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.ExpedientTipus;
import net.conselldemallorca.helium.core.model.service.DissenyService;
import net.conselldemallorca.helium.core.model.service.PermissionService;
import net.conselldemallorca.helium.webapp.mvc.util.BaseController;
import net.conselldemallorca.helium.webapp.v3.helper.SessionHelper;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.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 org.springframework.web.bind.support.SessionStatus;
/**
* Controlador per la gestiĆ³ dels camps de les consultes
*
* @author Limit Tecnologies <limit@limit.es>
*/
@Controller
public class ConsultaCampController extends BaseController {
private DissenyService dissenyService;
@Autowired
public ConsultaCampController(
DissenyService dissenyService,
PermissionService permissionService) {
this.dissenyService = dissenyService;
}
@ModelAttribute("command")
public ConsultaCamp populateCommand(
HttpServletRequest request) {
return new ConsultaCamp();
}
@RequestMapping(value = "/consulta/camps", method = RequestMethod.GET)
public String get(
HttpServletRequest request,
@RequestParam(value = "id", required = true) Long id,
@RequestParam(value = "tipus", required = true) TipusConsultaCamp tipus,
ModelMap model) {
Entorn entorn = getEntornActiu(request);
if (entorn != null) {
Consulta consulta = dissenyService.getConsultaById(id);
model.addAttribute("llistat", dissenyService.findCampsConsulta(id, tipus));
model.addAttribute("camps", dissenyService.findCampsPerCampsConsulta(
id,
tipus,
false));
model.addAttribute("consulta", consulta);
model.addAttribute(
"definicionsProces",
dissenyService.findDarreresAmbExpedientTipusEntorn(
entorn.getId(),
consulta.getExpedientTipus().getId(),
true));
return "consulta/camps";
} else {
missatgeError(request, getMessage("error.no.entorn.selec") );
return "redirect:/index.html";
}
}
@RequestMapping(value = "/consulta/camps", method = RequestMethod.POST)
public String getForm(
HttpServletRequest request,
@RequestParam(value = "id", required = true) Long id,
@RequestParam(value = "tipus", required = true) TipusConsultaCamp tipus,
// @RequestParam(value = "informeContingut", required = false) final MultipartFile multipartFile,
@RequestParam(value = "submit", required = false) String submit,
@ModelAttribute("command") ConsultaCamp command,
BindingResult result,
SessionStatus status,
HttpSession session,
ModelMap model) {
Entorn entorn = getEntornActiu(request);
if (entorn != null) {
if (("submit".equals(submit)) || (submit.length() == 0)) {
command.setId(null);
command.setTipus(tipus);
Consulta consulta = dissenyService.getConsultaById(id);
// consulta.setInformeNom(null);
// consulta.setInformeContingut(null);
// if (multipartFile != null && multipartFile.getSize() > 0) {
// try {
// consulta.setInformeContingut(multipartFile.getBytes());
// consulta.setInformeNom(multipartFile.getOriginalFilename());
// } catch (Exception ignored) {}
// }
command.setConsulta(consulta);
try {
dissenyService.createConsultaCamp(command);
session.removeAttribute(SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS + id);
missatgeInfo(request, getMessage("info.camp.consulta.afegit") );
status.setComplete();
} catch (Exception ex) {
missatgeError(request, getMessage("error.proces.peticio"), ex.getLocalizedMessage());
logger.error("No s'ha pogut afegir el camp a la consulta", ex);
return "redirect:/consulta/camps.html?id=" + id + "&tipus=" + tipus;
}
return "redirect:/consulta/camps.html?id=" + id + "&tipus=" + tipus;
} else {
return "redirect:/consulta/llistat.html";
}
} else {
missatgeError(request, getMessage("error.no.entorn.selec") );
return "redirect:/index.html";
}
}
@RequestMapping(value = "/consulta/campDelete")
public String deleteAction(
HttpServletRequest request,
@RequestParam(value = "id", required = true) Long id,
@RequestParam(value = "consultaId", required = true) Long consultaId,
@RequestParam(value = "tipus", required = true) TipusConsultaCamp tipus,
HttpSession session) {
Entorn entorn = getEntornActiu(request);
if (entorn != null) {
try {
dissenyService.deleteConsultaCamp(id);
session.removeAttribute(SessionHelper.VARIABLE_FILTRE_CONSULTA_TIPUS + consultaId);
missatgeInfo(request, getMessage("info.camp.consulta.esborrat") );
} catch (Exception ex) {
missatgeError(request, getMessage("error.esborrar.camp.consulta"), ex.getLocalizedMessage());
logger.error("No s'ha pogut esborrar el registre", ex);
}
return "redirect:/consulta/camps.html?id=" + consultaId + "&tipus=" + tipus;
} else {
missatgeError(request, getMessage("error.no.entorn.selec") );
return "redirect:/index.html";
}
}
@RequestMapping(value = "/consulta/campFiltrePujar")
public String pujarCamp(
HttpServletRequest request,
@RequestParam(value = "id", required = true) Long id,
@RequestParam(value = "tipus", required = true) TipusConsultaCamp tipus,
@RequestParam(value = "consultaId", required = true) Long consultaId) {
Entorn entorn = getEntornActiu(request);
if (entorn != null) {
try {
dissenyService.goUpConsultaCamp(id);
} catch (Exception ex) {
missatgeError(request, getMessage("error.canviar.ordre.camp.consulta"), ex.getLocalizedMessage());
logger.error("No s'ha pogut canviar l'ordre del camp de la consulta", ex);
}
return "redirect:/consulta/camps.html?id=" + consultaId + "&tipus=" + tipus;
} else {
missatgeError(request, getMessage("error.no.entorn.selec") );
return "redirect:/index.html";
}
}
@RequestMapping(value = "/consulta/campFiltreBaixar")
public String baixarCamp(
HttpServletRequest request,
@RequestParam(value = "id", required = true) Long id,
@RequestParam(value = "tipus", required = true) TipusConsultaCamp tipus,
@RequestParam(value = "consultaId", required = true) Long consultaId) {
Entorn entorn = getEntornActiu(request);
if (entorn != null) {
try {
dissenyService.goDownConsultaCamp(id);
} catch (Exception ex) {
missatgeError(request, getMessage("error.canviar.ordre.camp.consulta"), ex.getLocalizedMessage());
logger.error("No s'ha pogut canviar l'ordre del camp de la consulta", ex);
}
return "redirect:/consulta/camps.html?id=" + consultaId + "&tipus=" + tipus;
} else {
missatgeError(request, getMessage("error.no.entorn.selec"));
return "redirect:/index.html";
}
}
@RequestMapping(value = "/consulta/reportDownload")
public String downloadAction(
HttpServletRequest request,
@RequestParam(value = "id", required = true) Long id,
@RequestParam(value = "consultaId", required = true) Long consultaId,
@RequestParam(value = "tipus", required = true) TipusConsultaCamp tipus,
ModelMap model) {
Entorn entorn = getEntornActiu(request);
if (entorn != null) {
try {
Consulta consulta = dissenyService.getConsultaById(consultaId);
List<Camp> camps = dissenyService.findCampsPerCampsConsulta(
consultaId,
tipus,
false);
/*List<ConsultaCamp> campsConsulta = dissenyService.findCampsConsulta(consultaId, tipus);
List<String> fieldNames = new ArrayList<String>();
for (ConsultaCamp camp: campsConsulta) {
String definicioProces = camp.getDefprocJbpmKey();
String codiVariable = camp.getCampCodi();
if (definicioProces!=null && codiVariable!=null)
fieldNames.add(definicioProces + "/"+ codiVariable);
else if (codiVariable!=null)
fieldNames.add(codiVariable);
}*/
String jasperReport = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<jasperReport xmlns=\"http://jasperreports.sourceforge.net/jasperreports\" " +
"xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" " +
"xsi:schemaLocation=\"http://jasperreports.sourceforge.net/jasperreports " +
"http://jasperreports.sourceforge.net/xsd/jasperreport.xsd\" " +
"name=\"report_basic\" language=\"groovy\" pageWidth=\"842\" pageHeight=\"595\" " +
"orientation=\"Landscape\" columnWidth=\"802\" leftMargin=\"20\" " +
"rightMargin=\"20\" topMargin=\"20\" bottomMargin=\"20\">" +
"\n<property name=\"ireport.zoom\" value=\"1.0\"/>" +
"\n<property name=\"ireport.x\" value=\"0\"/>" +
"\n<property name=\"ireport.y\" value=\"0\"/>";
for (Camp camp: camps) {
jasperReport = jasperReport + "\n<field name=\"" + camp.getCodiPerInforme() +"\" class=\"net.conselldemallorca.helium.report.FieldValue\"/>";
}
jasperReport = jasperReport +
"\n<title>" +
"\n<band height=\"30\" splitType=\"Stretch\">" +
"\n<staticText>" +
"\n<reportElement x=\"0\" y=\"0\" width=\"750\" height=\"26\"/>" +
"\n<textElement>" +
"\n<font size=\"18\" isBold=\"true\"/>" +
"\n</textElement>" +
"\n<text>" + consulta.getNom() +"</text>" +
"\n</staticText>" +
"\n</band>" +
"\n</title>" +
"\n<pageHeader>" +
"\n<band height=\"30\" splitType=\"Stretch\"/> " +
"\n</pageHeader>" +
"\n<columnHeader>" +
"\n<band height=\"25\" splitType=\"Stretch\">";
int widthField = 0;
if (camps.size()>0) widthField = 800/camps.size();
int xPosition = 0;
for (Camp camp: camps) {
jasperReport = jasperReport +
"\n<staticText>" +
"\n<reportElement x=\""+xPosition+"\" y=\"2\" width=\""+widthField+"\" height=\"20\"/>" +
"\n<textElement/>" +
"\n<text><![CDATA[" + camp.getEtiqueta() + "]]></text>" +
"\n</staticText>";
xPosition = xPosition + widthField;
}
jasperReport = jasperReport +
"\n</band>" +
"\n</columnHeader>" +
"\n<detail>" +
"\n<band height=\"24\" splitType=\"Stretch\">";
xPosition = 0;
for (Camp camp: camps) {
jasperReport = jasperReport +
"\n<textField>" +
"\n<reportElement x=\""+xPosition+"\" y=\"4\" width=\""+widthField+"\" height=\"20\"/>" +
"\n<textElement/>" +
"\n<textFieldExpression><![CDATA[$F{"+camp.getCodiPerInforme()+"}]]></textFieldExpression>" +
"\n</textField>";
xPosition = xPosition + widthField;
}
jasperReport=jasperReport +
"\n</band>" +
"\n</detail>" +
"\n<columnFooter>" +
"\n<band height=\"25\" splitType=\"Stretch\"/>" +
"\n</columnFooter>" +
"\n<pageFooter>" +
"\n<band height=\"30\" splitType=\"Stretch\"/>" +
"\n</pageFooter>" +
"\n</jasperReport>";
String nomInforme = consulta.getInformeNom();
if (nomInforme==null) nomInforme = "report_"+consulta.getCodi()+".jrxml";
byte[] byteArray = jasperReport.getBytes();
model.addAttribute(
ArxiuView.MODEL_ATTRIBUTE_FILENAME,
nomInforme);
model.addAttribute(
ArxiuView.MODEL_ATTRIBUTE_DATA,
byteArray);
return "arxiuView";
} catch (Exception e) {
e.printStackTrace();
return "redirect:/consulta/llistat.html";
}
} else {
missatgeError(request, getMessage("error.no.entorn.selec") );
return "redirect:/index.html";
}
}
@InitBinder
public void initBinder(WebDataBinder binder) {
binder.registerCustomEditor(
ExpedientTipus.class,
new ExpedientTipusTypeEditor(dissenyService));
}
private static final Log logger = LogFactory.getLog(ConsultaCampController.class);
}