maia/.svn/pristine/6f/6fab8fe39da596a54072c85877a...

283 lines
8.6 KiB
Plaintext
Executable File

package com.fp.frontend.controller.armas.parametros;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import org.primefaces.context.RequestContext;
import com.fp.dto.Request;
import com.fp.dto.Response;
import com.fp.dto.query.DtoQuery;
import com.fp.dto.query.Filter;
import com.fp.dto.save.DtoSave;
import com.fp.frontend.controller.AbstractController;
import com.fp.frontend.controller.pgeneral.gene.CatalogDetailController;
import com.fp.frontend.enums.EnumLovOption;
import com.fp.frontend.helper.CallerHelper;
import com.fp.frontend.helper.MessageHelper;
import com.fp.persistence.parmas.eval.TarmPreguntas;
import com.fp.persistence.parmas.eval.TarmRespuestas;
/**
* Clase controller de respuestas para preguntas
*
* @author Christian Pazmino
* @version 2.1
*/
@ManagedBean
@ViewScoped
public class RespuestasLovController extends AbstractController<TarmRespuestas> {
private static final long serialVersionUID = 1L;
/**
* Variable que contiene la pregunta a las que corresponden las respuestas presentadas
*/
private TarmPreguntas pregunta;
/**
* Variable de tipo boleano que indica si una respuesta es o no correcta
*/
private Boolean isCorrecta;
/**
* Estado de la respuesta
*/
private String estado;
/**
* Constante usada para referirse al estado activo de una respuesta
*/
private final String ESTADOACTIVO = "ACT";
/**
* Constante usada para referirse al estado inactivo de una respuesta
*/
private final String ESTADOINACTIVO = "INA";
/**
* Referencia al controlador de la clase pregunta
*/
@ManagedProperty(value = "#{preguntasParaEvaluacionesController}")
private PreguntasParaEvaluacionesController preguntasController;
public RespuestasLovController() throws Exception {
super(TarmRespuestas.class);
}
@PostConstruct
private void postconstruct() {
this.init();
try {
String preguntaPK = CallerHelper.getLovParameter("preguntaPK");
pregunta = PreguntasParaEvaluacionesController.find(preguntaPK).get(0);
if(pregunta.getEstadopregunta().equalsIgnoreCase(ESTADOACTIVO)){
estado = CatalogDetailController.findxCodigoCodcatalogo(ESTADOACTIVO, "ESTADOPRUEBAS").getDescription();
}else if (pregunta.getEstadopregunta().equalsIgnoreCase(ESTADOINACTIVO)){
estado = CatalogDetailController.findxCodigoCodcatalogo(ESTADOINACTIVO, "ESTADOPRUEBAS").getDescription();
}
this.addFilter("cpregunta", pregunta.getPk().toString());
this.querydatabase();
//super.startQuery();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* Incializa el controlador, cuando se esta utilizando una pagina que utliza el controlador.
*/
private void init() {
try {
this.recperpage = 15; // Cambiar al # reg a mirar.
this.lrecord = new ArrayList<>();
this.beanalias = "RESPUESTASLOV";
} catch (Exception e) {
MessageHelper.setMessageError(e);
}
}
@SuppressWarnings("unchecked")
@Override
protected void querydatabase() {
try {
Request request = this.callerhelper.getRequest();
DtoQuery dto = super.getDtoQuery(true);
dto.setOrderby("t.descripcion");
Filter f = new Filter();
f.setSql("t.isactive = 'Y'");
dto.addFiltro(f);
HashMap<String, DtoQuery> mtables = new HashMap<String, DtoQuery>();
mtables.put(this.beanalias, dto); // permite adicionar mas de una tabla.
request.setQueryTables(mtables);
Response resp = this.callerhelper.executeQuery(request);
if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) != 0) {
this.lrecord = new ArrayList<TarmRespuestas>();
MessageHelper.setMessageError(resp);
} else {
this.lrecord = (List<TarmRespuestas>) resp.get(this.beanalias);
super.postQuery(this.lrecord);
}
} catch (Throwable e) {
MessageHelper.setMessageError(e);
}
}
/**
* Abre el dialogo de crear/editar respuestas desde la pantalla de respuestas
*/
public static void openLov(Map<String, List<String>> params) {
Map<String, Object> options = new HashMap<String, Object>();
options.put(EnumLovOption.MODAL.getLabel(), true);
options.put(EnumLovOption.HEIGHT.getLabel(), 450);
options.put(EnumLovOption.WIDTH.getLabel(), 700);
options.put(EnumLovOption.RESIZABLE.getLabel(), false);
RequestContext.getCurrentInstance().openDialog("/pages/armas/lov/respuestasLov.xhtml", options, params);
}
/**
* Crea una instancia y marca el registro como nuevo.
*
* @throws Exception
*/
@Override
public void create() throws Exception {
super.create();
isCorrecta = false;
record.setCpregunta(pregunta.getPk());
record.setIsactive("Y");
}
/**
* Actualiza la lista de registros a grabar
*
* @throws Exception
*/
public void update() throws Exception {
if(record.getEscorrecta()==null){
record.setEscorrecta("N");
}
super.update();
}
public void eliminarLogico() throws Exception{
record.setIsactive("N");
super.update();
this.lrecord.remove(record);
}
@Override
public void save() {
try {
if(lrecord.size()>=2){
int numRespuestasCorrectas = 0;
for(TarmRespuestas respuesta : lrecord){
if(respuesta.getEscorrecta().equals("Y")){
numRespuestasCorrectas++;
}
if(numRespuestasCorrectas>1){
break;
}
}
if(numRespuestasCorrectas==1){
DtoSave dtosave = super.getDtoSave();
dtosave.setReturnpk(true); // Para que el core devuelva el pk de los
// registros nuevos.
HashMap<String, DtoSave> msave = new HashMap<String, DtoSave>();
Request request = callerhelper.getRequest();
msave.put(beanalias, dtosave); // adicionar metadata de
// mantenimiento para cada tabla.
request.setSaveTables(msave);
Response resp = callerhelper.executeSave(request);
if (resp.getResponseCode().compareTo(Response.RESPONSE_OK) == 0) {
this.postCommit(resp);
MessageHelper.setMessageInfo(resp);
} else {
MessageHelper.setMessageError(resp);
}
// Cambiar el estado de la pregunta
if(pregunta.getEstadopregunta().equalsIgnoreCase(ESTADOINACTIVO)){
pregunta.isnew = false;
pregunta.setEstadopregunta(ESTADOACTIVO);
preguntasController.update(pregunta);
preguntasController.save();
}
RequestContext.getCurrentInstance().closeDialog(pregunta);
}
else if(numRespuestasCorrectas>1){
MessageHelper.setMessageError("LA PREGUNTA PUEDE TENER MARCADA SOLO UNA RESPUESTA CORRECTA");
}else if(numRespuestasCorrectas==0){
MessageHelper.setMessageError("LA PREGUNTA DEBE TENER MARCADA UNA RESPUESTA CORRECTA");
}
}else{
MessageHelper.setMessageError("DEBEN HABER AL MENOS DOS RESPUESTAS");
}
} catch (Throwable e) {
MessageHelper.setMessageError(e);
}
}
public TarmPreguntas getPregunta() {
return pregunta;
}
public void setPregunta(TarmPreguntas pregunta) {
this.pregunta = pregunta;
}
public Boolean getIsCorrecta() {
return isCorrecta;
}
public void setIsCorrecta(Boolean isCorrecta) {
this.isCorrecta = isCorrecta;
}
/**
* Metodo para manejar el evento change en el CheckBox "respuesta correcta" y convertir valor TRUE en "Y" y FALSE en "N"
*/
public void onChangeEsCorrecta() {
if (isCorrecta) {
record.setEscorrecta("Y");
} else {
record.setEscorrecta("N");
}
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public PreguntasParaEvaluacionesController getPreguntasController() {
return preguntasController;
}
public void setPreguntasController(
PreguntasParaEvaluacionesController preguntasController) {
this.preguntasController = preguntasController;
}
}