Exemple #1
0
        public bool AlterarTaxas(int[] canalPacotesIDs, int[] canaisIDs, int pacoteID, int taxa, decimal taxaMin, decimal taxaMax, int comissao, decimal comissaoMin, decimal comissaoMax)
        {
            try{
                bool ok = true;

                bd.IniciarTransacao();

                //CanalPacote canalPacote = new CanalPacote(this.CanalPacote.Control.UsuarioID);

                for (int i = 0; i < canalPacotesIDs.Length; i++)
                {
                    int canalPacoteID = canalPacotesIDs[i];
                    int canalID       = canaisIDs[i];

                    CanalPacote.Limpar();
                    CanalPacote.Control.ID             = canalPacoteID;
                    CanalPacote.CanalID.Valor          = canalID;
                    CanalPacote.PacoteID.Valor         = pacoteID;
                    CanalPacote.TaxaConveniencia.Valor = taxa;
                    canalPacote.TaxaMinima.Valor       = taxaMin;
                    canalPacote.TaxaMaxima.Valor       = taxaMax;
                    canalPacote.TaxaComissao.Valor     = comissao;
                    canalPacote.ComissaoMinima.Valor   = comissaoMin;
                    canalPacote.ComissaoMaxima.Valor   = comissaoMax;

                    ok &= CanalPacote.Atualizar(bd);

                    if (!ok)
                    {
                        throw new CanalPacoteException("Não conseguiu atualizar canal " + canalID + " e pacote " + pacoteID);
                    }
                }

                bd.FinalizarTransacao();

                return(ok);
            }
            catch (Exception ex)
            {
                bd.DesfazerTransacao();
                throw ex;
            }
            finally
            {
                bd.Fechar();
            }
        }
Exemple #2
0
 // passar o Usuario logado no sistema
 public CanalPacoteLista_B(int usuarioIDLogado)
 {
     canalPacote = new CanalPacote(usuarioIDLogado);
 }
Exemple #3
0
 // passar o Usuario logado no sistema
 public CanalPacoteLista_B()
 {
     canalPacote = new CanalPacote();
 }
        public int VenderInternet(Dictionary <int, decimal> ingressosID, string sessionID, EstruturaReservaInternet estruturaReservaInternet, int entregaControleID, int pdvID, int clienteEnderecoID, int clienteID, string ip, EstruturaCortesia estruturaCortesia)
        {
            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 = '', CortesiaID = " + estruturaCortesia.ID);
                    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.CortesiaID.Valor = estruturaCortesia.ID;
                    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 = '', CortesiaID = " + estruturaCortesia.ID);
                        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.CortesiaID.Valor            = estruturaCortesia.ID;
                        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 + "', CortesiaID = " + estruturaCortesia.ID);
                        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.CortesiaID.Valor            = estruturaCortesia.ID;
                        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);
        }