public ControlePontoFerias Salvar(int funcionarioId, ControlePontoFeriasDiaViewModel dto, List <ControlePontoFeriasDiaViewModel> listaControlePontoFeriasDia) { var controleRhDia = listaControlePontoFeriasDia.FirstOrDefault(x => x.Data.Date == dto.Data.Date); controleRhDia.Data = dto.Data; controleRhDia.Falta = dto.Falta; controleRhDia.FaltaJustificada = dto.FaltaJustificada; controleRhDia.Atraso = dto.Atraso; controleRhDia.Atestado = dto.Atestado; controleRhDia.AtrasoJustificado = dto.AtrasoJustificado; controleRhDia.Suspensao = dto.Suspensao; controleRhDia.Observacao = dto.Observacao; controleRhDia.HorarioEntrada = dto.HorarioEntrada; controleRhDia.HorarioSaidaAlmoco = dto.HorarioSaidaAlmoco; controleRhDia.HorarioRetornoAlmoco = dto.HorarioRetornoAlmoco; controleRhDia.HorarioSaida = dto.HorarioSaida; controleRhDia.CalcularHorasDiaTime(); controleRhDia.CalcularHorasDia(); controleRhDia.CalcularHoraExtra(); controleRhDia.CalcularHoraAtraso(); controleRhDia.CalcularAdicionalNoturno(); var controlePontoFerias = _controlePontoFeriasServico.PrimeiroPor(x => x.Funcionario.Id == funcionarioId); if (controlePontoFerias == null) { controlePontoFerias = new ControlePontoFerias(); controlePontoFerias.Funcionario = _funcionarioServico.BuscarPorId(funcionarioId); } if (controlePontoFerias.ControlePontoFeriasDias == null) { controlePontoFerias.ControlePontoFeriasDias = new List <ControlePontoFeriasDia>(); } var dias = Mapper.Map <IList <ControlePontoFeriasDia> >(listaControlePontoFeriasDia); foreach (var dia in dias) { var diaParaRemover = controlePontoFerias.ControlePontoFeriasDias.FirstOrDefault(x => x.Id != 0 && x.Id == dia.Id); if (diaParaRemover != null) { controlePontoFerias.ControlePontoFeriasDias.Remove(diaParaRemover); } controlePontoFerias.ControlePontoFeriasDias.Add(dia); } _controlePontoFeriasServico.Salvar(controlePontoFerias); return(_controlePontoFeriasServico.BuscarPorId(controlePontoFerias.Id)); }
public List <ControlePontoFeriasDiaViewModel> RetornarControlePontoFeriasDias(ControlePontoFeriasViewModel controlePontoFeriasViewModel, int?ano = null, int?mes = null) { var controleFerias = _controleFeriasServico.BuscarPor(x => x.Funcionario.Id == controlePontoFeriasViewModel.Funcionario.Id)?.ToList(); var dataAtual = DateTime.Now; var diaInicial = 20; if (ano.HasValue && mes.HasValue) { dataAtual = new DateTime(ano.Value, mes.Value, 20); } else if (ano.HasValue) { dataAtual = new DateTime(ano.Value, dataAtual.Month, 20); } else if (mes.HasValue) { dataAtual = new DateTime(dataAtual.Year, mes.Value, 20); } if (dataAtual.Day < diaInicial) { dataAtual = dataAtual.AddMonths(-1); } var diasDiferenca = diaInicial - dataAtual.Day; dataAtual = dataAtual.AddDays(diasDiferenca); var controlePontoFeriasDias = new List <ControlePontoFeriasDiaViewModel>(); if (controlePontoFeriasViewModel.ControlePontoFeriasDias != null && controlePontoFeriasViewModel.ControlePontoFeriasDias.Any()) { var dias = controlePontoFeriasViewModel.ControlePontoFeriasDias.Where(x => x.Data.Date >= dataAtual.Date && x.Data.Date <= dataAtual.AddMonths(1).Date).ToList(); foreach (var dia in dias) { dia.EhFeriado = _calendarioRHServico.PrimeiroPor(x => (!x.DataFixa && x.Data.Date == dia.Data.Date) || (x.DataFixa && x.Data.Day == dia.Data.Day && x.Data.Month == dia.Data.Month)) != null; } controlePontoFeriasDias.AddRange(dias); } var listaControleFerias = _controleFeriasServico.BuscarPor(x => x.Funcionario.Id == controlePontoFeriasViewModel.Funcionario.Id && x.AutorizadoTrabalhar && x.ListaPeriodoPermitido.Any( p => p.DataDe.Date >= dataAtual.Date && p.DataAte.Date <= dataAtual.AddMonths(1).Date || p.DataDe.Date >= dataAtual.Date && p.DataAte.Date <= dataAtual.AddMonths(1).Date )); foreach (var item in listaControleFerias) { foreach (var periodo in item.ListaPeriodoPermitido) { int diasParaAdd = 0; var dias = new List <ControlePontoFeriasDiaViewModel>(); var novoDia = periodo.DataDe; while (novoDia.Date < periodo.DataAte) { novoDia = periodo.DataDe.AddDays(diasParaAdd); var controlePontoDia = new ControlePontoFeriasDiaViewModel { Data = novoDia }; controlePontoDia.EhFeriado = _calendarioRHServico.PrimeiroPor(x => (!x.DataFixa && x.Data.Date == controlePontoDia.Data.Date) || (x.DataFixa && x.Data.Day == controlePontoDia.Data.Day && x.Data.Month == controlePontoDia.Data.Month)) != null; dias.Add(controlePontoDia); diasParaAdd++; } dias = dias.Where(x => x.Data.Date >= dataAtual.Date && x.Data.Date <= dataAtual.AddMonths(1).Date).ToList(); dias = dias.Where(x => !controlePontoFeriasDias.Any(cp => cp.Data.Date == x.Data.Date)).ToList(); controlePontoFeriasDias.AddRange(dias); } } return(controlePontoFeriasDias.OrderBy(x => x.Data).ToList()); }