/// <summary> /// Apaga os dados do Fabricante de Ferragem. /// </summary> /// <param name="fabricanteFerragem"></param> /// <returns></returns> public Colosoft.Business.DeleteResult ApagarFabricanteFerragem(Entidades.FabricanteFerragem fabricanteFerragem) { fabricanteFerragem.Require("fabricanteFerragem").NotNull(); var fabricanteEmUso = SourceContext.Instance.CreateQuery() .From <Glass.Data.Model.Ferragem>("f") .Where("f.IdFabricanteFerragem=?idFabricanteFerragem") .Add("?idFabricanteFerragem", fabricanteFerragem.IdFabricanteFerragem) .ExistsResult(); if (fabricanteEmUso) { return(new Colosoft.Business.DeleteResult(false, string.Format("O fabricante ferragem não pode ser excluído pois está associado à ferragens.").GetFormatter())); } Colosoft.Business.DeleteResult resultado = null; using (var session = SourceContext.Instance.CreateSession()) { resultado = fabricanteFerragem.Delete(session); if (!resultado) { return(resultado); } return(session.Execute().ToDeleteResult()); } return(resultado); }
/// <summary> /// Verifica se o fabricante está sendo utilizado no cadastro de ferragem. /// </summary> public Colosoft.Business.OperationResult ValidarExclusao(Entidades.FabricanteFerragem fabricanteFerragem) { if (SourceContext.Instance.CreateQuery() .From <Data.Model.Ferragem>("f") .Where("IdFabricanteFerragem=?idFabricanteFerragem") .Add("?idFabricanteFerragem", fabricanteFerragem.IdFabricanteFerragem) .ExistsResult()) { return(new Colosoft.Business.OperationResult(false, "Esse fabricante de ferragem está sendo utilizado no cadastro de ferragem.".GetFormatter())); } return(new Colosoft.Business.OperationResult(true, null)); }
/// <summary> /// Valida a atualização do Fabricante de Ferragem. /// </summary> public Colosoft.Business.OperationResult ValidarAtualizacao(Entidades.FabricanteFerragem fabricanteFerragem) { // Verifica se já existe fabricante com nome informado if (SourceContext.Instance.CreateQuery() .From <Data.Model.FabricanteFerragem>() .Where("Nome=?nome AND IdFabricanteFerragem <> ?id") .Add("?nome", fabricanteFerragem.Nome) .Add("?id", fabricanteFerragem.IdFabricanteFerragem) .ExistsResult()) { return(new Colosoft.Business.OperationResult(false, $"Já existe um fabricante cadastrado com o nome {fabricanteFerragem.Nome}.".GetFormatter())); } return(new Colosoft.Business.OperationResult(true, null)); }
/// <summary> /// Atualiza os dados do fabricante no cache. /// </summary> /// <param name="fabricante"></param> public void Atualizar(Entidades.FabricanteFerragem fabricante) { fabricante.Require("ferragem").NotNull(); AsseguraInicializacao(); lock (_itens) { foreach (var item in _itens) { if (item.IdFabricanteFerragem == fabricante.IdFabricanteFerragem) { item.Nome = fabricante.Nome; } } } }
/// <summary> /// Salva os dados do Fabricante de Ferragem /// </summary> public Colosoft.Business.SaveResult SalvarFabricanteFerragem(Entidades.FabricanteFerragem fabricanteFerragem) { fabricanteFerragem.Require("fabricanteFerragem").NotNull(); Colosoft.Business.SaveResult resultado = null; using (var session = SourceContext.Instance.CreateSession()) { resultado = fabricanteFerragem.Save(session); if (!resultado) { return(resultado); } resultado = session.Execute().ToSaveResult(); } _cache.Atualizar(fabricanteFerragem); return(resultado); }
/// <summary> /// Método criado para a importação da ferragem. Insere as ferragens do arquivo, no WebGlass. /// </summary> private static ResultadoImportacao SalvarItens(List <ExportarFerragem.Item> itens, bool substituirFerragemExistente) { #region Declaração de variáveis var ferragemFluxo = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance <IFerragemFluxo>(); var ferragemId = new List <Tuple <int, Entidades.Ferragem> >(); var fabricanteFerragemId = new List <Tuple <int, Entidades.FabricanteFerragem> >(); var fabricantesFerragemInseridos = new List <Entidades.FabricanteFerragem>(); var repositorioImagemFerragem = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance <Entidades.IFerragemRepositorioImagens>(); var repositorioCalcPackageFerragem = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance <Entidades.IFerragemRepositorioCalcPackage>(); var resultadoImportacao = new ResultadoImportacao(); #endregion #region Recuperação dos objetos que devem ser atualizados ao invés de serem inseridos // Caso as ferragens devam ser substituídas, busca todas as ferragens, do arquivo de exportação, que existem no sistema de importação. if (substituirFerragemExistente) { // Recupera todas as ferragens, do sistema atual, com base no nome delas e no nome do fabricante associado. ferragemId = SourceContext.Instance.CreateQuery() .Select("f.IdFerragem, f.Nome, f.IdFabricanteFerragem") .From <Ferragem>("f") .Where(string.Join(" OR ", itens?.Select(f => string.Format("f.Nome='{0}'", f.Ferragem.Nome)))) // Seleciona os IDs de ferragem do arquivo de exportação, junto com as entidades de ferragens (correspondentes) no sistema de importação. .Execute()?.Select(f => new Tuple <int, Entidades.Ferragem>((itens.FirstOrDefault(g => g.Ferragem.Nome == f.GetString(1))?.Ferragem.IdFerragem).GetValueOrDefault(), ferragemFluxo.ObterFerragem(f.GetInt32(0)))).Distinct().ToList(); } // O fabricante deve ser sempre atualizado, caso exista no sistema de importação. Independentemente da existência da ferragem. if (itens.Any(f => f.FabricanteFerragem?.IdFabricanteFerragem > 0)) { // No sistema onde o arquivo está sendo importado, recupera os fabricantes que possuem o mesmo nome dos fabricantes inseridos no arquivo de exportação. fabricanteFerragemId = SourceContext.Instance.CreateQuery() .Select("ff.IdFabricanteFerragem, ff.Nome") .From <FabricanteFerragem>("ff") .Where(string.Join(" OR ", itens?.Select(f => string.Format("ff.Nome='{0}'", f.FabricanteFerragem.Nome)))) // Seleciona os IDs de fabricante de ferragem do arquivo de exportação, junto com as entidades de fabricantes de ferragens (correspondentes) no sistema de importação. .Execute()?.Select(f => new Tuple <int, Entidades.FabricanteFerragem>((itens.FirstOrDefault(g => g.FabricanteFerragem.Nome == f.GetString(1))?.FabricanteFerragem.IdFabricanteFerragem).GetValueOrDefault(), ferragemFluxo.ObterFabricanteFerragem(f.GetInt32(0)))).Distinct().ToList(); } #endregion // Percorre cada item, do arquivo de exportação, e os insere no sistema. for (var i = 0; i < itens.Count(); i++) { try { #region Declaração de variáveis // Entidade de ferragem. Entidades.Ferragem ferragem = null; // Entidade de fabricante de ferragem. Entidades.FabricanteFerragem fabricanteFerragem = null; #endregion #region Recuperação/criação da ferragem // Verifica se a ferragem existe no sistema atual. if (ferragemId != null && ferragemId.Any(f => f.Item1 == itens[i].Ferragem.IdFerragem)) { ferragem = ferragemId.FirstOrDefault(f => f.Item1 == itens[i].Ferragem.IdFerragem).Item2; } // Cria uma nova ferragem. else { ferragem = ferragemFluxo.CriarFerragem(); } #region Propriedades ferragem // Define/atualiza os dados da ferragem, com base no arquivo de importação. ferragem.Altura = itens[i].Ferragem.Altura; ferragem.EstiloAncoragem = itens[i].Ferragem.EstiloAncoragem; ferragem.Largura = itens[i].Ferragem.Largura; ferragem.MedidasEstaticas = itens[i].Ferragem.MedidasEstaticas; ferragem.Nome = itens[i].Ferragem.Nome; ferragem.PodeEspelhar = itens[i].Ferragem.PodeEspelhar; ferragem.PodeRotacionar = itens[i].Ferragem.PodeRotacionar; ferragem.Situacao = itens[i].Ferragem.Situacao; ferragem.UUID = itens[i].Ferragem.UUID; #endregion #region Fabricante ferragem // Verifica se o fabricante existe no sistema atual. if (fabricanteFerragemId?.Any(f => f.Item1 == itens[i].FabricanteFerragem.IdFabricanteFerragem) ?? false) { // Recupera o fabricante. Os dados não devem ser atualizados. fabricanteFerragem = fabricanteFerragemId.FirstOrDefault(f => f.Item1 == itens[i].FabricanteFerragem.IdFabricanteFerragem).Item2; } else if (fabricantesFerragemInseridos.Any(f => f.Nome.ToLowerInvariant() == itens[i].FabricanteFerragem.Nome.ToLowerInvariant())) { fabricanteFerragem = fabricantesFerragemInseridos.FirstOrDefault(f => f.Nome.ToLowerInvariant() == itens[i].FabricanteFerragem.Nome.ToLowerInvariant()); } else { // Cria um novo fabricante. fabricanteFerragem = new Entidades.FabricanteFerragem(); fabricanteFerragem.Nome = itens[i].FabricanteFerragem.Nome; fabricanteFerragem.Sitio = itens[i].FabricanteFerragem.Sitio; // Insere/atualiza o fabricante. var retornoFabricanteFerragem = ferragemFluxo.SalvarFabricanteFerragem(fabricanteFerragem); // Caso ocorra algum erro na atualização do fabricante, a ferragem não deve ser inserida. if (!retornoFabricanteFerragem) { throw new Exception(retornoFabricanteFerragem.Message.ToString()); } else { fabricantesFerragemInseridos.Add(fabricanteFerragem); } } // Atualiza a referência do fabricante na ferragem. ferragem.IdFabricanteFerragem = fabricanteFerragem.IdFabricanteFerragem; #endregion #region Código ferragem // Caso a ferragem exista e esteja sendo atualizada, os códigos devem ser removidos e adicionados novamente. ferragem.Codigos.Clear(); // Seta os códigos da ferragem. for (var j = 0; j < itens[i].CodigosFerragem.Count(); j++) { var codigoFerragem = new Entidades.CodigoFerragem(); codigoFerragem.IdFerragem = ferragem.IdFerragem; codigoFerragem.Codigo = itens[i].CodigosFerragem[j].Codigo; ferragem.Codigos.Add(codigoFerragem); } #endregion #region Constante ferragem // Caso a ferragem exista e esteja sendo atualizada, as constantes devem ser removidas e adicionadas novamente. ferragem.Constantes.Clear(); // Seta as constantes da ferragem. for (var j = 0; j < itens[i].ConstantesFerragem.Count(); j++) { var constanteFerragem = new Entidades.ConstanteFerragem(); constanteFerragem.IdFerragem = ferragem.IdFerragem; constanteFerragem.Nome = itens[i].ConstantesFerragem[j].Nome; constanteFerragem.Valor = itens[i].ConstantesFerragem[j].Valor; ferragem.Constantes.Add(constanteFerragem); } #endregion #endregion #region Inserção da imagem // Verifica se a ferragem exportada possui imagem. if (itens[i].ImagemFerragem != null) { EventHandler <Colosoft.Business.EntitySavedEventArgs> ferragemSalva = null; var imagemStream = new MemoryStream(itens[i].ImagemFerragem, 0, itens[i].ImagemFerragem.Length); ferragemSalva = (sender, args) => { try { // Salva a imagem da ferragem. repositorioImagemFerragem.SalvarImagem(ferragem.IdFerragem, imagemStream); } finally { ferragem.Saved -= ferragemSalva; } }; ferragem.Saved += ferragemSalva; } #endregion #region Inserção do arquivo CalcPackage if (itens[i].ArquivoCalcPackage != null) { CalcEngine.Dxf.DxfProject projeto = null; CalcEngine.ProjectFilesPackage pacote = null; using (Stream pacoteStream = new MemoryStream(itens[i].ArquivoCalcPackage, 0, itens[i].ArquivoCalcPackage.Length)) { pacote = CalcEngine.ProjectFilesPackage.LoadPackage(pacoteStream); } try { projeto = CalcEngine.Dxf.DxfProject.LoadFromPackage(pacote); } catch (Exception ex) { throw new Exception(string.Format("Não foi possível carregar os dados do arquivo da ferragem de ID {0}.", itens[i].Ferragem.IdFerragem), ex); } EventHandler <Colosoft.Business.EntitySavedEventArgs> ferragemSalva = null; // Configura o método anonimo para ser acionado quando os dados da ferragem forem salvos ferragemSalva = (sender, args) => { try { using (var stream = new MemoryStream()) { // Cria o pacote para onde serão salvo os dados do CalcPackage var package = CalcEngine.ProjectFilesPackage.CreatePackage(stream, false); projeto.Save(package); package.Close(); stream.Position = 0; // Salva os dados no repositório das ferragens repositorioCalcPackageFerragem.SalvarCalcPackage(ferragem.IdFerragem, stream); } } finally { ferragem.Saved -= ferragemSalva; } }; ferragem.Saved += ferragemSalva; } #endregion #region Inserção da ferragem // Insere/atualiza a ferragem. var retornoSalvarFerragem = ferragemFluxo.SalvarFerragem(ferragem); if (!retornoSalvarFerragem) { throw new Exception(retornoSalvarFerragem.Message.ToString()); } #endregion // Salva, na variável de retorno, o nome da ferragem importada. resultadoImportacao.FerragensImportadas.Add(itens[i].Ferragem.Nome); } catch (Exception ex) { // Salva, na variável de retorno, o nome da ferragem não importada e a mensagem de erro. resultadoImportacao.FerragensNaoImportadas.Add(itens[i].Ferragem.Nome); resultadoImportacao.MensagensErro.Add(ex.Message); ErroDAO.Instance.InserirFromException(HttpContext.Current != null ? HttpContext.Current.Request.Url.ToString() : null, ex); } } return(resultadoImportacao); }