/// <summary> /// Inclui um suporte no banco de dados /// </summary> /// <param name="requisicaoDto"></param> /// <param name="retornoDto"></param> /// <returns></returns> public override bool Incluir(RequisicaoEntidadeDto <SuporteDto> requisicaoDto, ref RetornoDto retornoDto) { // Valida a requisição if (!base.Incluir(requisicaoDto, ref retornoDto)) { return(false); } SuporteVo suporteVo = new SuporteVo(); string mensagemErro = ""; // Converte para VO a ser incluída no banco de dados if (!ConverterDtoParaVo(requisicaoDto.EntidadeDto, ref suporteVo, ref mensagemErro)) { retornoDto.Retorno = false; retornoDto.Mensagem = "Falha ao converter o suporte para VO: " + mensagemErro; logBll.ResgistrarLog(requisicaoDto, LogRecursos.IncluirSuporte, Guid.Empty, retornoDto.Mensagem); return(false); } // Prepara a inclusão no banco de dados if (!IncluirBd(suporteVo, ref mensagemErro)) { retornoDto.Retorno = false; retornoDto.Mensagem = "Falha ao converter o suporte para VO: " + mensagemErro; logBll.ResgistrarLog(requisicaoDto, LogRecursos.IncluirSuporte, Guid.Empty, retornoDto.Mensagem); return(false); } if (salvar) { // Salva as alterações if (!pizzaByteContexto.Salvar(ref mensagemErro)) { retornoDto.Retorno = false; retornoDto.Mensagem = mensagemErro; logBll.ResgistrarLog(requisicaoDto, LogRecursos.IncluirSuporte, Guid.Empty, retornoDto.Mensagem); return(false); } } // Se for mensagem do usuário, enviar alerta por email if (suporteVo.Tipo == TipoMensagemSuporte.Usuario) { string corpoEmail = $"<p> Há uma nova mensagem de suporte!</p>" + $"<p> Mensagem incluída as {suporteVo.DataInclusao}:</p>" + $"<p><strong>{suporteVo.Mensagem}</strong></p><br/>" + "<p> Entre com a senha de suporte para responder à solicitação.</p>"; if (!UtilitarioBll.EnviarEmail("*****@*****.**", "Nova mensagem de suporte", corpoEmail, ref mensagemErro)) { logBll.ResgistrarLog(requisicaoDto, LogRecursos.IncluirSuporte, suporteVo.Id, $"Problemas para enviar a mensagem por email: {mensagemErro}"); } if (!UtilitarioBll.EnviarEmail("*****@*****.**", "Nova mensagem de suporte", corpoEmail, ref mensagemErro)) { logBll.ResgistrarLog(requisicaoDto, LogRecursos.IncluirSuporte, suporteVo.Id, $"Problemas para enviar a mensagem por email: {mensagemErro}"); } if (!UtilitarioBll.EnviarEmail("*****@*****.**", "Nova mensagem de suporte", corpoEmail, ref mensagemErro)) { logBll.ResgistrarLog(requisicaoDto, LogRecursos.IncluirSuporte, suporteVo.Id, $"Problemas para enviar a mensagem por email: {mensagemErro}"); } if (!UtilitarioBll.EnviarEmail("*****@*****.**", "Nova mensagem de suporte", corpoEmail, ref mensagemErro)) { logBll.ResgistrarLog(requisicaoDto, LogRecursos.IncluirSuporte, suporteVo.Id, $"Problemas para enviar a mensagem por email: {mensagemErro}"); } } retornoDto.Retorno = true; retornoDto.Mensagem = "OK"; return(true); }
/// <summary> /// Executa o backup do sistema e retorna um arquivo .sql /// </summary> /// <param name="requisicaoDto"></param> /// <param name="retornoDto"></param> /// <returns></returns> public bool FazerBackupSistema(BaseRequisicaoDto requisicaoDto, ref RetornoObterArquivoDto retornoDto) { string mensagemErro = ""; if (!UtilitarioBll.ValidarIdentificacao(requisicaoDto.Identificacao, requisicaoDto.IdUsuario, ref mensagemErro)) { retornoDto.Retorno = false; retornoDto.Mensagem = mensagemErro; logBll.ResgistrarLog(requisicaoDto, LogRecursos.BaseIncluir, Guid.Empty, mensagemErro); return(false); } PizzaByteContexto context = new PizzaByteContexto(); try { StringBuilder deletes = new StringBuilder(string.Empty); StringBuilder inserts = new StringBuilder(string.Empty); StringBuilder insertsFk = new StringBuilder(string.Empty); ScriptingOptions scriptOptions = new ScriptingOptions(); SqlConnection conn = new SqlConnection(context.Database.Connection.ConnectionString); Server srv1 = new Server(new ServerConnection(conn)); Database db1 = srv1.Databases[context.Database.Connection.Database]; deletes.AppendLine("Use " + context.Database.Connection.Database); deletes.AppendLine("GO "); deletes.AppendLine("BEGIN TRY "); deletes.AppendLine("BEGIN TRANSACTION "); List <string> tabelasComChaveEstrangeira = new List <string>(); Scripter scr = new Scripter(srv1); foreach (Table table in db1.Tables) { for (int i = 0; i < table.ForeignKeys.Count; i++) { if (!tabelasComChaveEstrangeira.Contains(table.ForeignKeys[i].ReferencedTable)) { if (table.ForeignKeys[i].ReferencedTable == "Pedidos") { tabelasComChaveEstrangeira.Insert(0, table.ForeignKeys[i].ReferencedTable); } else { tabelasComChaveEstrangeira.Add(table.ForeignKeys[i].ReferencedTable); } } } } // Tabelas que não fazer a fk de outras tabelas foreach (Table table in db1.Tables) { if (table.Name != "__MigrationHistory" && !tabelasComChaveEstrangeira.Contains(table.Name)) { ScriptingOptions options = new ScriptingOptions(); options.DriAll = false; options.ScriptSchema = false; options.ScriptData = true; scr.Options = options; deletes.AppendLine("DELETE FROM [PizzaByte].[" + table.Name + "]"); // Add script to file content foreach (string scriptLine in scr.EnumScript(new Urn[] { table.Urn })) { string line = scriptLine; line = line.Replace("SET ANSI_NULLS ON", string.Empty); line = line.Replace("SET QUOTED_IDENTIFIER ON", string.Empty); line = line.Replace("SET ANSI_NULLS OFF", string.Empty); line = line.Replace("SET QUOTED_IDENTIFIER OFF", string.Empty); inserts.AppendLine(line.Trim()); } } } deletes.AppendLine("DELETE FROM [PizzaByte].[Pedidos]"); // Depois as tabelas que são fk foreach (Table table in db1.Tables) { if (table.Name != "__MigrationHistory" && tabelasComChaveEstrangeira.Contains(table.Name)) { ScriptingOptions options = new ScriptingOptions(); options.DriAll = false; options.ScriptSchema = false; options.ScriptData = true; scr.Options = options; if (table.Name != "Pedidos") { deletes.AppendLine("DELETE FROM [PizzaByte].[" + table.Name + "]"); } // Add script to file content foreach (string scriptLine in scr.EnumScript(new Urn[] { table.Urn })) { string line = scriptLine; line = line.Replace("SET ANSI_NULLS ON", string.Empty); line = line.Replace("SET QUOTED_IDENTIFIER ON", string.Empty); line = line.Replace("SET ANSI_NULLS OFF", string.Empty); line = line.Replace("SET QUOTED_IDENTIFIER OFF", string.Empty); insertsFk.AppendLine(line.Trim()); } } } deletes.Append(insertsFk.ToString()); deletes.Append(inserts.ToString()); deletes.AppendLine("COMMIT TRAN "); deletes.AppendLine("END TRY "); deletes.AppendLine("BEGIN CATCH "); deletes.AppendLine("ROLLBACK TRAN "); deletes.AppendLine("END CATCH "); string backupCriptografado = ""; if (!UtilitarioBll.CriptografarString(deletes.ToString(), ref backupCriptografado)) { retornoDto.Retorno = false; retornoDto.Mensagem = "Erro ao criptografar o backup"; logBll.ResgistrarLog(requisicaoDto, LogRecursos.Backup, Guid.Empty, retornoDto.Mensagem); return(false); } byte[] bytes = Encoding.UTF8.GetBytes(backupCriptografado); string base64 = Convert.ToBase64String(bytes); retornoDto.ArquivoBase64 = base64; return(true); } catch (Exception ex) { retornoDto.Retorno = false; retornoDto.Mensagem = "Erro ao executar o backup: " + ex.Message; logBll.ResgistrarLog(requisicaoDto, LogRecursos.Backup, Guid.Empty, retornoDto.Mensagem); return(false); } }
/// <summary> /// Obtém uma lista de logs com filtros aplicados, podendo ser paginada /// </summary> /// <param name="requisicaoDto"></param> /// <param name="retornoDto"></param> /// <returns></returns> public override bool ObterListaFiltrada(RequisicaoObterListaDto requisicaoDto, ref RetornoObterListaDto <LogDto> retornoDto) { if (!base.ObterListaFiltrada(requisicaoDto, ref retornoDto)) { return(false); } string mensagemErro = ""; IQueryable <LogVo> query; // Obter a query primária if (!this.ObterQueryBd(out query, ref mensagemErro, true)) { retornoDto.Mensagem = $"Houve um problema ao listar os logs: {mensagemErro}"; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaLog, Guid.Empty, retornoDto.Mensagem); return(false); } // Aplicar os filtros foreach (var filtro in requisicaoDto.ListaFiltros) { switch (filtro.Key) { case "DATAINCLUSAOINICIAL": DateTime filtroDataInicial; if (!DateTime.TryParse(filtro.Value, out filtroDataInicial)) { retornoDto.Mensagem = $"Falha ao converter o filtro de data."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaLog, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => DbFunctions.TruncateTime(p.DataInclusao) >= filtroDataInicial); break; case "DATAINCLUSAOFINAL": DateTime filtroDataFinal; if (!DateTime.TryParse(filtro.Value, out filtroDataFinal)) { retornoDto.Mensagem = $"Falha ao converter o filtro de data."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaLog, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => DbFunctions.TruncateTime(p.DataInclusao) <= filtroDataFinal); break; case "MENSAGEM": query = query.Where(p => p.Mensagem.Contains(filtro.Value)); break; case "RECURSO": int codigoRecurso; if (!int.TryParse(filtro.Value, out codigoRecurso)) { retornoDto.Mensagem = $"Falha ao converter o filtro de 'recurso'."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaLog, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => p.Recurso == (LogRecursos)codigoRecurso); break; case "IDUSUARIO": Guid filtroId; if (!Guid.TryParse(filtro.Value, out filtroId)) { retornoDto.Mensagem = $"Falha ao converter o filtro de 'idUsuario'."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaLog, Guid.Empty, retornoDto.Mensagem); return(false); } query = query.Where(p => p.IdUsuario == filtroId); break; default: retornoDto.Mensagem = $"O filtro {filtro.Key} não está definido para esta pesquisa."; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaLog, Guid.Empty, retornoDto.Mensagem); return(false); } } requisicaoDto.CampoOrdem = string.IsNullOrWhiteSpace(requisicaoDto.CampoOrdem) ? "" : requisicaoDto.CampoOrdem.ToUpper().Trim(); switch (requisicaoDto.CampoOrdem) { case "DATAINCLUSAO": query = query.OrderBy(p => p.DataInclusao).ThenBy(p => p.Recurso).ThenBy(p => p.IdUsuario); break; case "RECURSO": query = query.OrderBy(p => p.Recurso).ThenBy(p => p.DataInclusao).ThenBy(p => p.IdUsuario); break; case "IDUSUARIO": query = query.OrderByDescending(p => p.IdUsuario).ThenBy(p => p.DataInclusao).ThenBy(p => p.Recurso); break; default: query = query.OrderBy(p => p.DataInclusao).ThenBy(p => p.Recurso).ThenBy(p => p.IdUsuario); break; } double totalItens = query.Count(); if (totalItens == 0) { retornoDto.NumeroPaginas = 0; retornoDto.Mensagem = "Nenhum resultado encontrado."; retornoDto.Retorno = true; return(true); } double paginas = totalItens <= requisicaoDto.NumeroItensPorPagina ? 1 : totalItens / requisicaoDto.NumeroItensPorPagina; retornoDto.NumeroPaginas = (int)Math.Ceiling(paginas); int pular = (requisicaoDto.Pagina - 1) * requisicaoDto.NumeroItensPorPagina; query = query.Skip(pular).Take(requisicaoDto.NumeroItensPorPagina); List <LogVo> listaVo = query.ToList(); foreach (var log in listaVo) { LogDto logDto = new LogDto(); if (!ConverterVoParaDto(log, ref logDto, ref mensagemErro)) { retornoDto.Mensagem = "Erro ao converter para DTO: " + mensagemErro; retornoDto.Retorno = false; logBll.ResgistrarLog(requisicaoDto, LogRecursos.ObterListaLog, log.Id, retornoDto.Mensagem); return(false); } retornoDto.ListaEntidades.Add(logDto); } retornoDto.Mensagem = "Ok"; retornoDto.Retorno = true; return(true); }
/// <summary> /// Inclui uma entidade no banco de dados /// </summary> /// <param name="BaseRequisicaoDto"></param> /// <param name="retornoDto"></param> public virtual bool Incluir(RequisicaoEntidadeDto <Y> requisicaoDto, ref RetornoDto retornoDto) { string mensagemErro = ""; if (!UtilitarioBll.ValidarIdentificacao(requisicaoDto.Identificacao, requisicaoDto.IdUsuario, ref mensagemErro)) { retornoDto.Retorno = false; retornoDto.Mensagem = mensagemErro; logBll.ResgistrarLog(requisicaoDto, LogRecursos.BaseIncluir, Guid.Empty, mensagemErro); return(false); } if (requisicaoDto.EntidadeDto == null) { retornoDto.Retorno = false; retornoDto.Mensagem = "Não é possível incluir uma entidade nula."; logBll.ResgistrarLog(requisicaoDto, LogRecursos.BaseIncluir, Guid.Empty, retornoDto.Mensagem); return(false); } if (!requisicaoDto.EntidadeDto.ValidarEntidade(ref mensagemErro)) { retornoDto.Retorno = false; retornoDto.Mensagem = mensagemErro; logBll.ResgistrarLog(requisicaoDto, LogRecursos.BaseIncluir, Guid.Empty, mensagemErro); return(false); } return(true); }