Beispiel #1
0
        /// <summary>
        /// Apaga os dados do grupo de conta.
        /// </summary>
        /// <param name="grupoConta"></param>
        /// <returns></returns>
        public Colosoft.Business.DeleteResult ApagarGrupoConta(Entidades.GrupoConta grupoConta)
        {
            grupoConta.Require("grupoConta").NotNull();

            // Verifica se esta categoria está sendo usada em algum grupo de conta
            if (SourceContext.Instance.CreateQuery()
                .From <Data.Model.PlanoContas>()
                .Where("IdGrupo=?idGrupo")
                .Add("?idGrupo", grupoConta.IdGrupo)
                .ExistsResult())
            {
                return(new Colosoft.Business.DeleteResult(false, "Este grupo não pode ser excluído por haver planos de conta relacionadas ao mesmo.".GetFormatter()));
            }

            using (var session = SourceContext.Instance.CreateSession())
            {
                var resultado = grupoConta.Delete(session);

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

                return(session.Execute(false).ToDeleteResult());
            }
        }
Beispiel #2
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());
            }
        }