public IList<OrcamentoPessoalDTO> Obter(NovoOrcamentoPessoal orcamentoPessoal)
        {
            this.Departamento = orcamentoPessoal.Departamento;
            Orcamento = orcamentoPessoal;

            var orcamentosPessoaisDTO = new List<OrcamentoPessoalDTO>();

            var grupoDeContasDTO = new List<GrupoDeContaDTO>();

            foreach (var grupoDeConta in orcamentoPessoal.CentroDeCusto.GrupoDeContas)
            {
                var grupoDeContaDTO = ObterGrupoDeContaDTOInicializado(grupoDeConta);

                foreach (var conta in grupoDeConta.Contas)
                    AdicionarDespesas(grupoDeContaDTO, conta, orcamentoPessoal.CentroDeCusto);

                CalcularTotalizadorGrupoDeConta(grupoDeContaDTO);

                grupoDeContasDTO.Add(grupoDeContaDTO);
            }

            var orcamentoPessoalDTO = new OrcamentoPessoalDTO();

            CalcularTotalizadorDoOrcamento(orcamentoPessoalDTO, grupoDeContasDTO);

            orcamentosPessoaisDTO.Add(orcamentoPessoalDTO);

            return orcamentosPessoaisDTO;
        }
        private void CalcularTotalizadorDoOrcamento(OrcamentoPessoalDTO orcamentoPessoalDTO, List<GrupoDeContaDTO> grupoDeContasDTO)
        {
            orcamentoPessoalDTO.GruposDeConta = new List<GrupoDeContaDTO>();
            orcamentoPessoalDTO.GruposDeConta.AddRange(grupoDeContasDTO);
            orcamentoPessoalDTO.TotaisOrcamentoMensal = new List<TotalOrcamentoMensalDTO>();

            for (int i = 1; i < 13; i++)
            {
                int i1 = i;
                var despesas = grupoDeContasDTO.SelectMany(x => x.DespesasGrupoDeConta.Where(y => y.Mes == i));

                if (despesas.Any())
                {
                    //double valor = 0;

                    //foreach (var despesa in despesas)
                    //{
                    //    valor += despesa.Valor;
                    //}

                    var valor = despesas.Sum(a => a.Valor);

                    orcamentoPessoalDTO.TotaisOrcamentoMensal.Add(new TotalOrcamentoMensalDTO { Mes = i, Valor = valor });
                }
            }

            AdicionarZeroOsTotaisDeOrcamentoComGruposDeContasComContasSemDespesas(orcamentoPessoalDTO);

            //double valortotal = 0;
            //foreach (var totalmensal in orcamentoPessoalDTO.TotaisOrcamentoMensal)
            //{
            //    valortotal += totalmensal.Valor;
            //}

            var valortotal = orcamentoPessoalDTO.TotaisOrcamentoMensal.Sum(a => a.Valor);

            orcamentoPessoalDTO.TotalOrcamento = valortotal;
        }
        private void AdicionarZeroOsTotaisDeOrcamentoComGruposDeContasComContasSemDespesas(OrcamentoPessoalDTO orcamentoPessoalDTO)
        {
            var quantidadeDeMesesComDespesa = orcamentoPessoalDTO.TotaisOrcamentoMensal.Count;

            if (quantidadeDeMesesComDespesa < 12)
            {
                quantidadeDeMesesComDespesa++;

                for (var i = quantidadeDeMesesComDespesa; i < 13; i++)
                    orcamentoPessoalDTO.TotaisOrcamentoMensal.Add(new TotalOrcamentoMensalDTO { Mes = quantidadeDeMesesComDespesa, Valor = 0 });
            }
        }