Ejemplo n.º 1
0
        protected void odsArquivoCalcEngine_Inserted(object sender, Colosoft.WebControls.VirtualObjectDataSourceStatusEventArgs e)
        {
            if (e.Exception == null)
            {
                // Salva o arquivo que será subido.
                var fluArquivoCalcEngine = ((FileUpload)dtvArquivoCalcEngine.FindControl("fluArquivoCalcEngine"));
                // Recupera o id do último arquivo CalcEngine inserido no sistema.
                var idArquivoCalcEngine = (uint)ArquivoCalcEngineDAO.Instance.ObtemUltimoIdArquivoCalcEngine();

                try
                {
                    // Variável criada para recuperar os arquivos do .calcpackage.
                    CalcEngine.ProjectFilesPackage pacote = null;
                    // Variável criada para ler a configuração do projeto.
                    CalcEngine.Dxf.DxfProject projeto = null;
                    // Lista criada para setar as variáveis do CalcEngine.
                    var lstVariaveisCalcEngine = new List <ArquivoCalcEngineVariavel>();

                    using (System.IO.Stream pacoteStream = fluArquivoCalcEngine.FileContent)
                    {
                        // Esse método deserializa os dados do pacote que estão contidos na Stream a recupera a instância do pacote de configuração.
                        pacote = CalcEngine.ProjectFilesPackage.LoadPackage(pacoteStream);
                    }

                    // Lê a configuração do projeto.
                    projeto = CalcEngine.Dxf.DxfProject.LoadFromPackage(pacote);

                    // Seta as variáveis do CalcEngine em uma lista.
                    foreach (var variavel in projeto.Variables.Where(f => f.GetType() == typeof(CalcEngine.Variable)))
                    {
                        // Cria uma nova variável CalcEngine.
                        var variavelCalcEngine = new ArquivoCalcEngineVariavel();
                        variavelCalcEngine.VariavelCalcEngine = variavel.Name;
                        // Salva o valor padrão da variável somente se não forem medidas de altura ou largura.
                        variavelCalcEngine.ValorPadrao = (decimal)(variavel.Name.ToLower() == "altura" || variavel.Name.ToLower() == "largura" ||
                                                                   variavel.Name.ToLower() == "alturabase" || variavel.Name.ToLower() == "largurabase" ? 0 : variavel.Value);
                        if (variavel.Name.ToLower() == "altura" || variavel.Name.ToLower() == "largura" ||
                            variavel.Name.ToLower() == "alturabase" || variavel.Name.ToLower() == "largurabase")
                        {
                            variavelCalcEngine.VariavelSistema = variavelCalcEngine.VariavelCalcEngine;
                        }

                        // Seta a variável CalcEngine na lista.
                        lstVariaveisCalcEngine.Add(variavelCalcEngine);
                    }

                    // Salva as variáveis do CalcEngine.
                    foreach (var variavel in lstVariaveisCalcEngine)
                    {
                        variavel.IdArquivoCalcEngine = idArquivoCalcEngine;
                        // Insere a variável do arquivo CalcEngine e associa-a ao arquivo.
                        ArquivoCalcEngineVariavelDAO.Instance.Insert(variavel);
                    }
                }
                catch (Exception ex)
                {
                    // Caso o arquivo tenha sido salvo, então deve ser excluído.
                    if (System.IO.File.Exists(ProjetoConfig.CaminhoSalvarCalcEngine + fluArquivoCalcEngine.FileName))
                    {
                        System.IO.File.Delete(ProjetoConfig.CaminhoSalvarCalcEngine + fluArquivoCalcEngine.FileName);
                    }

                    // Deleta as variáveis associadas ao arquivo CalcEngine.
                    ArquivoCalcEngineVariavelDAO.Instance.DeletaPeloIdArquivoCalcEngine(idArquivoCalcEngine);
                    ArquivoCalcEngineDAO.Instance.DeleteByPrimaryKey(idArquivoCalcEngine);

                    // Retorna uma mensagem informando o erro ocorrido ao salvar o arquivo.
                    throw ex;
                }

                Response.Redirect("CadArquivoCalcEngine.aspx?IdArquivoCalcEngine=" + idArquivoCalcEngine);
            }
            else
            {
                // Deleta as variáveis associadas ao arquivo CalcEngine.
                ArquivoCalcEngineVariavelDAO.Instance.DeletaPeloIdArquivoCalcEngine((uint)(ArquivoCalcEngineDAO.Instance.ObtemUltimoIdArquivoCalcEngine() + 1));

                Glass.MensagemAlerta.ErrorMsg("Erro ao inserir o arquivo.", e.Exception.InnerException, this);
                e.ExceptionHandled = true;
            }
        }
Ejemplo n.º 2
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);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Atualiza o arquivo selecionado na pasta dos arquivos CalcEngine.
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        protected void odsArquivoCalcEngine_Updating(object sender, Colosoft.WebControls.VirtualObjectDataSourceMethodEventArgs e)
        {
            var arquivoCalcEngine = e.InputParameters[0] as Glass.Data.Model.ArquivoCalcEngine;

            // Salva o arquivo que será subido.
            var fluArquivoCalcEngine = ((FileUpload)dtvArquivoCalcEngine.FindControl("fluArquivoCalcEngine"));


            if (fluArquivoCalcEngine != null && !String.IsNullOrEmpty(fluArquivoCalcEngine.FileName))
            {
                // Salva o nome do arquivo CalcEngine.
                var nomeArquivo = fluArquivoCalcEngine.FileName;

                /* Chamado 62033. */
                if (arquivoCalcEngine.Nome != nomeArquivo.ToUpper().Replace(".CALCPACKAGE", string.Empty))
                {
                    throw new Exception("Não é possível atualizar inserir um arquivo com o nome diferente do arquivo atualizado.");
                }

                // Variável criada para recuperar os arquivos do .calcpackage.
                CalcEngine.ProjectFilesPackage pacote = null;
                // Variável criada para ler a configuração do projeto.
                CalcEngine.Dxf.DxfProject projeto = null;
                // Lista criada para setar as variáveis do CalcEngine.
                var lstVariaveisCalcEngine = new List <ArquivoCalcEngineVariavel>();

                // Apaga o arquivo CalcEngine antigo.
                if (System.IO.File.Exists(ProjetoConfig.CaminhoSalvarCalcEngine + arquivoCalcEngine.Nome + ".calcpackage"))
                {
                    System.IO.File.Delete(ProjetoConfig.CaminhoSalvarCalcEngine + arquivoCalcEngine.Nome + ".calcpackage");
                }

                // Salva o arquivo CalcEngine.
                using (var m = new System.IO.MemoryStream(fluArquivoCalcEngine.FileBytes))
                {
                    //if (!ArquivoMesaCorteDAO.Instance.ValidarCadastroCalcEngine(m))
                    //    throw new Exception("O arquivo inserido está com falhas de validação");

                    //m.Position = 0;

                    var buffer = new byte[1024];
                    var read   = 0;

                    using (var file = System.IO.File.Create(ProjetoConfig.CaminhoSalvarCalcEngine + fluArquivoCalcEngine.FileName))
                    {
                        while ((read = m.Read(buffer, 0, buffer.Length)) > 0)
                        {
                            file.Write(buffer, 0, read);
                        }

                        file.Flush();
                    }
                }

                using (System.IO.Stream pacoteStream = fluArquivoCalcEngine.FileContent)
                {
                    // Esse método deserializa os dados do pacote que estão contidos na Stream a recupera a instância do pacote de configuração.
                    pacote = CalcEngine.ProjectFilesPackage.LoadPackage(pacoteStream);
                }

                // Lê a configuração do projeto.
                projeto = CalcEngine.Dxf.DxfProject.LoadFromPackage(pacote);

                try
                {
                    // Seta as variáveis do CalcEngine em uma lista.
                    foreach (var variavel in projeto.Variables.Where(f => f.GetType() == typeof(CalcEngine.Variable)))
                    {
                        // Cria uma nova variável CalcEngine.
                        var variavelCalcEngine = new ArquivoCalcEngineVariavel();
                        variavelCalcEngine.VariavelCalcEngine = variavel.Name;
                        // Salva o valor padrão da variável somente se não forem medidas de altura ou largura.
                        variavelCalcEngine.ValorPadrao = (decimal)(variavel.Name.ToLower() == "altura" || variavel.Name.ToLower() == "largura" ||
                                                                   variavel.Name.ToLower() == "alturabase" || variavel.Name.ToLower() == "largurabase" ? 0 : variavel.Value);
                        if (variavel.Name.ToLower() == "altura" || variavel.Name.ToLower() == "largura" ||
                            variavel.Name.ToLower() == "alturabase" || variavel.Name.ToLower() == "largurabase")
                        {
                            variavelCalcEngine.VariavelSistema = variavelCalcEngine.VariavelCalcEngine;
                        }

                        // Seta a variável CalcEngine na lista.
                        lstVariaveisCalcEngine.Add(variavelCalcEngine);
                    }

                    ArquivoCalcEngineVariavelDAO.Instance.DeletaPeloIdArquivoCalcEngine(arquivoCalcEngine.IdArquivoCalcEngine);

                    // Salva as variáveis do CalcEngine.
                    foreach (var variavel in lstVariaveisCalcEngine)
                    {
                        variavel.IdArquivoCalcEngine = arquivoCalcEngine.IdArquivoCalcEngine;
                        // Insere a variável do arquivo CalcEngine e associa-a ao arquivo.
                        ArquivoCalcEngineVariavelDAO.Instance.Insert(variavel);
                    }
                }
                catch (Exception ex)
                {
                    // Deleta as variáveis associadas ao arquivo CalcEngine.
                    ArquivoCalcEngineVariavelDAO.Instance.DeletaPeloIdArquivoCalcEngine(arquivoCalcEngine.IdArquivoCalcEngine);

                    // Retorna uma mensagem informando o erro ocorrido ao salvar o arquivo.
                    throw ex;
                }
            }
        }