/// <summary> /// Apaga a categoria de conta. /// </summary> /// <param name="categoriaConta"></param> /// <returns></returns> public Colosoft.Business.DeleteResult ApagarCategoriaConta(Entidades.CategoriaConta categoriaConta) { categoriaConta.Require("categoriaConta").NotNull(); // Verifica se esta categoria está sendo usada em algum grupo de conta if (SourceContext.Instance.CreateQuery() .From <Data.Model.GrupoConta>() .Where("IdCategoriaConta=?id") .Add("?id", categoriaConta.IdCategoriaConta) .ExistsResult()) { return(new Colosoft.Business.DeleteResult(false, "Esta categoria não pode ser excluída por haver grupos de conta relacionadas à mesma.".GetFormatter())); } using (var session = SourceContext.Instance.CreateSession()) { var resultado = categoriaConta.Delete(session); if (!resultado) { return(resultado); } return(session.Execute(false).ToDeleteResult()); } }
/// <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()); } }