diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/componente/esquemaoperacional/GridRutaTramoCoeficiente.java b/src/java/com/rjconsultores/ventaboletos/web/gui/componente/esquemaoperacional/GridRutaTramoCoeficiente.java index 2cf12f460..957a28906 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/componente/esquemaoperacional/GridRutaTramoCoeficiente.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/componente/esquemaoperacional/GridRutaTramoCoeficiente.java @@ -4,6 +4,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang.BooleanUtils; import org.apache.log4j.Logger; import org.zkoss.util.resource.Labels; import org.zkoss.zk.ui.event.Event; @@ -48,13 +49,15 @@ import com.rjconsultores.ventaboletos.vo.esquemaoperacional.SecuenciaRutaTramoCo public class GridRutaTramoCoeficiente extends Grid implements RowRenderer, RendererCtrl { private static final long serialVersionUID = 1L; + private static final String CONSTRAINT_NO_EMPTY = "no empty"; + private static final String VALOR_COMBO_NAO = "Não"; + private static final String VALOR_COMBO_SIM = "Sim"; private List lsVias; private List lsCoeficientes; private List lsSecuenciaRutaTramoCoeficienteVO; private ClaseServicio claseServicio; private OrgaoConcedente orgaoConcedente; private DataBinder dataBinder; -// private Combobox cboVenda; private static Logger log = Logger.getLogger(GridRutaTramoCoeficiente.class); public GridRutaTramoCoeficiente() { @@ -122,99 +125,243 @@ public class GridRutaTramoCoeficiente extends Grid implements RowRenderer, Rende private Columns generarColumns() { Columns columns = new Columns(); - Column columnSecuencia = new Column("#"); - columnSecuencia.setWidth("1%"); - columns.appendChild(columnSecuencia); - - Column columnOrigen = new Column(Labels.getLabel("gridRutaSecuencia.columnOrigen.label")); - columnOrigen.setWidth("20%"); - columns.appendChild(columnOrigen); - - Column columnDestino = new Column(Labels.getLabel("gridRutaSecuencia.columnDestino.label")); - columnDestino.setWidth("20%"); - columns.appendChild(columnDestino); - - Column columnVia = new Column(Labels.getLabel("gridRutaSecuencia.columnVia.label")); - columnVia.setWidth("15%"); - columns.appendChild(columnVia); - - Column permiteVenda = new Column(Labels.getLabel("gridRutaSecuencia.columnVenda.label")); - permiteVenda.setWidth("6%"); - columns.appendChild(permiteVenda); - - Column kmsReal = new Column(Labels.getLabel("gridRutaSecuencia.columnKmsReal.label")); - kmsReal.setWidth("6%"); - columns.appendChild(kmsReal); - - Column tiempoRecorrido = new Column(Labels.getLabel("gridRutaSecuencia.columnTiempoRecorrido.label")); - tiempoRecorrido.setWidth("10%"); - columns.appendChild(tiempoRecorrido); - - Column columnIDTramo = new Column(Labels.getLabel("gridRutaSecuencia.columnIDTramo.label")); - columnSecuencia.setWidth("6%"); - columns.appendChild(columnIDTramo); - - Column columnCoeficiente1 = new Column(Labels.getLabel("gridRutaSecuencia.columnCoeficiente1.label")); - columnCoeficiente1.setWidth("12%"); - columns.appendChild(columnCoeficiente1); - - Column columnKmCoeficiente1 = new Column(Labels.getLabel("gridRutaSecuencia.columnKmCoeficiente1.label")); - columnKmCoeficiente1.setWidth("5%"); - columns.appendChild(columnKmCoeficiente1); - - Column columnCoeficiente2 = new Column(Labels.getLabel("gridRutaSecuencia.columnCoeficiente2.label")); - columnCoeficiente2.setWidth("12%"); - columns.appendChild(columnCoeficiente2); - - Column columnKmCoeficiente2 = new Column(Labels.getLabel("gridRutaSecuencia.columnKmCoeficiente2.label")); - columnKmCoeficiente2.setWidth("5%"); - columns.appendChild(columnKmCoeficiente2); + columns.appendChild(criaColuna("#", "2%")); + columns.appendChild(criaColuna(Labels.getLabel("gridRutaSecuencia.columnOrigen.label"), "20%")); + columns.appendChild(criaColuna(Labels.getLabel("gridRutaSecuencia.columnDestino.label"), "20%")); + columns.appendChild(criaColuna(Labels.getLabel("gridRutaSecuencia.columnVia.label"), "15%")); + columns.appendChild(criaColuna(Labels.getLabel("gridRutaSecuencia.columnVenda.label"), "6%")); + columns.appendChild(criaColuna(Labels.getLabel("gridRutaSecuencia.columnKmsReal.label"), "6%")); + columns.appendChild(criaColuna(Labels.getLabel("gridRutaSecuencia.columnTiempoRecorrido.label"), "10%")); + columns.appendChild(criaColuna(Labels.getLabel("gridRutaSecuencia.columnIDTramo.label"), "6%")); + columns.appendChild(criaColuna(Labels.getLabel("gridRutaSecuencia.columnCoeficiente1.label"), "12%")); + columns.appendChild(criaColuna(Labels.getLabel("gridRutaSecuencia.columnKmCoeficiente1.label"), "5%")); + columns.appendChild(criaColuna(Labels.getLabel("gridRutaSecuencia.columnCoeficiente2.label"), "12%")); + columns.appendChild(criaColuna(Labels.getLabel("gridRutaSecuencia.columnKmCoeficiente2.label"), "5%")); return columns; } + private Column criaColuna(String label, String width) { + Column coluna = new Column(label); + coluna.setWidth(width); + return coluna; + } + @Override public void render(Row row, Object obj) throws Exception { final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO = (SecuenciaRutaTramoCoeficienteVO) obj; - // binder row->bean dataBinder.bindBean(row.getUuid(), secuenciaRutaTramoCoeficienteVO); - // Cell secuencia - Intbox ibxSumSecuencia = new Intbox(secuenciaRutaTramoCoeficienteVO.getSecuencia()); - ibxSumSecuencia.setWidth("50%"); - ibxSumSecuencia.setReadonly(true); - row.appendChild(ibxSumSecuencia); + row.appendChild(criaCellSequencia(secuenciaRutaTramoCoeficienteVO)); + row.appendChild(criaCellOrigem(secuenciaRutaTramoCoeficienteVO)); + row.appendChild(criaCellDestino(secuenciaRutaTramoCoeficienteVO)); + + final MyCustomTextboxDecimal dKmsReal = criaKmsReal(secuenciaRutaTramoCoeficienteVO, row.getUuid()); + final Spinner spHora = criaSpinerHora(secuenciaRutaTramoCoeficienteVO); + final Spinner spMinuto = criaSpinerMinuto(secuenciaRutaTramoCoeficienteVO); + final Label lblID = criaLabelId(secuenciaRutaTramoCoeficienteVO); + + final Combobox comboCoeficiente1 = criaCoeficienteTarifario1(secuenciaRutaTramoCoeficienteVO); + final MyCustomTextboxDecimal kmCoeficiente1 = criaKmCoeficiente1(secuenciaRutaTramoCoeficienteVO, row.getUuid() + ".kmCoeficiente1"); - // Cell Origen - String strOrigem = secuenciaRutaTramoCoeficienteVO.getOrigen().getCveparada() + " - " + secuenciaRutaTramoCoeficienteVO.getOrigen().getDescparada(); - Label lblOrigen = new Label(strOrigem); - lblOrigen.setWidth("80%"); - row.appendChild(lblOrigen); + final Combobox comboCoeficiente2 = criaCoeficienteTarifario2(secuenciaRutaTramoCoeficienteVO); + final MyCustomTextboxDecimal kmCoeficiente2 = criaKmCoeficiente2(secuenciaRutaTramoCoeficienteVO, row.getUuid() + ".kmCoeficiente2"); + + Combobox comboVia = criaCellComboVia(secuenciaRutaTramoCoeficienteVO); + comboVia.addEventListener(Events.ON_CHANGE, + new EventListenerComboVia(comboVia, spHora, spMinuto, lblID, kmCoeficiente2, + comboCoeficiente1, secuenciaRutaTramoCoeficienteVO, kmCoeficiente1, + comboCoeficiente2, dKmsReal)); + row.appendChild(comboVia); + + row.appendChild(criaCellComboVenda(secuenciaRutaTramoCoeficienteVO)); + + row.appendChild(dKmsReal); + + row.appendChild(criaCellHora(row, secuenciaRutaTramoCoeficienteVO.getTiempoRecorrido(), spHora, spMinuto)); - // Cell Destino - String strDestino = secuenciaRutaTramoCoeficienteVO.getDestino().getCveparada() + " - " + secuenciaRutaTramoCoeficienteVO.getDestino().getDescparada(); - Label lblDestino = new Label(strDestino); - lblDestino.setWidth("80%"); - row.appendChild(lblDestino); + row.appendChild(lblID); - // son creados antes pues el cboVia los estan ocupando - final MyCustomTextboxDecimal dKmsReal = new MyCustomTextboxDecimal((secuenciaRutaTramoCoeficienteVO.getKmReal() == null) ? BigDecimal.ZERO : secuenciaRutaTramoCoeficienteVO.getKmReal()); - dKmsReal.setWidth("90%"); + row.appendChild(comboCoeficiente1); + + row.appendChild(kmCoeficiente1); - final Spinner spHora = new Spinner(); - final Spinner spMinuto = new Spinner(); + row.appendChild(comboCoeficiente2); + + row.appendChild(kmCoeficiente2); + } + + private Hbox criaCellHora(Row row, final HoraSistema horaSistema, final Spinner spHora, final Spinner spMinuto) { + Hbox hbox = new Hbox(); + hbox.appendChild(spHora); + hbox.appendChild(new Label(":")); + hbox.appendChild(spMinuto); + + if (horaSistema != null) { + HoraSistema hora = horaSistema; + spHora.setValue(hora.getHora()); + spMinuto.setValue(hora.getMinuto()); + } + dataBinder.addBinding(spHora, "value", row.getUuid() + ".tiempoRecorrido.hora", null, null, "save", null, null, null, null); + dataBinder.addBinding(spMinuto, "value", row.getUuid() + ".tiempoRecorrido.minuto", null, null, "save", null, null, null, null); + return hbox; + } + + private MyCustomTextboxDecimal criaKmCoeficiente2(final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO, String rowId) { + final MyCustomTextboxDecimal kmCoeficiente2 = new MyCustomTextboxDecimal(); + + configuraKmCoeficiente(secuenciaRutaTramoCoeficienteVO, rowId, kmCoeficiente2, secuenciaRutaTramoCoeficienteVO.getKmCoeficiente2()); + + return kmCoeficiente2; + } + + private MyCustomTextboxDecimal criaKmCoeficiente1(final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO, String rowId) { + final MyCustomTextboxDecimal kmCoeficiente1 = new MyCustomTextboxDecimal(); + + configuraKmCoeficiente(secuenciaRutaTramoCoeficienteVO, rowId, kmCoeficiente1, secuenciaRutaTramoCoeficienteVO.getKmCoeficiente1()); + + return kmCoeficiente1; + } + + private void configuraKmCoeficiente(final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO, String rowId, final MyCustomTextboxDecimal kmCoeficiente, + final BigDecimal valorKmCoeficiente) { + kmCoeficiente.setValueBigDecimal(valorKmCoeficiente != null ? valorKmCoeficiente : BigDecimal.ZERO); + kmCoeficiente.setWidth("80%"); + kmCoeficiente.setReadonly(!possuiOrgao(secuenciaRutaTramoCoeficienteVO)); + dataBinder.addBinding(kmCoeficiente, "value", rowId, null, null, + "save", "com.rjconsultores.ventaboletos.web.utilerias.StringDecimalToDecimalConverter", null, null, null); + } + + private Combobox criaCellComboVenda(final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { + final Combobox comboVenda = new Combobox(); + comboVenda.setId(comboVenda.getUuid()); + comboVenda.setReadonly(true); + comboVenda.setWidth("100%"); + comboVenda.setConstraint(CONSTRAINT_NO_EMPTY); + + final ListModelList listComboVenda = configuraModelListComboVenda(secuenciaRutaTramoCoeficienteVO); + + comboVenda.setModel(listComboVenda); + + comboVenda.addEventListener(Events.ON_CHANGE, new EventListener() { + @Override + public void onEvent(Event evt) throws Exception { + secuenciaRutaTramoCoeficienteVO.setPermiteVenda( + VALOR_COMBO_SIM.equals(comboVenda.getSelectedItem().getValue())); + } + }); + + return comboVenda; + } + + private ListModelList configuraModelListComboVenda(SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { + final ListModelList listComboVenda = new ListModelList(); + + final Comboitem comboItemSim = new Comboitem(VALOR_COMBO_SIM); + comboItemSim.setValue(VALOR_COMBO_SIM); + + final Comboitem comboItemNao = new Comboitem(VALOR_COMBO_NAO); + comboItemNao.setValue(VALOR_COMBO_NAO); + + listComboVenda.add(comboItemSim.getValue()); + listComboVenda.add(comboItemNao.getValue()); + + if (getId().equalsIgnoreCase("gridrutasecuenciaida")) { + if (secuenciaRutaTramoCoeficienteVO.getPermiteVenda() == null) { + secuenciaRutaTramoCoeficienteVO.setPermiteVenda(false); + } + listComboVenda.addSelection(BooleanUtils.isTrue(secuenciaRutaTramoCoeficienteVO.getPermiteVenda()) + ? comboItemSim.getValue() : comboItemNao.getValue()); + } + return listComboVenda; + } + + private Combobox criaCoeficienteTarifario2(final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { + final Combobox cboCoeficiente = criaCoeficiente(secuenciaRutaTramoCoeficienteVO, + secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa2()); + cboCoeficiente.addEventListener(Events.ON_CHANGE, new EventListener() { + @Override + public void onEvent(Event arg0) throws Exception { + if (cboCoeficiente.getSelectedItem() == null) { + secuenciaRutaTramoCoeficienteVO.setCoeficienteTarifa2(null); + } else { + secuenciaRutaTramoCoeficienteVO.setCoeficienteTarifa2((CoeficienteTarifa) cboCoeficiente.getSelectedItem().getValue()); + } + } + + }); + return cboCoeficiente; + } + + private Combobox criaCoeficienteTarifario1(final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { + final Combobox cboCoeficiente = criaCoeficiente(secuenciaRutaTramoCoeficienteVO, secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa1()); + cboCoeficiente.addEventListener(Events.ON_CHANGE, new EventListener() { + @Override + public void onEvent(Event arg0) throws Exception { + if (cboCoeficiente.getSelectedItem() == null) { + secuenciaRutaTramoCoeficienteVO.setCoeficienteTarifa1(null); + } else { + secuenciaRutaTramoCoeficienteVO.setCoeficienteTarifa1((CoeficienteTarifa) cboCoeficiente.getSelectedItem().getValue()); + } + } + }); + return cboCoeficiente; + } + + private Combobox criaCoeficiente(final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO, + CoeficienteTarifa coeficienteTarifa) { + final Combobox cboCoeficiente = new Combobox(); + cboCoeficiente.setId(cboCoeficiente.getUuid()); + cboCoeficiente.setWidth("99%"); + + ListModelList lmlCoeficiente = getListCoeficienteCombobox(); + if (coeficienteTarifa != null) { + lmlCoeficiente.addSelection(coeficienteTarifa); + } + cboCoeficiente.setModel(lmlCoeficiente); + cboCoeficiente.setConstraint(CONSTRAINT_NO_EMPTY); + cboCoeficiente.setDisabled(!possuiOrgao(secuenciaRutaTramoCoeficienteVO)); + cboCoeficiente.setReadonly(true); + return cboCoeficiente; + } + + private boolean possuiOrgao(final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { + return secuenciaRutaTramoCoeficienteVO.getOrgaoTramoId() == null; + } + + private boolean possuiTramo(final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { + return secuenciaRutaTramoCoeficienteVO.getTramoId() != null; + } + + private Label criaLabelId(SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { final Label lblID = new Label(""); + lblID.setValue(possuiTramo(secuenciaRutaTramoCoeficienteVO) + ? secuenciaRutaTramoCoeficienteVO.getTramoId().toString() : ""); + return lblID; + } - // Campos coeficientes tarifario - final Combobox cboCoeficiente1 = new Combobox(); - // final Intbox ibxKm1 = new Intbox(); - final MyCustomTextboxDecimal ibxKm1 = new MyCustomTextboxDecimal(); + private Spinner criaSpinerMinuto(SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { + final Spinner spMinuto = new Spinner(); + configuraSpinerHoraMinuto(secuenciaRutaTramoCoeficienteVO, spMinuto); + spMinuto.setConstraint("max 59,no negative,no empty"); + return spMinuto; + } - final Combobox cboCoeficiente2 = new Combobox(); - // final Intbox ibxKm2 = new Intbox(); - final MyCustomTextboxDecimal ibxKm2 = new MyCustomTextboxDecimal(); + private Spinner criaSpinerHora(SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { + final Spinner spHora = new Spinner(); + configuraSpinerHoraMinuto(secuenciaRutaTramoCoeficienteVO, spHora); + spHora.setConstraint("max 99, no negative, no empty"); + return spHora; + } - // Cell Via + private void configuraSpinerHoraMinuto(SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO, + final Spinner spinner) { + spinner.setWidth("40px"); + spinner.setReadonly(secuenciaRutaTramoCoeficienteVO.getTramoServicioId() != null); + spinner.setButtonVisible(secuenciaRutaTramoCoeficienteVO.getTramoServicioId() == null); + } + + private Combobox criaCellComboVia(SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { final Combobox cboVia = new Combobox(); cboVia.setId(cboVia.getUuid()); cboVia.setReadonly(true); @@ -223,223 +370,40 @@ public class GridRutaTramoCoeficiente extends Grid implements RowRenderer, Rende listModelList.addSelection(secuenciaRutaTramoCoeficienteVO.getVia()); } cboVia.setModel(listModelList); - cboVia.setConstraint("no empty"); - cboVia.addEventListener(Events.ON_CHANGE, new EventListener() { + cboVia.setConstraint(CONSTRAINT_NO_EMPTY); + return cboVia; + } - @Override - public void onEvent(Event evt) throws Exception { - if (cboVia.getSelectedItem() != null) { - - BigDecimal kmRealAntigo = secuenciaRutaTramoCoeficienteVO.getKmReal(); - HoraSistema tiempoRecorridoAntigo = secuenciaRutaTramoCoeficienteVO.getTiempoRecorrido(); - - secuenciaRutaTramoCoeficienteVO.setVia((Via) cboVia.getSelectedItem().getValue()); - llenarTramo(secuenciaRutaTramoCoeficienteVO); - - boolean tramoEditable = (secuenciaRutaTramoCoeficienteVO.getTramoId() == null); - boolean tramoCoeficienteEditable = (secuenciaRutaTramoCoeficienteVO.getOrgaoTramoId() == null); - boolean tramoServicioEditable = (secuenciaRutaTramoCoeficienteVO.getTramoServicioId() == null); - - if (!tramoEditable) {// cuando el tramo no es editable, es porque ya existe. Entonces lleno la pantalla con los nuevos valores - dKmsReal.setValueBigDecimal(secuenciaRutaTramoCoeficienteVO.getKmReal()); - } else { - secuenciaRutaTramoCoeficienteVO.setKmReal(kmRealAntigo); - } - - lblID.setValue((secuenciaRutaTramoCoeficienteVO.getTramoId() != null) ? secuenciaRutaTramoCoeficienteVO.getTramoId().toString() : ""); - - if (!tramoServicioEditable) {// cuando el tramoServicio no es editable, es porque ya existe. Entonces lleno la pantalla con los nuevos valores - spHora.setValue(secuenciaRutaTramoCoeficienteVO.getTiempoRecorrido().getHora()); - spMinuto.setValue(secuenciaRutaTramoCoeficienteVO.getTiempoRecorrido().getMinuto()); - } else { - secuenciaRutaTramoCoeficienteVO.setTiempoRecorrido(tiempoRecorridoAntigo); - } - - if (!tramoCoeficienteEditable) { - cboCoeficiente1.setText(secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa1().getDescCoeficiente()); - ibxKm1.setValueBigDecimal(secuenciaRutaTramoCoeficienteVO.getKmCoeficiente1()); - - cboCoeficiente2.setSelectedIndex(-1); - ibxKm2.setValueBigDecimal(BigDecimal.ZERO); - - if (secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa2() != null) { - cboCoeficiente2.setText(secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa2().getDescCoeficiente()); - ibxKm2.setValueBigDecimal(secuenciaRutaTramoCoeficienteVO.getKmCoeficiente2()); - } - } - - dKmsReal.setReadonly(!tramoEditable); - spHora.setReadonly(!tramoServicioEditable); - spHora.setButtonVisible(tramoServicioEditable); - spMinuto.setReadonly(!tramoServicioEditable); - spMinuto.setButtonVisible(tramoServicioEditable); - cboCoeficiente1.setDisabled(!tramoCoeficienteEditable); - ibxKm1.setReadonly(!tramoCoeficienteEditable); - cboCoeficiente2.setDisabled(!tramoCoeficienteEditable); - ibxKm2.setReadonly(!tramoCoeficienteEditable); - - } - } - }); - row.appendChild(cboVia); - - // Cell Venda - final Combobox cboVenda = new Combobox(); - cboVenda.setId(cboVenda.getUuid()); - cboVenda.setReadonly(true); - cboVenda.setWidth("100%"); - cboVenda.setConstraint("no empty"); - - ListModelList listCboVenda = new ListModelList(); - - final Comboitem cbiSim = new Comboitem("Sim"); - cbiSim.setValue("Sim"); - - final Comboitem cbiNao = new Comboitem("Não"); - cbiNao.setValue("Não"); - - listCboVenda.add(cbiSim.getValue()); - listCboVenda.add(cbiNao.getValue()); - - if (secuenciaRutaTramoCoeficienteVO.getPermiteVenda() == null && this.getId().equalsIgnoreCase("gridrutasecuenciaida")){ - listCboVenda.addSelection(cbiSim.getValue()); - secuenciaRutaTramoCoeficienteVO.setPermiteVenda(Boolean.TRUE); - } else if (this.getId().equalsIgnoreCase("gridrutasecuenciavolta")){ - if(secuenciaRutaTramoCoeficienteVO.getPermiteVenda() == null ){ - secuenciaRutaTramoCoeficienteVO.setPermiteVenda(Boolean.TRUE); - listCboVenda.addSelection(cbiSim.getValue()); - }else{ - listCboVenda.addSelection(secuenciaRutaTramoCoeficienteVO.getPermiteVenda()?cbiSim.getValue():cbiNao.getValue()); - } - } - - cboVenda.setModel(listCboVenda); - - cboVenda.addEventListener(Events.ON_CHANGE, new EventListener() { - - @Override - public void onEvent(Event evt) throws Exception { - if (cboVenda.getSelectedItem().getValue().equals(cbiSim.getValue())){ - secuenciaRutaTramoCoeficienteVO.setPermiteVenda(Boolean.TRUE); - } else if (cboVenda.getSelectedItem().getValue().equals(cbiNao.getValue())){ - secuenciaRutaTramoCoeficienteVO.setPermiteVenda(Boolean.FALSE); - } - } - }); - row.appendChild(cboVenda); - - boolean esTramoEditable = (secuenciaRutaTramoCoeficienteVO.getTramoId() == null); - boolean esTramoServicioEditable = (secuenciaRutaTramoCoeficienteVO.getTramoServicioId() == null); - boolean esTramoCoeficienteEditable = (secuenciaRutaTramoCoeficienteVO.getOrgaoTramoId() == null); - - // Cell Kms Real - dKmsReal.setReadonly(!esTramoEditable); - dataBinder.addBinding(dKmsReal, "value", row.getUuid() + ".kmReal", null, null, "save", + private MyCustomTextboxDecimal criaKmsReal(SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO, String rowId) { + MyCustomTextboxDecimal dKmsReal = new MyCustomTextboxDecimal((secuenciaRutaTramoCoeficienteVO.getKmReal() == null) ? BigDecimal.ZERO : secuenciaRutaTramoCoeficienteVO.getKmReal()); + dKmsReal.setWidth("90%"); + dKmsReal.setReadonly(possuiTramo(secuenciaRutaTramoCoeficienteVO)); + dataBinder.addBinding(dKmsReal, "value", rowId + ".kmReal", null, null, "save", "com.rjconsultores.ventaboletos.web.utilerias.StringDecimalToDecimalConverter", null, null, null); - row.appendChild(dKmsReal); + return dKmsReal; + } - // Cell Tiempo Recorrido - Hbox hbox = new Hbox(); + private Label criaCellDestino(SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { + return criaLabel(secuenciaRutaTramoCoeficienteVO.getDestino().getCveparada() + + " - " + secuenciaRutaTramoCoeficienteVO.getDestino().getDescparada()); + } - spHora.setWidth("40px"); - spHora.setConstraint("max 99,no negative,no empty"); - spHora.setReadonly(!esTramoServicioEditable); - spHora.setButtonVisible(esTramoServicioEditable); + private Label criaCellOrigem(SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { + return criaLabel(secuenciaRutaTramoCoeficienteVO.getOrigen().getCveparada() + + " - " + secuenciaRutaTramoCoeficienteVO.getOrigen().getDescparada()); + } - hbox.appendChild(spHora); - Label lbl = new Label(":"); - hbox.appendChild(lbl); + private Intbox criaCellSequencia(final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO) { + Intbox ibxSumSecuencia = new Intbox(secuenciaRutaTramoCoeficienteVO.getSecuencia()); + ibxSumSecuencia.setWidth("50%"); + ibxSumSecuencia.setReadonly(true); + return ibxSumSecuencia; + } - spMinuto.setWidth("40px"); - spMinuto.setConstraint("max 59,no negative,no empty"); - spMinuto.setReadonly(!esTramoServicioEditable); - spMinuto.setButtonVisible(esTramoServicioEditable); - hbox.appendChild(spMinuto); - - if (secuenciaRutaTramoCoeficienteVO.getTiempoRecorrido() != null) { - HoraSistema hora = secuenciaRutaTramoCoeficienteVO.getTiempoRecorrido(); - spHora.setValue(hora.getHora()); - spMinuto.setValue(hora.getMinuto()); - } - dataBinder.addBinding(spHora, "value", row.getUuid() + ".tiempoRecorrido.hora", null, null, "save", null, null, null, null); - dataBinder.addBinding(spMinuto, "value", row.getUuid() + ".tiempoRecorrido.minuto", null, null, "save", null, null, null, null); - row.appendChild(hbox); - - // Cell ID Tramo - if (secuenciaRutaTramoCoeficienteVO.getTramoId() != null) { - lblID.setValue(secuenciaRutaTramoCoeficienteVO.getTramoId().toString()); - } else { - lblID.setValue(""); - } - row.appendChild(lblID); - - // Coeficiente tarifário 1 - - cboCoeficiente1.setId(cboCoeficiente1.getUuid()); - cboCoeficiente1.setWidth("99%"); - - ListModelList lmlCoeficiente = getListCoeficienteCombobox(); - if (secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa1() != null) { - lmlCoeficiente.addSelection(secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa1()); - } - cboCoeficiente1.setModel(lmlCoeficiente); - cboCoeficiente1.setConstraint("no empty"); - cboCoeficiente1.setDisabled(!esTramoCoeficienteEditable); - cboCoeficiente1.setReadonly(true); - cboCoeficiente1.addEventListener(Events.ON_CHANGE, new EventListener() { - - @Override - public void onEvent(Event arg0) throws Exception { - if (cboCoeficiente1.getSelectedItem() == null) { - secuenciaRutaTramoCoeficienteVO.setCoeficienteTarifa1(null); - } else { - secuenciaRutaTramoCoeficienteVO.setCoeficienteTarifa1((CoeficienteTarifa) cboCoeficiente1.getSelectedItem().getValue()); - } - } - - }); - row.appendChild(cboCoeficiente1); - // Km 1 do coeficiente 1 - ibxKm1.setValueBigDecimal((secuenciaRutaTramoCoeficienteVO.getKmCoeficiente1() != null) ? - secuenciaRutaTramoCoeficienteVO.getKmCoeficiente1() : BigDecimal.ZERO); - - ibxKm1.setWidth("80%"); - ibxKm1.setReadonly(!esTramoCoeficienteEditable); - dataBinder.addBinding(ibxKm1, "value", row.getUuid() + ".kmCoeficiente1", null, null, - "save", "com.rjconsultores.ventaboletos.web.utilerias.StringDecimalToDecimalConverter", null, null, null); - row.appendChild(ibxKm1); - // Coeficiente tarifário 2 - cboCoeficiente2.setId(cboCoeficiente2.getUuid()); - cboCoeficiente2.setWidth("99%"); - cboCoeficiente2.setDisabled(!esTramoCoeficienteEditable); - cboCoeficiente2.setReadonly(true); - ListModelList lmlCoeficiente2 = getListCoeficienteCombobox(); - if (secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa2() != null) { - lmlCoeficiente2.addSelection(secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa2()); - } - cboCoeficiente2.setModel(lmlCoeficiente2); - cboCoeficiente2.addEventListener(Events.ON_CHANGE, new EventListener() { - - @Override - public void onEvent(Event arg0) throws Exception { - if (cboCoeficiente2.getSelectedItem() == null) { - secuenciaRutaTramoCoeficienteVO.setCoeficienteTarifa2(null); - } else { - secuenciaRutaTramoCoeficienteVO.setCoeficienteTarifa2((CoeficienteTarifa) cboCoeficiente2.getSelectedItem().getValue()); - } - } - - }); - - row.appendChild(cboCoeficiente2); - // Km 2 do coeficiente 2 - ibxKm2.setValueBigDecimal((secuenciaRutaTramoCoeficienteVO.getKmCoeficiente2() != null) ? - secuenciaRutaTramoCoeficienteVO.getKmCoeficiente2() : BigDecimal.ZERO); - ibxKm2.setWidth("80%"); - ibxKm2.setReadonly(!esTramoCoeficienteEditable); - dataBinder.addBinding(ibxKm2, "value", row.getUuid() + ".kmCoeficiente2", null, null, - "save", "com.rjconsultores.ventaboletos.web.utilerias.StringDecimalToDecimalConverter", null, null, null); - row.appendChild(ibxKm2); + private Label criaLabel(String titulo) { + Label lblDestino = new Label(titulo); + lblDestino.setWidth("80%"); + return lblDestino; } /** @@ -545,5 +509,86 @@ public class GridRutaTramoCoeficiente extends Grid implements RowRenderer, Rende public void setLsCoeficientes(List lsCoeficientes) { this.lsCoeficientes = lsCoeficientes; } + + private final class EventListenerComboVia implements EventListener { + private final Combobox cboVia; + private final Spinner spHora; + private final Spinner spMinuto; + private final Label lblID; + private final MyCustomTextboxDecimal ibxKm2; + private final Combobox cboCoeficiente1; + private final SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO; + private final MyCustomTextboxDecimal ibxKm1; + private final Combobox cboCoeficiente2; + private final MyCustomTextboxDecimal dKmsReal; + + private EventListenerComboVia(Combobox cboVia, Spinner spHora, Spinner spMinuto, Label lblID, MyCustomTextboxDecimal ibxKm2, Combobox cboCoeficiente1, SecuenciaRutaTramoCoeficienteVO secuenciaRutaTramoCoeficienteVO, MyCustomTextboxDecimal ibxKm1, Combobox cboCoeficiente2, MyCustomTextboxDecimal dKmsReal) { + this.cboVia = cboVia; + this.spHora = spHora; + this.spMinuto = spMinuto; + this.lblID = lblID; + this.ibxKm2 = ibxKm2; + this.cboCoeficiente1 = cboCoeficiente1; + this.secuenciaRutaTramoCoeficienteVO = secuenciaRutaTramoCoeficienteVO; + this.ibxKm1 = ibxKm1; + this.cboCoeficiente2 = cboCoeficiente2; + this.dKmsReal = dKmsReal; + } + + @Override + public void onEvent(Event evt) throws Exception { + if (cboVia.getSelectedItem() != null) { + + BigDecimal kmRealAntigo = secuenciaRutaTramoCoeficienteVO.getKmReal(); + HoraSistema tiempoRecorridoAntigo = secuenciaRutaTramoCoeficienteVO.getTiempoRecorrido(); + + secuenciaRutaTramoCoeficienteVO.setVia((Via) cboVia.getSelectedItem().getValue()); + llenarTramo(secuenciaRutaTramoCoeficienteVO); + + boolean tramoEditable = (secuenciaRutaTramoCoeficienteVO.getTramoId() == null); + boolean tramoCoeficienteEditable = (secuenciaRutaTramoCoeficienteVO.getOrgaoTramoId() == null); + boolean tramoServicioEditable = (secuenciaRutaTramoCoeficienteVO.getTramoServicioId() == null); + + if (!tramoEditable) {// cuando el tramo no es editable, es porque ya existe. Entonces lleno la pantalla con los nuevos valores + dKmsReal.setValueBigDecimal(secuenciaRutaTramoCoeficienteVO.getKmReal()); + } else { + secuenciaRutaTramoCoeficienteVO.setKmReal(kmRealAntigo); + } + + lblID.setValue((secuenciaRutaTramoCoeficienteVO.getTramoId() != null) ? secuenciaRutaTramoCoeficienteVO.getTramoId().toString() : ""); + + if (!tramoServicioEditable) {// cuando el tramoServicio no es editable, es porque ya existe. Entonces lleno la pantalla con los nuevos valores + spHora.setValue(secuenciaRutaTramoCoeficienteVO.getTiempoRecorrido().getHora()); + spMinuto.setValue(secuenciaRutaTramoCoeficienteVO.getTiempoRecorrido().getMinuto()); + } else { + secuenciaRutaTramoCoeficienteVO.setTiempoRecorrido(tiempoRecorridoAntigo); + } + + if (!tramoCoeficienteEditable) { + cboCoeficiente1.setText(secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa1().getDescCoeficiente()); + ibxKm1.setValueBigDecimal(secuenciaRutaTramoCoeficienteVO.getKmCoeficiente1()); + + cboCoeficiente2.setSelectedIndex(-1); + ibxKm2.setValueBigDecimal(BigDecimal.ZERO); + + if (secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa2() != null) { + cboCoeficiente2.setText(secuenciaRutaTramoCoeficienteVO.getCoeficienteTarifa2().getDescCoeficiente()); + ibxKm2.setValueBigDecimal(secuenciaRutaTramoCoeficienteVO.getKmCoeficiente2()); + } + } + + dKmsReal.setReadonly(!tramoEditable); + spHora.setReadonly(!tramoServicioEditable); + spHora.setButtonVisible(tramoServicioEditable); + spMinuto.setReadonly(!tramoServicioEditable); + spMinuto.setButtonVisible(tramoServicioEditable); + cboCoeficiente1.setDisabled(!tramoCoeficienteEditable); + ibxKm1.setReadonly(!tramoCoeficienteEditable); + cboCoeficiente2.setDisabled(!tramoCoeficienteEditable); + ibxKm2.setReadonly(!tramoCoeficienteEditable); + + } + } + } }