/// <summary> /// Análise do extrato 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 do Projeto.</returns> public ExtratoProjetoDto GerarExtratoProjeto(List <RubricaMesDto> rubricaMeses, DateTime inicioPlanejado, DateTime terminoPlanejado) { ExtratoProjetoDto extratoProjetoDto = new ExtratoProjetoDto { Total = new OrcamentoDespesas(), Anos = new Dictionary <string, List <Object> >() }; foreach (int anoPlanejado in ListarAnosPlanejados(inicioPlanejado, terminoPlanejado)) { GerarCalendarioExtratoProjetoVazio(extratoProjetoDto, anoPlanejado); foreach (CsMesDomain mes in ListarMeses()) { IEnumerable <RubricaMesDto> mesComRubricas = FiltrarMesComRubricas(rubricaMeses, anoPlanejado, (int)mes); if (!VerificarExistenciaCustos(rubricaMeses, anoPlanejado, (int)mes)) { continue; } PreencherExtratoProjeto(extratoProjetoDto, mesComRubricas, mes, anoPlanejado); } } return(extratoProjetoDto); }
/// <summary> /// Preenche as propriedades do objeto Detalhamento /// </summary> /// <param name="extratoProjetoDto">Objeto extratoProjetoDto</param> /// <param name="mesComRubricas">Objetos RubricaMesDto</param> /// <param name="mes">mês de que se fala</param> /// <param name="anoPlanejado">ano de que se fala</param> private void PreencherExtratoProjeto(ExtratoProjetoDto extratoProjetoDto, IEnumerable <RubricaMesDto> mesComRubricas, CsMesDomain mes, int anoPlanejado) { Decimal orcamentoDesenvolvimento = CalcularOrcamentoDesenvolvimento(mesComRubricas); Custo despesasDesenvolvimento = CalcularDespesasDesenvolvimento(mesComRubricas); Decimal orcamentoAdministrativo = CalcularOrcamentoAdministrativo(mesComRubricas); Custo despesasAdministrativas = CalcularDespesasAdministrativas(mesComRubricas); Custo resultadoMensal = (orcamentoAdministrativo + orcamentoDesenvolvimento) - despesasAdministrativas - despesasDesenvolvimento; extratoProjetoDto.Total.Acumulado += resultadoMensal; String anoPlanejadoString = Convert.ToString(anoPlanejado); int mesJavascript = SelecionarMesJavascript(mes); extratoProjetoDto.Anos[anoPlanejadoString][mesJavascript] = new OrcamentoDespesas { OrcamentoAprovadoAdministracao = orcamentoAdministrativo, OrcamentoAprovadoDesenvolvimento = orcamentoDesenvolvimento, DespesasAdministrativas = despesasAdministrativas, DespesasDesenvolvimento = despesasDesenvolvimento, ResultadoMensal = resultadoMensal, Acumulado = extratoProjetoDto.Total.Acumulado }; extratoProjetoDto.Total.OrcamentoAprovadoAdministracao += orcamentoAdministrativo; extratoProjetoDto.Total.OrcamentoAprovadoDesenvolvimento += orcamentoDesenvolvimento; extratoProjetoDto.Total.DespesasAdministrativas += despesasAdministrativas; extratoProjetoDto.Total.DespesasDesenvolvimento += despesasDesenvolvimento; extratoProjetoDto.Total.ResultadoMensal = extratoProjetoDto.Total.Acumulado; }
/// <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="extratoProjetoDto">Objeto ExtratoProjetoDto</param> /// <param name="anoPlanejado">Ano de interesse</param> private void GerarCalendarioExtratoProjetoVazio(ExtratoProjetoDto extratoProjetoDto, int anoPlanejado) { string anoPlanejadoString = Convert.ToString(anoPlanejado); if (!extratoProjetoDto.Anos.ContainsKey(anoPlanejadoString)) { extratoProjetoDto.Anos[anoPlanejadoString] = new List <Object>(); } foreach (int mes in Enum.GetValues(typeof(CsMesDomain))) { extratoProjetoDto.Anos[anoPlanejadoString].Add(new Object()); } }