Exemple #1
0
        public EstruturaCotasInfo getQuantidadesComprasInternet(EstruturaCotaItemReserva cota, int apresentacaoID, int apresentacaoSetorID, int ingressoID, int cotaItemID, int donoID)
        {
            try
            {
                IngressoCliente oIngressoCliente = new IngressoCliente();
                if (apresentacaoID == 0)
                {
                    apresentacaoSetorID = Convert.ToInt32(bd.ConsultaValor("SELECT ApresentacaoSetorID FROM tIngresso (NOLOCK) WHERE ID = " + ingressoID + " AND ApresentacaoID = " + apresentacaoID));
                    bd.FecharConsulta();
                }
                EstruturaCotasInfo cotaInfo = new EstruturaCotasInfo();

                int[] qtds = this.getQuantidade(cotaItemID, apresentacaoID, apresentacaoSetorID);
                cotaInfo.QuantidadeApresentacao      = qtds[0];
                cotaInfo.QuantidadeApresentacaoSetor = qtds[1];
                cotaInfo.QuantidadePorClienteCota    = qtds[2];

                if (cota.QuantidadePorCliente > 0 || cota.QuantidadePorClienteApresentacao > 0 || cota.QuantidadePorClienteApresentacaoSetor > 0)
                {
                    //Preenche o OBJ de IngressoCliente e retorna as quantidades ja compradas
                    oIngressoCliente.ApresentacaoID.Valor      = apresentacaoID;
                    oIngressoCliente.ApresentacaoSetorID.Valor = apresentacaoSetorID;
                    oIngressoCliente.DonoID.Valor     = donoID;
                    oIngressoCliente.CotaItemID.Valor = cotaItemID;

                    qtds = oIngressoCliente.QuantidadeJaComprada();

                    cotaInfo.QuantidadePorClienteApresentacao      = qtds[0];
                    cotaInfo.QuantidadePorClienteApresentacaoSetor = qtds[1];
                    cotaInfo.QuantidadePorClienteCota = qtds[2];
                }
                else
                {
                    cotaInfo.QuantidadePorClienteApresentacao      = 0;
                    cotaInfo.QuantidadePorClienteApresentacaoSetor = 0;
                    cotaInfo.QuantidadePorClienteCota = 0;
                }

                return(cotaInfo);
            }

            catch (Exception)
            {
                throw;
            }
            finally
            {
                bd.Fechar();
            }
        }
Exemple #2
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;
        }
Exemple #3
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();
            }
        }
Exemple #4
0
        public List <EstruturaCotasInfo> ValidacaoQuantidadesCliente(List <EstruturaCotaValidacaoCliente> lstCotas)
        {
            IngressoCliente           oIngressoCliente = new IngressoCliente();
            List <EstruturaCotasInfo> lstRetorno       = new List <EstruturaCotasInfo>();
            EstruturaCotasInfo        cotaInfo;

            int apresentacaoSetorID = 0;

            try
            {
                for (int i = 0; i < lstCotas.Count; i++)
                {
                    if (lstCotas[i].ApresentacaoSetorID == 0)
                    {
                        apresentacaoSetorID = Convert.ToInt32(bd.ConsultaValor("SELECT ApresentacaoSetorID FROM tIngresso (NOLOCK) WHERE ID = " + lstCotas[i].IngressoID + " AND ApresentacaoID = " + lstCotas[i].ApresentacaoID));
                        bd.FecharConsulta();
                    }
                    else
                    {
                        apresentacaoSetorID = lstCotas[i].ApresentacaoSetorID;
                    }

                    cotaInfo = new EstruturaCotasInfo();

                    int[] qtds = this.getQuantidadeNovo(lstCotas[i].CotaItemID, lstCotas[i].CotaItemIDAPS, lstCotas[i].ApresentacaoID, apresentacaoSetorID);
                    cotaInfo.QuantidadeApresentacao      = qtds[0];
                    cotaInfo.QuantidadeApresentacaoSetor = qtds[1];
                    cotaInfo.QuantidadeCota    = qtds[2];
                    cotaInfo.QuantidadeCotaAPS = qtds[3];

                    //Eh um Ingresso Nominal e Tem quantidade Maxima?
                    if (lstCotas[i].Nominal && (lstCotas[i].QuantidadePorClienteApresentacao > 0 ||
                                                lstCotas[i].QuantidadePorClienteApresentacaoSetor > 0 ||
                                                lstCotas[i].QuantidadePorClienteCotaItem > 0 ||
                                                lstCotas[i].QuantidadeCotaItemAPS > 0))
                    {
                        //Preenche o OBJ de IngressoCliente e retorna as quantidades ja compradas
                        oIngressoCliente.ApresentacaoID.Valor      = lstCotas[i].ApresentacaoID;
                        oIngressoCliente.ApresentacaoSetorID.Valor = apresentacaoSetorID;
                        oIngressoCliente.DonoID.Valor     = lstCotas[i].DonoID;
                        oIngressoCliente.CotaItemID.Valor = lstCotas[i].CotaItemID;
                        oIngressoCliente.CPF.Valor        = lstCotas[i].CPF;

                        //Busca na Proc e retorna o Array
                        qtds = oIngressoCliente.QuantidadeJaCompradaNovo(lstCotas[i].CotaItemID, lstCotas[i].CotaItemIDAPS, lstCotas[i].IngressoID);

                        cotaInfo.QuantidadePorClienteApresentacao      = qtds[0];
                        cotaInfo.QuantidadePorClienteApresentacaoSetor = qtds[1];
                        cotaInfo.QuantidadePorClienteCota    = qtds[2];
                        cotaInfo.QuantidadePorClienteCotaAPS = qtds[3];
                    }
                    else
                    {
                        cotaInfo.QuantidadePorClienteApresentacao      = 0;
                        cotaInfo.QuantidadePorClienteApresentacaoSetor = 0;
                        cotaInfo.QuantidadePorClienteCota    = 0;
                        cotaInfo.QuantidadePorClienteCotaAPS = 0;
                    }

                    //Atribui as quantidades maximas
                    cotaInfo.MaximaApresentacao      = lstCotas[i].QuantidadeApresentacao;
                    cotaInfo.MaximaApresentacaoSetor = lstCotas[i].QuantidadeApresentacaoSetor;
                    cotaInfo.MaximaCotaItem          = lstCotas[i].QuantidadeCotaItem;
                    cotaInfo.MaximaCotaItemAPS       = lstCotas[i].QuantidadeCotaItemAPS;

                    cotaInfo.MaximaPorClienteApresentacao      = lstCotas[i].QuantidadePorClienteApresentacao;
                    cotaInfo.MaximaPorClienteApresentacaoSetor = lstCotas[i].QuantidadePorClienteApresentacaoSetor;
                    cotaInfo.MaximaPorClienteCotaItem          = lstCotas[i].QuantidadePorClienteCotaItem;
                    cotaInfo.MaximaPorClienteCotaItemAPS       = lstCotas[i].QuantidadePorClienteCotaItemAPS;

                    //Propriedades de continuidade
                    cotaInfo.ReservaID           = lstCotas[i].ReservaID;
                    cotaInfo.ApresentacaoID      = lstCotas[i].ApresentacaoID;
                    cotaInfo.ApresentacaoSetorID = apresentacaoSetorID;
                    cotaInfo.DonoID            = lstCotas[i].DonoID;
                    cotaInfo.IngressoID        = lstCotas[i].IngressoID;
                    cotaInfo.CotaItemID        = lstCotas[i].CotaItemID;
                    cotaInfo.CotaItemID_APS    = lstCotas[i].CotaItemIDAPS;
                    cotaInfo.CodigoPromocional = lstCotas[i].CodigoPromocional;
                    cotaInfo.CPF     = lstCotas[i].CPF;
                    cotaInfo.Nominal = lstCotas[i].Nominal;
                    lstRetorno.Add(cotaInfo);
                }

                return(lstRetorno);
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                bd.Fechar();
            }
        }
Exemple #5
0
        public string[] ValidarCotaInformacoesNovo(EstruturaCotasInfo cotasInfo, string precoNome, int BIN, int formaPagamentoID, bool somenteVIR, bool somenteCortesias)
        {
            string[]         msgCota           = new string[2];
            CotaItemControle oCotaItemControle = new CotaItemControle();
            ValeIngresso     oValeIngresso     = new ValeIngresso();

            try
            {
                if (string.IsNullOrEmpty(msgCota[0]) && cotasInfo.ValidaBin)
                {
                    if (BIN == 0)
                    {
                        msgCota[0] = "1";

                        if (somenteVIR)
                        {
                            msgCota[1] = "Atenção, O preço: " + precoNome + " requer que o ingresso seja pago com um cartão válido para a promoção <br /> Não será possivel comprar somente com Vale Ingressos";
                        }

                        else
                        {
                            msgCota[1] = "Atenção, O preço: " + precoNome + " requer que o ingresso seja pago com um cartão válido para a promoção. <br /> Compras com Visa Electron, ItauShopLine e Somente Vale Ingressos não serão aceitas";
                        }
                    }
                    else if (!this.ValidarBin(BIN, cotasInfo.CotaItemID > 0 ? cotasInfo.CotaItemID : cotasInfo.CotaItemID_APS, cotasInfo.ParceiroID))
                    {
                        msgCota[0] = "1";
                        msgCota[1] = "Atenção, o BIN digitado não corresponde a um BIN válido para o preço: " + precoNome + ".";
                    }
                }

                if (string.IsNullOrEmpty(msgCota[0]))
                {
                    if (somenteVIR)
                    {
                        formaPagamentoID = oValeIngresso.FormaDePagamentoID;
                    }
                    else if (somenteCortesias)
                    {
                        return(msgCota);
                    }

                    if (!this.ValidarFormaPagamento(formaPagamentoID, cotasInfo.CotaItemID > 0 ? cotasInfo.CotaItemID : cotasInfo.CotaItemID_APS))
                    {
                        msgCota[0] = "2";

                        if (somenteVIR)
                        {
                            msgCota[1] = "A Forma de Pagamento Somente Vale Ingresso não é válida para o Preço: " + precoNome;
                        }
                        else
                        {
                            msgCota[1] = "A Forma de Pagamento selecionada é válida para o Preço: " + precoNome;
                        }
                    }
                }

                return(msgCota);
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemple #6
0
        public List <int> getQuantidadeQPodeReservarCota(List <EstruturaCotaItemReserva> listaCotaItem, EstruturaPrecoReservaSite preco, EstruturaCotasInfo cotaInfo)
        {
            try
            {
                List <int> retorno = new List <int>();

                #region Encontra Item da Apresentacao
                foreach (EstruturaCotaItemReserva itemEncontrado in listaCotaItem.Where(c => preco.PrecoNome.StartsWith(c.PrecoIniciaCom) && c.isApresentacao))
                {
                    retorno.Add(itemEncontrado.ID);
                    cotaInfo.CotaItemID               = itemEncontrado.ID;
                    cotaInfo.EncontrouCotaItem        = true;
                    cotaInfo.QuantidadeApresentacao   = itemEncontrado.QuantidadeApresentacao;
                    cotaInfo.QuantidadePorClienteCota = itemEncontrado.QuantidadePorCliente;
                    cotaInfo.QuantidadeCota           = itemEncontrado.Quantidade;
                    cotaInfo.ValidaBin  = itemEncontrado.ValidaBin;
                    cotaInfo.ParceiroID = itemEncontrado.ParceiroID;
                    cotaInfo.Nominal    = itemEncontrado.Nominal;
                    break;
                }

                if (retorno.Count.Equals(0))
                {
                    retorno.Add(0);
                }

                #endregion

                #region Encontra Item da Apresentacao Setor
                foreach (EstruturaCotaItemReserva itemEncontrado in listaCotaItem.Where(c => preco.PrecoNome.StartsWith(c.PrecoIniciaCom) && !c.isApresentacao))
                {
                    retorno.Add(itemEncontrado.ID);
                    cotaInfo.CotaItemID_APS              = itemEncontrado.ID;
                    cotaInfo.EncontrouCotaItemAPS        = true;
                    cotaInfo.QuantidadeCotaAPS           = itemEncontrado.Quantidade;
                    cotaInfo.QuantidadePorClienteCotaAPS = itemEncontrado.QuantidadePorCliente;
                    cotaInfo.ValidaBinAPS  = itemEncontrado.ValidaBin;
                    cotaInfo.ParceiroIDAPS = itemEncontrado.ParceiroID;
                    cotaInfo.Nominal       = itemEncontrado.Nominal;
                    break;
                }
                if (retorno.Count.Equals(1))
                {
                    retorno.Add(0);
                }

                #endregion


                if (cotaInfo.CotaItemID > 0 && cotaInfo.CotaItemID_APS > 0 && cotaInfo.CotaItemID_APS != cotaInfo.CotaItemID &&
                    (cotaInfo.ValidaBin != cotaInfo.ValidaBinAPS || cotaInfo.ParceiroID != cotaInfo.ParceiroIDAPS))
                {
                    throw new BilheteriaException("Não será possivel reservar o preço \"" + preco.PrecoNome + "\" pois ele não está mais disponível.");
                }


                //Validacao de Cotas
                if (cotaInfo.CotaItemID > 0 || cotaInfo.CotaItemID_APS > 0)
                {
                    cotaInfo.QuantidadeJaVendida = new CotaItemControle().getQuantidadeNovo(cotaInfo.CotaItemID, cotaInfo.CotaItemID_APS, cotaInfo.ApresentacaoID, cotaInfo.ApresentacaoSetorID);
                    //cotaInfo.sumQuantidadeVendidaReservar(qtdeJaReservadaCota, qtdeJaReservadaCotaItem);

                    //Fez a soma dos itens agora faz a validacao, se estiver incorreto retorna -1 na lista
                    if (!cotaInfo.ValidaReserva(preco.QuantidadeReservar()))
                    {
                        for (int i = 0; i < retorno.Count; i++)
                        {
                            retorno[i] = -1;
                        }
                    }
                }
                retorno.Add(cotaInfo.Nominal ? 1 : 0);
                return(retorno);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
Exemple #7
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;
        }
Exemple #8
0
        public void AtualizarInformacoesCota(List <EstruturaCotaItemReserva> listaCotaItem, EstruturaPrecoReservaSite preco, EstruturaCotasInfo cotaInfo)
        {
            cotaInfo.CotaItemID               = 0;
            cotaInfo.EncontrouCotaItem        = false;
            cotaInfo.QuantidadeApresentacao   = 0;
            cotaInfo.QuantidadePorClienteCota = 0;
            cotaInfo.QuantidadeCota           = 0;
            cotaInfo.ValidaBin  = false;
            cotaInfo.ParceiroID = 0;
            cotaInfo.Nominal    = false;

            foreach (EstruturaCotaItemReserva itemEncontrado in listaCotaItem.Where(c => preco.PrecoNome.ToLower().StartsWith(c.PrecoIniciaCom.ToLower()) && c.isApresentacao))
            {
                cotaInfo.CotaItemID               = itemEncontrado.ID;
                cotaInfo.EncontrouCotaItem        = true;
                cotaInfo.QuantidadeApresentacao   = itemEncontrado.QuantidadeApresentacao;
                cotaInfo.QuantidadePorClienteCota = itemEncontrado.QuantidadePorCliente;
                cotaInfo.QuantidadeCota           = itemEncontrado.Quantidade;
                cotaInfo.ValidaBin  = itemEncontrado.ValidaBin;
                cotaInfo.ParceiroID = itemEncontrado.ParceiroID;
                cotaInfo.Nominal    = itemEncontrado.Nominal;
                break;
            }
        }