public List <tCancelamentoLoteFila> MontarOperacoesCancelamento(int CancelamentoLoteID, List <int> ApresentacoesID) { List <tCancelamentoLoteFila> cancelamentoFila = new List <tCancelamentoLoteFila>(); DateTime dataMovimentacao = DateTime.Now; foreach (OperacaoCancelamentoModelQuery ocmq in ado.MontarOperacoesCancelamento(ApresentacoesID)) { tCancelamentoLoteFila clf = cancelamentoFila.Where(x => x.VendaBilheteriaID == ocmq.VendaBilheteriaID).FirstOrDefault(); if (clf == null) { clf = new tCancelamentoLoteFila(); clf.CancelamentoLoteID = CancelamentoLoteID; clf.VendaBilheteriaID = ocmq.VendaBilheteriaID; clf.CanalID = ocmq.CanalID; clf.LojaID = ocmq.LojaID; clf.DataMovimentacao = dataMovimentacao; clf.Status = enumCancelamentoLoteFila.NaFila.ValueAsChar(); clf.Operacao = ocmq.Operacao; clf.Ingressos = new List <tCancelamentoLoteFilaIngresso>(); cancelamentoFila.Add(clf); } clf.Ingressos.Add(new tCancelamentoLoteFilaIngresso() { IngressoID = ocmq.IngressoID }); } return(cancelamentoFila); }
public bool AtualizarSituacaoZero(tCancelamentoLoteFila CancelamentoLoteFila) { #region query string query = @"UPDATE tCancelamentoLoteFila SET CancelamentoLoteID = @CancelamentoLoteID, DataMovimentacao = @DataMovimentacao, VendaBilheteriaID = @VendaBilheteriaID, CanalID = @CanalID, LojaID = @LojaID, Status = @Status WHERE ID = @ID"; #endregion var param = new { ID = CancelamentoLoteFila.ID, CancelamentoLoteID = CancelamentoLoteFila.CancelamentoLoteID, DataMovimentacao = CancelamentoLoteFila.DataMovimentacao.ToString("yyyyMMddHHmmss"), VendaBilheteriaID = CancelamentoLoteFila.VendaBilheteriaID, CanalID = CancelamentoLoteFila.CanalID, LojaID = CancelamentoLoteFila.LojaID, Status = CancelamentoLoteFila.Status }; bool result = conIngresso.Execute(query, param) > 0; return(result); }
public void EnvioEmailCancelamentoMassa(tCancelamentoLoteFila item, string atendente, string formaDevolucao) { IngressoBO iBO = new IngressoBO(); CancelamentoLoteBO cBO = new CancelamentoLoteBO(); List <tIngresso> ingressos = iBO.Listar(item.Ingressos.Select(x => x.IngressoID).ToList()); List <CancelamentoLoteMailModel> mailModel = ado.CarregarCamposEmail(item.VendaBilheteriaID); string motivo = cBO.Consultar(item.CancelamentoLoteID).MotivoCancelamento; MailServiceSoapClient service = new MailServiceSoapClient(); ArrayOfString codIngressos = new ArrayOfString(); codIngressos.AddRange(ingressos.Select(x => string.Format("<li>Ingresso: {0} - Evento: {1} - Data: {2}</li>", x.Codigo, (x.tEvento != null) ? x.tEvento.Nome : string.Empty, (x.tApresentacao != null) ? x.tApresentacao.HorarioAsDateTime.ToString("dd/MM/yyyy HH:mm") : string.Empty) ).ToList()); service.EnviarEmailCancelamentoMassa(mailModel[0].Cliente, mailModel[0].Email, mailModel[0].Senha, atendente, mailModel[0].Data.ToString("dd/MM/yyyy HH:mm"), mailModel[0].Canal, string.Join(",", mailModel.Select(x => x.Pagamento).ToList()), mailModel[0].Evento, motivo, formaDevolucao, codIngressos, mailModel[0].DescricaoEmail); }
public List <tCancelamentoLoteFila> CarregarCancelamentoManuaisProcessados() { #region querytCancelamentoLoteFila string querytCancelamentoLoteFila = @"SELECT tCLF.ID, tCLF.CancelamentoLoteID, dbo.StringToDateTime(tCLF.DataMovimentacao) AS DataMovimentacao, tCLF.VendaBilheteriaID, tCLF.CanalID, tCLF.LojaID, tCLF.Status, tCLF.Operacao FROM tCancelamentoLoteFila(NOLOCK) AS tCLF WHERE tCLF.Status NOT IN ('F', 'C') AND tCLF.Operacao NOT IN ('D', 'E') ORDER BY tCLF.LojaID"; #endregion #region querytCancelamentoLoteFilaIngresso string querytCancelamentoLoteFilaIngresso = @"SELECT tCLFI.ID, tCLFI.CancelamentoLoteFilaID, tCLFI.IngressoID FROM tCancelamentoLoteFilaIngresso(NOLOCK) AS tCLFI INNER JOIN tIngresso(NOLOCK) AS ing ON ing.ID = tCLFI.IngressoID WHERE tCLFI.CancelamentoLoteFilaID IN (@IDS) AND ing.Status NOT IN ('D', 'R', 'B')"; #endregion List <tCancelamentoLoteFila> lista; lista = conIngresso.Query <tCancelamentoLoteFila>(querytCancelamentoLoteFila).ToList(); foreach (tCancelamentoLoteFila item in lista) { item.Ingressos = new List <tCancelamentoLoteFilaIngresso>(); } List <tCancelamentoLoteFilaIngresso> listaIngressos; querytCancelamentoLoteFilaIngresso = querytCancelamentoLoteFilaIngresso.Replace("@IDS", String.Join(",", lista.Select(x => x.ID).ToList())); listaIngressos = conIngresso.Query <tCancelamentoLoteFilaIngresso>(querytCancelamentoLoteFilaIngresso).ToList(); foreach (tCancelamentoLoteFilaIngresso item in listaIngressos) { tCancelamentoLoteFila fila = lista.Where(x => x.ID == item.CancelamentoLoteFilaID).Select(x => x).FirstOrDefault(); fila.Ingressos.Add(item); } return(lista); }
public List <tCancelamentoLoteFila> ConsultarCancelamentosNaFila(int Quantidade) { List <tCancelamentoLoteFila> lista = ado.ConsultarCancelamentosNaFila(Quantidade); List <tCancelamentoLoteFila> opDE = lista.Where(i => i.Operacao == (char)enumOperacoesCancelamento.OperacaoD || i.Operacao == (char)enumOperacoesCancelamento.OperacaoE).ToList(); IEnumerable <VerificarOperacoesModelQuery> opCheck = ado.VerificarAlteracaoOperacao(opDE); foreach (VerificarOperacoesModelQuery item in opCheck) { tCancelamentoLoteFila filaItem = opDE.Where(i => i.VendaBilheteriaID == item.VendaBilheteriaID).FirstOrDefault(); if (filaItem.Operacao != item.Operacao) { filaItem.Operacao = item.Operacao; Atualizar(filaItem); } } foreach (tCancelamentoLoteFila item in lista.Where(i => i.Ingressos.Count == 0)) { item.Operacao = (char)enumOperacoesCancelamento.OperacaoZero; } return(lista); }
public List <tCancelamentoLoteFila> ConsultarCancelamentosNaFila(int Quantidade) { #region querytCancelamentoLoteFila string querytCancelamentoLoteFila = "SELECT TOP " + Quantidade + @" tCLF.ID, tCLF.CancelamentoLoteID, dbo.StringToDateTime(tCLF.DataMovimentacao) AS DataMovimentacao, tCLF.VendaBilheteriaID, tCLF.CanalID, tCLF.LojaID, tCLF.Status, tCLF.Operacao FROM tCancelamentoLoteFila(NOLOCK) AS tCLF WHERE tCLF.Status = 'F' ORDER BY tCLF.LojaID"; #endregion #region querytCancelamentoLoteFilaIngresso string querytCancelamentoLoteFilaIngresso = @"SELECT tCLFI.ID, tCLFI.CancelamentoLoteFilaID, tCLFI.IngressoID FROM tCancelamentoLoteFilaIngresso(NOLOCK) AS tCLFI INNER JOIN tIngresso(NOLOCK) AS ing ON ing.ID = tCLFI.IngressoID WHERE tCLFI.CancelamentoLoteFilaID IN @IDS AND ing.Status NOT IN ('D', 'R', 'B')"; #endregion List <tCancelamentoLoteFila> lista; lista = conIngresso.Query <tCancelamentoLoteFila>(querytCancelamentoLoteFila).ToList(); foreach (tCancelamentoLoteFila item in lista) { item.Ingressos = new List <tCancelamentoLoteFilaIngresso>(); } List <tCancelamentoLoteFilaIngresso> listaIngressos; listaIngressos = conIngresso.Query <tCancelamentoLoteFilaIngresso>(querytCancelamentoLoteFilaIngresso, new { IDS = lista.Select(x => x.ID).ToList() }).ToList(); foreach (tCancelamentoLoteFilaIngresso item in listaIngressos) { tCancelamentoLoteFila fila = lista.Where(x => x.ID == item.CancelamentoLoteFilaID).Select(x => x).FirstOrDefault(); fila.Ingressos.Add(item); } return(lista); }
public bool AtualizarSituacaoZero(tCancelamentoLoteFila CancelamentoLoteFila) { return(ado.AtualizarSituacaoZero(CancelamentoLoteFila)); }
public bool Atualizar(tCancelamentoLoteFila CancelamentoLoteFila) { return(ado.Atualizar(CancelamentoLoteFila)); }
public void ExecutaCancelamentoAutomatico(enumOperacoesCancelamento Operacao, tCancelamentoLoteFila item, int caixaID, int empresaID, int localID, int usuarioID) { IngressoBO iBO = new IngressoBO(); CTLib.BD db = new CTLib.BD(); DbTransaction dbtrans = null; List <int> lstIngressosIDs = null; List <tIngresso> lstIngressos = null; CancelamentoIngressos cancelamento = new CancelamentoIngressos(); EstruturaCancelamento dadosCancelamento = null; CancelamentoLoteModel cancelamentoLoteModel = new CancelamentoLoteModel(); try { #region Inicia Transação DB db.Cnn = ado.con.conIngresso; dbtrans = ado.con.conIngresso.BeginTransaction(); db.DefinnirEmTransacao(true, dbtrans); #endregion lstIngressosIDs = item.Ingressos.Select(x => x.IngressoID).ToList(); lstIngressos = iBO.Listar(lstIngressosIDs); #region Resolução de pendencias if (ado.TemCancelamentoPendente(dbtrans, item.VendaBilheteriaID, lstIngressos)) { List <int> cancelados = new List <int>(); List <CancelamentoLoteIngressoPendenteDados> lstIngressosParaPendencia = new List <CancelamentoLoteIngressoPendenteDados>(); //Pegar lista de Ingresso pendentes List <CancelamentoLoteIngressoPendente> lstIngressosPendentes = ado.ListarIngressosCancelamentoPendente(dbtrans, item.VendaBilheteriaID, lstIngressos); //Executa cancelamento das pendencias foreach (CancelamentoLoteIngressoPendente pendente in lstIngressosPendentes) { if (!cancelados.Contains(pendente.PendenciaID)) { dadosCancelamento = cancelamento.CarregaDadosCancelamento(pendente.PendenciaID); cancelados.Add(pendente.PendenciaID); //TODO: validar dados da Devolucao dadosCancelamento.CaixaIDDevolucao = caixaID; dadosCancelamento.CanalIDDevolucao = item.CanalID; dadosCancelamento.EmpresaIDDevolucao = empresaID; dadosCancelamento.LocalIDDevolucao = localID; dadosCancelamento.LojaIDDevolucao = item.LojaID; dadosCancelamento.UsuarioIDDevolucao = usuarioID; //Cancela a solicitação pendente cancelamento.CancelarSolicitacao(dadosCancelamento, pendente.PendenciaID, db); } //Se o ingresso pendente nao esta na lista de ingressos para cancelar, //este deve ser colocado em pendente novamente if (!lstIngressosIDs.Contains(pendente.IngressoID)) { lstIngressosParaPendencia.Add(new CancelamentoLoteIngressoPendenteDados() { IngressoID = pendente.IngressoID, PendenciaID = pendente.PendenciaID, DadosCancelamento = dadosCancelamento }); } } //percorre lista de ingressos que devem ficar com cancelamento pendente foreach (int pendeteID in lstIngressosParaPendencia.Select(p => p.PendenciaID).Distinct().ToList()) { CancelamentoLoteIngressoPendenteDados pend = lstIngressosParaPendencia.Where(p => p.PendenciaID == pendeteID).FirstOrDefault(); #region Carrega a estrutura de cancelamento dos ingressos //TODO: validar dados da Devolucao cancelamentoLoteModel.CaixaID = caixaID; cancelamentoLoteModel.LojaID = item.LojaID; cancelamentoLoteModel.LocalID = localID; cancelamentoLoteModel.CanalID = item.CanalID; cancelamentoLoteModel.EmpresaID = empresaID; cancelamentoLoteModel.EstornarConveniencia = pend.DadosCancelamento.ValorConvenienciaEstornada > 0; cancelamentoLoteModel.EstornarEntrega = pend.DadosCancelamento.ValorEntregaEstornado > 0; cancelamentoLoteModel.EstornarSeguro = pend.DadosCancelamento.ValorSeguroEstornado > 0; cancelamentoLoteModel.TemDevolucao = true; cancelamentoLoteModel.MotivoCancelamento = pend.DadosCancelamento.MotivoCancelamento; cancelamentoLoteModel.SubMotivoCancelamento = pend.DadosCancelamento.SubMotivoCancelamento; cancelamentoLoteModel.UsuarioID = usuarioID; cancelamentoLoteModel.SupervisorID = usuarioID; cancelamentoLoteModel.TipoCancelamento = pend.DadosCancelamento.TipoCancelamento; cancelamentoLoteModel.FormaDevolucao = pend.DadosCancelamento.FormaDevolucao; cancelamentoLoteModel.dadosBancarios = pend.DadosCancelamento.DadosDeposito; cancelamentoLoteModel.dadosCartaoCredito = pend.DadosCancelamento.DadosEstornoCC; cancelamentoLoteModel.IngressosID = lstIngressosParaPendencia.Where(p => p.PendenciaID == pendeteID).Select(p => p.IngressoID).ToList(); #endregion //Carrega a estrutura de cancelamento dos ingressos pend.DadosCancelamento = CarregarEstruturaCancelamento(cancelamentoLoteModel, dbtrans, db); //Efetua a solicitação do Cancelamento cancelamento.SolicitarCancelamento(pend.DadosCancelamento, db); } } #endregion #region Carrega a estrutura de cancelamento dos ingressos //TODO: validar dados da Devolucao cancelamentoLoteModel.CaixaID = caixaID; cancelamentoLoteModel.LojaID = item.LojaID; cancelamentoLoteModel.LocalID = localID; cancelamentoLoteModel.CanalID = item.CanalID; cancelamentoLoteModel.EmpresaID = empresaID; cancelamentoLoteModel.EstornarConveniencia = true; cancelamentoLoteModel.EstornarEntrega = ado.EstornarEntrega(dbtrans, item.VendaBilheteriaID, item.Ingressos.Count); cancelamentoLoteModel.EstornarSeguro = true; cancelamentoLoteModel.TemDevolucao = false; cancelamentoLoteModel.MotivoCancelamento = CancelEventoCancelado; cancelamentoLoteModel.SubMotivoCancelamento = 0; cancelamentoLoteModel.UsuarioID = usuarioID; cancelamentoLoteModel.SupervisorID = usuarioID; cancelamentoLoteModel.TipoCancelamento = EstruturaCancelamento.enuTipoCancelamento.Normal; cancelamentoLoteModel.FormaDevolucao = Operacao == enumOperacoesCancelamento.OperacaoE ? EstruturaCancelamento.enuFormaDevolucao.PayPal : EstruturaCancelamento.enuFormaDevolucao.EstornoCC; cancelamentoLoteModel.dadosBancarios = null; CancelamentoLoteDadosCliente cliente = ado.CarregarDadosCliente(dbtrans, item.VendaBilheteriaID); if (Operacao == enumOperacoesCancelamento.OperacaoE) { cancelamentoLoteModel.dadosCartaoCredito = new EstruturaCancelamento.EstruturaDevolucaoEstornoCC() { Bandeira = "Paypal", Email = cliente.Email, NumeroCartao = "Paypal", TitularCartao = cliente.Nome, TitularCPF = cliente.CPF }; } else { cancelamentoLoteModel.dadosCartaoCredito = new EstruturaCancelamento.EstruturaDevolucaoEstornoCC() { Bandeira = cliente.Bandeira, Email = cliente.Email, NumeroCartao = cliente.Cartao, TitularCartao = cliente.Nome, TitularCPF = cliente.CPF }; } cancelamentoLoteModel.IngressosID = lstIngressosIDs; #endregion //Carrega a estrutura de cancelamento dos ingressos dadosCancelamento = CarregarEstruturaCancelamento(cancelamentoLoteModel, dbtrans, db); if (Operacao == enumOperacoesCancelamento.OperacaoE) { #region Executa estorno Paypal IRLib.PayPal.CancelaPayPal paypal = new IRLib.PayPal.CancelaPayPal(); IRLib.VendaBilheteriaFormaPagamento vbfp = new IRLib.VendaBilheteriaFormaPagamento(); vbfp.LerPorVendaBilheteriaID(db, item.VendaBilheteriaID); if (vbfp.Valor.Valor == dadosCancelamento.ValorEstornoTotal) { if (paypal.RefundPayPal(vbfp.TransactionID.Valor)) { dadosCancelamento.EstornoEfetuado = true; } else { throw new Exception("Falha ao executar estorno com PayPal."); } } else { if (paypal.RefundPartial(vbfp.TransactionID.Valor, dadosCancelamento.ValorEstornoTotal)) { dadosCancelamento.EstornoEfetuado = true; } else { throw new Exception("Falha ao executar estorno parcial com PayPal."); } } #endregion } //Efetua a solicitação do Cancelamento cancelamento.SolicitarCancelamento(dadosCancelamento, db); dbtrans.Commit(); } catch (Exception ex) { if (dbtrans != null) { dbtrans.Rollback(); } throw ex; } finally { db.DefinnirEmTransacao(false); } }