Example #1
0
        /// <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());
            }
        }