Exemplo n.º 1
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;
        }
Exemplo n.º 2
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();
            }
        }
Exemplo n.º 3
0
        public void ValidarCotaInformacoes(int apresentacaoID, int setorID, EstruturaCotaItemReserva item, EstruturaPrecoReservaSite preco, int BIN, int formaPagamentoID, int clienteID, string sessionID, ref string[] msgCota, bool somenteVIR)
        {
            CotaItemControle oCotaItemControle = new CotaItemControle();
            ValeIngresso     oValeIngresso     = new ValeIngresso();

            try
            {
                int[] quantidades = new int[2] {
                    0, 0
                };
                int apresentacaoSetorID = new ApresentacaoSetor().ApresentacaoSetorID(apresentacaoID, setorID);
                quantidades = oCotaItemControle.getQuantidade(item.ID, apresentacaoID, apresentacaoSetorID);
                if (((quantidades[0] + preco.Quantidade > item.Quantidade || quantidades[1] + preco.Quantidade > item.Quantidade) && item.Quantidade != 0) ||
                    (quantidades[0] + preco.Quantidade > item.QuantidadeApresentacao && item.QuantidadeApresentacao != 0) ||
                    (quantidades[1] + preco.Quantidade > item.QuantidadeApresentacaoSetor && item.QuantidadeApresentacaoSetor != 0))
                {
                    msgCota[0] = "4";
                    msgCota[1] = "O Limite de venda do preço especial: " + preco.PrecoNome + " foi excedido";
                }
                if (string.IsNullOrEmpty(msgCota[0]) && item.ValidaBin)
                {
                    if (item.ValidaBin && BIN == 0)
                    {
                        msgCota[0] = "1";

                        if (somenteVIR)
                        {
                            msgCota[1] = "Atenção, O Preço: " + preco.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: " + preco.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, item.ID, item.ParceiroID))
                    {
                        msgCota[0] = "1";
                        msgCota[1] = "Atenção, o BIN do cartão digitado não corresponde a um BIN válido para o preço: " + preco.PrecoNome + ".";
                    }
                }
                else if (string.IsNullOrEmpty(msgCota[0]))
                {
                    if (somenteVIR)
                    {
                        formaPagamentoID = oValeIngresso.FormaDePagamentoID;
                    }
                    if (!this.ValidarFormaPagamento(formaPagamentoID, item.ID))
                    {
                        msgCota[0] = "2";

                        if (somenteVIR)
                        {
                            msgCota[1] = "A Forma de Pagamento Somente Vale Ingresso não é válida para o Preço: " + preco.PrecoNome;
                        }
                        else
                        {
                            msgCota[1] = "A Forma de Pagamento selecionada é válida para o Preço: " + preco.PrecoNome;
                        }
                    }
                }
            }
            catch (Exception)
            {
                throw;
            }
        }
Exemplo n.º 4
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;
            }
        }
Exemplo n.º 5
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;
        }
Exemplo n.º 6
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;
            }
        }