Ejemplo n.º 1
0
        /// <summary>
        /// Altera a situação da Ferragem
        /// </summary>
        /// <param name="ferragem"></param>
        public Colosoft.Business.SaveResult AtivarInativarFerragem(Entidades.Ferragem ferragem)
        {
            // Altera a situação da ferragem.
            ferragem.Situacao = ferragem.Situacao == Situacao.Ativo ? Situacao.Inativo : Situacao.Ativo;

            return(SalvarFerragem(ferragem));
        }
Ejemplo n.º 2
0
        public IMessageFormattable[] ValidarAtualizacao(Entidades.Ferragem ferragem)
        {
            var mensagens = new List <string>();

            // Handler para criar a consulta padrão da existencia do registro
            var consulta = SourceContext.Instance.CreateQuery()
                           .From <Data.Model.Ferragem>()
                           .Where("Nome=?nome")
                           .Add("?nome", ferragem.Nome);

            if (ferragem.ExistsInStorage)
            {
                consulta.WhereClause
                .And("IdFerragem <> ?idFerragem")
                .Add("?idFerragem", ferragem.IdFerragem);
            }

            if (consulta.ExistsResult())
            {
                mensagens.Add("Já existe uma ferragem cadastrada com esse nome.");
            }

            if (!Data.Helper.UserInfo.GetUserInfo.IsAdminSync && (ferragem.Constantes.Where(f => f.ChangedProperties.Contains("Nome")).HasItems() ||
                                                                  ferragem.ChangedProperties.Contains("MedidasEstaticas") || ferragem.ChangedProperties.Contains("PodeEspelhar") ||
                                                                  ferragem.ChangedProperties.Contains("PodeRotacionar") || ferragem.ChangedProperties.Contains("EstiloAncoragem")))
            {
                mensagens.Add("Você não tem permissão para alterar os valores. Pode Espelhar, Pode Rotacionar, Estilo Acoragem e Nome da Constante");
            }

            return(mensagens.Select(f => f.GetFormatter()).ToArray());
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Atualia os dados da ferragem.
 /// </summary>
 /// <param name="ferragem"></param>
 /// <param name="confirm">Método acionado quando a ferragem for atualizada.</param>
 /// <param name="fail">Método acionado quando ocorrer uma falha na atualização.</param>
 public void Atualizar(Entidades.Ferragem ferragem,
                       Action <Entidades.Ferragem> confirm, Action <Entidades.Ferragem, string> fail)
 {
     _pendings.Add(new Item(
                       PartTemplateSynchronizerOperation.Update,
                       Converter(ferragem), ferragem, confirm, fail));
 }
Ejemplo n.º 4
0
        /// <summary>
        /// Converte a ferragem no modelo.
        /// </summary>
        /// <param name="ferragem"></param>
        /// <returns></returns>
        private PartTemplate Converter(Entidades.Ferragem ferragem)
        {
            var template = new PartTemplate
            {
                Uid                = ferragem.UUID,
                Name               = ferragem.Nome,
                Description        = ferragem.Nome,
                Width              = ferragem.Largura,
                Height             = ferragem.Altura,
                IsCalcEngine       = true,
                IsStaticParameters = ferragem.MedidasEstaticas,
                AnchorStyle        = GetAnchorStyle(ferragem.EstiloAncoragem),
                CanRotate          = ferragem.PodeRotacionar,
                CanMirror          = ferragem.PodeEspelhar,
            };

            template.Codes.AddRange(ferragem.Codigos.Select(f => f.Codigo));
            template.Parameters.AddRange(ferragem.Constantes
                                         .Select(f => new PartTemplateParameter
            {
                Name         = f.Nome,
                DefaultValue = f.Valor
            }));

            var arquivo = _repositorioCalcPackage.ObterCaminho(ferragem.IdFerragem);

            if (System.IO.File.Exists(arquivo))
            {
                var stream = System.IO.File.OpenRead(arquivo);
                template.Content = new StreamPartTemplateContent(stream);
            }

            return(template);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Apaga os dados da Ferragem.
        /// Os dados devem ser apagados primeiramente no CadProject, para evitar que uma ferragem exista nele e não exista no WebGlass.
        /// </summary>
        public Colosoft.Business.DeleteResult ApagarFerragem(Entidades.Ferragem ferragem)
        {
            ferragem.Require("ferragem").NotNull();

            #region Atualiza os dados da ferragem no WebGlass

            Colosoft.Business.DeleteResult resultado = null;

            using (var session = SourceContext.Instance.CreateSession())
            {
                resultado = ferragem.Delete(session);
                if (!resultado)
                {
                    return(resultado);
                }

                resultado = session.Execute().ToDeleteResult();
            }

            /* Chamado 65883. */
            if (!resultado)
            {
                return(new Colosoft.Business.DeleteResult(false, string.Format("Falha ao apagar a ferragem no WebGlass. Erro: {0}.",
                                                                               resultado.Message.ToString()).GetFormatter()));
            }

            #endregion

            #region Atualiza os dados da ferragem no CadProject

            var retornoDelecao = string.Empty;
            _cache.Apagar(ferragem);

            var repositorio = Microsoft.Practices.ServiceLocation.ServiceLocator
                              .Current.GetInstance <Entidades.IFerragemRepositorioCalcPackage>();

            var source = new PartTemplateSynchronizerSource(repositorio);
            source.Apagar(ferragem, f => { }, (f, mensagem) => { retornoDelecao = mensagem; });

            /* Chamado 65883. */
            if (!string.IsNullOrEmpty(retornoDelecao))
            {
                return(new Colosoft.Business.DeleteResult(false, string.Format("Falha ao apagar a ferragem no CadProject. Erro: {0}. IMPORTANTE: a ferragem foi apagada no WebGlass.", retornoDelecao).GetFormatter()));
            }

            var sincronizador = CriarSincronizador(source);

            // Executa a sincronização
            sincronizador.Synchronize();

            #endregion

            return(resultado);
        }
Ejemplo n.º 6
0
 /// <summary>
 /// Construtor padrão.
 /// </summary>
 /// <param name="operation"></param>
 /// <param name="partTemplate"></param>
 /// <param name="ferragem"></param>
 /// <param name="confirmer"></param>
 /// <param name="errorNotifier"></param>
 public Item(
     PartTemplateSynchronizerOperation operation, PartTemplate partTemplate,
     Entidades.Ferragem ferragem,
     Action <Entidades.Ferragem> confirmer,
     Action <Entidades.Ferragem, string> errorNotifier)
 {
     Operation     = operation;
     PartTemplate  = partTemplate;
     Ferragem      = ferragem;
     Confirmer     = confirmer;
     ErrorNotifier = errorNotifier;
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Converte a ferragem para um item do cache.
 /// </summary>
 /// <param name="ferragem"></param>
 /// <returns></returns>
 private Item Converter(Entidades.Ferragem ferragem)
 {
     return(new Item
     {
         IdFerragem = ferragem.IdFerragem,
         Nome = ferragem.Nome,
         IdFabricanteFerragem = ferragem.IdFabricanteFerragem,
         Fabricante = ferragem.Fabricante.Nome,
         Codigos = ferragem.Codigos.Select(f => f.Codigo).ToArray(),
         Constantes = ferragem.Constantes
                      .Select(f => new Constante
         {
             Nome = f.Nome,
             Valor = f.Valor
         }).ToArray()
     });
 }
Ejemplo n.º 8
0
        /// <summary>
        /// Apaga os dados da ferragem do cache.
        /// </summary>
        /// <param name="ferragem"></param>
        /// <returns>True se os dados foram removidos.</returns>
        public bool Apagar(Entidades.Ferragem ferragem)
        {
            ferragem.Require("ferragem").NotNull();

            AsseguraInicializacao();

            lock (_itens)
            {
                var index = _itens.FindIndex(f => f.IdFerragem == ferragem.IdFerragem);

                if (index >= 0)
                {
                    _itens.RemoveAt(index);
                    return(true);
                }
            }

            return(false);
        }
Ejemplo n.º 9
0
        /// <summary>
        /// Atualiza os dados da ferragem no cache.
        /// </summary>
        /// <param name="ferragem"></param>
        public void Atualizar(Entidades.Ferragem ferragem)
        {
            ferragem.Require("ferragem").NotNull();

            AsseguraInicializacao();

            lock (_itens)
            {
                var index = _itens.FindIndex(f => f.IdFerragem == ferragem.IdFerragem);

                if (index >= 0)
                {
                    _itens[index] = Converter(ferragem);
                }

                else
                {
                    _itens.Add(Converter(ferragem));
                }
            }
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Método acionado quando ocorrer uma falha na sincronização da ferragem.
 /// </summary>
 /// <param name="ferragem"></param>
 /// <param name="mensagem"></param>
 private void FalhaSicronizacaoFerragem(Entidades.Ferragem ferragem, string mensagem)
 {
 }
Ejemplo n.º 11
0
 /// <summary>
 /// Método acionado quando a ferragem foi sincronizada com o CadProjet.
 /// </summary>
 /// <param name="ferragem"></param>
 private void FerragemSincronizada(Entidades.Ferragem ferragem)
 {
 }
Ejemplo n.º 12
0
        /// <summary>
        /// Salva os dados da ferragem.
        /// Os dados devem ser atualizados primeiramente no CadProject, para evitar que uma ferragem fique correta no WebGlass e incorreta nele.
        /// </summary>
        public Colosoft.Business.SaveResult SalvarFerragem(Entidades.Ferragem ferragem)
        {
            ferragem.Require("cliente").NotNull();

            var retornoAtualizacao = string.Empty;

            // Se for inserção adiciona a situação.
            if (!ferragem.ExistsInStorage)
            {
                ferragem.Situacao = Situacao.Ativo;
            }

            if (ferragem.Situacao == Situacao.Ativo)
            {
                this._cache.Atualizar(ferragem);
            }
            else
            {
                this._cache.Apagar(ferragem);
            }

            var repositorio = Microsoft.Practices.ServiceLocation.ServiceLocator.Current.GetInstance <Entidades.IFerragemRepositorioCalcPackage>();
            var source      = new PartTemplateSynchronizerSource(repositorio);

            source.Atualizar(ferragem, this.FerragemSincronizada, (f, mensagem) => { retornoAtualizacao = mensagem; });

            var sincronizador = this.CriarSincronizador(source);

            //Executa a sincronização
            sincronizador.Synchronize();

            /* Chamado 65883. */
            if (!string.IsNullOrEmpty(retornoAtualizacao))
            {
                return(new Colosoft.Business.SaveResult(
                           false,
                           string.Format(
                               "Falha ao atualizar a ferragem no CadProject. Erro: {0}.",
                               retornoAtualizacao).GetFormatter()));
            }

            Colosoft.Business.SaveResult resultado = null;

            using (var session = SourceContext.Instance.CreateSession())
            {
                resultado = ferragem.Save(session);

                if (!resultado)
                {
                    return(resultado);
                }

                resultado = session.Execute(false).ToSaveResult();
            }

            /* Chamado 65883. */
            if (!resultado)
            {
                source.Apagar(ferragem, this.FerragemSincronizada, (f, mensagem) => { retornoAtualizacao = mensagem; });
                sincronizador.Synchronize();

                return(new Colosoft.Business.SaveResult(
                           false,
                           string.Format(
                               "Falha ao atualizar a ferragem no WebGlass. Erro: {0}.",
                               resultado.Message.ToString()).GetFormatter()));
            }

            return(resultado);
        }
Ejemplo n.º 13
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);
        }