public static RetornoModel <EstruturaReservaInternet> MontarEstruturaReservaExterno(CompraPagamentoExternoModel pagamento, CompraModel compra) { if (compra.EstruturaVenda == null) { compra.EstruturaVenda = new CompraEstruturaVendaModel(); } if (compra.EstruturaVenda.CanalID == 0 || compra.EstruturaVenda.LojaID == 0 || compra.EstruturaVenda.UsuarioID == 0) { int canalTipoPOS; int.TryParse(ConfiguracaoAppUtil.Get("CanalTipoPOS"), out canalTipoPOS); compra.EstruturaVenda.LojaID = Convert.ToInt32(ConfiguracaoAppUtil.Get(enumConfiguracaoBO.POSLojaID)); compra.EstruturaVenda.UsuarioID = Convert.ToInt32(ConfiguracaoAppUtil.Get(enumConfiguracaoBO.POSUsuarioID)); compra.EstruturaVenda.CanalID = Convert.ToInt32(ConfiguracaoAppUtil.Get(enumConfiguracaoBO.CanalPOS)); compra.EstruturaVenda.CanalTipo = canalTipoPOS; } var estrutura = new EstruturaReservaInternet() { CaixaID = compra.EstruturaVenda.CaixaID, LojaID = compra.EstruturaVenda.LojaID, UsuarioID = compra.EstruturaVenda.UsuarioID, CanalID = compra.EstruturaVenda.CanalID, ClienteID = compra.ClienteID, SessionID = compra.SessionID, GUID = Guid.NewGuid().ToString(), }; return(new RetornoModel <EstruturaReservaInternet>() { Mensagem = "OK", Sucesso = true, Retorno = estrutura }); }
public static RetornoModel <EstruturaReservaInternet> MontarEstruturaReserva(CompraPagamentoModel pagamento, CompraModel compra) { if (compra.EstruturaVenda == null) { compra.EstruturaVenda = new CompraEstruturaVendaModel(); } if (compra.EstruturaVenda.UsuarioID == 0 || compra.EstruturaVenda.UsuarioID == IRLib.Usuario.INTERNET_USUARIO_ID) { compra.EstruturaVenda.CaixaID = 0; compra.EstruturaVenda.LojaID = Convert.ToInt32(ConfiguracaoAppUtil.Get(enumConfiguracaoBO.InternetLojaID)); compra.EstruturaVenda.UsuarioID = Convert.ToInt32(ConfiguracaoAppUtil.Get(enumConfiguracaoBO.InternetUsuarioID)); compra.EstruturaVenda.CanalID = Convert.ToInt32(ConfiguracaoAppUtil.Get(enumConfiguracaoBO.CanalInternet)); compra.EstruturaVenda.CanalTipo = 1; } else { if (compra.EstruturaVenda.CaixaErrado) { return new RetornoModel <EstruturaReservaInternet>() { Sucesso = false, Mensagem = "Esse caixa não pode verder na internet. Abra outro caixa!", Retorno = null } } ; else if (!compra.EstruturaVenda.CanalVerificado) { var canaisSplit = ConfiguracaoAppUtil.Get(enumConfiguracaoBO.CanaisInternet); if (!canaisSplit.Contains(compra.EstruturaVenda.CanalID.ToString()) || !new IRLib.Loja().ValidarLojaCanal(compra.EstruturaVenda.LojaID, new List <string>() { compra.EstruturaVenda.CanalID.ToString() })) { compra.EstruturaVenda.CaixaErrado = true; return(new RetornoModel <EstruturaReservaInternet>() { Sucesso = false, Mensagem = "Esse caixa não pode verder na internet. Abra outro caixa!", Retorno = null }); } compra.EstruturaVenda.CanalVerificado = true; } } EstruturaReservaInternet estrutura = new EstruturaReservaInternet() { CaixaID = compra.EstruturaVenda.CaixaID, LojaID = compra.EstruturaVenda.LojaID, UsuarioID = compra.EstruturaVenda.UsuarioID, CanalID = compra.EstruturaVenda.CanalID, ClienteID = compra.ClienteID, SessionID = compra.SessionID, GUID = Guid.NewGuid().ToString(), }; return(new RetornoModel <EstruturaReservaInternet>() { Mensagem = "OK", Sucesso = true, Retorno = estrutura }); }
/// <summary> /// Vai inserir os ingressos on demand, este método só é utilizado em caso de compras para cinema!!! /// Não gerará código sequencial nem código do lugar! /// </summary> /// <param name="estruturaReserva"></param> /// <param name="apresentacaoSetorID"></param> /// <param name="eventoID"></param> /// <param name="apresentacaoID"></param> /// <param name="setorID"></param> /// <param name="ingressosRetorno"></param> /// <param name="listaPreco"></param> /// <returns></returns> private List <Ingresso> NovoNaoMarcadoOnDemand(EstruturaReservaInternet estruturaReserva, int apresentacaoSetorID, int eventoID, int apresentacaoID, int setorID, List <Ingresso> ingressosRetorno, List <EstruturaPrecoReservaSite> listaPreco) { BD bd = new BD(); try { List <int> ids = this.NovoNaoMarcadoOnDemand(bd, eventoID, apresentacaoID, apresentacaoSetorID, setorID, listaPreco.Count - ingressosRetorno.Count); int atual = ingressosRetorno.Count; for (int i = atual; i < listaPreco.Count; i++) { var ingresso = new Ingresso(); ingresso.Control.ID = ids[0]; ingresso.PrecoID.Valor = listaPreco[atual].ID; ingresso.UsuarioID.Valor = estruturaReserva.UsuarioID; ingresso.LojaID.Valor = estruturaReserva.LojaID; ingresso.ClienteID.Valor = estruturaReserva.ClienteID; ingresso.SessionID.Valor = estruturaReserva.SessionID; ingresso.TimeStampReserva.Valor = DateTime.Now; ingresso.TxConv = new Bilheteria().TaxaConveniencia(eventoID, listaPreco[atual].ID, estruturaReserva.CanalID);; ingresso.CotaItemID = listaPreco[atual].CotaItemID; ingresso.CotaItemIDAPS = listaPreco[atual].CotaItemIDAPS; ingresso.SerieID.Valor = 0; ingresso.CompraGUID.Valor = estruturaReserva.GUID; ingressosRetorno.Add(ingresso); } return(ingressosRetorno); } catch (Exception ex) { bd.DesfazerTransacao(); throw ex; } finally { bd.Fechar(); } }
private bool IngressosQPodeReservar(bool transferencia, EstruturaReservaInternet estruturaReservaInternet) { IRLib.Bilheteria oBilheteria = new IRLib.Bilheteria(); try { List <IngressoTransferencia> pacotes = this.Where(c => c.IR_PacoteID > 0).ToList(); List <IngressoTransferencia> avulsos = this.Where(c => c.IR_PacoteID == 0).ToList(); var x = from c in pacotes select new { PacoteID = c.IR_PacoteID, Quantidade = pacotes.Count(i => i.IR_PacoteID == c.IR_PacoteID) }; foreach (var item in x) { if (item.Quantidade != oBilheteria.GetPacotesQPodeReservar(item.PacoteID, item.Quantidade, this.SessionID, this.ClienteID, estruturaReservaInternet)) { throw new Exception("Um dos pacotes não pode ser tranferido, limite atingido"); } } var y = from c in avulsos select new { PrecoID = c.PrecoID, Quantidade = c.Quantidade, c.SerieID }; decimal valorPreco = 0; foreach (var item in y) { if (item.Quantidade != oBilheteria.GetIngressosQPodeReservar(this.ClienteID, this.SessionID, item.PrecoID, item.Quantidade, ref valorPreco, transferencia, item.SerieID, estruturaReservaInternet)) { throw new Exception("Um dos Preços não pode ser transferido, limite atingido"); } } return(true); } catch (Exception ex) { throw ex; } }
public void ValidarLugarMarcadoInternet(EstruturaPrecoReservaSite preco, Setor.enumLugarMarcado tipoSetor, EstruturaCotasInfo cotaInfo, int serieID, EstruturaReservaInternet estruturaReserva) { int cortesiaID = 0; Bilheteria oBilheteria = new Bilheteria(); CotaItem oCotaItem = new CotaItem(); CotaItemControle cotaItemControle = new CotaItemControle(); List <EstruturaCotaItemReserva> listaCotaItem = new List <EstruturaCotaItemReserva>(); if (cotaInfo.CotaID_Apresentacao != 0 || cotaInfo.CotaID_ApresentacaoSetor != 0) { listaCotaItem = oCotaItem.getListaCotaItemReserva(cotaInfo.CotaID_Apresentacao, cotaInfo.CotaID_ApresentacaoSetor); } cotaInfo.ApresentacaoID = this.ApresentacaoID.Valor; cotaInfo.ApresentacaoSetorID = this.ApresentacaoSetorID.Valor; oCotaItem.AtualizarInformacoesCota(listaCotaItem, preco, cotaInfo); if (listaCotaItem.Any() && cotaInfo.CotaItemID > 0) { cotaInfo.QuantidadeJaVendida = cotaItemControle.getQuantidadeNovo(cotaInfo.CotaItemID, cotaInfo.CotaItemID_APS, cotaInfo.ApresentacaoID, cotaInfo.ApresentacaoSetorID); var qtdReservar = preco.QuantidadeReservar(); if (!cotaInfo.ValidaReserva(qtdReservar)) { throw new BilheteriaException(string.Format("Não será possível reservar o preço \"{0}\", o limite de venda foi excedido.", preco.PrecoNome), Bilheteria.CodMensagemReserva.PrecoIndisponivel); } } decimal precoValor = 0; // Verifica se existe quantidade do PrecoID disponivel para venda e retorna via referencia o valor do preço if (preco.Quantidade != oBilheteria.GetIngressosQPodeReservar(this.ClienteID.Valor, this.SessionID.Valor, preco.ID, preco.Quantidade, ref precoValor, false, serieID, estruturaReserva)) { throw new BilheteriaException(string.Format("A quantidade disponivel para o preço \"{0}\" foi excedida.", preco.PrecoNome), Bilheteria.CodMensagemReserva.PrecoIndisponivel); } this.TxConv = oBilheteria.TaxaConveniencia(this.EventoID.Valor, preco.ID, estruturaReserva.CanalID); if (this.TxConv > 0) { this.TaxaProcessamentoValor = oBilheteria.ValorTaxaProcessamento(this.EventoID.Valor); if (this.TaxaProcessamentoValor > 0) { this.TxConv = 0; } } //Aqui precisa fazer a validação, é cortesia?? if (preco.Valor == 0 && TxConv == 0 && TaxaProcessamentoValor == 0) { cortesiaID = new Cortesia().CortesiaPadraoEvento(this.EventoID.Valor); if (cortesiaID <= 0) { throw new Exception("Não possível encontrar a cortesia associada a este evento!"); } this.CortesiaID.Valor = cortesiaID; } this.PrecoID.Valor = preco.ID; this.CotaItemID = cotaInfo.CotaItemID; this.CotaItemIDAPS = cotaInfo.CotaItemID_APS; this.SerieID.Valor = serieID; }
/// <summary> /// Método para retornar os ingressos (para reserva) dos melhores lugares de mesa fechada. /// kim /// </summary> /// <param name="usuarioID"></param> /// <param name="lojaID"></param> /// <param name="sessionID"></param> /// <param name="clienteID"></param> /// <param name="eventoID"></param> /// <param name="apresentacaoSetorID"></param> /// <param name="precos"></param> /// <param name="preReserva"></param> /// <returns></returns> public List <Ingresso> MelhoresIngressos(int usuarioID, int lojaID, string sessionID, int clienteID, int eventoID, int apresentacaoID, int apresentacaoSetorID, int setorID, List <EstruturaPrecoReservaSite> precos, Setor.enumLugarMarcado tipoSetor, EstruturaCotasInfo cotaInfo, int serieID, EstruturaReservaInternet estruturaReserva, bool isEntradaFranca) { BD bd = new BD(ConfigurationManager.AppSettings["ConexaoReadOnly"]); BD bdReserva = new BD(); Ingresso oIngresso = new Ingresso(); Bilheteria oBilheteria = new Bilheteria(); Cota oCota = new Cota(); CotaItemControle cotaItemControle = new CotaItemControle(); CotaItem oCotaItem = new CotaItem(); Lugar oLugar = new Lugar(); //usado para a busca de melhores lugares. List <Ingresso> ingressosRetorno; decimal precoValor; int p; decimal valorConv = 0; decimal valorProcessamento = 0; //decimal valor; Cortesia oCortesia = new Cortesia(); int CortesiaPadraoID = 0; DateTime timeStamp = DateTime.Now.AddMinutes(new ConfigGerenciador().getValorTempoReserva()); try { int qtdPrecos = 0; //Essa variavel duplica o preço e o valor pela quantidade de para reservar. //Dessa forma é possível reservar os lugares com os preços corretos. kim List <EstruturaPrecoReservaSite> precoPorLugar = new List <EstruturaPrecoReservaSite>(); List <EstruturaPrecoReservaSite> listaPreco = new List <EstruturaPrecoReservaSite>(); EstruturaPrecoReservaSite itemPreco; List <EstruturaCotaItemReserva> listaCotaItem = new List <EstruturaCotaItemReserva>(); if (cotaInfo.CotaID_Apresentacao != 0 || cotaInfo.CotaID_ApresentacaoSetor != 0) { listaCotaItem = oCotaItem.getListaCotaItemReserva(cotaInfo.CotaID_Apresentacao, cotaInfo.CotaID_ApresentacaoSetor); } cotaInfo.ApresentacaoID = apresentacaoID; cotaInfo.ApresentacaoSetorID = apresentacaoSetorID; var qtdIncrementada = 0; foreach (EstruturaPrecoReservaSite preco in precos) { //Verifica se é possivel reservar o ingresso apartir das cotas geradas p/ a apresentacao/setor oCotaItem.AtualizarInformacoesCota(listaCotaItem, preco, cotaInfo); if (listaCotaItem.Any() && cotaInfo.CotaItemID > 0) { cotaInfo.QuantidadeJaVendida = cotaItemControle.getQuantidadeNovo(cotaInfo.CotaItemID, cotaInfo.CotaItemID_APS, cotaInfo.ApresentacaoID, cotaInfo.ApresentacaoSetorID); var qtdReservar = preco.QuantidadeReservar(); if (!cotaInfo.ValidaReserva(qtdReservar)) { throw new BilheteriaException(string.Format("Não será possível reservar o preço \"{0}\", o limite de venda foi excedido.", preco.PrecoNome), Bilheteria.CodMensagemReserva.PrecoIndisponivel); } } precoValor = 0; // Verifica se existe quantidade do PrecoID disponivel para venda e retorna via referencia o valor do preço if (preco.Quantidade != oBilheteria.GetIngressosQPodeReservar(clienteID, sessionID, preco.ID, preco.Quantidade, ref precoValor, false, serieID, estruturaReserva)) { throw new BilheteriaException(string.Format("A quantidade disponível para o preço \"{0}\" foi excedida.", preco.PrecoNome), Bilheteria.CodMensagemReserva.PrecoIndisponivel); } //incrementa a quantidade qtdPrecos += preco.Quantidade; if (tipoSetor != IRLib.Setor.enumLugarMarcado.Pista) { //duplica os registros para serem usados mais tarde na hora da reserva de lugares marcados for (int x = 0; x < preco.Quantidade; x++) { itemPreco = new EstruturaPrecoReservaSite(); itemPreco.ID = preco.ID; itemPreco.GerenciamentoIngressosID = preco.GerenciamentoIngressosID; itemPreco.Valor = precoValor; itemPreco.Quantidade = preco.Quantidade; itemPreco.CotaItemID = cotaInfo.CotaItemID; itemPreco.CotaItemIDAPS = cotaInfo.CotaItemID_APS; itemPreco.CodigoCinema = preco.CodigoCinema; itemPreco.CodigoProgramacao = preco.CodigoProgramacao; precoPorLugar.Add(itemPreco); } } else { //gera novos registros para adicionar a cotaItemID do contrario não ha como verificar a multipla selecao de precos itemPreco = new EstruturaPrecoReservaSite(); itemPreco.ID = preco.ID; itemPreco.GerenciamentoIngressosID = preco.GerenciamentoIngressosID; itemPreco.PrecoNome = preco.PrecoNome; itemPreco.Quantidade = preco.Quantidade; itemPreco.Valor = preco.Valor; itemPreco.CotaItemID = cotaInfo.CotaItemID; itemPreco.CotaItemIDAPS = cotaInfo.CotaItemID_APS; itemPreco.CodigoCinema = preco.CodigoCinema; itemPreco.CodigoProgramacao = preco.CodigoProgramacao; listaPreco.Add(itemPreco); } } //Lugares marcados. Precisa achar os melhores lugares. if (tipoSetor != IRLib.Setor.enumLugarMarcado.Pista) { #region Busca Ingresso de Lugar Marcado // Busca a lista dos Melhores Lugares List <Lugar> lugares = oLugar.MelhorLugarMarcado(qtdPrecos, apresentacaoSetorID, tipoSetor); //Verifica se os ingressos estão juntos if (tipoSetor == IRLib.Setor.enumLugarMarcado.MesaFechada) { if (lugares.Count == 0) { throw new Exception("Não foi possível efetuar todas as reserva."); } if (lugares.Count != qtdPrecos) { throw new Exception("Não existem mesas com a capacidade de acomodar todas as pessoas juntas"); } } int quantidadeMesaAberta = 0; bool mesaAberta = (tipoSetor == IRLib.Setor.enumLugarMarcado.MesaAberta); // Se for mesa aberta o total da de ingressos é a soma de todas as quantidades na listagem. if (mesaAberta) { foreach (Lugar itemLugar in lugares) { quantidadeMesaAberta += itemLugar.Quantidade.Valor; } if (quantidadeMesaAberta != qtdPrecos) // Não encontrou a qtd suficiente?! { lugares.Clear(); // Limpa os ingressos e passa para a próxima. } } else { if (lugares.Count != qtdPrecos) // Não encontrou a qtd suficiente?! { lugares.Clear(); // Limpa os ingressos e passa para a próxima. } } ingressosRetorno = new List <Ingresso>(); p = 0; //variavel de controle para os preços int controlePrecoID = 0; //variavel de controle para saber se mudou o precoID e trazer a nova taxa de entrega //Busca os ingressos para os melhores lugares encontrados foreach (Lugar l in lugares) { try { //Só faz a select com base na quantidade caso seja mesa aberta. string top = mesaAberta ? "TOP " + l.Quantidade.Valor : ""; string sql = "SELECT " + top + " ID, Codigo,EmpresaID FROM tIngresso(NOLOCK) " + "WHERE ApresentacaoSetorID = " + apresentacaoSetorID + " AND Status = '" + Ingresso.DISPONIVEL + "' " + "AND LugarID = " + l.Control.ID; bd.Consulta(sql); while (bd.Consulta().Read()) { if (precoPorLugar[p].ID != controlePrecoID) { valorConv = oBilheteria.TaxaConveniencia(eventoID, precoPorLugar[p].ID, estruturaReserva.CanalID); //Se não tem conveniencia, não deve contar que possui taxa de processamento, ignora a busca if (valorConv > 0) { valorProcessamento = oBilheteria.ValorTaxaProcessamento(eventoID); } controlePrecoID = precoPorLugar[p].ID; } //popula o objeto ingresso oIngresso = new Ingresso(); oIngresso.Control.ID = bd.LerInt("ID"); oIngresso.PrecoID.Valor = precoPorLugar[p].ID; oIngresso.UsuarioID.Valor = usuarioID; oIngresso.Codigo.Valor = bd.LerString("Codigo"); oIngresso.LojaID.Valor = lojaID; oIngresso.ClienteID.Valor = clienteID; oIngresso.SessionID.Valor = sessionID; oIngresso.TimeStampReserva.Valor = timeStamp; oIngresso.LugarID.Valor = l.Control.ID; oIngresso.TxConv = valorProcessamento > 0 ? 0 : valorConv; oIngresso.TaxaProcessamentoValor = valorProcessamento; oIngresso.Grupo.Valor = l.Grupo.Valor; oIngresso.Classificacao.Valor = l.Classificacao.Valor; oIngresso.CotaItemID = precoPorLugar[p].CotaItemID; oIngresso.CotaItemIDAPS = precoPorLugar[p].CotaItemIDAPS; oIngresso.EmpresaID.Valor = bd.LerInt("EmpresaID"); oIngresso.SerieID.Valor = serieID; ////se não tiver valor e não tiver conveniencia não deve reservar if (precoPorLugar[p].Valor == 0 && oIngresso.TxConv == 0 && oIngresso.TaxaProcessamentoValor == 0) { // Atribui a Cortesia Padrão do Evento/Local - INICIO if (CortesiaPadraoID == 0) { CortesiaPadraoID = oCortesia.CortesiaPadraoEvento(eventoID); } if (CortesiaPadraoID <= 0) { throw new Exception("Falha ao reservar os ingressos. Não existe cortesia associada a este evento."); } oIngresso.CortesiaID.Valor = CortesiaPadraoID; // // Atribui a Cortesia Padrão do Evento/Local - FIM // oIngresso.Status.Valor = Ingresso.CORTESIA_SEM_CONVENIENCIA; ingressosRetorno.Add(oIngresso); // break;//break para inserir somente um registro. esse registro de ingresso vai ser utilizado // //como base de info para deletar o preço inválido do banco de dados do site. } else { ingressosRetorno.Add(oIngresso); } if (tipoSetor != IRLib.Setor.enumLugarMarcado.MesaFechada) { p++; } } if (tipoSetor == IRLib.Setor.enumLugarMarcado.MesaFechada) { p++; } } catch { throw; } } #endregion } else //Ingressos de pista { #region Busca Ingressos de Pista Ingresso ing; ingressosRetorno = new List <Ingresso>(); ArrayList ingressosIDInseridos = new ArrayList(); //lista de ingressos ID para não buscar os mesmos ingressos. string evitaDuplicidades = ""; //monta a string para a sql foreach (EstruturaPrecoReservaSite preco in listaPreco) { if (ingressosRetorno.Count > 0) { //Monta a query que evita duplicidade de ingressos na hora de reservar. foreach (Ingresso item in ingressosRetorno) { ingressosIDInseridos.Add(item.Control.ID); } evitaDuplicidades = "AND ID NOT IN ( " + Utilitario.ArrayToString(ingressosIDInseridos) + ") "; } //Busca os ingressos de pista. bd.FecharConsulta(); var bdBusca = new BD(ConfigurationManager.AppSettings["ConexaoReadOnly"]); var readerCount = bdBusca.ConsultaCount(string.Format("SELECT TOP {0} ID, Codigo, LugarID FROM tIngresso(NOLOCK) WHERE ApresentacaoSetorID = {1} AND Status = '{2}' {3} ORDER BY newid()", preco.Quantidade, apresentacaoSetorID, Ingresso.DISPONIVEL, evitaDuplicidades)); if (readerCount.rowCount > 0 && readerCount.rowCount != preco.Quantidade) { throw new Exception("Quantidade de ingressos selecionado não está disponível. Tente com uma quantidade menor."); } while (bdBusca.Consulta().Read()) { valorConv = oBilheteria.TaxaConveniencia(eventoID, preco.ID, estruturaReserva.CanalID); //Se não tem conveniencia, não deve contar que possui taxa de processamento, ignora a busca if (valorConv > 0) { valorProcessamento = oBilheteria.ValorTaxaProcessamento(eventoID); } else { valorProcessamento = 0; } //Popula o objeto ingresso e adiciona a lista de retorno ing = new Ingresso { Control = { ID = bdBusca.LerInt("ID") }, PrecoID = { Valor = preco.ID }, GerenciamentoIngressosID = { Valor = preco.GerenciamentoIngressosID }, UsuarioID = { Valor = estruturaReserva.UsuarioID }, Codigo = { Valor = bdBusca.LerString("Codigo") }, LojaID = { Valor = estruturaReserva.LojaID }, ClienteID = { Valor = clienteID }, SessionID = { Valor = sessionID }, TimeStampReserva = { Valor = timeStamp }, LugarID = { Valor = bdBusca.LerInt("LugarID") }, TxConv = valorProcessamento > 0 ? 0 : valorConv, TaxaProcessamentoValor = valorProcessamento, CotaItemID = preco.CotaItemID, CotaItemIDAPS = preco.CotaItemIDAPS, SerieID = { Valor = serieID }, CompraGUID = { Valor = estruturaReserva.GUID } }; //Se for EntradaGratuita OU (se não tiver valor e não tiver conveniencia não deve reservar) if (preco.Valor == 0 && ing.TxConv == 0 && ing.TaxaProcessamentoValor == 0) { // Atribui a Cortesia Padrão do Evento/Local - INICIO if (CortesiaPadraoID == 0) { CortesiaPadraoID = oCortesia.CortesiaPadraoEvento(eventoID, isEntradaFranca); } if (CortesiaPadraoID <= 0) { throw new Exception("Não foi possível reservar o ingresso. Por favor, tente novamente mais tarde."); } ing.CortesiaID.Valor = CortesiaPadraoID; // Atribui a Cortesia Padrão do Evento/Local - FIM //ing.Status.Valor = Ingresso.CORTESIA_SEM_CONVENIENCIA; ingressosRetorno.Add(ing); //break;//break para inserir somente um registro. esse registro de ingresso vai ser utilizado ////como base de info para deletar o preço inválido do banco de dados do site. } else { ingressosRetorno.Add(ing); } }//fim while consulta banco bdBusca.Fechar(); }//fim foreach precos //Ingressos para cinema, deve utilizar on demand! if (listaPreco.Any(c => !string.IsNullOrEmpty(c.CodigoCinema))) { ingressosRetorno = this.NovoNaoMarcadoOnDemand(estruturaReserva, apresentacaoSetorID, eventoID, apresentacaoID, setorID, ingressosRetorno, listaPreco); } #endregion } return(ingressosRetorno); } catch (Exception ex) { throw ex; } finally { bdReserva.Fechar(); bd.Fechar(); } }
public List <Assinaturas.Models.NovasAquisicoes> BuscarAssinaturasAtivas(int assinaturaTipoID, int ano, bool adquirirForaPeriodo, List <int> eleazarAssinaturaID, EstruturaReservaInternet estruturaIdentificacaoUsuario, bool trocando) { try { string foraDePeriodo = string.Empty; if (eleazarAssinaturaID != null && eleazarAssinaturaID.Count > 0) { if (adquirirForaPeriodo) { foraDePeriodo = "AND a.ID IN (" + CTLib.Utilitario.VetorInteiroParaString(eleazarAssinaturaID.ToArray()) + ")"; } else { foraDePeriodo = "AND a.ID NOT IN (" + CTLib.Utilitario.VetorInteiroParaString(eleazarAssinaturaID.ToArray()) + ")"; } } string sql = string.Format(@" SELECT a.ID, a.Nome FROM tAssinatura a (NOLOCK) INNER JOIN tAssinaturaCanal ac (NOLOCK) ON ac.AssinaturaID = a.ID INNER JOIN tAssinaturaAno an (NOLOCK) ON an.AssinaturaID = a.ID WHERE a.Ativo = 'T' AND an.Ano = '{0}' AND AssinaturaTipoID = {1} AND ac.CanalID = {2} {3} ORDER BY a.Nome ", ano, assinaturaTipoID, estruturaIdentificacaoUsuario.CanalID, foraDePeriodo); bd.Consulta(sql); if (!bd.Consulta().Read()) { throw new Exception("Não existem assinaturas ativas para este ano."); } List <Assinaturas.Models.NovasAquisicoes> lista = new List <Assinaturas.Models.NovasAquisicoes>(); do { lista.Add(new Assinaturas.Models.NovasAquisicoes() { ID = bd.LerInt("ID"), Nome = bd.LerString("Nome"), }); } while (bd.Consulta().Read()); return(lista); } finally { bd.Fechar(); } }
public bool VerificarIngressos(bool transferencia, EstruturaReservaInternet estruturaReservaInternet) { try { StringBuilder stbSQL = new StringBuilder(); stbSQL.Append("SELECT Distinct PacoteGrupo, IsNull(IR_PacoteID,0) AS IR_PacoteID, Count(PacoteGrupo) as Quantidade from Carrinho (NOLOCK) "); stbSQL.Append("INNER JOIN Pacote ON Carrinho.PacoteNome = Pacote.Nome "); stbSQL.Append("WHERE ClienteID = 0 AND SessionID = @SessionID AND Status = 'R' "); stbSQL.Append("Group by IR_PacoteID, PacoteGrupo "); SqlParameter[] parametro = new SqlParameter[1]; parametro[0] = new SqlParameter("@SessionID", this.SessionID); oDAL = new DAL(); IDataReader dr = oDAL.SelectToIDataReader(stbSQL.ToString(), parametro); while (dr.Read()) { adicionarQuantidade = this.Where(c => c.IR_PacoteID == Convert.ToInt32(dr["IR_PacoteID"])).Count() == 0; if (adicionarQuantidade) { oTransferencia = new IngressoTransferencia(); oTransferencia.IR_PacoteID = Convert.ToInt32(dr["IR_PacoteID"]); this.Add(oTransferencia); } oTransferencia.Quantidade += Convert.ToInt32(dr["Quantidade"]); } dr.Close(); oDAL.ConnClose(); stbSQL = new StringBuilder(); stbSQL.Append("SELECT DISTINCT (PrecoID), count(precoID) AS Quantidade from Carrinho (NOLOCK) "); stbSQL.Append("WHERE ClienteID = 0 AND SessionID = @SessionID AND Status = 'R' AND PacoteGrupo IS NULL "); stbSQL.Append("Group by PrecoID"); SqlParameter[] parametro2 = new SqlParameter[1]; parametro2[0] = new SqlParameter("@SessionID", this.SessionID); oDAL = new DAL(); IDataReader dr2 = oDAL.SelectToIDataReader(stbSQL.ToString(), parametro2); while (dr2.Read()) { adicionarQuantidade = this.Where(c => c.PrecoID == Convert.ToInt32(dr2["PrecoID"])).Count() == 0; if (adicionarQuantidade) { oTransferencia = new IngressoTransferencia(); oTransferencia.PrecoID = Convert.ToInt32(dr2["PrecoID"]); this.Add(oTransferencia); } oTransferencia.Quantidade += Convert.ToInt32(dr2["Quantidade"]); } dr2.Close(); oDAL.ConnClose(); return(IngressosQPodeReservar(transferencia, estruturaReservaInternet)); } catch (Exception ex) { throw ex; } finally { oDAL.ConnClose(); } }
public int VenderInternet(Dictionary <int, decimal> ingressosID, string sessionID, EstruturaReservaInternet estruturaReservaInternet, int entregaControleID, int pdvID, int clienteEnderecoID, int clienteID, string ip) { BD bd = new BD(); int vendaBilheteriaID = 0; try { StringBuilder stbSQL = new StringBuilder(); //caixa para registrar a venda int caixaID = 0; if (estruturaReservaInternet.CaixaID == 0) { caixaID = VerificaCaixaInternet(); } else { //Verificar o caixa do usuario. caixaID = estruturaReservaInternet.CaixaID; } DataSet ds = MontaDadosVendaInternet(ingressosID, clienteID, sessionID, estruturaReservaInternet.CanalID, estruturaReservaInternet.UsuarioID); DataTable itensReservados = ds.Tables[TABELA_GRID]; // Resumo DataTable ingressosVendidos = ds.Tables[TABELA_RESERVA]; // Detalhamento //verifica se a quantidade reservada no site é a mesma reservada no sistema if (ingressosVendidos.Rows.Count != ingressosID.Count) { throw new BilheteriaException("Quantidade de ingressos diferente da reserva.", CodMensagemVenda.FalhaVenda); } bd.IniciarTransacao(); //verifica se existem reservas if (itensReservados.Rows.Count == 0 && ingressosVendidos.Rows.Count == 0) { throw new BilheteriaException("Não existe reserva para o cliente.", CodMensagemVenda.ReservaInexistente); } // VendaBilheteria int empresaID = new Canal().BuscaEmpresaIDporLojaID(estruturaReservaInternet.LojaID); VendaBilheteria vendaBilheteria = new VendaBilheteria(); vendaBilheteria.Status.Valor = VendaBilheteria.PAGO; vendaBilheteria.NivelRisco.Valor = (int)VendaBilheteria.enumNivelRisco.SemRisco; vendaBilheteria.ClienteID.Valor = clienteID; vendaBilheteria.CaixaID.Valor = caixaID; vendaBilheteria.DataVenda.Valor = System.DateTime.Now; vendaBilheteria.ClienteEnderecoID.Valor = clienteEnderecoID; vendaBilheteria.EntregaControleID.Valor = entregaControleID; vendaBilheteria.PdvID.Valor = pdvID; vendaBilheteria.PagamentoProcessado.Valor = true; vendaBilheteria.Status.Valor = VendaBilheteria.PAGO; vendaBilheteria.IP.Valor = ip; string sqlVendaBilheteria = vendaBilheteria.StringInserir(); object vendaID = bd.ConsultaValor(sqlVendaBilheteria); vendaBilheteria.Control.ID = (vendaID != null) ? Convert.ToInt32(vendaID) : 0; if (vendaBilheteria.Control.ID == 0) { throw new BilheteriaException("Venda não foi gerada.", CodMensagemVenda.FalhaVenda); } string sqlSenha = "SELECT Senha FROM tVendaBilheteria (NOLOCK) WHERE ID=" + vendaBilheteria.Control.ID; object ret = bd.ConsultaValor(sqlSenha); var senha = (ret != null) ? Convert.ToString(ret) : null; vendaBilheteriaID = vendaBilheteria.Control.ID; DataRow[] itensNormais = itensReservados.Select(TIPO + "='" + TIPO_INGRESSO + "' AND " + TIPO_LUGAR + "<>'" + Setor.MesaFechada + "'"); DataRow[] itensMesaFechada = itensReservados.Select(TIPO + "='" + TIPO_INGRESSO + "' AND " + TIPO_LUGAR + "='" + Setor.MesaFechada + "'"); DataRow[] itensPacote = itensReservados.Select(TIPO + "='" + TIPO_PACOTE + "'"); #region Ingressos Normais foreach (DataRow item in itensNormais) { DataRow[] ingressos = ingressosVendidos.Select(RESERVAID + "='" + (int)item[RESERVAID] + "'"); VendaBilheteriaItem vendaBilheteriaItem = new VendaBilheteriaItem(); vendaBilheteriaItem.VendaBilheteriaID.Valor = vendaBilheteria.Control.ID; vendaBilheteriaItem.PacoteID.Valor = 0; vendaBilheteriaItem.Acao.Valor = VendaBilheteriaItem.VENDA; vendaBilheteriaItem.TaxaConveniencia.Valor = (int)item[CONV]; vendaBilheteriaItem.TaxaConvenienciaValor.Valor = (decimal)item["TaxaConvenienciaValor"]; vendaBilheteriaItem.TaxaComissao.Valor = (int)item[TAXA_COMISSAO]; vendaBilheteriaItem.ComissaoValor.Valor = (decimal)item[COMISSAO_VALOR]; string sqlVendaBilheteriaItem = vendaBilheteriaItem.StringInserir(); object id = bd.ConsultaValor(sqlVendaBilheteriaItem); vendaBilheteriaItem.Control.ID = (id != null) ? Convert.ToInt32(id) : 0; if (vendaBilheteriaItem.Control.ID == 0) { throw new BilheteriaException("Item de venda não foi gerada.", CodMensagemVenda.FalhaVenda); } int x = 0; bool ok = false; stbSQL = new StringBuilder(); stbSQL.Append("UPDATE tIngresso SET LojaID=" + estruturaReservaInternet.LojaID + ", "); stbSQL.Append("VendaBilheteriaID=" + vendaBilheteria.Control.ID + ", Status='" + Ingresso.VENDIDO + "', PacoteID = 0, PacoteGrupo = '' "); stbSQL.Append("WHERE(AssinaturaClienteID IS NULL OR AssinaturaClienteID = 0) AND ClienteID=" + clienteID + " AND SessionID = '" + sessionID + "' AND Status='" + Ingresso.RESERVADO + "' AND ID=" + (int)item["IngressoID"]); x = bd.Executar(stbSQL.ToString()); ok = (x >= 1); if (!ok) { throw new BilheteriaException("Status do ingresso não pode ser atualizado.", CodMensagemVenda.FalhaVenda); } //inserir na Log IngressoLog ingressoLog = new IngressoLog(); ingressoLog.TimeStamp.Valor = System.DateTime.Now; ingressoLog.IngressoID.Valor = (int)item[INGRESSOID]; ingressoLog.UsuarioID.Valor = estruturaReservaInternet.UsuarioID; //usuario fixo para Internet ingressoLog.BloqueioID.Valor = 0; ingressoLog.CortesiaID.Valor = Convert.ToInt32(ingressos[0][CORTESIAID]); ingressoLog.PrecoID.Valor = (int)item[PRECOID]; ingressoLog.GerenciamentoIngressosID.Valor = (int)item[GERENCIAMENTO_INGRESSOS_ID]; ingressoLog.VendaBilheteriaItemID.Valor = vendaBilheteriaItem.Control.ID; ingressoLog.VendaBilheteriaID.Valor = vendaBilheteria.Control.ID; ingressoLog.CaixaID.Valor = caixaID; // ABERTURA E FECHAMENTO DE CAIXA DIARIO PARA INTERNET ingressoLog.LojaID.Valor = estruturaReservaInternet.LojaID; //loja fixa Internet ingressoLog.CanalID.Valor = estruturaReservaInternet.CanalID; //canal fixo Internet ingressoLog.EmpresaID.Valor = empresaID; // FIXO IR ingressoLog.ClienteID.Valor = clienteID; ingressoLog.Acao.Valor = IngressoLog.VENDER; string sqlIngressoLogV = ingressoLog.StringInserir(); x = bd.Executar(sqlIngressoLogV); bool okV = (x == 1); if (!okV) { throw new BilheteriaException("Log de venda do ingresso não foi inserido.", CodMensagemVenda.FalhaVenda); } } #endregion #region Mesa Fechada foreach (DataRow item in itensMesaFechada) { DataRow[] ingressos = ingressosVendidos.Select(RESERVAID + "='" + (int)item[RESERVAID] + "'"); VendaBilheteriaItem vendaBilheteriaItem = new VendaBilheteriaItem(); vendaBilheteriaItem.VendaBilheteriaID.Valor = vendaBilheteria.Control.ID; vendaBilheteriaItem.PacoteID.Valor = 0; vendaBilheteriaItem.Acao.Valor = VendaBilheteriaItem.VENDA; vendaBilheteriaItem.TaxaConveniencia.Valor = (int)item[CONV]; vendaBilheteriaItem.TaxaConvenienciaValor.Valor = (decimal)item["TaxaConvenienciaValor"]; vendaBilheteriaItem.TaxaComissao.Valor = (int)item[TAXA_COMISSAO]; vendaBilheteriaItem.ComissaoValor.Valor = (decimal)item[COMISSAO_VALOR]; string sqlVendaBilheteriaItem = vendaBilheteriaItem.StringInserir(); object id = bd.ConsultaValor(sqlVendaBilheteriaItem); vendaBilheteriaItem.Control.ID = (id != null) ? Convert.ToInt32(id) : 0; if (vendaBilheteriaItem.Control.ID == 0) { throw new BilheteriaException("Item de venda não foi gerada.", CodMensagemVenda.FalhaVenda); } foreach (DataRow i in ingressos) { int x = 0; bool ok = false; stbSQL = new StringBuilder(); stbSQL.Append("UPDATE tIngresso SET LojaID=" + estruturaReservaInternet.LojaID + ", "); stbSQL.Append("VendaBilheteriaID=" + vendaBilheteria.Control.ID + ", Status='" + Ingresso.VENDIDO + "', PacoteID = 0, PacoteGrupo = '' "); stbSQL.Append("WHERE (AssinaturaClienteID IS NULL OR AssinaturaClienteID = 0) AND ClienteID=" + clienteID + " AND SessionID = '" + sessionID + "' AND Status='" + Ingresso.RESERVADO + "' AND ID=" + (int)i[INGRESSOID]); x = bd.Executar(stbSQL.ToString()); ok = (x >= 1); if (!ok) { throw new BilheteriaException("Status do ingresso não pode ser atualizado.", CodMensagemVenda.FalhaVenda); } //inserir na Log IngressoLog ingressoLog = new IngressoLog(); ingressoLog.TimeStamp.Valor = System.DateTime.Now; ingressoLog.IngressoID.Valor = (int)i[INGRESSOID]; ingressoLog.UsuarioID.Valor = estruturaReservaInternet.UsuarioID; //USUARIO INTERNET ingressoLog.BloqueioID.Valor = 0; ingressoLog.CortesiaID.Valor = Convert.ToInt32(i[CORTESIAID]); ingressoLog.PrecoID.Valor = (int)i[PRECOID]; ingressoLog.VendaBilheteriaItemID.Valor = vendaBilheteriaItem.Control.ID; ingressoLog.VendaBilheteriaID.Valor = vendaBilheteria.Control.ID; ingressoLog.CaixaID.Valor = caixaID; //CAIXA ABERTO DIARIAMENTE PARA INTERNET ingressoLog.LojaID.Valor = estruturaReservaInternet.LojaID; //Loja Internet ingressoLog.CanalID.Valor = estruturaReservaInternet.CanalID; //Canal Internet ingressoLog.EmpresaID.Valor = empresaID; //Empresa IR ingressoLog.ClienteID.Valor = clienteID; ingressoLog.Acao.Valor = IngressoLog.VENDER; string sqlIngressoLogV = ingressoLog.StringInserir(); x = bd.Executar(sqlIngressoLogV); bool okV = (x == 1); if (!okV) { throw new BilheteriaException("Log de venda do ingresso não foi inserido.", CodMensagemVenda.FalhaVenda); } } } #endregion #region Pacote int PacoteGrupo = 0; int pacoteIDAtual = 0; foreach (DataRow item in itensPacote) { DataRow[] ingressosPacote = ingressosVendidos.Select(RESERVAID + "='" + (int)item[RESERVAID] + "'"); Pacote oPacote = new Pacote(); oPacote.Ler((int)ingressosPacote[0][PACOTEID]); VendaBilheteriaItem vendaBilheteriaItem = new VendaBilheteriaItem(); vendaBilheteriaItem.VendaBilheteriaID.Valor = vendaBilheteria.Control.ID; vendaBilheteriaItem.PacoteID.Valor = oPacote.Control.ID; vendaBilheteriaItem.Acao.Valor = VendaBilheteriaItem.VENDA; if (pacoteIDAtual != vendaBilheteriaItem.PacoteID.Valor) { PacoteGrupo = 0; pacoteIDAtual = vendaBilheteriaItem.PacoteID.Valor; } PacoteGrupo++; vendaBilheteriaItem.PacoteGrupo.Valor = PacoteGrupo; if (item[CONV] == DBNull.Value) { item[CONV] = 0; } if (item[VALOR_CONV] == DBNull.Value) { item[VALOR_CONV] = 0; } if (item[TAXA_COMISSAO] == DBNull.Value) { item[TAXA_COMISSAO] = 0; } if (item[COMISSAO_VALOR] == DBNull.Value) { item[COMISSAO_VALOR] = 0; } int conv = (int)item[CONV]; decimal valorConv = (decimal)item["TaxaConvenienciaValor"]; int taxaComissao = (int)item[TAXA_COMISSAO]; decimal comissaovalor = (decimal)item[COMISSAO_VALOR]; if (!(bool)item["PermitirCancelamentoAvulso"]) { vendaBilheteriaItem.TaxaConveniencia.Valor = conv; vendaBilheteriaItem.TaxaConvenienciaValor.Valor = valorConv; vendaBilheteriaItem.TaxaComissao.Valor = taxaComissao; vendaBilheteriaItem.ComissaoValor.Valor = comissaovalor; string sqlVendaBilheteriaItem = vendaBilheteriaItem.StringInserir(); object id = bd.ConsultaValor(sqlVendaBilheteriaItem); vendaBilheteriaItem.Control.ID = (id != null) ? Convert.ToInt32(id) : 0; if (vendaBilheteriaItem.Control.ID == 0) { throw new BilheteriaException("Item de venda não foi gerada.", CodMensagemVenda.FalhaVenda); } } foreach (DataRow i in ingressosPacote) { if ((bool)item["PermitirCancelamentoAvulso"]) { CanalPacote canalPacote = new CanalPacote(); //busca as taxas de conveniencia e comissão e popula as variaveis DataTable taxasPacote = canalPacote.BuscaTaxasConvenienciaComissao(estruturaReservaInternet.CanalID, vendaBilheteriaItem.PacoteID.Valor); Preco precoIngresso = new Preco(); precoIngresso.Ler((int)i["PrecoID"]); int taxaConvenienciaPacote = (int)taxasPacote.Rows[0]["TaxaConveniencia"]; decimal taxaMinPacote = Convert.ToDecimal(taxasPacote.Rows[0]["TaxaMinima"]); decimal taxaMaxPacote = Convert.ToDecimal(taxasPacote.Rows[0]["TaxaMaxima"]); int taxaComissaoPacote = (int)taxasPacote.Rows[0]["TaxaComissao"]; decimal comissaoMinPacote = Convert.ToDecimal(taxasPacote.Rows[0]["ComissaoMinima"]); decimal comissaoMaxPacote = Convert.ToDecimal(taxasPacote.Rows[0]["ComissaoMaxima"]); decimal comissaoValorTotal = 0; decimal taxaValorTotal = 0; if (comissaovalor >= taxaComissaoPacote && taxaComissaoPacote != 0) { comissaoValorTotal = comissaovalor / ingressosPacote.Count(); } else { if (taxaComissaoPacote > 0 || comissaoMinPacote > 0) { decimal dAux = (taxaComissaoPacote / 100m) * precoIngresso.Valor.Valor; if (dAux < comissaoMinPacote) { comissaoValorTotal += Decimal.Round(comissaoMinPacote, 2); } else if (dAux > comissaoMaxPacote && comissaoMaxPacote > 0) { comissaoValorTotal += Decimal.Round(comissaoMaxPacote, 2); } else { comissaoValorTotal += Decimal.Round(dAux, 2); } } } vendaBilheteriaItem.TaxaComissao.Valor = taxaComissaoPacote; vendaBilheteriaItem.ComissaoValor.Valor = comissaoValorTotal; //popula a conveniencia de acordo com a taxa minima e maxima if (valorConv >= taxaMaxPacote && taxaMaxPacote != 0) { taxaValorTotal = valorConv / ingressosPacote.Count(); } else { if (taxaConvenienciaPacote > 0 || taxaMinPacote > 0) { decimal dAux = (taxaConvenienciaPacote / 100m) * precoIngresso.Valor.Valor; if (dAux < taxaMinPacote) { taxaValorTotal += Decimal.Round(taxaMinPacote, 2); } else if (dAux > taxaMaxPacote && taxaMaxPacote > 0) { taxaValorTotal += Decimal.Round(taxaMaxPacote, 2); } else { taxaValorTotal += Decimal.Round(dAux, 2); } } } vendaBilheteriaItem.TaxaConveniencia.Valor = taxaConvenienciaPacote; vendaBilheteriaItem.TaxaConvenienciaValor.Valor = taxaValorTotal; string sqlVendaBilheteriaItem = vendaBilheteriaItem.StringInserir(); object id = bd.ConsultaValor(sqlVendaBilheteriaItem); vendaBilheteriaItem.Control.ID = (id != null) ? Convert.ToInt32(id) : 0; if (vendaBilheteriaItem.Control.ID == 0) { throw new BilheteriaException("Item de venda não foi gerada.", CodMensagemVenda.FalhaVenda); } } int x = 0; bool ok = false; stbSQL = new StringBuilder(); stbSQL.Append("UPDATE tIngresso SET LojaID=" + estruturaReservaInternet.LojaID + ", "); stbSQL.Append("VendaBilheteriaID=" + vendaBilheteria.Control.ID + ", Status='" + Ingresso.VENDIDO + "' "); stbSQL.Append("WHERE (AssinaturaClienteID IS NULL OR AssinaturaClienteID = 0) AND ClienteID=" + clienteID + " AND SessionID = '" + sessionID + "' AND Status='" + Ingresso.RESERVADO + "' AND ID=" + (int)i[INGRESSOID]); x = bd.Executar(stbSQL.ToString()); ok = (x >= 1); if (!ok) { throw new BilheteriaException("Status do ingresso não pode ser atualizado.", CodMensagemVenda.FalhaVenda); } //inserir na Log IngressoLog ingressoLog = new IngressoLog(); ingressoLog.TimeStamp.Valor = System.DateTime.Now; ingressoLog.IngressoID.Valor = (int)i[INGRESSOID]; ingressoLog.UsuarioID.Valor = estruturaReservaInternet.UsuarioID; //usuario ingressoLog.BloqueioID.Valor = 0; ingressoLog.CortesiaID.Valor = Convert.ToInt32(i[CORTESIAID]); ingressoLog.PrecoID.Valor = (int)i[PRECOID]; ingressoLog.VendaBilheteriaItemID.Valor = vendaBilheteriaItem.Control.ID; ingressoLog.VendaBilheteriaID.Valor = vendaBilheteria.Control.ID; ingressoLog.CaixaID.Valor = caixaID; //caixa do usuario ingressoLog.LojaID.Valor = estruturaReservaInternet.LojaID; //loja ingressoLog.CanalID.Valor = estruturaReservaInternet.CanalID; //canal ingressoLog.EmpresaID.Valor = empresaID; //empresa IR ingressoLog.ClienteID.Valor = clienteID; ingressoLog.Acao.Valor = IngressoLog.VENDER; string sqlIngressoLogV = ingressoLog.StringInserir(); x = bd.Executar(sqlIngressoLogV); bool okV = (x == 1); if (!okV) { throw new BilheteriaException("Log de venda do ingresso não foi inserido.", CodMensagemVenda.FalhaVenda); } } } #endregion bd.FinalizarTransacao(); } catch (Exception ex) { bd.DesfazerTransacao(); throw ex; } finally { bd.Fechar(); } return(vendaBilheteriaID); }
public void ValidarLugarMarcadoInternet(EstruturaPrecoReservaSite preco, Setor.enumLugarMarcado tipoSetor, EstruturaCotasInfo cotaInfo, int serieID, EstruturaReservaInternet estruturaReserva) { int cortesiaID = 0; BilheteriaParalela oBilheteria = new BilheteriaParalela(); CotaItem oCotaItem = new CotaItem(); List <EstruturaCotaItemReserva> listaCotaItem = new List <EstruturaCotaItemReserva>(); if (cotaInfo.CotaID_Apresentacao != 0 || cotaInfo.CotaID_ApresentacaoSetor != 0) { listaCotaItem = oCotaItem.getListaCotaItemReserva(cotaInfo.CotaID_Apresentacao, cotaInfo.CotaID_ApresentacaoSetor); } cotaInfo.ApresentacaoID = this.ApresentacaoID.Valor; cotaInfo.ApresentacaoSetorID = this.ApresentacaoSetorID.Valor; List <int> retornoCotaItens = new List <int>(2); //Dispara Exception e nao deixa reservar if (listaCotaItem.Count != 0) { retornoCotaItens = oCotaItem.getQuantidadeQPodeReservarCota(listaCotaItem, preco, cotaInfo); if (retornoCotaItens.Count > 0 && (retornoCotaItens[0].Equals(-1) || retornoCotaItens[1].Equals(-1))) { throw new BilheteriaException("Não será possível reservar o preço \"" + preco.PrecoNome + "\", o limite de venda foi excedido.", BilheteriaParalela.CodMensagemReserva.PrecoIndisponivel); } } decimal precoValor = 0; // Verifica se existe quantidade do PrecoID disponivel para venda e retorna via referencia o valor do preço if (preco.Quantidade != oBilheteria.GetIngressosQPodeReservar(this.ClienteID.Valor, this.SessionID.Valor, preco.ID, preco.Quantidade, ref precoValor, false, serieID, estruturaReserva)) { throw new BilheteriaException("A Quantidade disponivel para o preço \"" + preco.PrecoNome.ToString() + "\" foi excedida.", BilheteriaParalela.CodMensagemReserva.PrecoIndisponivel); } this.TxConv = oBilheteria.TaxaConveniencia(this.EventoID.Valor, preco.ID, estruturaReserva.CanalID); if (this.TxConv > 0) { this.TaxaProcessamentoValor = oBilheteria.ValorTaxaProcessamento(this.EventoID.Valor); if (this.TaxaProcessamentoValor > 0) { this.TxConv = 0; } } //Aqui precisa fazer a validação, é cortesia?? if (preco.Valor == 0 && TxConv == 0 && TaxaProcessamentoValor == 0) { cortesiaID = new Cortesia().CortesiaPadraoEvento(this.EventoID.Valor); if (cortesiaID <= 0) { throw new Exception("Não possível encontrar a cortesia associada a este evento!"); } this.CortesiaID.Valor = cortesiaID; } this.PrecoID.Valor = preco.ID; this.CotaItemID = retornoCotaItens.Count > 0 ? retornoCotaItens[0] : 0; this.CotaItemIDAPS = retornoCotaItens.Count > 0 ? retornoCotaItens[1] : 0; this.SerieID.Valor = serieID; }
public static RetornoModel <string> EfetuaVendaSistemaComprarVIR(EstruturaPagamento oPagamento, EstruturaReservaInternet estruturaReservaInternet, string celular, CarrinhoLista oCarrinhoLista, CompraModel compra) { Carrinho oCarrinho = new Carrinho(); IRLib.Bilheteria bilheteria = new IRLib.Bilheteria(); string[] retornoVenda = new string[3]; string senha = string.Empty; string msgRetorno = "Ok"; try { int clienteID = compra.ClienteID; string SessionID = compra.SessionID; IRLib.Cliente oCliente = new IRLib.Cliente(); oCliente.Ler(clienteID); if (oCliente.Control.ID == 0) { return new RetornoModel <string>() { Sucesso = false, Retorno = senha, Mensagem = "Não foi possível localizar o seu cadastro, por favor, tente novamento." } } ; retornoVenda = bilheteria.VenderVIRWeb(oPagamento, oCarrinho.getValeIngressoID(clienteID, SessionID).ToArray(), SessionID, new List <EstruturaVirNomePresenteado>(), estruturaReservaInternet, celular, oCliente); //ErroIndefinido = -1, FalhaVenda = 0, Sucesso = 1, ClienteInexistente = 2, ReservaInexistente = 3, TaxaEntregaInexistente = 4, FormaPagamentoNaoCadastrada = 5, ReservasCanceladas = 6, switch (retornoVenda[0]) { case "1": //Sucesso oCarrinho.SetStatusCarrinho(clienteID, SessionID, "VV"); oCarrinhoLista.CarregarDadosVIRporClienteIDSessionID(clienteID, SessionID, CarrinhoLista.Status.VendidoEmail); senha = retornoVenda[1]; IngressoRapido.Lib.Entrega oEntrega = new IngressoRapido.Lib.Entrega(); EstruturaEntrega oEE = oEntrega.CarregarEstruturaPeloControleID(oPagamento.EntregaControleID); string formpagamento = string.Empty; if (oPagamento.TipoPagamento == EstruturaPagamento.enumTipoPagamento.Nenhum) { formpagamento = "Cortesia"; } else if (oPagamento.TipoPagamento == EstruturaPagamento.enumTipoPagamento.VIR) { formpagamento = "Vale Ingresso"; } else { formpagamento = oPagamento.BandeiraNome.ToString() + " - " + oPagamento.Parcelas + "X"; } try { if (!string.IsNullOrEmpty(oCliente.CNPJ.Valor)) { IRLib.ServicoEmail.EnviarVendaAprovadaVir(oCliente.NomeFantasia.Valor, oCliente.Email.Valor, retornoVenda[1], string.Empty, "Site", DateTime.Now.ToString(), "Site", formpagamento, string.Empty, oEE.Nome); } else { IRLib.ServicoEmail.EnviarVendaAprovadaVir(oCliente.Nome.Valor, oCliente.Email.Valor, retornoVenda[1], string.Empty, "Site", DateTime.Now.ToString(), "Site", formpagamento, string.Empty, oEE.Nome); } } catch { msgRetorno = "Sua compra foi efetuada com sucesso no entando o envio para o Email informado gerou um erro, por favor entre em contato com a Ingresso Rápido informando a senha de compra"; } oCarrinho.SetStatusCarrinho(clienteID, SessionID, "V"); return(new RetornoModel <string>() { Sucesso = true, Retorno = senha, Mensagem = msgRetorno }); case "0": // falha ao inserir registro na tVendaBilheteria return(new RetornoModel <string>() { Sucesso = false, Retorno = senha, Mensagem = "Falha ao efetuar o pedido. A venda não pôde ser gerada." }); case "2": // falha ao inserir registro na tVendaBilheteria return(new RetornoModel <string>() { Sucesso = false, Retorno = senha, Mensagem = "Cliente Inexistente. A venda não pôde ser gerada." }); case "3": return(new RetornoModel <string>() { Sucesso = false, Retorno = senha, Mensagem = "Reserva Inexistente. A venda não pôde ser gerada." }); case "4": return(new RetornoModel <string>() { Sucesso = false, Retorno = senha, Mensagem = "Taxa de Entrega Inexistente. A venda não pôde ser gerada." }); case "6": return(new RetornoModel <string>() { Sucesso = false, Retorno = senha, Mensagem = "Reservas Canceladas. A venda não pôde ser gerada." }); case "-1": return(new RetornoModel <string>() { Sucesso = false, Retorno = senha, Mensagem = retornoVenda[1] }); default: return(new RetornoModel <string>() { Sucesso = false, Retorno = senha, Mensagem = "Falha ao efetuar o pedido. Erro indefinido." }); } } catch (ApplicationException ex) { return(new RetornoModel <string> { Sucesso = false, Retorno = senha, Mensagem = ex.Message }); } }