public ControlePonto Salvar(int funcionarioId, ControlePontoDiaViewModel dto, List <ControlePontoDiaViewModel> listaControlePontoDia) { var controlePonto = _controlePontoServico.PrimeiroPor(x => x.Funcionario.Id == funcionarioId); if (controlePonto == null) { controlePonto = new ControlePonto(); controlePonto.Funcionario = _funcionarioServico.BuscarPorId(funcionarioId); } if (controlePonto.ControlePontoDias == null) { controlePonto.ControlePontoDias = new List <ControlePontoDia>(); } var controleRhDia = listaControlePontoDia.FirstOrDefault(x => x.Data.Date == dto.Data.Date); controleRhDia.Data = dto.Data; controleRhDia.Folga = dto.Folga; 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(controlePonto.Funcionario.TipoEscala); controleRhDia.CalcularHoraAtraso(); controleRhDia.CalcularAdicionalNoturno(controlePonto.Funcionario.TipoEscala); var dias = Mapper.Map <IList <ControlePontoDia> >(listaControlePontoDia); foreach (var dia in dias) { var diaParaRemover = controlePonto.ControlePontoDias.FirstOrDefault(x => x.Id != 0 && x.Id == dia.Id); if (diaParaRemover != null) { controlePonto.ControlePontoDias.Remove(diaParaRemover); } controlePonto.ControlePontoDias.Add(dia); } _controlePontoServico.Salvar(controlePonto); return(_controlePontoServico.BuscarPorId(controlePonto.Id)); }
public List <ControlePontoDiaViewModel> RetornarControlePontoDias(ControlePontoViewModel controlePontoViewModel, int?ano = null, int?mes = null) { var controleFerias = _controleFeriasServico.BuscarPor(x => x.Funcionario.Id == controlePontoViewModel.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); if (controlePontoViewModel.ControlePontoDias != null && controlePontoViewModel.ControlePontoDias.Any()) { var dias = controlePontoViewModel.ControlePontoDias.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; } if (dias.Any()) { return(dias); } } var controlePontoDias = new List <ControlePontoDiaViewModel>(); while (dataAtual.Day < diaInicial || controlePontoDias.Count < 25) { var novoDia = new ControlePontoDiaViewModel { Data = dataAtual, }; novoDia.EhFeriado = _calendarioRHServico.PrimeiroPor(x => (!x.DataFixa && x.Data.Date == novoDia.Data.Date) || (x.DataFixa && x.Data.Day == novoDia.Data.Day && x.Data.Month == novoDia.Data.Month)) != null; novoDia.EhFerias = controleFerias.Any(x => novoDia.Data.Date >= x.DataInicial.Date && novoDia.Data.Date <= x.DataFinal.Date); controlePontoDias.Add(novoDia); dataAtual = dataAtual.AddDays(1); } return(controlePontoDias); }