/// <summary> /// Busca o grupo pela descrição, se não encontrar, cria um novo com a descrição e o IdGrupo passado. /// </summary> /// <param name="idGrupo"></param> /// <param name="descricao"></param> /// <returns></returns> public Entidades.PlanoContas RecuperaOuCriaPlanoContas(int idGrupo, string descricao) { var planoConta = ObterPlanoContaPelaDescricao(descricao); if (planoConta == null || !planoConta.ExistsInStorage) { planoConta = new Entidades.PlanoContas(); planoConta.Descricao = descricao; planoConta.IdGrupo = idGrupo; planoConta.Situacao = Situacao.Ativo; } return(planoConta); }
/// <summary> /// Apaga o plano de contas. /// </summary> /// <param name="planoContas"></param> /// <returns></returns> public Colosoft.Business.DeleteResult ApagarPlanoContas(Entidades.PlanoContas planoContas) { planoContas.Require("planoContas").NotNull(); using (var session = SourceContext.Instance.CreateSession()) { var resultado = planoContas.Delete(session); if (!resultado) { return(resultado); } return(session.Execute(false).ToDeleteResult()); } }
/// <summary> /// Valida a existencia do plano de contas. /// </summary> /// <param name="planoContas"></param> /// <returns></returns> IMessageFormattable[] Entidades.IValidadorPlanoContas.ValidaExistencia(Entidades.PlanoContas planoContas) { if (PlanoContasEmUso(planoContas.IdConta, false)) { return new IMessageFormattable[] { "Este plano de conta não pode ser excluído. Existem registros relacionados ao mesmo.".GetFormatter() } } ; return(new IMessageFormattable[0]); } #endregion #endregion }
/// <summary> /// Salva os dados do plano de contas. /// </summary> /// <param name="planoContas"></param> /// <returns></returns> public Colosoft.Business.SaveResult SalvarPlanoContas(Entidades.PlanoContas planoContas) { planoContas.Require("planoContas").NotNull(); // Tratamento feito caso o identificador seja positivo e a instancia // esteja identifica como se não existisse no banco if (!planoContas.ExistsInStorage && planoContas.IdConta > 0) { planoContas.DataModel.ExistsInStorage = true; } // Verifica se é um novo plano de contas if (!planoContas.ExistsInStorage) { var idContaGrupo = SourceContext.Instance.CreateQuery() .From <Data.Model.PlanoContas>() .Select("MAX(IdContaGrupo), COUNT(*)") .Where("IdGrupo=?idGrupo") .Add("?idGrupo", planoContas.IdGrupo) .Execute() .Select(f => f.IsDBNull(0) ? 0 : f.GetInt32(0)) .FirstOrDefault() + 1; planoContas.IdContaGrupo = idContaGrupo; } //Se um plano contabil for informado verifica se ja nao a um outro vinculo if (planoContas.IdContaContabil.GetValueOrDefault(0) > 0) { var planoAntigo = ObtemPlanoContas(planoContas.IdConta); if (planoAntigo.IdContaContabil.GetValueOrDefault(0) > 0 && planoAntigo.IdContaContabil.Value != planoContas.IdContaContabil.Value) { return(new Colosoft.Business.SaveResult(false, "O plano de contas informado já esta vinculado a um plano de contas contábil".GetFormatter())); } } using (var session = SourceContext.Instance.CreateSession()) { // Verifica se está atualizando o grupo de conta if (planoContas.ExistsInStorage) { // 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"); } var resultado = planoContas.Save(session); if (!resultado) { return(resultado); } return(session.Execute(false).ToSaveResult()); } }