Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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));
        }
Esempio n. 3
0
        /// <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));
        }
Esempio n. 4
0
        /// <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;
                    }
                }
            }
        }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 6
0
        /// <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);
        }