예제 #1
0
        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
            });
        }
        public async Task <IActionResult> InserirNovoPeriodoDeFerias(PeriodoDeFeriasModel periodoDeFeriasModel)
        {
            var periodoDeFeriasDTO = new NovoPeriodoDeFeriasRequestDto
            {
                ClienteId  = periodoDeFeriasModel.ClienteId,
                DataInicio = periodoDeFeriasModel.DataInicioNovoPeriodo,
                DataFim    = periodoDeFeriasModel.DataFimNovoPeriodo
            };

            var dataUltimoPagamento = (await _clienteServico.BuscarClientePorId(periodoDeFeriasModel.ClienteId))
                                      .UltimaAvaliacaoFisica;

            var diasDeFerias = (periodoDeFeriasModel.DataFimNovoPeriodo - periodoDeFeriasModel.DataInicioNovoPeriodo).Days;

            var resultado = await _periodoDeFeriasServico.SalvarNovoPeriodoDeFerias(periodoDeFeriasDTO, dataUltimoPagamento);

            if (resultado.Sucesso)
            {
                await _clienteServico.AtualizarDataVencimentoPagamento(periodoDeFeriasModel.ClienteId, diasDeFerias);
            }

            var informacoesPeriodoDeFerias = await _periodoDeFeriasServico.BuscarPeriodosDeFeriasDoAno(periodoDeFeriasModel.ClienteId);

            periodoDeFeriasModel.PeriodosDeFeriasAnteriores = new List <InformacoesPeriodoDeFeriasModel>();

            foreach (var periodo in informacoesPeriodoDeFerias)
            {
                periodoDeFeriasModel.PeriodosDeFeriasAnteriores.Add(new InformacoesPeriodoDeFeriasModel
                {
                    DataInicio = periodo.DataInicio,
                    DataFim    = periodo.DataFim
                });
            }

            periodoDeFeriasModel.PeriodosDeFeriasAnteriores = periodoDeFeriasModel.PeriodosDeFeriasAnteriores.OrderBy(p => p.DataInicio).ToList();

            periodoDeFeriasModel.Sucesso   = resultado.Sucesso;
            periodoDeFeriasModel.Mensagens = MontarListaMensagens(resultado.Mensagem);


            return(PartialView("_periodoDeFerias", periodoDeFeriasModel));
        }