public async Task <ResponseDto> SalvarNovoPeriodoDeFerias(NovoPeriodoDeFeriasRequestDto novoPeriodoDeFerias, DateTime dataUltimoPagamento) { var validacao = Validacoes.ValidarObjeto(new NovoPeriodoDeFeriasRequestDtoValidador().Validate(novoPeriodoDeFerias)); if (!validacao.objetoValido) { return new ResponseDto { Sucesso = false, Mensagem = validacao.erros } } ; if (novoPeriodoDeFerias.DataFim.Date > dataUltimoPagamento.AddDays(360).Date) { return(new ResponseDto { Sucesso = false, Mensagem = PeriodoDeFeriasMensagens.PERIODO_DE_FERIAS_FORA_DO_PERIODO_CORRENTE }); } var periodoDeFerias = new PeriodoDeFerias { ClientId = novoPeriodoDeFerias.ClienteId, DataInicio = novoPeriodoDeFerias.DataInicio, DataFim = novoPeriodoDeFerias.DataFim }; var periodosDeFeriasDoAno = (await _periodoDeFeriasRepositorio.Search(p => p.ClientId == novoPeriodoDeFerias.ClienteId)) .Where(p => p.DataInicio.Ticks >= dataUltimoPagamento.Ticks); if (periodosDeFeriasDoAno.Count() == 3) { return(new ResponseDto { Sucesso = false, Mensagem = PeriodoDeFeriasMensagens.QUANDTIDADE_MAXIMA_DE_PERIODOS_DE_FERIAS }); } if (NumeroDeDiasDeFeriasAposNovoPeriodo(periodosDeFeriasDoAno, periodoDeFerias) > 30) { return(new ResponseDto { Sucesso = false, Mensagem = PeriodoDeFeriasMensagens.QUANTIDADE_MAXIMA_DE_DIAS_DE_FERIAS }); } await _periodoDeFeriasRepositorio.Add(periodoDeFerias); return(new ResponseDto { Sucesso = true, Mensagem = PeriodoDeFeriasMensagens.PERIODO_DE_FERIAS_SALVO }); }
private int NumeroDeDiasDeFeriasAposNovoPeriodo(IEnumerable <PeriodoDeFerias> feriasAnteriores, PeriodoDeFerias novoPeriodoDeFerias) { var diasDeFerias = 0; foreach (var periodo in feriasAnteriores) { diasDeFerias += (periodo.DataFim - periodo.DataInicio).Days; } diasDeFerias += (novoPeriodoDeFerias.DataFim - novoPeriodoDeFerias.DataInicio).Days; return(diasDeFerias); }