public bool SalvarValeIngresso(EstruturaValeIngressoWizard dadosSalvar) { ValeIngresso valeIngresso; CanalValeIngresso canalValeIngresso; bool novoVirTipo = false; BD bdDelete = new BD(); try { //td deve estar dentro de transaction bd.IniciarTransacao(); bdDelete.IniciarTransacao(); novoVirTipo = dadosSalvar.ValeIngressoTipo.ID == 0; //TODO: Fazer a validação dos dados. Inclusive usuarioID //Popula o objeto para salvar no banco this.Nome.Valor = dadosSalvar.ValeIngressoTipo.Nome; this.Valor.Valor = dadosSalvar.ValeIngressoTipo.Valor; this.ValidadeDiasImpressao.Valor = dadosSalvar.ValeIngressoTipo.ValidadeDiasImpressao; if (this.ValidadeDiasImpressao.Valor == 0) { this.ValidadeData.Valor = dadosSalvar.ValeIngressoTipo.ValidadeData; } this.CodigoTrocaFixo.Valor = dadosSalvar.ValeIngressoTipo.CodigoTrocaFixo; this.ClienteTipo.Valor = ((char)dadosSalvar.ValeIngressoTipo.ClienteTipo).ToString(); this.ProcedimentoTroca.Valor = dadosSalvar.ValeIngressoTipo.ProcedimentoTroca; this.SaudacaoPadrao.Valor = dadosSalvar.ValeIngressoTipo.SaudacaoPadrao; this.SaudacaoNominal.Valor = dadosSalvar.ValeIngressoTipo.SaudacaoNominal; this.QuantidadeLimitada.Valor = dadosSalvar.ValeIngressoTipo.QuantidadeLimitada; this.EmpresaID.Valor = dadosSalvar.ValeIngressoTipo.EmpresaID; this.Acumulativo.Valor = dadosSalvar.ValeIngressoTipo.Acumulativo; this.PublicarInternet.Valor = dadosSalvar.ValeIngressoTipo.PublicarInternet; this.ReleaseInternet.Valor = dadosSalvar.ValeIngressoTipo.ReleaseInternet; this.TrocaConveniencia.Valor = dadosSalvar.ValeIngressoTipo.TrocaConveniencia; this.TrocaIngresso.Valor = dadosSalvar.ValeIngressoTipo.TrocaIngresso; this.TrocaEntrega.Valor = dadosSalvar.ValeIngressoTipo.TrocaEntrega; this.ValorTipo.Valor = ((char)dadosSalvar.ValeIngressoTipo.ValorTipo).ToString(); this.ValorPagamento.Valor = dadosSalvar.ValeIngressoTipo.ValorPagamento; if (novoVirTipo) {//Inserir this.Inserir(bd); //Insere na tValeIngressoTipo } else {//Atualizar this.Control.ID = dadosSalvar.ValeIngressoTipo.ID; this.Atualizar(bd); } //Verifica a necessidade de inserir registros na tValeIngresso if (dadosSalvar.ValeIngressoTipo.QuantidadeLimitada) { //Inserir na tValeIngresso for (int i = 0; i < dadosSalvar.AdicionarQuantidade; i++) { try { valeIngresso = new ValeIngresso(); valeIngresso.ValeIngressoTipoID.Valor = this.Control.ID; valeIngresso.DataCriacao.Valor = DateTime.Now; valeIngresso.Status.Valor = ((char)ValeIngresso.enumStatus.Disponivel).ToString(); if (dadosSalvar.ValeIngressoTipo.CodigoTrocaFixo != String.Empty) { //Codigo fixo. Todos devem ter todos os códigos valeIngresso.CodigoTroca.Valor = dadosSalvar.ValeIngressoTipo.CodigoTrocaFixo; } else { valeIngresso.CodigoTroca.Valor = string.Empty; } valeIngresso.Inserir(bd); } catch { throw; } } } int canalInternet = Canal.CANAL_INTERNET; int canalCC = Canal.CANAL_CALL_CENTER; //Atualiza os canais string sql = string.Empty; if (!novoVirTipo) { //Verifica se deve remover ou inserir os canais ir (tirando call center e internet) if (dadosSalvar.acaoCanaisIR == EnumAcaoCanais.Distribuir) { //Inserre todos os canais IR. Tirando Call Center e Internet sql = "INSERT INTO tCanalValeIngresso (CanalID,ValeIngressoTipoID) " + " SELECT c.ID, " + this.Control.ID + " FROM tCanal c (NOLOCK) " + " LEFT JOIN tCanalValeIngresso vi (NOLOCK) ON vi.CanalID = c.ID AND vi.ValeIngressoTipoID =" + this.Control.ID + " INNER JOIN tEmpresa e (NOLOCK) ON e.ID = c.EmpresaID " + " WHERE (e.EmpresaVende = 'T' AND e.EmpresaPromove = 'F') AND vi.ID IS NULL AND c.ID NOT IN (" + canalInternet + "," + canalCC + ")"; } else if (dadosSalvar.acaoCanaisIR == EnumAcaoCanais.Remover) // Remove somente os canais que não forem IR { sql = "DELETE cvir FROM tCanalValeIngresso AS cvir " + "LEFT JOIN tCanal ON tCanal.ID = cvir.CanalID " + "INNER JOIN tEmpresa ON tCanal.EmpresaID = tEmpresa.ID AND (tEmpresa.EmpresaVende = 'T' AND tEmpresa.EmpresaPromove = 'F') " + "WHERE ValeIngressoTipoID = " + dadosSalvar.ValeIngressoTipo.ID + " AND tCanal.ID NOT IN (" + canalInternet + "," + canalCC + ")"; } if (dadosSalvar.acaoCanaisIR != EnumAcaoCanais.Manter) { bd.Executar(sql); } } //Distribui os canais próprios + Call Center e Internet foreach (EstruturaCanalValeIngresso canal in dadosSalvar.Canais) { if (canal.acao == CanalValeIngresso.EnumAcaoCanal.Inserir) { canalValeIngresso = new CanalValeIngresso(usuarioIDLogado); canalValeIngresso.CanalID.Valor = canal.CanalID; canalValeIngresso.ValeIngressoTipoID.Valor = this.Control.ID; canalValeIngresso.Inserir(bd); } else if (canal.acao == CanalValeIngresso.EnumAcaoCanal.Remover) { canalValeIngresso = new CanalValeIngresso(usuarioIDLogado); canalValeIngresso.Control.ID = canal.CanalValeIngressoID; canalValeIngresso.CanalID.Valor = canal.CanalID; canalValeIngresso.ValeIngressoTipoID.Valor = canal.ValeIngressoTipoID; //Call Center e Internet if (canal.CanalValeIngressoID == 0 && (canal.CanalID == canalInternet || canal.CanalID == canalCC)) { canalValeIngresso.Excluir(canal.CanalID, canal.ValeIngressoTipoID, bd); } else { canalValeIngresso.Excluir(canalValeIngresso.Control.ID, bd); } } } bd.FinalizarTransacao(); bdDelete.FinalizarTransacao(); return(true); } catch (Exception) { bdDelete.DesfazerTransacao(); bd.DesfazerTransacao(); throw; } finally { bd.Fechar(); } }
/// <summary> /// Popula o objeto utilizado na ValeIngressoWizard. /// Esse objeto possui todas as informações necessárias para editar nessa tela, incluindo distribuição de canais. /// </summary> /// <param name="valeIngressoTipoID"></param> /// <returns></returns> public EstruturaValeIngressoWizard Carregar(int valeIngressoTipoID) { try { EstruturaValeIngressoWizard retorno = new EstruturaValeIngressoWizard(); EstruturaValeIngressoTipo valeIngressoTipo = new EstruturaValeIngressoTipo(); //Carrega as Informações do ValeIngressoTipo. Já com a quantidade de virs disponiveis desse tipo string sql = @"SELECT virTipo.ID, virTipo.Nome, virTipo.Valor, ValidadeDiasImpressao, ValidadeData, ClienteTipo, ProcedimentoTroca, SaudacaoPadrao, SaudacaoNominal, QuantidadeLimitada, EmpresaID, CodigoTrocaFixo, Acumulativo, ISNULL(COUNT(vir.ID),0) AS QuantidadeDisponivel, PublicarInternet,ReleaseInternet, virTipo.TrocaEntrega,virTipo.TrocaIngresso,virTipo.TrocaConveniencia, virTipo.ValorTipo, virTipo.ValorPagamento FROM tValeIngressoTipo virTipo (NOLOCK) LEFT JOIN tValeIngresso vir (NOLOCK) ON virTipo.ID = vir.ValeIngressoTipoID AND Status = '" + (char)ValeIngresso.enumStatus.Disponivel + @"' WHERE virTipo.ID = " + valeIngressoTipoID + @" GROUP BY virTipo.ID, virTipo.Nome, virTipo.Valor, ValidadeDiasImpressao, ValidadeData, ClienteTipo, ProcedimentoTroca, SaudacaoPadrao, SaudacaoNominal, QuantidadeLimitada, EmpresaID, CodigoTrocaFixo, Acumulativo,PublicarInternet,ReleaseInternet,virTipo.TrocaEntrega,virTipo.TrocaIngresso,virTipo.TrocaConveniencia, virTipo.ValorTipo, virTipo.ValorPagamento" ; bd.Consulta(sql); while (bd.Consulta().Read()) { valeIngressoTipo.ID = bd.LerInt("ID"); valeIngressoTipo.Nome = bd.LerString("Nome"); valeIngressoTipo.Valor = bd.LerDecimal("Valor"); valeIngressoTipo.ValidadeDiasImpressao = bd.LerInt("ValidadeDiasImpressao"); valeIngressoTipo.ValidadeData = bd.LerDateTime("ValidadeData"); valeIngressoTipo.ClienteTipo = (ValeIngressoTipo.EnumClienteTipo)(Convert.ToChar(bd.LerString("ClienteTipo"))); valeIngressoTipo.ProcedimentoTroca = bd.LerString("ProcedimentoTroca"); valeIngressoTipo.SaudacaoPadrao = bd.LerString("SaudacaoPadrao"); valeIngressoTipo.SaudacaoNominal = bd.LerString("SaudacaoNominal"); valeIngressoTipo.QuantidadeLimitada = bd.LerBoolean("QuantidadeLimitada"); valeIngressoTipo.EmpresaID = bd.LerInt("EmpresaID"); valeIngressoTipo.CodigoTrocaFixo = bd.LerString("CodigoTrocaFixo"); valeIngressoTipo.Acumulativo = bd.LerBoolean("Acumulativo"); valeIngressoTipo.QuantidadeDisponivelTipo = bd.LerInt("QuantidadeDisponivel"); valeIngressoTipo.PublicarInternet = bd.LerBoolean("PublicarInternet"); valeIngressoTipo.ReleaseInternet = bd.LerString("ReleaseInternet"); valeIngressoTipo.TrocaEntrega = bd.LerBoolean("TrocaEntrega"); valeIngressoTipo.TrocaIngresso = bd.LerBoolean("TrocaIngresso"); valeIngressoTipo.TrocaConveniencia = bd.LerBoolean("TrocaConveniencia"); valeIngressoTipo.ValorTipo = Convert.ToChar(bd.LerString("ValorTipo")); valeIngressoTipo.ValorPagamento = bd.LerDecimal("ValorPagamento"); } //preenche o objeto de retorno retorno.ValeIngressoTipo = valeIngressoTipo; //Preenche esse objeto this.Control.ID = valeIngressoTipo.ID; //preenche os canais IR sql = @"SELECT CASE WHEN vi.ValeIngressoTipoID IS NOT NULL THEN 'T' ELSE 'F' END AS Distribuido,c.ID AS CanalID FROM tCanal c (NOLOCK) LEFT JOIN tCanalValeIngresso vi (NOLOCK) ON vi.CanalID = c.ID AND vi.ValeIngressoTipoID = " + valeIngressoTipoID + @" INNER JOIN tEmpresa e (NOLOCK) ON e.ID = c.EmpresaID WHERE (e.EmpresaVende = 'T' AND e.EmpresaPromove = 'F')"; bd.Consulta(sql); int canalID = 0; bool distribuido; int canalInternet = Canal.CANAL_INTERNET; int canalCC = Canal.CANAL_CALL_CENTER; while (bd.Consulta().Read()) { //verifica se o call center e internet estão distribuidos canalID = bd.LerInt("CanalID"); distribuido = bd.LerBoolean("Distribuido"); //call center if (canalID == canalInternet) { retorno.DistribuidoCanalInternet = distribuido; } //internet else if (canalID == canalCC) { retorno.DistribuidoCanalCallCenter = distribuido; } //faz a contagem dos canais próprios else { if (distribuido) { retorno.QtdeCanaisIRDistribuidos++; } else { retorno.QtdeCanaisIRNaoDistribuidos++; } } } //preencher os canais próprios retorno.Canais = this.CanaisDistribuidosLista(valeIngressoTipo.EmpresaID); //Busca a quantidade disponivel para o vale ingresso sql = "SELECT COUNT(ID) AS Quantidade FROM tValeIngresso (NOLOCK) WHERE Status = '" + (char)ValeIngresso.enumStatus.Disponivel + "' AND ValeIngressoTipoID = " + valeIngressoTipoID; retorno.QtdeValeIngressoDisponivel = Convert.ToInt32(bd.ConsultaValor(sql)); return(retorno); } catch (Exception) { throw; } finally { bd.Fechar(); } }