diff --git a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/tarifas/EditarVigenciaTarifaController.java b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/tarifas/EditarVigenciaTarifaController.java index 95cc88d3d..91ba9b3cb 100644 --- a/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/tarifas/EditarVigenciaTarifaController.java +++ b/src/java/com/rjconsultores/ventaboletos/web/gui/controladores/tarifas/EditarVigenciaTarifaController.java @@ -4,6 +4,7 @@ */ package com.rjconsultores.ventaboletos.web.gui.controladores.tarifas; +import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -20,6 +21,8 @@ import org.zkoss.zk.ui.event.Event; import org.zkoss.zul.Button; import org.zkoss.zul.Datebox; +import com.ctc.wstx.util.DataUtil; +import com.rjconsultores.ventaboletos.dao.VigenciaTarifaDAO; import com.rjconsultores.ventaboletos.entidad.Tarifa; import com.rjconsultores.ventaboletos.entidad.VigenciaTarifa; import com.rjconsultores.ventaboletos.service.TarifaService; @@ -29,6 +32,8 @@ import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado; import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer; import com.rjconsultores.ventaboletos.web.utilerias.MyListbox; +import bsh.org.objectweb.asm.Label; + /** * * @author rodrigo @@ -115,67 +120,47 @@ public class EditarVigenciaTarifaController extends MyGenericForwardComposer { Date inicio = fecInicio.getValue(); Date fim = fecFinal.getValue(); - // checando se o fim da vigencia eh menor que o inicio: if (!fim.before(inicio)) { vigenciaTarifa.setFeciniciovigencia(DateUtil.inicioFecha(inicio)); vigenciaTarifa.setFecfinvigencia(DateUtil.fimFecha(fim)); - // checando se a vigencia pode ser salva. A data de inicio de uma - // nova vigencia tem q ser maior que a da fim da vigencia anterior - // para que năo tenha tarifas com duas vigencias: + // Năo traga ela mesma se em ediçăo List lsVigencias = vigenciaTarifaService.buscarVigenciasIntervalo(vigenciaTarifa); - Boolean podeSalvar = lsVigencias.isEmpty() ? true : false; - // Se for ele mesmo pode salvar. - if (lsVigencias.size() == 1) { - // Somente eiçăo - if (vigenciaTarifa.getVigenciatarifaId() != null) { - if (vigenciaTarifa.getVigenciatarifaId().equals(lsVigencias.get(0).getVigenciatarifaId())) { - podeSalvar = true; + + // Nova Tarifa ou em ediçăo e sem conflitos + if ((lsVigencias.isEmpty() && vigenciaTarifa.getVigenciatarifaId() == null) + || (lsVigencias.isEmpty() && vigenciaTarifa.getVigenciatarifaId() != null)) { + + salvarVigencia(); + } else { + StringBuilder msgConflito = new StringBuilder(Labels.getLabel("editarVigenciaTarifaController.MSG.conflitoVigencias")); + msgConflito.append(". "); + VigenciaTarifa vigenciaBase = lsVigencias.get(0); + + if (vigenciaTarifa.getVigenciatarifaId() == null + && vigenciaTarifa.getFeciniciovigencia().equals(vigenciaBase.getFeciniciovigencia())) { + Messagebox.show(getMsgDataInicioIgual(msgConflito, vigenciaBase)); + return; + } + + Boolean indDataInicialConflitante = indDataInicialConflitante(vigenciaBase, msgConflito); + if (indDataInicialConflitante && lsVigencias.size() > 1) { + VigenciaTarifa vigenciaPosterior = lsVigencias.get(1); + setDataFinalAntesVigenciaParam(vigenciaPosterior, msgConflito); + } + + msgConflito.append("\n"); + msgConflito.append(Labels.getLabel("editarVigenciaTarifaController.MSG.continuar")); + int opcao = Messagebox.show(msgConflito.toString(), "", Messagebox.OK | Messagebox.CANCEL, Messagebox.QUESTION); + + if (opcao == Messagebox.OK) { + salvarVigencia(); + if (indDataInicialConflitante) { + atualizarItem(vigenciaBase); } } } - - if (podeSalvar) { - if (vigenciaTarifa.getVigenciatarifaId() == null) { - if (lsVigencias.isEmpty()) { - vigenciaTarifaService.suscribir(vigenciaTarifa); - vigenciaList.addItem(vigenciaTarifa); - - Messagebox.show( - Labels.getLabel("editarVigenciaTarifaController.btnFechar.MSG.SuscbrirOK"), - Labels.getLabel("editarVigenciaTarifaController.window.title"), - Messagebox.OK, Messagebox.INFORMATION); - - closeWindow(); - } - else { - Messagebox.show( - Labels.getLabel("MSG.Registro.Existe"), - Labels.getLabel("editarVigenciaTarifaController.window.title"), - Messagebox.OK, Messagebox.EXCLAMATION); - } - } - else { - vigenciaTarifaService.actualizacion(vigenciaTarifa); - vigenciaList.updateItem(vigenciaTarifa); - - Messagebox.show( - Labels.getLabel("editarVigenciaTarifaController.btnFechar.MSG.SuscbrirOK"), - Labels.getLabel("editarVigenciaTarifaController.window.title"), - Messagebox.OK, Messagebox.INFORMATION); - - closeWindow(); - } - - } - else { - Messagebox.show( - Labels.getLabel("editarVigenciaTarifaController.MSG.conflitoVigencias"), - Labels.getLabel("editarVigenciaTarifaController.window.title"), - Messagebox.OK, Messagebox.EXCLAMATION); - } - } - else { + } else { Messagebox.show( Labels.getLabel("editarVigenciaTarifaController.MSG.FimMenorInicio"), Labels.getLabel("editarVigenciaTarifaController.window.title"), @@ -183,12 +168,95 @@ public class EditarVigenciaTarifaController extends MyGenericForwardComposer { } } + private Boolean indDataInicialConflitante(VigenciaTarifa vigenciaBase, StringBuilder msgConflito) { + + if (vigenciaTarifa.getFeciniciovigencia().before(vigenciaBase.getFeciniciovigencia())) { + // Apenas data final é conflitante... + // Reduzir a data final da nova vigencia para um dia anterior + // a data inicial da vigencia conflitante(Posterior, a entrar em vigencia) + + setDataFinalAntesVigenciaParam(vigenciaBase, msgConflito); + return false; + + } else { + // Nova vigencia tem data inicial conflitante mas nao igual + // a data inicial da vigencia conflitante(Anteriormente em vigencia)... + // Reduza a data final da vigencia conflitante para um dia anterior a nova vigencia (tire sua vigencia) + + vigenciaBase.setFecfinvigencia(DateUtil.somarMinutos(vigenciaTarifa.getFeciniciovigencia(), -1)); + setMsgDataInicioConflitante(msgConflito, vigenciaBase); + return true; + } + } + + private void setDataFinalAntesVigenciaParam(VigenciaTarifa vigenciaBase, StringBuilder msgConflito) { + vigenciaTarifa.setFecfinvigencia(DateUtil.somarMinutos(vigenciaBase.getFeciniciovigencia(), -1)); + setMegDataFinalConflitante(msgConflito); + } + + private void setMsgDataInicioConflitante(StringBuilder msgConflito, VigenciaTarifa vigenciaBase) { + msgConflito.append(" "); + msgConflito.append(Labels.getLabel("editarVigenciaTarifaController.MSG.dataInicialConflitante")); + msgConflito.append(" "); + msgConflito.append(SimpleDateFormat.getInstance().format(vigenciaBase.getFecfinvigencia())); + msgConflito.append(". "); + } + + private void setMegDataFinalConflitante(StringBuilder msgConflito) { + msgConflito.append(" "); + msgConflito.append(Labels.getLabel("editarVigenciaTarifaController.MSG.dataFinalConflitante")); + msgConflito.append(" "); + msgConflito.append(SimpleDateFormat.getInstance().format(vigenciaTarifa.getFecfinvigencia())); + msgConflito.append(". "); + } + + private String getMsgDataInicioIgual(StringBuilder msgConflito, VigenciaTarifa vigenciaBase) { + msgConflito.append(Labels.getLabel("editarVigenciaTarifaController.MSG.dataInicialIgual")); + msgConflito.append(" "); + msgConflito.append(vigenciaBase.getVigenciatarifaId()); + return msgConflito.toString(); + } + + private void salvarVigencia() throws InterruptedException { + if (vigenciaTarifa.getVigenciatarifaId() == null) { + salvarItemNovo(); + } else { + atualizarItem(vigenciaTarifa); + } + } + + private void atualizarItem(VigenciaTarifa vigencia) throws InterruptedException { + vigenciaTarifaService.actualizacion(vigencia); + vigenciaList.updateItem(vigencia); + + Messagebox.show( + Labels.getLabel("editarVigenciaTarifaController.btnFechar.MSG.SuscbrirOK"), + Labels.getLabel("editarVigenciaTarifaController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + + closeWindow(); + + } + + private void salvarItemNovo() throws InterruptedException { + vigenciaTarifaService.suscribir(vigenciaTarifa); + vigenciaList.addItemNovo(vigenciaTarifa); + + Messagebox.show( + Labels.getLabel("editarVigenciaTarifaController.btnFechar.MSG.SuscbrirOK"), + Labels.getLabel("editarVigenciaTarifaController.window.title"), + Messagebox.OK, Messagebox.INFORMATION); + + closeWindow(); + + } + public void onClick$btnApagar(Event ev) throws InterruptedException { vigenciaTarifa.setFecmodif(Calendar.getInstance().getTime()); vigenciaTarifa.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId()); vigenciaTarifa.setActivo(Boolean.FALSE); - int opcao = Messagebox.show( + int opcao = Messagebox.show( Labels.getLabel("editarVigenciaTarifaController.btnFechar.MSG.Deseja.Borrar"), Labels.getLabel("editarVigenciaTarifaController.window.title"), Messagebox.YES | Messagebox.NO, Messagebox.QUESTION); @@ -202,8 +270,7 @@ public class EditarVigenciaTarifaController extends MyGenericForwardComposer { Labels.getLabel("editarVigenciaTarifaController.MSG.podeApagar"), Labels.getLabel("editarVigenciaTarifaController.window.title"), Messagebox.OK, Messagebox.EXCLAMATION); - } - else { + } else { vigenciaTarifaService.borrar(vigenciaTarifa); vigenciaList.removeItem(vigenciaTarifa); diff --git a/web/WEB-INF/i3-label_es_MX.label b/web/WEB-INF/i3-label_es_MX.label index eccfa5e2f..c584cda0b 100644 --- a/web/WEB-INF/i3-label_es_MX.label +++ b/web/WEB-INF/i3-label_es_MX.label @@ -2265,7 +2265,11 @@ editarVigenciaTarifaController.btnApagar.tooltiptext = Eliminar editarVigenciaTarifaController.btnSalvar.tooltiptext = Guardar editarVigenciaTarifaController.btnFechar.tooltiptext = Cerrar editarVigenciaTarifaController.MSG.FimMenorInicio = Vigencia final menor que inicial -editarVigenciaTarifaController.MSG.conflitoVigencias = La vigencia informada se traslapa con otra ya existente +editarVigenciaTarifaController.MSG.conflitoVigencias = La vigencia informada se traslapa con otras ya existente +editarVigenciaTarifaController.MSG.dataInicialConflitante = A vigĂȘncia de data conflitante terĂĄ a data final ajustada para o dia +editarVigenciaTarifaController.MSG.dataFinalConflitante = A data final da nova vigĂȘncia serĂĄ ajustada para +editarVigenciaTarifaController.MSG.dataInicialIgual= Ha uma vigĂȘncia de mesma data inicial com id +editarVigenciaTarifaController.MSG.continuar=Deseja continuar? editarVigenciaTarifaController.MSG.podeApagar = Hay tarifas con esta vigencia, no es posible elimimar editarVigenciaTarifaController.MSG.fecVenta = Fecha vigencia venta debe de estar entre fecha inĂ­cio y fecha fin diff --git a/web/WEB-INF/i3-label_pt_BR.label b/web/WEB-INF/i3-label_pt_BR.label index f7975a043..30dc13ba5 100644 --- a/web/WEB-INF/i3-label_pt_BR.label +++ b/web/WEB-INF/i3-label_pt_BR.label @@ -2317,8 +2317,12 @@ editarVigenciaTarifaController.btnFechar.MSG.borrarOK = VigĂȘncia tarifa Excluid editarVigenciaTarifaController.btnApagar.tooltiptext = Eliminar editarVigenciaTarifaController.btnSalvar.tooltiptext = Salvar editarVigenciaTarifaController.btnFechar.tooltiptext = Fechar -editarVigenciaTarifaController.MSG.FimMenorInicio = VigĂȘncia Final menor que Inicial. -editarVigenciaTarifaController.MSG.conflitoVigencias = A vigĂȘncia informada se sobrepĂ”e com outra jĂĄ existente. +editarVigenciaTarifaController.MSG.FimMenorInicio = VigĂȘncia Final menor que Inicial. +editarVigenciaTarifaController.MSG.conflitoVigencias = A vigĂȘncia informada se sobrepĂ”e outras jĂĄ existentes +editarVigenciaTarifaController.MSG.dataInicialConflitante = A vigĂȘncia de data conflitante terĂĄ a data final ajustada para o dia +editarVigenciaTarifaController.MSG.dataFinalConflitante = A data final da nova vigĂȘncia serĂĄ ajustada para +editarVigenciaTarifaController.MSG.dataInicialIgual= Ha uma vigĂȘncia de mesma data inicial com id +editarVigenciaTarifaController.MSG.continuar=Deseja continuar? editarVigenciaTarifaController.MSG.podeApagar = HĂĄ tarifas com esta vigĂȘncia, nĂŁo Ă© possĂ­vel elimimar. editarVigenciaTarifaController.MSG.fecVenta = Data vigĂȘncia Venda deve estar entre data inĂ­cio e data Fim.