diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/pricing/EditarPricingEspecificoController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/pricing/EditarPricingEspecificoController.java index 3f76e98eb..3b5b496df 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/pricing/EditarPricingEspecificoController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/pricing/EditarPricingEspecificoController.java @@ -4,7 +4,11 @@ */ package com.rjconsultores.ventaboletos.web.gui.controladores.pricing; +import java.math.BigDecimal; +import java.util.ArrayList; import java.util.Calendar; +import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -320,6 +324,10 @@ public class EditarPricingEspecificoController extends MyGenericForwardComposer } } } + + if(!validarPricingEspecificoOcupacion()) { + return; + } List lsPricing = pricingEspecificoService.buscarPorNome(pricingEspecifico); boolean podeSalvar = false; @@ -356,6 +364,63 @@ public class EditarPricingEspecificoController extends MyGenericForwardComposer } + /** + * Valida se a lista de ocupações são subsequentes e se a primeira ocupação possui ocupação inicial igual a 1. + * @return + * @throws InterruptedException + */ + private boolean validarPricingEspecificoOcupacion() throws InterruptedException { + if(pricingEspecifico.getPricingEspecificoOcupacionsList() == null || pricingEspecifico.getPricingEspecificoOcupacionsList().isEmpty()) { + Messagebox.show( + Labels.getLabel("editarPricingEspecificoOcupacionController.MSG.noPricingEspecificoOcupacion"), + Labels.getLabel("busquedaPricingEspecificoController.window.title"), + Messagebox.OK, Messagebox.EXCLAMATION); + return false; + } + + List sOcupacionInicial = new ArrayList(pricingEspecifico.getPricingEspecificoOcupacionsList()); + Collections.sort(sOcupacionInicial,new Comparator() { + + @Override + public int compare(PricingEspecificoOcupacion o1, PricingEspecificoOcupacion o2) { + return o1.getOcupacioninicial().compareTo(o2.getOcupacioninicial()); + } + }); + + if(sOcupacionInicial.iterator().next().getOcupacioninicial().intValue() != 1) { + Messagebox.show( + Labels.getLabel("editarPricingEspecificoOcupacionController.MSG.pricingEspecificoOcupacionInicial"), + Labels.getLabel("busquedaPricingEspecificoController.window.title"), + Messagebox.OK, Messagebox.EXCLAMATION); + return false; + } + + boolean pricingEspecificoOcupacionNoSubsequente = false; + for (int i = 0; i < sOcupacionInicial.size(); i++) { + PricingEspecificoOcupacion pricingEspecificoOcupacion = sOcupacionInicial.get(i); + PricingEspecificoOcupacion pricingEspecificoOcupacionAnterior = null; + + if(i > 0) { + pricingEspecificoOcupacionAnterior = sOcupacionInicial.get(i - 1); + } + + if(pricingEspecificoOcupacionAnterior != null && pricingEspecificoOcupacionAnterior.getOcupacionfinal().add(new BigDecimal(1)).doubleValue() != pricingEspecificoOcupacion.getOcupacioninicial().doubleValue()) { + pricingEspecificoOcupacionNoSubsequente = true; + break; + } + } + + if(pricingEspecificoOcupacionNoSubsequente) { + Messagebox.show( + Labels.getLabel("editarPricingEspecificoOcupacionController.MSG.pricingEspecificoOcupacionNoSubsequente"), + Labels.getLabel("busquedaPricingEspecificoController.window.title"), + Messagebox.OK, Messagebox.EXCLAMATION); + return false; + } + + return true; + } + /** * @return the pricingEspecificoService */ diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/pricing/EditarPricingEspecificoOcupacionController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/pricing/EditarPricingEspecificoOcupacionController.java index 039853627..08cb68b06 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/pricing/EditarPricingEspecificoOcupacionController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/pricing/EditarPricingEspecificoOcupacionController.java @@ -3,6 +3,7 @@ package com.rjconsultores.ventaboletos.web.gui.controladores.pricing; import java.util.ArrayList; import java.util.Calendar; import java.util.List; +import java.util.Locale; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; @@ -15,6 +16,7 @@ import org.zkoss.zk.ui.event.Event; import com.rjconsultores.ventaboletos.entidad.PricingEspecifico; import com.rjconsultores.ventaboletos.entidad.PricingEspecificoOcupacion; import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; +import com.rjconsultores.ventaboletos.web.utilerias.BigDecimalUtil; import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; import com.rjconsultores.ventaboletos.web.utilerias.MyTextboxDecimal; @@ -43,9 +45,11 @@ public class EditarPricingEspecificoOcupacionController extends MyGenericForward super.doAfterCompose(comp); if (pricingEspecificoOcupacion.getPricingEspecificoOcupacionId() != null) { - tarifa.setValue(pricingEspecificoOcupacion.getTarifa() == null ? StringUtils.EMPTY : pricingEspecificoOcupacion.getTarifa().toString()); - ocupacioninicial.setValue(pricingEspecificoOcupacion.getOcupacioninicial() == null ? StringUtils.EMPTY : pricingEspecificoOcupacion.getOcupacioninicial().toString()); - ocupacionfinal.setValue(pricingEspecificoOcupacion.getOcupacionfinal() == null ? StringUtils.EMPTY : pricingEspecificoOcupacion.getOcupacionfinal().toString()); + Locale locale = new Locale("pt", "BR"); + + tarifa.setValue(pricingEspecificoOcupacion.getTarifa() == null ? StringUtils.EMPTY : BigDecimalUtil.getBigDecimalToStringDouble2CasasDecimaisFormatado(pricingEspecificoOcupacion.getTarifa(), locale)); + ocupacioninicial.setValue(pricingEspecificoOcupacion.getOcupacioninicial() == null ? StringUtils.EMPTY : BigDecimalUtil.getBigDecimalToStringDouble2CasasDecimaisFormatado(pricingEspecificoOcupacion.getOcupacioninicial(), locale)); + ocupacionfinal.setValue(pricingEspecificoOcupacion.getOcupacionfinal() == null ? StringUtils.EMPTY : BigDecimalUtil.getBigDecimalToStringDouble2CasasDecimaisFormatado(pricingEspecificoOcupacion.getOcupacionfinal(), locale)); } } @@ -75,12 +79,13 @@ public class EditarPricingEspecificoOcupacionController extends MyGenericForward peoList = new ArrayList(); else peoList = pricingEspecifico.getPricingEspecificoOcupacionsList(); - + if (esEdicion) { int index = 0; for (PricingEspecificoOcupacion peo : peoList) { if (peo.equals(pricingEspecificoOcupacion)) { index = peoList.indexOf(peo); + break; } } peoList.set(index, pricingEspecificoOcupacion); @@ -91,7 +96,6 @@ public class EditarPricingEspecificoOcupacionController extends MyGenericForward pricingEspecifico.setPricingEspecificoOcupacionsList(peoList); pricingListEspOcupacion.setData(peoList); - pricingListEspOcupacion.updateItem(pricingEspecificoOcupacion); closeWindow(); @@ -99,7 +103,7 @@ public class EditarPricingEspecificoOcupacionController extends MyGenericForward log.error("Erro ao adicionar pricing Pricing Especifico Ocupacion: ", ex); } } - + public MyTextboxDecimal getTarifa() { return tarifa; } diff --git a/src/java/com/rjconsultores/ventaboletos/web/utilerias/BigDecimalUtil.java b/src/java/com/rjconsultores/ventaboletos/web/utilerias/BigDecimalUtil.java new file mode 100644 index 000000000..6d4c18e32 --- /dev/null +++ b/src/java/com/rjconsultores/ventaboletos/web/utilerias/BigDecimalUtil.java @@ -0,0 +1,37 @@ +package com.rjconsultores.ventaboletos.web.utilerias; + +import java.math.BigDecimal; +import java.text.NumberFormat; +import java.text.ParseException; +import java.util.Locale; + +import org.apache.commons.lang.StringUtils; + +/** + * + * @author Wilian + * + */ +public class BigDecimalUtil { + + public static BigDecimal getStringToBigDecimal(String value, Locale locale) throws ParseException { + if(value != null && StringUtils.isNotBlank(value)) { + NumberFormat nf = NumberFormat.getInstance(locale); + return new BigDecimal(nf.parse(value).toString()); + } + + return null; + } + + public static String getBigDecimalToStringDouble2CasasDecimaisFormatado(BigDecimal value, Locale locale) { + if(value != null) { + NumberFormat nf = NumberFormat.getInstance(locale); + nf.setMinimumFractionDigits(2); + nf.setMaximumFractionDigits(2); + return nf.format(value.doubleValue()); + } + + return null; + } + +} diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index d847ed703..e4a4657e8 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -2255,6 +2255,9 @@ editarPricingEspecificoOcupacionController.ocupacionInicial.label=Ocupación Ini editarPricingEspecificoOcupacionController.ocupacionFinal.label=Ocupación Final editarPricingEspecificoOcupacionController.MSG.borrarPergunta = Deseas eliminar ocupacion? editarPricingEspecificoOcupacionController.ocupacao.label = Ocupacion +editarPricingEspecificoOcupacionController.MSG.noPricingEspecificoOcupacion = Ocupación no informado. +editarPricingEspecificoOcupacionController.MSG.pricingEspecificoOcupacionInicial = La lista de ocupaciones debería comenzar con la ocupación inicial igual a 1. +editarPricingEspecificoOcupacionController.MSG.pricingEspecificoOcupacionNoSubsequente = La lista de ocupaciones debe ser posterior. # Búsqueda Sistema busquedaSistemaController.window.title = Sistema diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index fdd196861..22428c0d4 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -2302,6 +2302,9 @@ editarPricingEspecificoOcupacionController.ocupacionInicial.label=Ocupação Ini editarPricingEspecificoOcupacionController.ocupacionFinal.label=Ocupação Final editarPricingEspecificoOcupacionController.MSG.borrarPergunta = Deseja Eliminar Ocupação? editarPricingEspecificoOcupacionController.ocupacao.label = Ocupação +editarPricingEspecificoOcupacionController.MSG.noPricingEspecificoOcupacion = Ocupação não informado. +editarPricingEspecificoOcupacionController.MSG.pricingEspecificoOcupacionInicial = A primeira ocupação deverá ter valor de ocupação inicial igual a 1. +editarPricingEspecificoOcupacionController.MSG.pricingEspecificoOcupacionNoSubsequente = A lista de ocupações deverão ser subsequentes. # Pesquisa Sistema busquedaSistemaController.window.title = Sistema