Opa turma… desculpe nao ter feito o post com as tags corretas.
Vamos lá, eu fiz inúmeros testes como já comentei.
PS: Antes de mais nada, o código original não é meu! Estou dando manutenção nesse lixo e estou quase chegando à conclusão de que o melhor é o REDO
Como não sou expert em RichFaces e a4j estou me baseando no código lixo do resto do site… mas como vêem to tomando de 100 a 0!
As questões são:
1 - O modalMapa está dentro do h:form porque não encontrei outra forma pra fazer o reRender do modal funcionar sem que ele estivesse dentro do form
2 - O formulario que está dentro do modal está dentro de um a4j:form para que os dados sejam ‘postados’ no MB, do contrário eu nao consigo setar os valores pois o request não os enxerga.
3 - Os botões de ‘fechar’ e ‘reservar’ do modal é quem deve fazer o show acontecer, ou seja, nestes é que preciso ‘conseguir’ postar os dados no form… todavia, apesar de chamar a ACTION do MB, eles nao estão fazendo o reRender do Modal para HIDE ou mesmo aceitando o javascript RichFaces.hideModalPanel(’’)
Meu XHTML
<ui:define name="conteudo">
<h:form id="form">
<div>
<table width="100%" border="0">
<tr>
<td colspan="2" align="left" class="textoHistorico"><b>Venda ></b> Venda de ingressos</td>
</tr>
</table>
</div>
<div id="IDCabecalho">
<table width="100%" border="0" class="tabelaCampos" cellspacing="0" cellpadding="0">
<tr align="left" class="classeGrid">
<td width="100px">Evento:</td>
<td align="right">
<h:inputText
value="#{vendaDeIngressoOnLineMB.venda.evento.nome}"
style="width:98%"
styleClass="inputType"
disabled="true" />
</td>
</tr>
</table>
</div>
<hr class="classeGrid"/>
<table width="100%" class="tabelaCampos" cellspacing="0" cellpadding="0">
<tr align="left" class="classeGrid">
<td width="100px">Ingressos</td>
<td align="right">
<img
class="abrirFechar"
id="btsIngresso"
src="../../../images/bts/btsDivAberto.gif"
onclick="abrirDiv('IDIngresso','btsIngresso');" />
</td>
</tr>
</table>
<div id="IDIngresso">
<table width="100%">
<tr>
<td colspan="2"/>
</tr>
<tr>
<td width="100%">
<rich:dataTable
width="100%"
id="tabelaSetores"
styleClass="classeGridTitle"
columnClasses="col"
value="#{vendaDeIngressoOnLineMB.listSetorEvento}"
var="setor">
<f:facet name="header">
<rich:columnGroup>
<h:column width="3%" styleClass="classeGridTitle"> Mapa </h:column>
<h:column width="22%" styleClass="classeGridTitle"> Setor </h:column>
<h:column width="15%" styleClass="classeGridTitle"> Disponibilidade </h:column>
<h:column width="5%" styleClass="classeGridTitle"> Inteira </h:column>
<h:column width="10%" styleClass="classeGridTitle"> Valor Unitário </h:column>
<h:column width="5%" styleClass="classeGridTitle"> Meia Entrada</h:column>
<h:column width="10%" styleClass="classeGridTitle"> Valor Meia </h:column>
</rich:columnGroup>
</f:facet>
<f:facet name="footer" id="totaisFooter">
<rich:columnGroup styleClass="classeGrid">
<rich:column
colspan="3"
styleClass="classeGrid"
style="background-color:#EAF3FC;text-align:center;"
width="20%">
<h:outputText
value="Total" />
</rich:column>
<rich:column
styleClass="classeGrid"
style="background-color:#FAFCFE;text-align:center;"
width="10%">
<h:outputText
id="totalQuantidadeInteiraColumn"
value="#{vendaDeIngressoOnLineMB.quantidadeDeSetoresInteiraIngresso}" />
</rich:column>
<rich:column
styleClass="classeGrid"
style="background-color:#FAFCFE;"
width="10%"/>
<rich:column
styleClass="classeGrid"
style="background-color:#FAFCFE;text-align:center;"
width="10%">
<h:outputText
id="totalQuantidadeMeiaColumn"
value="#{vendaDeIngressoOnLineMB.quantidadeDeSetoresMeiaIngresso}" />
</rich:column>
<rich:column
colspan="2"
styleClass="classeGrid"
style="background-color:#FAFCFE;"
width="10%"/>
</rich:columnGroup>
</f:facet>
<rich:column styleClass="classeGrid">
<a4j:commandButton
image="/images/BntEditar.gif"
alt="Escolha de lugares"
value="Escolha de lugares"
action="#{vendaDeIngressoOnLineMB.visualizarMapaSetor}"
reRender="form,formMapa,formMapa:modalMapa"/>
</rich:column>
<rich:column styleClass="classeGrid">
#{setor.nome}
</rich:column>
<rich:column
style="text-align:center;"
styleClass="classeGrid">
<h:inputText
value="#{setor.disponibilidadePorSetor}"
disabled="true"
style="width:68px;"
styleClass="inputType" />
</rich:column>
<rich:column
style="text-align:center;"
styleClass="classeGrid">
<h:inputText
value="#{setor.quantidadeVendaIngressoInteira}"
styleClass="inputType"
disabled="#{vendaDeIngressoOnLineMB.habilitaCancelarReserva}"
style=" width : 33px;">
<a4j:support
event="onkeyup"
reRender="form:tabelaSetores:totalQuantidadeInteiraColumn,form:totalPreco" />
</h:inputText>
</rich:column>
<rich:column
style="text-align:center;"
styleClass="classeGrid">
<h:outputText value="#{setor.valorDeInteira}">
<f:convertNumber type="currency" />
</h:outputText>
</rich:column>
<rich:column style="text-align:center;" styleClass="classeGrid">
<h:inputText
value="#{setor.quantidadeVendaIngressoMeia}"
disabled="#{vendaDeIngressoOnLineMB.habilitaCancelarReserva}"
style=" width : 35px;"
styleClass="inputType">
<a4j:support
event="onkeyup"
reRender="form:tabelaSetores:totalQuantidadeMeiaColumn,form:totalPreco" />
</h:inputText>
</rich:column>
<rich:column style="text-align:center;" styleClass="classeGrid">
<h:outputText value="#{setor.valorDeMeia}">
<f:convertNumber type="currency" />
</h:outputText>
</rich:column>
</rich:dataTable>
</td>
</tr>
<tr>
<td align="right">
<h:outputText
value="Valor Total:" />
<h:inputText
id="totalPreco"
styleClass="inputType"
value="#{vendaDeIngressoOnLineMB.totalPrecoIngresso}"
disabled="true"
style="text-align:right;width:80px">
<f:convertNumber type="currency" />
</h:inputText>
</td>
</tr>
<tr>
<td align="left">
<a4j:commandButton
value="Cancelar"
alt="Cancelar"
image="/images/bts/btsCancelar.gif"
action="#{vendaDeIngressoOnLineMB.cancelaReservaIngresso_Action}"
disabled="#{!vendaDeIngressoOnLineMB.habilitaCancelarReserva}"
reRender="form,modal" />
<a4j:commandButton
styleClass="reserva"
value="Reservar ingressos"
image="/images/bts/btsReservarIngressos.gif"
alt="Reservar Ingressos"
action="#{vendaDeIngressoOnLineMB.reservaIngresso_Action}"
disabled="#{!vendaDeIngressoOnLineMB.habilitaPreReserva}"
reRender="form,modal,habilitaAba" />
</td>
</tr>
</table>
</div>
<hr class="classeGrid"/>
<table width="100%" class="tabelaCampos" cellspacing="0" cellpadding="0">
<tr align="left" class="classeGrid">
<td>Identificação do Comprador</td>
<td align="right">
<img
class="abrirFechar"
id="btsComprador"
src="../../../images/bts/btsDivFechado.gif"
onclick="abrirDiv('IDComprador','btsComprador');" />
</td>
</tr>
</table>
<div id="IDComprador" style="display: none;">
<table width="100%" class="tabelaCampos" cellspacing="0" cellpadding="0">
<tr align="left" class="classeGrid">
<td width="100%">
<rich:dataTable
width="100%"
id="Table1"
columnClasses="col"
styleClass="classeGridTitle"
value="#{vendaDeIngressoOnLineMB.venda.ingressosVendidosAsList}"
var="ingressos">
<f:facet name="header">
<rich:columnGroup>
<h:column width="10%" styleClass="classeGridTitle"> Setor </h:column>
<h:column width="20%" styleClass="classeGridTitle"> Nome </h:column>
<h:column width="10%" styleClass="classeGridTitle"> RG</h:column>
<h:column width="10%" styleClass="classeGridTitle"> Meia Entrada</h:column>
</rich:columnGroup>
</f:facet>
<rich:column styleClass="classeGrid">
<h:outputText value="#{ingressos.ingresso.fileira.setor.nome}" />
</rich:column>
<rich:column styleClass="classeGrid" style="text-align:center;">
<h:inputText value="#{ingressos.nomeDoComprador}" />
</rich:column>
<rich:column style="text-align:center;" styleClass="classeGrid">
<h:inputText value="#{ingressos.rgDoComprador}" />
</rich:column>
<rich:column style="text-align:center;" styleClass="classeGrid">
<h:selectBooleanCheckbox value="#{ingressos.meiaEntrada==1}" disabled="true" />
</rich:column>
</rich:dataTable>
</td>
</tr>
</table>
</div>
<hr class="classeGrid"/>
<table width="100%" class="tabelaCampos" cellspacing="0" cellpadding="0">
<tr align="left" class="classeGrid">
<td>Pagamento</td>
<td align="right">
<img
class="abrirFechar"
id="btsPagamento"
src="../../../images/bts/btsDivFechado.gif"
onclick="abrirDiv('IDPagamento','btsPagamento');" />
</td>
</tr>
</table>
<div id="IDPagamento" style="display: none;">
<table width="100%" class="tabelaCampos" cellspacing="0" cellpadding="0">
<tr align="left" class="classeGrid">
<td>
</td>
</tr>
</table>
</div>
<hr class="classeGrid"/>
<table width="100%" class="tabelaCampos" cellspacing="0" cellpadding="0">
<tr align="left" class="classeGrid">
<td>Confirmação</td>
<td align="right">
<img
class="abrirFechar"
id="btsConfirmacao"
src="../../../images/bts/btsDivFechado.gif"
onclick="abrirDiv('IDConfirmacao','btsConfirmacao');" />
</td>
</tr>
</table>
<div id="IDConfirmacao" style="display: none;">
<table width="100%" class="tabelaCampos" cellspacing="0" cellpadding="0">
<tr align="left" class="classeGrid">
<td width="100px">
<a4j:commandButton
image="/images/bts/btsConfirmarPedido.gif"
value="Confirmar Pedido"
action="#{vendaDeIngressoOnLineMB.confirmarPedido}"
reRender="form,modal" />
</td>
<td width="100px">Pedido Número:</td>
<td>
<h:inputText
disabled="true"
styleClass="inputType"
value="#{vendaDeIngressoOnLineMB.pedidoVenda.id}" />
</td>
<td align="right"/>
</tr>
</table>
</div>
<hr class="classeGrid"/>
<div id="IDAcao">
<script language="JavaScript">
function nxtVenda() {
alert('chamou a funcao nxtVenda()');
var obj = document.getElementById('form:nxtSale');
alert('obj = ' + obj);
obj.disabled = 'false';
alert('setou false no disable');
document.getElementById('form:nxtSale').click();
alert('deu click no botao');
alert('finalizou a funcao nxtVenda()');
return true;
}
</script>
<table width="100%" border="0">
<tr>
<td align="right">
<h:commandButton
id="btnVoltar"
image="/images/bts/btsVoltar.gif"
alt="Voltar"
value="Voltar"
action="voltarParaPaginaDeListagem_Case" />
<h:commandButton
value="Próxima Venda"
image="/images/bts/btsProximaVenda.gif"
alt="Proxima Venda"
id="nxtSale"
disabled="#{vendaDeIngressoOnLineMB.habilitaProximaVenda == false}"
action="#{vendaDeIngressoOnLineMB.proximaVenda_Action}" />
</td>
</tr>
</table>
</div>
<div id="IDRodape">
<table width="100%">
<tr>
<td align="right"/>
</tr>
</table>
</div>
<div id="habilitaAba">
<c:if test="#{vendaDeIngressoOnLineMB.habilitaAbas == true}">
<script>
abreAbasVendas('IDComprador','btsComprador');
abreAbasVendas('IDConfirmacao','btsConfirmacao');
abreAbasVendas('IDPagamento','btsPagamento');
</script>
</c:if>
<c:if test="#{vendaDeIngressoOnLineMB.habilitaAbas == false}">
<script>
fechaAbasVendas('IDComprador','btsComprador');
fechaAbasVendas('IDConfirmacao','btsConfirmacao');
fechaAbasVendas('IDPagamento','btsPagamento');
</script>
</c:if>
</div>
<rich:modalPanel
id="modalErro"
rendered="#{vendaDeIngressoOnLineMB.erro == true}"
showWhenRendered="true"
styleClass="classeGrid"
height="220"
width="400">
<h:messages />
<h:outputText value="#{errosDeValidacao}" escape="false" />
<a4j:commandButton
id="fecharErro"
value="Fechar"
image="/images/bts/btsContinuar.gif"
alt="Fechar"
action="#{vendaDeIngressoOnLineMB.fechaModalErro_Action}"
ajaxSingle="true"
oncomplete="#{rich:component('modalErro')}.hide(); return false;" />
</rich:modalPanel>
<rich:modalPanel
id="modalSucesso"
rendered="#{vendaDeIngressoOnLineMB.sucess == true}"
showWhenRendered="true"
styleClass="classeGrid"
height="220"
width="400">
<h:messages />
<h:outputText value="#{errosDeValidacao}" escape="false" />
<a4j:commandButton
id="fecharSucesso1"
value="Proxima Venda"
image="/images/bts/btsProximaVenda.gif"
alt="Proxima Venda"
action="#{vendaDeIngressoOnLineMB.fechaModalSucesso_Action}"
ajaxSingle="true"
oncomplete="#{rich:component('modalSucesso')}.hide(); fechaAbasVendas('IDComprador','btsComprador'); fechaAbasVendas('IDConfirmacao','btsConfirmacao'); fechaAbasVendas('IDPagamento','btsPagamento'); nxtVenda(); return false;" />
</rich:modalPanel>
<rich:modalPanel id="modalFechar" onbeforeshow="return false" >
<h:inputHidden id="fechar" value="0" />
<a4j:commandButton
id="btnFechar"
value="Fechar"
onclick="#{rich:component('modalFechar')}.hide(); return false;"/>
</rich:modalPanel>
</h:form>
<h:form id="formMapa">
<rich:modalPanel
id="modalMapa"
rendered="#{vendaDeIngressoOnLineMB.showMapa == true}"
showWhenRendered="true"
style="overflow:auto"
height="400"
width="1100">
<a4j:form id="formMapa2">
<table cellpadding="0" cellspacing="0">
<a4j:repeat value="#{vendaDeIngressoOnLineMB.listaFileirasDoSetor}" var="fileira">
<tr>
<td><h:outputText value="#{fileira.nome}"/></td>
<td>
<table cellpadding="0" cellspacing="1">
<tr>
<a4j:repeat value="#{fileira.ingressos}" var="ingresso">
<td>
<h:panelGrid bgcolor="black" rendered="#{ingresso.vendido == true}" width="5">
<h:outputLabel style="width:5px; color: white" value=" #{ingresso.ingresso.assento} "/>
</h:panelGrid>
<h:panelGrid bgcolor="yellow" rendered="#{ingresso.reservado == true}" width="100%">
<h:outputLabel style="width:5px; color: black" value=" #{ingresso.ingresso.assento} "/>
</h:panelGrid>
<h:panelGrid style="vertical-align: middle; text-align: center;" bgcolor="green" rendered="#{ingresso.disponivel == true}" width="100%">
<h:outputLabel style="width:5px; color: white" value=" #{ingresso.ingresso.assento} "/>
<h:selectBooleanCheckbox title="ingressoId"/>
</h:panelGrid>
</td>
</a4j:repeat>
</tr>
</table>
</td>
</tr>
</a4j:repeat>
</table>
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<span align="right">
<a4j:commandButton
value="Fechar"
alt="Fechar"
title="Fechar"
image="/images/bts/btsFechar.gif"
onclick="javascript:RichFaces.hideModalPanel('formMapa:modalMapa')"
action="#{vendaDeIngressoOnLineMB.fecharModalMapa_Action}"
reRender="form,formMapa,formMapa:modalMapa" />
<a4j:commandButton
id="botaoReservarPorSelecao"
styleClass="reserva"
value="Reservar ingressos"
image="/images/bts/btsReservarIngressos.gif"
alt="Reservar Ingressos"
action="#{vendaDeIngressoOnLineMB.reservaPorSelecao_Action}"
oncomplete="#{rich:component('modalMapa')}.hide(); return true;"
reRender="form,formMapa,formMapa2,formMapa:modalMapa" />
</span>
</td>
</tr>
</table>
</a4j:form>
</rich:modalPanel>
</h:form>
</ui:define>
Meu MB
public class VendaDeIngressoOnLineMB {
private PedidoDeVenda pedidoVenda;
private boolean vendaIsValid;
private List<SelectItem> listTipoDePagamento;
private Usuario vendedor;
private Evento evento;
private boolean habilitaCancelarReserva;
private boolean habilitaPreReserva;
private List<Setor> listSetorEvento;
private String bilheteria;
private String maquina;
private String guiche;
private boolean erro;
private boolean sucess;
private boolean showMapa;
private List<FileiraPojo> listaFileirasDoSetor;
private List<Integer> listaIngressosSelecionados;
public VendaDeIngressoOnLineMB() {
this.showMapa = false;
}
public boolean inicializaPedidoVenda(Evento e){
sucess = false;
Expediente exp = new ExpedienteDAO().buscarExpedienteAtualDoOperadorDoEvento(DescoleiViewUtil.getLoginMB().getUsuario(), e);
if (exp == null){
return false;
}
this.evento = e;
if (!e.getStatus().equals(StatusDoEvento.LIBERADO_PARA_VENDA)){
return false;
}
pedidoVenda = new PedidoDeVenda();
pedidoVenda.setVendedor(exp.getOperadorPV());
pedidoVenda.setPontoDeVendaDeUmEvento(exp.getPontoVendaEvento());
pedidoVenda.setEvento(e);
pedidoVenda.setTipoDePagamento(TipoDePagamento.DINHEIRO);
pedidoVenda.setQuantidadeDeEntradaInteira(0);
pedidoVenda.setQuantidadeDeMeiaEntrada(0);
listTipoDePagamento = new ArrayList<SelectItem>();
listTipoDePagamento.add(new SelectItem(TipoDePagamento.DINHEIRO, TipoDePagamento.DINHEIRO.getNome()));
listTipoDePagamento.add(new SelectItem(TipoDePagamento.CARTAO_CREDITO, TipoDePagamento.CARTAO_CREDITO.getNome()));
listTipoDePagamento.add(new SelectItem(TipoDePagamento.CARTAO_DEBITO, TipoDePagamento.CARTAO_DEBITO.getNome()));
listSetorEvento = new ArrayList<Setor>();
List<Setor> listSetorEventoTemp = new SetorDAO().buscarSetoresDeUmMapaOrdenandoPorNome(pedidoVenda.getEvento().getMapaDeSetores());
// considera apenas os setores com quantidade disponivel maior que zero
for (Setor setor : listSetorEventoTemp) {
if ((setor.getCapacidadeLiberada() - setor.getCapacidadeVendida()) > 0) {
listSetorEvento.add(setor);
}
}
habilitaCancelarReserva = false;
habilitaPreReserva = true;
return true;
}
public void reservaPorSelecao_Action() {
System.out.println("chamou o reserva por selecao");
for (FileiraPojo fileira : listaFileirasDoSetor) {
for (IngressoPojo ingresso : fileira.getIngressos()) {
if (ingresso.isSelecionado()) {
System.out.println("Ingresso = " + ingresso.getIngresso().getId() + " selectionado para reserva");
}
}
}
this.showMapa = false;
//fecharModalMapa_Action();
}
/**
* Esse m�todo realiza reservas de assentos em setores de acordo
* com a quantidade passada pelo jsf (view).
*/
public void reservaIngresso_Action(){
List<InvalidValueJSF> listErros = new ArrayList<InvalidValueJSF>();
for (Setor setor : listSetorEvento){
int quantidadePedida = setor.getQuantidadeVendaIngressoInteira() + setor.getQuantidadeVendaIngressoMeia();
if (quantidadePedida > setor.getLimitePorComprador()){
listErros.add(new InvalidValueJSF("Atenção:","Limite de ingressos por comprador foi excedida!"));
JSFUtil.getRequest().setAttribute("errosDeValidacao", DescoleiViewUtil.montarMsgDeErro(listErros));
erro = true;
return;
}
if (quantidadePedida == 0)
continue;
// busca todos os ingressos disponíveis
List<Ingresso> ingressosDisponiveis = new IngressoDAO().getProximosIngressosDisponiveisPorSetorPorQuantidade(setor, quantidadePedida);
if (ingressosDisponiveis.size() <= 0){
listErros.add(new InvalidValueJSF("Atenção:","Não há ingressos disponíveis para o setor " + setor.getNome()));
JSFUtil.getRequest().setAttribute("errosDeValidacao", DescoleiViewUtil.montarMsgDeErro(listErros));
erro = true;
return;
}
// reserva ingressos
int count = new IngressoDAO().reservarIngressoSetor(ingressosDisponiveis, quantidadePedida);
quantidadePedida = (setor.getQuantidadeVendaIngressoInteira() + setor.getQuantidadeVendaIngressoMeia()) - count;
// caso não tenha conseguido reservar todos
while (quantidadePedida != 0){
ingressosDisponiveis.add(new IngressoDAO().getProximoIngressoDisponivelPorSetor(setor));
count = new IngressoDAO().reservarIngressoSetor(ingressosDisponiveis, quantidadePedida);
quantidadePedida = setor.getQuantidadeVendaIngressoInteira() + setor.getQuantidadeVendaIngressoMeia() - count;
// verifica quantos ingressos para este setor existe
int totalIngressosVendidosSetor = new IngressoDAO().getTotalDeIngressosVendidosOuReservadosPorSetor(setor);
// Caso não haja mais ingressos
if (ingressosDisponiveis.isEmpty()){
listErros.add(new InvalidValueJSF("Atenção:","Ingressos para " + setor.getNome() + " esgotados!"));
JSFUtil.getRequest().setAttribute("errosDeValidacao", DescoleiViewUtil.montarMsgDeErro(listErros));
erro = true;
return;
}
// Caso a capacidade tenha excedido
if (setor.getCapacidadeLiberada() < totalIngressosVendidosSetor){
listErros.add(new InvalidValueJSF("Atenção:","Capacidade " + setor.getNome() + " esgotada!"));
JSFUtil.getRequest().setAttribute("errosDeValidacao", DescoleiViewUtil.montarMsgDeErro(listErros));
erro = true;
return;
}
}
// verifica quantos ingressos para este setor existe
// TODO: DESABILITEI A LINHA PORQUE NINGUÉM ESTAVA UTILIZANDO OS DADOS EXTRAIDOS PELA CONSULTA
//int totalIngressosVendidosSetor = new IngressoDAO().getTotalDeIngressosVendidosOuReservadosPorSetor(setor);
// busca os ingressos reservados
ingressosDisponiveis = new IngressoDAO().buscarIngressosReservadosParaSetor(ingressosDisponiveis);
if (pedidoVenda.getIngressosVendidos() == null){
pedidoVenda.setIngressosVendidos(new HashSet<IngressoVendido>());
}
int totalMeiaEntrada = 0;
for (Ingresso ingresso : ingressosDisponiveis){
IngressoVendido ingressoVendido = new IngressoVendido();
ingressoVendido.setIngresso(ingresso);
ingressoVendido.setVenda(pedidoVenda);
ingressoVendido.setLoginDaUltimaAtualizacao(DescoleiViewUtil.getLoginMB().getUsuario().getLogin());
ingressoVendido.setOperadorQueRecebeu(new OperadorPvDAO().buscaUsuarioOperador(DescoleiViewUtil.getLoginMB().getUsuario()));
if (totalMeiaEntrada < setor.getQuantidadeVendaIngressoMeia()){
ingressoVendido.setMeiaEntrada(1);
totalMeiaEntrada++;
} else {
ingressoVendido.setMeiaEntrada(0);
}
pedidoVenda.getIngressosVendidos().add(ingressoVendido);
}
atualizaCapacidadeDoSetor(setor, setor.getQuantidadeVendaIngressoInteira() + setor.getQuantidadeVendaIngressoMeia());
setor.setCapacidadeVendida(setor.getQuantidadeVendaIngressoInteira() + setor.getQuantidadeVendaIngressoMeia());
habilitaCancelarReserva = true;
habilitaPreReserva = false;
erro = false;
}
}
public void fechaModalErro_Action() {
erro = false;
}
public void fechaModalSucesso_Action() {
erro = false;
sucess = false;
proximaVenda_Action();
}
public void atualizaCapacidadeDoSetor(Setor setor, int quantidade){
if (quantidade == 0)
return;
int reservado = new IngressoDAO().atualizaIngressosVendidosPorSetor(setor, quantidade);
}
public void cancelaReservaIngresso_Action(){
List<Ingresso> listIngressos = new ArrayList<Ingresso>();
if (pedidoVenda.getIngressosVendidos() == null){
habilitaCancelarReserva = false;
habilitaPreReserva = true;
return;
}
for (IngressoVendido ingressoVendido : pedidoVenda.getIngressosVendidos()){
listIngressos.add(ingressoVendido.getIngresso());
}
new IngressoDAO().cancelarReservaIngressoSetor(listIngressos);
List<Setor> setores = new ArrayList<Setor>();
for (Ingresso ingresso : listIngressos){
for (Setor setor : listSetorEvento){
if (setor.getId().equals(ingresso.getFileira().getSetor().getId())){
if (setores.contains(setor)){
break;
}
atualizaCapacidadeDoSetor(setor, - setor.getCapacidadeVendida());
setores.add(setor);
}
}
}
inicializaPedidoVenda(evento);
}
public void confirmarPedido(){
pedidoVenda.setData(new Timestamp(System.currentTimeMillis()));
pedidoVenda.setTipoDeVenda(TipoDeVenda.ON_LINE);
pedidoVenda.setValorTotalInteira(calculaValorTotalInteira());
pedidoVenda.setValorTotalMeia(calculaValorTotalMeia());
setVendedorNaVenda_Action();
if (JSFUtil.getValidationErros(pedidoVenda).size() > 0) {
List<InvalidValueJSF> listErros = new ArrayList<InvalidValueJSF>();
listErros.addAll(JSFUtil.getValidationErros(pedidoVenda));
JSFUtil.getRequest().setAttribute("errosDeValidacao", DescoleiViewUtil.montarMsgDeErro(listErros));
erro = true;
return;
}
List<InvalidValueJSF> listErros = new ArrayList<InvalidValueJSF>();
for (IngressoVendido ingressoVendido : pedidoVenda.getIngressosVendidos()) {
if (JSFUtil.getValidationErros(ingressoVendido).size() > 0) {
listErros.addAll(JSFUtil.getValidationErros(ingressoVendido));
JSFUtil.getRequest().setAttribute("errosDeValidacao", DescoleiViewUtil.montarMsgDeErro(listErros));
erro = true;
return;
}
List<IngressoVendido> ingressos = null;
if (ingressoVendido.getMeiaEntrada()==1)
{
ingressos = new IngressoVendidoDAO().buscarIngressoParaConsulta(evento.getId(), "", "", ingressoVendido.getRgDoComprador());
}
if (ingressoVendido.getMeiaEntrada()==1 && !ingressos.isEmpty()){
IngressoVendido ingRG = ingressos.get(0);
listErros.add(new InvalidValueJSF("Atenção:","O RG " + ingressoVendido.getRgDoComprador() + " Já foi utilizado neste evento!"));
listErros.add(new InvalidValueJSF("", "Nome Comprador = " + ingRG.getNomeDoComprador()));
listErros.add(new InvalidValueJSF("", "Data/Hora Compra = " + ingRG.getPedidoDeVenda().getData()));
listErros.add(new InvalidValueJSF("", "Nome Bilheteira = " + ingRG.getOperadorQueRecebeu().getNome()));
listErros.add(new InvalidValueJSF("", "Ingresso = " + ingRG.getId() + " Pedido = " + ingRG.getPedidoDeVenda().getId()));
listErros.add(new InvalidValueJSF("", "Setor = " + ingRG.getIngresso().getFileira().getSetor().getNome() + " Fileira = " + ingRG.getIngresso().getFileira().getNome() + " Assento = " + ingRG.getIngresso().getAssento()));
JSFUtil.getRequest().setAttribute("errosDeValidacao", DescoleiViewUtil.montarMsgDeErro(listErros));
erro = true;
//JSFUtil.getRequest().setAttribute("errosGeral", "Atenção: O RG " + ingressoVendido.getRgDoComprador() + " Já foi utilizado neste evento!");
return;
}
}
if (isConfirmacaoValidaDePedido()){
new VendaDAO().gerarPedidoVendaOnLine(pedidoVenda);
listErros.add(new InvalidValueJSF("Atenção:","Venda realizada com sucesso! Pedido nr " + pedidoVenda.getId()));
JSFUtil.getRequest().setAttribute("errosDeValidacao", DescoleiViewUtil.montarMsgDeErro(listErros));
erro = true;
sucess = false;
//JSFUtil.getRequest().setAttribute("errosGeral", "Venda realizada com sucesso! Pedido nr " + pedidoVenda.getId());
}
}
public void visualizarMapaSetor() {
this.showMapa = true;
List<Ingresso> ingressosSetor = new IngressoDAO().getTodosIngressosDoSetor(getSetorSelecionado().getId());
Integer idFileiraAnterior = 0;
FileiraPojo fileira = new FileiraPojo();
listaFileirasDoSetor = new ArrayList<FileiraPojo>();
for (Ingresso ingresso : ingressosSetor) {
if (ingresso.getFileira().getId() != idFileiraAnterior) {
if (idFileiraAnterior != 0) {
listaFileirasDoSetor.add(fileira);
}
fileira = new FileiraPojo();
fileira.setId(ingresso.getFileira().getId());
fileira.setNome(ingresso.getFileira().getNome());
fileira.setIngressos(new ArrayList<IngressoPojo>());
}
IngressoPojo ingressoPojo = new IngressoPojo();
ingressoPojo.setIngresso(ingresso);
fileira.getIngressos().add(ingressoPojo);
idFileiraAnterior = fileira.getId();
}
listaFileirasDoSetor.add(fileira);
}
public void fecharModalMapa_Action() {
System.out.println("chamou o fecha modal mapa");
this.showMapa = false;
}
private double calculaValorTotalInteira() {
double total = 0;
if (pedidoVenda.getEvento() == null)
return 0;
for (Setor setor : this.listSetorEvento) {
if (setor.getTaxa() != 0){
total += setor.getQuantidadeVendaIngressoInteira() * (setor.getValorDeInteira() * setor.getTaxa());
} else {
total += setor.getQuantidadeVendaIngressoInteira() * (setor.getValorDeInteira());
}
}
return 0;
}
private double calculaValorTotalMeia() {
double total = 0;
if (pedidoVenda.getEvento() == null)
return 0;
for (Setor setor : this.listSetorEvento) {
if (setor.getTaxa() != 0){
total += setor.getQuantidadeVendaIngressoMeia() * (setor.getValorDeMeia() * setor.getTaxa());
} else {
total += setor.getQuantidadeVendaIngressoMeia() * (setor.getValorDeMeia());
}
}
return 0;
}
public void proximaVenda_Action(){
sucess = false;
inicializaPedidoVenda(evento);
setVendedorNaVenda_Action();
}
public boolean isConfirmacaoValidaDePedido(){
List<InvalidValueJSF> listErros = new ArrayList<InvalidValueJSF>();
for (IngressoVendido ingressoVendido : pedidoVenda.getIngressosVendidos()) {
if (ingressoVendido.getMeiaEntrada()==1){
if (ingressoVendido.getNomeDoComprador().isEmpty()){
listErros.add(new InvalidValueJSF("Identificação do Comprador:","Nome é obrigatório para meia entrada"));
JSFUtil.getRequest().setAttribute("errosDeValidacao", DescoleiViewUtil.montarMsgDeErro(listErros));
return false;
}
if (ingressoVendido.getRgDoComprador().isEmpty()){
listErros.add(new InvalidValueJSF("Identificação do Comprador:","Docto de Identificação e obrigatório para meia entrada"));
JSFUtil.getRequest().setAttribute("errosDeValidacao", DescoleiViewUtil.montarMsgDeErro(listErros));
return false;
}
/*
if (ingressoVendido.getCpfDoComprador().isEmpty()){
listErros.add(new InvalidValueJSF("Identificação do Comprador:","Docto de Identificação � obrigat�rio para meia entrada"));
JSFUtil.getRequest().setAttribute("errosDeValidacao", DescoleiViewUtil.montarMsgDeErro(listErros));
return false;
}*/
}
}
return true;
}
public void validaModalOperador_Action(){
if (getBilheteria() == null){
vendaIsValid = false;
return;
}
if (getGuiche() == null){
vendaIsValid = false;
return;
}
if (getMaquina() == null){
vendaIsValid = false;
return;
}
if (getBilheteria().isEmpty()){
vendaIsValid = false;
return;
}
if (getGuiche().isEmpty()){
vendaIsValid = false;
return;
}
if (getMaquina().isEmpty()){
vendaIsValid = false;
return;
}
vendaIsValid = true;
}
public int getQuantidadeDeSetoresInteiraIngresso() {
int total = 0;
if (pedidoVenda.getEvento() == null)
return 0;
for (Setor setor : this.listSetorEvento) {
total += setor.getQuantidadeVendaIngressoInteira();
}
pedidoVenda.setQuantidadeDeEntradaInteira(total);
getTotalPrecoIngresso();
return total;
}
public int getQuantidadeDeSetoresMeiaIngresso() {
int total = 0;
if (pedidoVenda.getEvento() == null)
return 0;
for (Setor setor : this.listSetorEvento) {
total += setor.getQuantidadeVendaIngressoMeia();
}
pedidoVenda.setQuantidadeDeMeiaEntrada(total);
getTotalPrecoIngresso();
return total;
}
public double getTotalPrecoIngresso() {
double total = 0;
if (pedidoVenda.getEvento() == null)
return 0;
for (Setor setor : this.listSetorEvento) {
if (setor.getTaxa() != 0){
total += setor.getQuantidadeVendaIngressoInteira() * (setor.getValorDeInteira() * setor.getTaxa());
} else {
total += setor.getQuantidadeVendaIngressoInteira() * (setor.getValorDeInteira());
}
if (setor.getTaxa() != 0){
total += setor.getQuantidadeVendaIngressoMeia() * (setor.getValorDeMeia() * setor.getTaxa());
} else {
total += setor.getQuantidadeVendaIngressoMeia() * (setor.getValorDeMeia());
}
}
return total;
}
public String voltar_Action(){
return "listarEventos_Case";
}
public boolean getHabilitaAbas(){
if (pedidoVenda == null) {
return false;
}
if (pedidoVenda.getIngressosVendidos() == null) {
return false;
}
if (pedidoVenda.getIngressosVendidos().size() == 0) {
return false;
}
return true;
}
public boolean getHabilitaProximaVenda(){
if (pedidoVenda == null) {
return false;
}
if (pedidoVenda.getId() == null) {
return false;
}
return true;
}
public void setVendedorNaVenda_Action(){
this.pedidoVenda.setBilheteria("b1");
this.pedidoVenda.setGuiche("g1");
this.pedidoVenda.setMaquina("m1");
}
@Override
protected void finalize() throws Throwable {
System.out.println("VendaDeIngressosOnLineMB.finalize()");
}
public PedidoDeVenda getVenda() {
return pedidoVenda;
}
public void setVenda(PedidoDeVenda venda) {
this.pedidoVenda = venda;
}
public Setor getIngressoSetorSelecionado(){
return (Setor) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("setor");
}
public boolean isVendaIsValid() {
return vendaIsValid;
}
public void setVendaIsValid(boolean vendaIsValid) {
this.vendaIsValid = vendaIsValid;
}
public List<SelectItem> getListTipoDePagamento() {
return listTipoDePagamento;
}
public void setListTipoDePagamento(List<SelectItem> listTipoDePagamento) {
this.listTipoDePagamento = listTipoDePagamento;
}
public Usuario getVendedor() {
return vendedor;
}
public void setVendedor(Usuario vendedor) {
this.vendedor = vendedor;
}
public PedidoDeVenda getPedidoVenda() {
return pedidoVenda;
}
public void setPedidoVenda(PedidoDeVenda pedidoVenda) {
this.pedidoVenda = pedidoVenda;
}
public Evento getEvento() {
return evento;
}
public void setEvento(Evento evento) {
this.evento = evento;
}
public boolean isHabilitaCancelarReserva() {
return habilitaCancelarReserva;
}
public void setHabilitaCancelarReserva(boolean habilitaCancelarReserva) {
this.habilitaCancelarReserva = habilitaCancelarReserva;
}
public boolean isHabilitaPreReserva() {
return habilitaPreReserva;
}
public void setHabilitaPreReserva(boolean habilitaPreReserva) {
this.habilitaPreReserva = habilitaPreReserva;
}
public List<Setor> getListSetorEvento() {
return listSetorEvento;
}
public void setListSetorEvento(List<Setor> listSetorEvento) {
this.listSetorEvento = listSetorEvento;
}
public String getBilheteria() {
return bilheteria;
}
public void setBilheteria(String bilheteria) {
this.bilheteria = bilheteria;
}
public String getMaquina() {
return maquina;
}
public void setMaquina(String maquina) {
this.maquina = maquina;
}
public String getGuiche() {
return guiche;
}
public void setGuiche(String guiche) {
this.guiche = guiche;
}
/**
* @return the erro
*/
public boolean isErro() {
return erro;
}
/**
* @param erro the erro to set
*/
public void setErro(boolean erro) {
this.erro = erro;
}
/**
* @return the sucess
*/
public boolean isSucess() {
return sucess;
}
/**
* @param sucess the sucess to set
*/
public void setSucess(boolean sucess) {
this.sucess = sucess;
}
/**
* @return the setorSelecionado
*/
public Setor getSetorSelecionado() {
return (Setor) FacesContext.getCurrentInstance().getExternalContext().getRequestMap().get("setor");
}
/**
* @return the showMapa
*/
public boolean isShowMapa() {
return showMapa;
}
/**
* @param showMapa the showMapa to set
*/
public void setShowMapa(boolean showMapa) {
this.showMapa = showMapa;
}
/**
* @return the listaIngressosDoSetor
*/
public List<FileiraPojo> getListaFileirasDoSetor() {
return listaFileirasDoSetor;
}
/**
* @param listaIngressosDoSetor the listaIngressosDoSetor to set
*/
public void setListaFileirasDoSetor(List<FileiraPojo> listaFileirasDoSetor) {
this.listaFileirasDoSetor = listaFileirasDoSetor;
}
/**
* @return the listaIngressosSelecionados
*/
public List<Integer> getListaIngressosSelecionados() {
return listaIngressosSelecionados;
}
/**
* @param listaIngressosSelecionados the listaIngressosSelecionados to set
*/
public void setListaIngressosSelecionados(List<Integer> listaIngressosSelecionados) {
this.listaIngressosSelecionados = listaIngressosSelecionados;
}
}