Ejemplo n.º 1
0
        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
            });
        }
Ejemplo n.º 2
0
        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
            });
        }
Ejemplo n.º 3
0
        /// <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();
            }
        }
Ejemplo n.º 4
0
        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;
            }
        }
Ejemplo n.º 5
0
        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;
        }
Ejemplo n.º 6
0
        /// <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();
            }
        }
Ejemplo n.º 7
0
        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();
            }
        }
Ejemplo n.º 8
0
        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();
            }
        }
Ejemplo n.º 9
0
        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);
        }
Ejemplo n.º 10
0
        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;
        }
Ejemplo n.º 11
0
        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
                });
            }
        }