protected void grdConfigRegistroRentabilidade_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName == "Up" || e.CommandName == "Down")
            {
                var key        = (string)e.CommandArgument;
                var parts      = key.Split('x');
                var tipo       = 0;
                var idRegistro = 0;

                if (parts.Length > 1 && int.TryParse(parts[0], out tipo) && int.TryParse(parts[1], out idRegistro))
                {
                    var rentabilidadeFluxo = Microsoft.Practices.ServiceLocation.ServiceLocator
                                             .Current.GetInstance <Glass.Rentabilidade.Negocios.IRentabilidadeFluxo>();

                    var config = rentabilidadeFluxo.ObterConfigRegistroRentabilidade((byte)tipo, idRegistro);

                    if (config != null)
                    {
                        var result = new Colosoft.Business.SaveResult();

                        if ((e.CommandName == "Up" && !(result = rentabilidadeFluxo.MoverConfigRegistroRentabilidade(config, true))) ||
                            (e.CommandName == "Down" && !(result = rentabilidadeFluxo.MoverConfigRegistroRentabilidade(config, false))))
                        {
                            MensagemAlerta.ShowMsg($"Falha ao mover configuração. { result.Message }", Page);
                        }

                        grdConfigRegistroRentabilidade.DataBind();
                    }
                }
            }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Método acionado qaundo o produto for salvo.
        /// </summary>
        /// <param name="saveResult"></param>
        private void ProdutoSalvo(Colosoft.Business.SaveResult saveResult)
        {
            if (!saveResult)
            {
                throw new Colosoft.DetailsException(saveResult.Message);
            }

            // Recupera o control de upload
            var imagem = (FileUpload)dtvProduto.FindControl("filImagem");

            if (imagem.HasFile)
            {
                try
                {
                    //Verifica se o arquivo é uma imagem
                    System.Drawing.Bitmap.FromStream(imagem.PostedFile.InputStream);
                }
                catch
                {
                    throw new Exception("Tipo de arquivo invalido, não é possivel salvar imagens do tipo selecionado. Tipos Permitidos: gif, png, jpeg, jpg");
                }


                var repositorio = Microsoft.Practices.ServiceLocation.ServiceLocator
                                  .Current.GetInstance <Glass.IProdutoRepositorioImagens>();

                // Salva a imagem do produto
                repositorio.SalvarImagem(!string.IsNullOrEmpty(Request["idProd"]) ? Request["idProd"].StrParaInt() : _produto.IdProd, imagem.PostedFile.InputStream);
            }
        }
Ejemplo n.º 3
0
 /// <summary>
 /// Executa a sessão de persistencia verificando se o resultado for válido.
 /// </summary>
 /// <param name="saveResult"></param>
 /// <param name="session"></param>
 /// <returns></returns>
 public static Colosoft.Business.SaveResult Execute(this Colosoft.Business.SaveResult saveResult, Colosoft.Data.IPersistenceSession session)
 {
     saveResult.Require("saveResult").NotNull();
     session.Require("session").NotNull();
     if (!saveResult)
     {
         return(saveResult);
     }
     return(session.Execute(false).ToSaveResult());
 }
        /// <summary>
        /// Converte o resultado da operação de salvar em um resultado do DataSource.
        /// </summary>
        /// <param name="result"></param>
        /// <returns></returns>
        public static System.Web.Mvc.JsonResult ToDataSourceResult(this Colosoft.Business.SaveResult result)
        {
            var dataSourceResult = new global::Kendo.Mvc.UI.DataSourceResult();

            if (!result)
            {
                dataSourceResult.Errors = result.Message.Format();
            }
            return(new System.Web.Mvc.JsonResult {
                Data = dataSourceResult,
                JsonRequestBehavior = System.Web.Mvc.JsonRequestBehavior.DenyGet
            });
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Registra uma mensagem de erro.
        /// </summary>
        /// <param name="operacao">Descrição da operação realizada.</param>
        /// <param name="resultado">Resultado contendo a mensagem do erro.</param>
        /// <param name="page">Página.</param>
        public static void ErrorMsg(string operacao, Colosoft.Business.SaveResult resultado)
        {
            resultado.Require("resultado").NotNull();
            var page = System.Web.HttpContext.Current.Handler as System.Web.UI.Page;

            if (resultado.Message != null)
            {
                ShowMsg(string.Format("{0}\r\b{1}", operacao, resultado.Message.Format()), page);
            }
            else
            {
                ShowMsg(operacao, page);
            }
        }
Ejemplo n.º 6
0
        /// <summary>
        /// Salva o preço do beneficiamento.
        /// </summary>
        /// <param name="preco"></param>
        /// <returns></returns>
        public Colosoft.Business.SaveResult SalvarPrecoBeneficiamento(Entidades.BenefConfigPreco preco)
        {
            preco.Require("preco").NotNull();

            using (var session = SourceContext.Instance.CreateSession())
            {
                Colosoft.Business.SaveResult resultado = null;
                if (!(resultado = preco.Save(session)))
                {
                    return(resultado);
                }

                return(session.Execute(false).ToSaveResult());
            }
        }
Ejemplo n.º 7
0
        /// <summary>
        /// Processa a loja salva.
        /// </summary>
        /// <param name="saveResult"></param>
        protected string LojaSalva(Colosoft.Business.SaveResult saveResult)
        {
            if (!saveResult)
            {
                throw new Colosoft.DetailsException(saveResult.Message);
            }

            var retorno = string.Empty;

            // Recupera o control de upload
            var imagemCor    = (FileUpload)dtvLoja.FindControl("filImagemCor");
            var imagemSemCor = (FileUpload)dtvLoja.FindControl("filImagemSemCor");

            if (imagemCor != null)
            {
                if (imagemCor.HasFile && imagemCor.FileName.EndsWith(".png"))
                {
                    var repositorio = Microsoft.Practices.ServiceLocation.ServiceLocator
                                      .Current.GetInstance <Glass.Global.Negocios.Entidades.ILojaRepositorioImagens>();

                    // Salva a imagem com cor
                    repositorio.SalvarImagem(Request["IdLoja"].StrParaInt(), true, imagemCor.PostedFile.InputStream);
                }
                else if (!string.IsNullOrEmpty(imagemCor.FileName))
                {
                    retorno += string.Format("O arquivo ({0}) não pode ser inserido. Verifique a extensão da imagem e tente novamente. ", imagemCor.FileName);
                }
            }

            if (imagemSemCor != null)
            {
                if (imagemSemCor.HasFile && imagemSemCor.FileName.EndsWith(".png"))
                {
                    var repositorio = Microsoft.Practices.ServiceLocation.ServiceLocator
                                      .Current.GetInstance <Glass.Global.Negocios.Entidades.ILojaRepositorioImagens>();

                    // Salva a imagem sem cor
                    repositorio.SalvarImagem(Request["IdLoja"].StrParaInt(), false, imagemSemCor.PostedFile.InputStream);
                }
                else if (!string.IsNullOrEmpty(imagemSemCor.FileName))
                {
                    retorno += string.Format("O arquivo ({0}) não pode ser inserido. Verifique a extensão da imagem e tente novamente.", imagemSemCor.FileName);
                }
            }

            return(retorno);
        }
Ejemplo n.º 8
0
        /// <summary>
        /// Salva os preços dos beneficiamentos.
        /// </summary>
        /// <param name="precos">Preços que serão atualizados.</param>
        /// <returns></returns>
        public Colosoft.Business.SaveResult SalvarPrecosBeneficiamentos(IEnumerable <Entidades.BenefConfigPreco> precos)
        {
            precos.Require("precos").NotNull();

            using (var session = SourceContext.Instance.CreateSession())
            {
                Colosoft.Business.SaveResult resultado = null;

                foreach (var i in precos)
                {
                    if (!(resultado = i.Save(session)))
                    {
                        return(resultado);
                    }
                }

                return(session.Execute(false).ToSaveResult());
            }
        }
Ejemplo n.º 9
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);
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Mostra a mensagem de erro contida no resultado da operação.
        /// </summary>
        /// <param name="resultado"></param>
        /// <param name="control"></param>
        /// <param name="mensagemAnexo"></param>
        public static void MostrarErro(this System.Web.UI.Control control, Colosoft.Business.SaveResult resultado, string mensagemAnexo = null)
        {
            if (resultado == null)
            {
                return;
            }

            var validator = new System.Web.UI.WebControls.CustomValidator();

            validator.IsValid = false;

            if (!string.IsNullOrEmpty(mensagemAnexo))
            {
                validator.ErrorMessage = string.Format("{0} - {1}", mensagemAnexo, resultado.Message.Format());
            }
            else
            {
                validator.ErrorMessage = resultado.Message.Format();
            }

            control.Page.Validators.Add(validator);
        }
Ejemplo n.º 11
0
        /// <summary>
        /// Salva os dados do resultado.
        /// </summary>
        /// <param name="session"></param>
        /// <returns></returns>
        public Colosoft.Business.SaveResult Salvar(Colosoft.Data.IPersistenceSession session)
        {
            var resultadoFinal = new Colosoft.Business.SaveResult();

            if ((_planoContaDevolucaoPagto != null && !(resultadoFinal = _planoContaDevolucaoPagto.Save(session))) ||
                (_planoContaEntrada != null && !(resultadoFinal = _planoContaEntrada.Save(session))) ||
                (_planoContaEstorno != null && !(resultadoFinal = _planoContaEstorno.Save(session))) ||
                (_planoContaEstornoChequeDev != null && !(resultadoFinal = _planoContaEstornoChequeDev.Save(session))) ||
                (_planoContaEstornoDevolucaoPagto != null && !(resultadoFinal = _planoContaEstornoDevolucaoPagto.Save(session))) ||
                (_planoContaEstornoEntrada != null && !(resultadoFinal = _planoContaEstornoEntrada.Save(session))) ||
                (_planoContaEstornoRecPrazo != null && !(resultadoFinal = _planoContaEstornoRecPrazo.Save(session))) ||
                (_planoContaFunc != null && !(resultadoFinal = _planoContaFunc.Save(session))) ||
                (_planoContaRecChequeDev != null && !(resultadoFinal = _planoContaRecChequeDev.Save(session))) ||
                (_planoContaRecPrazo != null && !(resultadoFinal = _planoContaRecPrazo.Save(session))) ||
                (_planoContaVista != null && !(resultadoFinal = _planoContaVista.Save(session))) ||
                (_tipoCartaoCredito != null && !(resultadoFinal = _tipoCartaoCredito.Save(session))))
            {
                return(resultadoFinal);
            }

            return(new Colosoft.Business.SaveResult(true, null));
        }
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>
        /// Salva os dados da categoria de conta.
        /// </summary>
        /// <param name="categoriaConta"></param>
        /// <returns></returns>
        public Colosoft.Business.SaveResult SalvarCategoriaConta(Entidades.CategoriaConta categoriaConta)
        {
            categoriaConta.Require("categoriaConta").NotNull();

            if (categoriaConta.IdCategoriaConta > 0)
            {
                categoriaConta.DataModel.ExistsInStorage = true;
            }

            // Verifica se um novo registro
            if (!categoriaConta.ExistsInStorage)
            {
                var ultimoNumeroSequencia = SourceContext.Instance.CreateQuery()
                                            .From <Data.Model.CategoriaConta>()
                                            .Select("MAX(NumeroSequencia)")
                                            .Execute()
                                            .Select(f => f.GetInt32(0))
                                            .FirstOrDefault();

                categoriaConta.NumeroSequencia = ultimoNumeroSequencia + 1;
            }

            using (var session = SourceContext.Instance.CreateSession())
            {
                Colosoft.Business.SaveResult resultado = null;

                // Verifica se é uma atualização
                if (categoriaConta.ExistsInStorage)
                {
                    if (categoriaConta.Tipo == null)
                    {
                        return(new Colosoft.Business.SaveResult(false, "O tipo da categoria não pode ser vazio.".GetFormatter()));
                    }

                    //Inativa os Grupos Associados a categoria caso a mesma estaja sendo inativada
                    if (categoriaConta.Situacao == Situacao.Inativo)
                    {
                        var grupos = SourceContext.Instance.CreateQuery()
                                     .From <Data.Model.GrupoConta>()
                                     .Where("IdCategoriaConta = " + categoriaConta.IdCategoriaConta)
                                     .ProcessResult <Entidades.GrupoConta>();

                        foreach (var g in grupos)
                        {
                            var planos = SourceContext.Instance.CreateQuery()
                                         .From <Data.Model.PlanoContas>()
                                         .Where("IdGrupo = " + g.IdGrupo)
                                         .ProcessResult <Entidades.PlanoContas>();

                            foreach (var p in planos)
                            {
                                p.Situacao = Situacao.Inativo;

                                if (!(resultado = p.Save(session)))
                                {
                                    return(resultado);
                                }
                            }

                            g.Situacao = Situacao.Inativo;

                            if (!(resultado = g.Save(session)))
                            {
                                return(resultado);
                            }
                        }
                    }

                    // Retira planos de contas de fornecedores que não sejam da categoria de débito
                    session.Update <Data.Model.Fornecedor>(new Data.Model.Fornecedor
                    {
                        // Limpa o campo da conta do fornecedor
                        IdConta = null
                    }, Colosoft.Query.ConditionalContainer.Parse("IdConta IN (?subConsulta)")
                                                           .Add("?subConsulta",
                                                                SourceContext.Instance.CreateQuery()
                                                                .From <Data.Model.PlanoContas>("p")
                                                                .Select("p.IdConta")
                                                                .InnerJoin <Data.Model.GrupoConta>("p.IdGrupo = g.IdGrupo", "g")
                                                                .LeftJoin <Data.Model.CategoriaConta>("g.IdCategoriaConta = c.IdCategoriaConta", "c")
                                                                .Where(
                                                                    "p.Situacao = ?situacao1 OR g.Situacao = ?situacao1 OR (c.Tipo <> ?tipo1 AND c.Tipo <> ?tipo2)")
                                                                .Add("?situacao1", Glass.Situacao.Inativo)
                                                                .Add("?situacao2", Glass.Situacao.Inativo)
                                                                .Add("?tipo1", Data.Model.TipoCategoriaConta.DespesaVariavel)
                                                                .Add("?tipo2", Data.Model.TipoCategoriaConta.DespesaFixa)),
                                                           "IdConta");
                }

                resultado = categoriaConta.Save(session);

                return(!resultado ? resultado : session.Execute(false).ToSaveResult());
            }
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Salva os dados do grupo de conta.
        /// </summary>
        /// <param name="grupoConta"></param>
        /// <returns></returns>
        public Colosoft.Business.SaveResult SalvarGrupoConta(Entidades.GrupoConta grupoConta)
        {
            grupoConta.Require("grupoConta").NotNull();

            // Tratamento feito caso o identificador seja positivo e a instancia
            // esteja identifica como se não existisse no banco
            if (!grupoConta.ExistsInStorage && grupoConta.IdGrupo > 0)
            {
                grupoConta.DataModel.ExistsInStorage = true;
            }

            // Verifica se é um novo grupo
            if (!grupoConta.ExistsInStorage)
            {
                var idGrupo = SourceContext.Instance.CreateQuery()
                              .From <Data.Model.GrupoConta>()
                              .Select("MAX(IdGrupo), COUNT(*)")
                              .Execute()
                              .Select(f => f.IsDBNull(0) ? 0 : f.GetInt32(0))
                              .FirstOrDefault() + 1;

                grupoConta.IdGrupo = idGrupo;
            }

            using (var session = SourceContext.Instance.CreateSession())
            {
                Colosoft.Business.SaveResult resultado = null;

                // Verifica se está atualizando o grupo de conta
                if (grupoConta.ExistsInStorage)
                {
                    //Inativa os planos de conta ssociados ao grupo caso o mesmo estaja sendo inativado
                    if (grupoConta.Situacao == Situacao.Inativo)
                    {
                        var planos = SourceContext.Instance.CreateQuery()
                                     .From <Data.Model.PlanoContas>()
                                     .Where("IdGrupo = " + grupoConta.IdGrupo)
                                     .ProcessResult <Entidades.PlanoContas>();

                        foreach (var p in planos)
                        {
                            p.Situacao = Situacao.Inativo;

                            if (!(resultado = p.Save(session)))
                            {
                                return(resultado);
                            }
                        }
                    }

                    // Retira planos de contas de fornecedores que não sejam da categoria de débito
                    session.Update <Data.Model.Fornecedor>(
                        new Data.Model.Fornecedor
                    {
                        IdConta = null
                    }, Colosoft.Query.ConditionalContainer
                        .Parse("IdConta IN (?subConsulta)")
                        .Add("?subConsulta",
                             SourceContext.Instance.CreateQuery()
                             .From <Data.Model.PlanoContas>("p")
                             .Select("p.IdConta")
                             .InnerJoin <Data.Model.GrupoConta>("p.IdGrupo == g.IdGrupo", "g")
                             .LeftJoin <Data.Model.CategoriaConta>("g.IdCategoriaConta == c.IdCategoriaConta", "c")
                             .Where("p.Situacao = ?situacao1 OR g.Situacao = ?situacao2 OR c.Tipo NOT IN (?tipo1, ?tipo2) OR g.IdCategoriaConta IS NULL")
                             .Add("?situacao1", Situacao.Inativo)
                             .Add("?situacao2", Situacao.Inativo)
                             .Add("?tipo1", Glass.Data.Model.TipoCategoriaConta.DespesaVariavel)
                             .Add("?tipo2", Glass.Data.Model.TipoCategoriaConta.DespesaFixa)
                             ),
                        "IdConta");
                }

                resultado = grupoConta.Save(session);

                return(!resultado ? resultado : session.Execute(false).ToSaveResult());
            }
        }
Ejemplo n.º 15
0
        /// <summary>
        /// Converte o saveResult para SalvarClienteResultado
        /// </summary>
        public Glass.Negocios.Global.SalvarClienteResultado ObterSalvarClienteResultado(Colosoft.Business.SaveResult saveResult)
        {
            if (saveResult)
            {
                return(new Glass.Negocios.Global.SalvarClienteResultado(_idCliente));
            }

            return(new Glass.Negocios.Global.SalvarClienteResultado(false, saveResult.Message));
        }
Ejemplo n.º 16
0
        /// <summary>
        /// Registra a entidade para ser apagada.
        /// </summary>
        /// <param name="session">Sessão onde a operação será realizada.</param>
        public override DeleteResult Delete(Data.IPersistenceSession session)
        {
            var result = OnDeleting();

            if (!result.Success)
            {
                return(result);
            }
            if (ExistsInStorage)
            {
                var actionId      = session.Delete(DataModel, DeleteActionCallback);
                var beforeSession = session.CreateBeforeSessionForAction(actionId);
                var afterSession  = session.CreateAfterSessionForAction(actionId);
                Domain.DomainEvents.Instance.GetEvent <EntityDeletingWithPersistenceSessionEvent>().Publish(new EntityDeletingWithPersistenceSessionEventArgs(this, session, beforeSession, afterSession));
                var beforeLinksAccessors = Loader.GetLinksAccessors(EntityChildSavePriority.BeforeEntity);
                var linksAccessors       = Loader.GetLinksAccessors(EntityChildSavePriority.AfterEntity);
                foreach (var i in beforeLinksAccessors)
                {
                    var entity = i.Get(this);
                    if (entity != null)
                    {
                        SaveResult saveResult = null;
                        if (entity is ISaveOperationsContainer)
                        {
                            var container = (ISaveOperationsContainer)entity;
                            saveResult = container.ProcessUpdateOperations(beforeSession);
                            if (saveResult.Success)
                            {
                                saveResult = container.ProcessInsertOperations(beforeSession);
                            }
                        }
                        else
                        {
                            saveResult = entity.Save(beforeSession);
                        }
                        if (!saveResult.Success)
                        {
                            return(new DeleteResult(false, saveResult.Message));
                        }
                        if (entity is IEntitySavePersistenceSessionObserver)
                        {
                            ((IEntitySavePersistenceSessionObserver)entity).Register(beforeSession);
                        }
                    }
                }
                foreach (var i in Loader.GetChildrenAccessors().Reverse())
                {
                    var entityRemoved = GetSingleChildRemoved(i.Name);
                    if (entityRemoved != null)
                    {
                        var deleteResult = entityRemoved.Delete(beforeSession);
                        if (!deleteResult.Success)
                        {
                            return(deleteResult);
                        }
                    }
                    var child = i.Get(this);
                    if (child != null)
                    {
                        result = child.Delete(beforeSession);
                        if (!result.Success)
                        {
                            return(result);
                        }
                    }
                }
                var references = Loader.GetReferences().Where(f => this.IsReferenceInitialized(f.Name));
                foreach (var item in new Tuple <Data.IPersistenceSession, EntityChildSavePriority>[] {
                    new Tuple <Data.IPersistenceSession, EntityChildSavePriority>(beforeSession, EntityChildSavePriority.BeforeEntity)
                })
                {
                    foreach (var i in references.Where(f => f.SavePriority == item.Item2))
                    {
                        var entity = i.ParentValueGetter(this);
                        Colosoft.Business.SaveResult saveResult = null;
                        if (entity != null && entity.IsChanged)
                        {
                            if (entity is ISaveOperationsContainer)
                            {
                                var container = (ISaveOperationsContainer)entity;
                                saveResult = container.ProcessUpdateOperations(item.Item1);
                                if (result.Success)
                                {
                                    saveResult = container.ProcessInsertOperations(item.Item1);
                                }
                            }
                            else
                            {
                                saveResult = entity.Save(item.Item1);
                            }
                            if (!result.Success)
                            {
                                return(new DeleteResult(false, saveResult.Message));
                            }
                            if (entity is IEntitySavePersistenceSessionObserver)
                            {
                                ((IEntitySavePersistenceSessionObserver)entity).Register(afterSession);
                            }
                        }
                    }
                }
                foreach (var i in linksAccessors)
                {
                    var entity = i.Get(this);
                    if (entity != null)
                    {
                        SaveResult saveResult = null;
                        if (entity is ISaveOperationsContainer)
                        {
                            var container = (ISaveOperationsContainer)entity;
                            saveResult = container.ProcessUpdateOperations(afterSession);
                            if (result.Success)
                            {
                                saveResult = container.ProcessInsertOperations(afterSession);
                            }
                        }
                        else
                        {
                            saveResult = entity.Save(afterSession);
                        }
                        if (!saveResult.Success)
                        {
                            return(new DeleteResult(false, saveResult.Message));
                        }
                        if (entity is IEntitySavePersistenceSessionObserver)
                        {
                            ((IEntitySavePersistenceSessionObserver)entity).Register(afterSession);
                        }
                    }
                }
            }
            return(result);
        }