public async Task <IActionResult> GenerateWorkSchedule(WorkScheduleNewDTO newWS)
        {
            // if(await _userRepo.GetUser(id) == null)
            //     return Content("Brak usera o podanym id");

            if (newWS.Day.Count != 7)
            {
                return(Content("Wymagane jest podanie całego tygodnia"));
            }

            if (newWS.NumberOfWeeks < 1)
            {
                return(Content("Podaj liczbę tygodni"));
            }

            var users = await _userRepo.GetUsers();

            // var userVacation = await _userRepo.GetVacations(id);
            // var vacDayList = _repo.VacationDaysToList(userVacation);
            var wsRsult = await _wsRepo.GenerateWS(users, newWS);

            var wsToReturn = _mapper.Map <IEnumerable <WorkScheduleReturn> >(wsRsult);

            return(Ok(wsToReturn));
        }
        public async Task <Workschedule> GenerateUserWS(int userId, WorkScheduleNewDTO newWS, List <Day> vacList)
        {
            var user = await _context.User
                       .FirstOrDefaultAsync(u => u.IdUser == userId);

            var wsList     = new List <Workschedule>();
            var wsFromRepo = await GetUserWS(userId);

            for (int i = 0; i < newWS.NumberOfWeeks; i++)
            {
                var ws      = new Workschedule();
                var dayList = new List <Day>();

                foreach (var day in newWS.Day)
                {
                    Day newDay;
                    var fromTime = day.FromTime.AddDays(i * 7);
                    var toTime   = day.ToTime.AddDays(i * 7);

                    var vacDay     = vacList.FirstOrDefault(d => d.FromTime.DayOfYear == fromTime.DayOfYear);
                    var currentDay = wsFromRepo.Day.FirstOrDefault(d => d.FromTime.DayOfYear == fromTime.DayOfYear);
                    if (vacDay != null)
                    {
                        newDay = vacDay;
                        if (newDay.Type == "Zastepstwo")
                        {
                            newDay.FromTime = fromTime;
                            newDay.ToTime   = toTime;
                        }

                        if (currentDay != null)
                        {
                            _context.Remove(currentDay);
                        }

                        dayList.Add(newDay);
                        await _context.Day.AddAsync(newDay);
                    }
                    else if (currentDay == null)
                    {
                        newDay = new Day
                        {
                            FromTime       = fromTime,
                            ToTime         = toTime,
                            IdWsNavigation = ws,
                            Type           = "Praca"
                        };

                        dayList.Add(newDay);
                        await _context.Day.AddAsync(newDay);
                    }
                    else if (currentDay.Type == "Praca")
                    {
                        newDay = new Day
                        {
                            FromTime       = fromTime,
                            ToTime         = toTime,
                            IdWsNavigation = ws,
                            Type           = "Praca"
                        };

                        _context.Remove(currentDay);
                        dayList.Add(newDay);
                        await _context.Day.AddAsync(newDay);
                    }
                }
                ws.IdUserNavigation = user;
                ws.Day = dayList;

                wsList.Add(ws);
                await _context.Workschedule.AddAsync(ws);
            }
            await _context.SaveChangesAsync();

            var wsToReturn = await GetUserWS(userId);

            return(wsToReturn);
        }
        public async Task <Workschedule> GenerateWS(IEnumerable <User> users, WorkScheduleNewDTO newWS)
        {
            foreach (var user in users)
            {
                var wsFromRepo = await GetUserWS(user.IdUser);

                var wsList = new List <Workschedule>();

                var userVac = await _context.Vacation
                              .Where(u => u.IdUserVac == user.IdUser)
                              .Include(a => a.IdAbsenceVacNavigation)
                              .Include(u => u.IdUserVacNavigation)
                              .ToListAsync();

                var vacList = VacationDaysToList(userVac);
                for (int i = 0; i < newWS.NumberOfWeeks; i++)
                {
                    var ws      = new Workschedule();
                    var dayList = new List <Day>();

                    foreach (var day in newWS.Day)
                    {
                        Day newDay;
                        var fromTime = day.FromTime.AddDays(i * 7);
                        var toTime   = day.ToTime.AddDays(i * 7);

                        var vacDay     = vacList.FirstOrDefault(d => d.FromTime.DayOfYear == fromTime.DayOfYear);
                        var currentDay = wsFromRepo.Day.FirstOrDefault(d => d.FromTime.DayOfYear == fromTime.DayOfYear);
                        if (vacDay != null)
                        {
                            newDay = vacDay;
                            if (newDay.Type == "Zastepstwo")
                            {
                                newDay.FromTime = fromTime;
                                newDay.ToTime   = toTime;
                            }

                            if (currentDay != null)
                            {
                                _context.Remove(currentDay);
                            }

                            dayList.Add(newDay);
                            await _context.Day.AddAsync(newDay);
                        }
                        else if (currentDay == null)
                        {
                            newDay = new Day
                            {
                                FromTime       = fromTime,
                                ToTime         = toTime,
                                IdWsNavigation = ws,
                                Type           = "Praca"
                            };

                            dayList.Add(newDay);
                            await _context.Day.AddAsync(newDay);
                        }
                        else if (currentDay.Type == "Praca")
                        {
                            newDay = new Day
                            {
                                FromTime       = fromTime,
                                ToTime         = toTime,
                                IdWsNavigation = ws,
                                Type           = "Praca"
                            };

                            _context.Remove(currentDay);
                            dayList.Add(newDay);
                            await _context.Day.AddAsync(newDay);
                        }
                    }
                    ws.IdUserNavigation = user;
                    ws.Day = dayList;

                    wsList.Add(ws);
                    await _context.Workschedule.AddAsync(ws);

                    await _context.SaveChangesAsync();
                }
            }
            return(null);
        }