/// <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()); } }
/// <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()); } }