/// <summary> /// Análise do fluxo de caixa de um Projeto por ano, com previsões onde não existem valores reais. /// </summary> /// <param name="rubricaMeses">Detalhes dos meses das Rúbricas do Projeto.</param> /// <param name="inicioPlanejado">Início planejado de um projeto.</param> /// <param name="terminoPlanejado">Término planejado de um projeto.</param> /// <returns>Extrato financeiro do Projeto.</returns> public ExtratoFinanceiroDto GerarExtratoFinanceiro(List <RubricaMesDto> rubricaMeses, DateTime inicioPlanejado, DateTime terminoPlanejado) { ExtratoFinanceiroDto extratoFinanceiroDto = new ExtratoFinanceiroDto { Total = new DespesasAportes(), Anos = new Dictionary <string, List <Object> >() }; foreach (int anoPlanejado in ListarAnosPlanejados(inicioPlanejado, terminoPlanejado)) { GerarCalendarioExtratoFinanceiroVazio(extratoFinanceiroDto, anoPlanejado); foreach (CsMesDomain mes in ListarMeses()) { IEnumerable <RubricaMesDto> mesComRubricas = FiltrarMesComRubricas(rubricaMeses, anoPlanejado, (int)mes); if (!VerificarExistenciaCustos(mesComRubricas, anoPlanejado, (int)mes)) { continue; } PreencherExtratoFinanceiro(extratoFinanceiroDto, mesComRubricas, mes, anoPlanejado); } } return(extratoFinanceiroDto); }
/// <summary> /// Preenche as propriedades do objeto ExtratoFinanceiro /// </summary> /// <param name="extratoFinanceiroDto"></param> /// <param name="mesComRubricas"></param> /// <param name="mes"></param> /// <param name="anoPlanejado"></param> private void PreencherExtratoFinanceiro(ExtratoFinanceiroDto extratoFinanceiroDto, IEnumerable <RubricaMesDto> mesComRubricas, CsMesDomain mes, int anoPlanejado) { Decimal aportePlanejado = CalcularAportePlanejado(mesComRubricas); Custo aporteReal = CalcularAporteReal(mesComRubricas); Custo despesasAdministrativas = CalcularDespesasAdministrativas(mesComRubricas); Custo despesasDesenvolvimento = CalcularDespesasDesenvolvimento(mesComRubricas); Custo despesasReais = despesasAdministrativas + despesasDesenvolvimento; extratoFinanceiroDto.Total.Acumulado += aporteReal - despesasReais; String anoPlanejadoString = Convert.ToString(anoPlanejado); int mesJavascript = SelecionarMesJavascript(mes); extratoFinanceiroDto.Anos[anoPlanejadoString][mesJavascript] = new DespesasAportes { AportePlanejado = aportePlanejado, AporteRealizado = aporteReal, DespesasReaisAdministrativas = despesasAdministrativas, DespesasReaisDesenvolvimento = despesasDesenvolvimento, Acumulado = extratoFinanceiroDto.Total.Acumulado }; extratoFinanceiroDto.Total.AportePlanejado += aportePlanejado; extratoFinanceiroDto.Total.AporteRealizado += aporteReal; extratoFinanceiroDto.Total.DespesasReaisAdministrativas += despesasAdministrativas; extratoFinanceiroDto.Total.DespesasReaisDesenvolvimento += despesasDesenvolvimento; }
/// <summary> /// Gera um calendario vazio para ser utilizado no detalhamento do Extrato do Projeto /// na tela de Análise Crítica por Projeto. /// OBS: Este refactor tem como objetivo deixar o código mais legível. Ainda há a /// necessidade de discutir melhorias no modelo das entidades e retorno dos dados para WebAPI /// </summary> /// <param name="extratoFinanceiroDto">Objeto ExtratoFinanceiroDto</param> /// <param name="anoPlanejado">Ano de interesse</param> private void GerarCalendarioExtratoFinanceiroVazio(ExtratoFinanceiroDto extratoFinanceiroDto, int anoPlanejado) { string anoPlanejadoString = Convert.ToString(anoPlanejado); if (!extratoFinanceiroDto.Anos.ContainsKey(anoPlanejadoString)) { extratoFinanceiroDto.Anos[anoPlanejadoString] = new List <Object>(); } foreach (int mes in Enum.GetValues(typeof(CsMesDomain))) { extratoFinanceiroDto.Anos[anoPlanejadoString].Add(new Object()); } }