public int EfetuarDoacao(List <int> ingressos, int clienteID, int usuarioID) { try { bd.BulkInsert(ingressos, "#tmpIngressos", false, true); List <int> bancoIngressoID = new List <int>(); bd.Consulta( @" SELECT bi.ID FROM tAssinaturaBancoIngresso bi (NOLOCK) INNER JOIN #tmpIngressos ti ON ti.ID = bi.IngressoID WHERE bi.ClienteID = " + clienteID); if (!bd.Consulta().Read()) { throw new Exception("Os ingressos selecionados não estão associados a você, caso já tenha efetuado a ação de doação ou devolução, por favor, verifique os comprovantes."); } do { bancoIngressoID.Add(bd.LerInt("ID")); } while (bd.Consulta().Read()); bd.FecharConsulta(); if (bancoIngressoID.Count != ingressos.Count) { throw new Exception("Um dos ingressos selecionados não está associado a você, caso já tenha efetuado a ação de doação ou devolução, por favor, verifique os comprovantes."); } bd.IniciarTransacao(); this.ClienteID.Valor = clienteID; this.UsuarioID.Valor = usuarioID; this.Timestamp.Valor = DateTime.Now; this.Acao.Valor = ((char)AcaoComprovante.Doar).ToString(); this.Inserir(bd); AssinaturaBancoIngressoHistorico oHistorico = new AssinaturaBancoIngressoHistorico(); AssinaturaBancoIngressoCredito oCredito = new AssinaturaBancoIngressoCredito(); foreach (var bancoIngresso in bancoIngressoID) { if (bd.Executar(string.Format("UPDATE tAssinaturaBancoIngresso SET ClienteID = 0 WHERE ID = {0} AND ClienteID = {1}", bancoIngresso, clienteID)) != 1) { throw new Exception("Não foi possível efetuar a ação de doação de um dos ingressos selecionados, caso já tenha efetuado sua ação de doação ou devolução, por favor, verifique os comprovantes."); } bd.Consulta(string.Format( @"Select ID FROM tAssinaturaAno where AssinaturaID = (Select TOP 1 AssinaturaID from tAssinaturaBancoIngresso(NOLOCK) where ID = {0}) AND Ano = (Select TOP 1 Ano from tAssinaturaBancoIngresso(NOLOCK) where ID = {0})", bancoIngresso)); if (!bd.Consulta().Read()) { throw new Exception("O item no banco de ingresso não possui uma assinatura ano vinculada"); } int assinaturaAnoID = bd.LerInt("ID"); bd.FecharConsulta(); oHistorico.Limpar(); oCredito.Limpar(); oCredito.ClienteID.Valor = clienteID; oCredito.Utilizado.Valor = false; oCredito.AssinaturaAnoID.Valor = assinaturaAnoID; oCredito.Inserir(bd); oHistorico.AssinaturaBancoIngressoID.Valor = bancoIngresso; oHistorico.AssinaturaBancoIngressoCreditoID.Valor = oCredito.Control.ID; oHistorico.AssianturaBancoIngressoComprovanteID.Valor = this.Control.ID; oHistorico.Inserir(bd); } bd.FinalizarTransacao(); return(this.Control.ID); } catch (Exception ex) { bd.DesfazerTransacao(); throw ex; } finally { bd.Fechar(); } }
public int EfetuarResgate(int clienteID, int usuarioID, int assinaturaTipoID) { try { string sql = string.Format( @" SELECT DISTINCT bi.ID, bi.ClienteID FROM tAssinaturaBancoIngressoResgate bir (NOLOCK) INNER JOIN tAssinaturaBancoIngresso bi (NOLOCK) ON bi.ID = bir.AssinaturaBancoIngressoID INNER JOIN tAssinatura asn (NOLOCK) ON asn.ID = bi.AssinaturaID WHERE bir.ClienteID = {0} AND asn.AssinaturaTipoID = {1}", clienteID, assinaturaTipoID ); List <int> ids = new List <int>(); List <int> idsCredito = new List <int>(); if (!bd.Consulta(sql).Read()) { throw new Exception("Não existem ingressos a serem resgatados, caso você já tenha efetuado a ação de resgate, por favor, verifique os comprovantes."); } int clienteID_aux = 0; do { clienteID_aux = bd.LerInt("ClienteID"); if (clienteID_aux != 0) { if (clienteID_aux == clienteID) { throw new Exception("Você já efetuou a ação de resgate dos seus ingressos, por favor, verifique os comprovantes."); } else { throw new Exception("Um dos ingressos a serem resgatados já está vinculado a outro cliente, não será possível continuar, por favor, tente resgatar os ingressos novamente."); } } ids.Add(bd.LerInt("ID")); } while (bd.Consulta().Read()); bd.FecharConsulta(); sql = "SELECT DISTINCT TOP " + ids.Count + " bic.ID FROM tAssinaturaBancoIngressoCredito bic " + "INNER JOIN tAssinaturaAno ano (NOLOCK) ON ano.ID = bic.AssinaturaAnoID INNER JOIN tAssinatura asn(NOLOCK) ON asn.ID = ano.AssinaturaID " + "WHERE bic.ClienteID = " + clienteID + " AND bic.Utilizado = 'F' AND asn.AssinaturaTipoID = " + assinaturaTipoID; if (!bd.Consulta(sql).Read()) { throw new Exception("Você não possui créditos para finalizar o processo de resgate."); } do { idsCredito.Add(bd.LerInt("ID")); } while (bd.Consulta().Read()); if (idsCredito.Count < ids.Count) { throw new Exception("Seu saldo de crédito atual é de: " + idsCredito.Count + ", não será possível efetuar o resgate de: " + ids.Count + " ingresso(s)"); } bd.FecharConsulta(); bd.IniciarTransacao(); this.ClienteID.Valor = clienteID; this.UsuarioID.Valor = usuarioID; this.Timestamp.Valor = DateTime.Now; this.Acao.Valor = ((char)AcaoComprovante.Resgatar).ToString(); this.Inserir(bd); AssinaturaBancoIngressoHistorico oHistorico = new AssinaturaBancoIngressoHistorico(); foreach (var id in ids) { if (bd.Executar(string.Format("UPDATE tAssinaturaBancoIngresso SET ClienteID = {0} WHERE ID = {1} AND ClienteID = 0", clienteID, id)) != 1) { throw new Exception("Um dos ingressos a serem resgatados já está vinculado a outro cliente, não será possível continuar, por favor, tente resgatar os ingressos novamente."); } int creditoID = idsCredito.FirstOrDefault(); bd.Executar("UPDATE tAssinaturaBancoIngressoCredito SET Utilizado = 'T' WHERE ID = " + creditoID + " AND ClienteID = " + clienteID + " AND Utilizado = 'F'"); oHistorico.Limpar(); oHistorico.AssinaturaBancoIngressoID.Valor = id; oHistorico.AssinaturaBancoIngressoCreditoID.Valor = creditoID; oHistorico.AssianturaBancoIngressoComprovanteID.Valor = this.Control.ID; oHistorico.Inserir(bd); idsCredito.Remove(creditoID); } bd.Executar("DELETE bir FROM tAssinaturaBancoIngressoResgate bir(NOLOCK) " + "INNER JOIN tAssinaturaBancoIngresso bic (NOLOCK) ON bir.AssinaturaBancoIngressoID = bic.ID " + "INNER JOIN tAssinatura asn(NOLOCK) ON asn.ID = bic.AssinaturaID " + "WHERE bir.ClienteID = " + clienteID + " AND asn.AssinaturaTipoID = " + assinaturaTipoID); bd.FinalizarTransacao(); return(this.Control.ID); } catch (Exception ex) { bd.DesfazerTransacao(); throw ex; } finally { bd.Fechar(); } }