public virtual TrainingCycle GenerateNewTrainingCycle(WorkoutRoutine parentRoutine)
        {
            NewRoutineId = parentRoutine.Id;
            var newCycleNumber = parentRoutine.TrainingCycles.Max(cycle => cycle.CycleNumber) + 1;

            return(base.GenerateNewTrainingCycle(parentRoutine.Id, newCycleNumber));
        }
        public IActionResult Create(CreateWorkoutViewModel viewModel)
        {
            if (!ModelState.IsValid)
            {
                return(this.View(viewModel));
            }

            var identityUserId = _userService.GetIdentityIdByUsername(this.User.Identity.Name);

            var mainUser = _userService.GetMainUserByIdentityId(identityUserId);

            var workout = new WorkoutRoutine
            {
                IsPublic  = viewModel.IsPublic,
                Name      = viewModel.Name,
                CreatorId = mainUser.Id,
            };

            var workoutDays = SetUpInitialWorkoutDays(workout.Id, viewModel.Days, viewModel.ExerciseName);

            workout.WorkoutDays = workoutDays;


            _repository.Add <WorkoutRoutine>(workout);

            return(Redirect("/Workout/Index"));
        }
Esempio n. 3
0
        public async Task <bool> UpdateRoutine(WorkoutRoutine routine)
        {
            var routineEntity = await _context.WorkoutRoutines
                                .Include(w => w.ExerciseRoutineEntries)
                                .Include(w => w.RoutineProgramEntries)
                                .SingleOrDefaultAsync(w => w.ID == routine.ID);

            if (routineEntity == null || routineEntity.WTUserID != routine.WTUserID)
            {
                return(false);
            }

            routine.ExerciseRoutineEntries.ToList().ForEach(item => item.WorkoutRoutineID = routineEntity.ID);
            var updateExercisesResult = await UpdateExercisesForRoutine(routineEntity, routine.ExerciseRoutineEntries.ToList());

            if (updateExercisesResult == false)
            {
                return(false);
            }

            //routine.RoutineProgramEntries.ToList().ForEach(item => item.WorkoutRoutineID = routineEntity.ID);
            //var updateProgramsResult = await UpdateProgramsForRoutine(routineEntity, routine.RoutineProgramEntries.ToList());
            //if (updateProgramsResult == false)
            //    return false;

            routineEntity.Name         = routine.Name;
            routineEntity.PlannedDates = routine.PlannedDates;
            routineEntity.Description  = routine.Description;

            await _context.SaveChangesAsync();

            return(true);
        }
Esempio n. 4
0
        public IActionResult PurchaseWorkoutRoutine(long id, [FromBody] long workoutRoutineId)
        {
            try
            {
                WorkoutRoutine workoutRoutine = workoutRoutineRepository.GetById(workoutRoutineId);
                if (workoutRoutine == null)
                {
                    return(BadRequest("Invalid workout routine Id: " + workoutRoutineId));
                }

                Athlete athlete = athleteRepository.GetById(id);
                if (athlete == null)
                {
                    return(BadRequest("Invalid athlete Id: " + id));
                }

                if (athlete.PurchasedWorkoutRoutine.Any(x => x.WorkoutRoutineId == workoutRoutine.Id && (x.ExpirationDate == null || x.ExpirationDate.Value >= DateTime.UtcNow)))
                {
                    return(BadRequest("The workout routine is already purchased: " + workoutRoutine.Name));
                }

                athleteService.PurchaseWorkoutRoutine(athlete, workoutRoutine);

                athleteRepository.SaveChanges();

                return(Ok());
            }
            catch (Exception e)
            {
                return(StatusCode(500, new { error = e.Message }));
            }
        }
Esempio n. 5
0
        public static List <WorkoutRoutine> GetWorkoutsByDayAndUser(int intDayID, int intUserID)
        {
            List <WorkoutRoutine> retval = new List <WorkoutRoutine>();

            // create and open connection
            NpgsqlConnection conn = DatabaseConnection.GetConnection();

            conn.Open();

            // define a query
            string query = "SELECT wr.\"intWorkoutRoutineID\"," +
                           " wr.\"intTotalMinutes\"," +
                           " wr.\"intTotalCalsBurned\"," +
                           " wr.\"intUserID\"" +
                           " FROM \"workoutRoutine\" wr, \"day\" d, \"dayExercise\" de" +
                           " WHERE wr.\"intUserID\" = " + intUserID +
                           " AND d.\"intDayID\" = " + intDayID +
                           " AND de.\"intDayID\" = d.\"intDayID\"" +
                           " AND wr.\"intWorkoutRoutineID\" = de.\"intWorkoutRoutineID\"";
            NpgsqlCommand cmd = new NpgsqlCommand(query, conn);

            // execute query
            NpgsqlDataReader dr = cmd.ExecuteReader();

            // read all rows and output the first column in each row
            while (dr.Read())
            {
                WorkoutRoutine workout = GetWorkoutRoutineFromDR(dr);
                retval.Add(workout);
            }

            conn.Close();

            return(retval);
        }
Esempio n. 6
0
        public ActionResult DeleteWorkout(WorkoutRoutine workout, int intDayID, int intUserID)
        {
            WorkoutHomeVM model = new WorkoutHomeVM()
            {
                LstWorkoutRoutines = WorkoutRoutineDAL.GetWorkoutsByDayAndUser(intDayID, intUserID).Where(w => w != workout)
            };

            return(View("WorkoutHome", model));
        }
Esempio n. 7
0
 protected virtual TrainingCycle GetFirstTrainingCycleFromBaseRoutine(WorkoutRoutine baseRoutine)
 {
     if (baseRoutine.TrainingCycles.IsEmptyOrNull())
     {
         throw new ApplicationException(
                   "Routine generation failed: base routine provided in NewRoutineInfo has no cycles!"
                   );
     }
     return(baseRoutine.TrainingCycles !.First());
 }
Esempio n. 8
0
        private static WorkoutRoutine GetWorkoutRoutineFromDR(NpgsqlDataReader dr)
        {
            int intWorkoutRoutineID        = Convert.ToInt32(dr["intWorkoutRoutineID"]);
            int intTotalMinutes            = Convert.ToInt32(dr["intTotalMinutes"]);
            int intTotalCalsBurned         = Convert.ToInt32(dr["intTotalCalsBurned"]);
            int intUserID                  = Convert.ToInt32(dr["intUserID"]);
            List <ExerciseType> lstRoutine = ExerciseTypeDAL.GetExercisesByWorkout(intWorkoutRoutineID).ToList();

            WorkoutRoutine workoutRoutine = WorkoutRoutine.of(intWorkoutRoutineID, intTotalMinutes, lstRoutine, intTotalCalsBurned);

            return(workoutRoutine);
        }
Esempio n. 9
0
        public WorkoutRoutine Generate(GainzDBContext dbContext)
        {
            WorkoutRoutine workoutRoutine = new WorkoutRoutine
            {
                WorkoutDays = new List <WorkoutDay>()
            };

            int       frequency = (int)this.GeneratorSettings.Frequency;
            RepScheme repScheme = this.GeneratorSettings.RepScheme;

            workoutRoutine.Frequency     = frequency;
            workoutRoutine.Volume        = this.GeneratorSettings.Volume;
            workoutRoutine.RepScheme     = repScheme;
            workoutRoutine.ExerciseTypes = this.GeneratorSettings.ExerciseTypes.Select(x => EnumLabelLookup.ExerciseTypeLabels[x]).ToList();
            workoutRoutine.Name          = NameGenerator.NameGenerator.getName();



            var splits = dbContext.Splits
                         .Include(x => x.SplitDays)
                         .ThenInclude(x => x.Day)
                         .ThenInclude(x => x.DaysMuscles)
                         .ThenInclude(x => x.Muscle)
                         .Where(x => x.Frequency == frequency).ToList();

            if (splits.Count() == 0)
            {
                throw new Exception("No workout split available with selected Frequency");
            }

            Random r = new Random();

            Split split = splits.ElementAt(r.Next(splits.Count()));

            workoutRoutine.SplitName = split.Name;

            List <SplitDay> splitDays = split.SplitDays.OrderBy(x => x.ID).ToList();


            Dictionary <string, WorkoutDay> likeDays = new Dictionary <string, WorkoutDay>();

            foreach (SplitDay splitDay in splitDays)
            {
                WorkoutDayGenerator workoutDayGenerator = new WorkoutDayGenerator(repScheme, splitDay, GeneratorSettings);
                WorkoutDay          workoutDay          = likeDays.ContainsKey(splitDay.Day.Name) ?
                                                          likeDays[splitDay.Day.Name] : workoutDayGenerator.Generate(dbContext);
                likeDays[splitDay.Day.Name] = workoutDay;
                workoutRoutine.WorkoutDays.Add(workoutDay);
            }

            return(workoutRoutine);
        }
Esempio n. 10
0
        public void DeleteWorkout()
        {
            // Act
            var controller = new WorkoutController();
            List <ExerciseType> lstExercises = new List <ExerciseType>();
            WorkoutRoutine      workout      = WorkoutRoutine.of(10, lstExercises, 100);

            // Arrange
            var result = controller.DeleteWorkout(workout, 5, 5);

            // Assert
            Assert.IsNotNull(result);
        }
Esempio n. 11
0
        public virtual WorkoutRoutine GenerateNewRoutine()
        {
            var routine = new WorkoutRoutine
            {
                Id            = NewRoutineId,
                RoutineTypeId = NewRoutineInfo.BaseRoutine.RoutineTypeId,
                Name          = NewRoutineInfo.BaseRoutine.Name,
                Description   = NewRoutineInfo.BaseRoutine.Description
            };

            routine.TrainingCycles = new List <TrainingCycle> {
                GenerateNewTrainingCycle(routine.Id)
            };
            return(routine);
        }
Esempio n. 12
0
        internal static bool AddWorkoutRoutine(int[] arrIntExerciseTypeIDs)
        {
            int intUserID = HomeController.USER_NUMBER;
            int intDayID  = HomeController.DAY_NUMBER;
            // calculate total minutes and total calories burned
            List <ExerciseType> exercises = new List <ExerciseType>();
            ExerciseType        tmpExercise;

            foreach (int id in arrIntExerciseTypeIDs)
            {
                tmpExercise = ExerciseTypeDAL.GetExerciseTypeByID(id);
                exercises.Add(tmpExercise);
            }

            int intTotalMinutes    = 0;
            int intTotalCalsBurned = 0;

            foreach (ExerciseType ex in exercises)
            {
                intTotalMinutes    += ex.intTime;
                intTotalCalsBurned += ex.intCaloriesBurned;
            }

            WorkoutRoutine workoutRoutine = WorkoutRoutine.of(intTotalMinutes, exercises, intTotalCalsBurned);

            // insert to workout table
            // get the id of new workout
            int intWorkoutRoutineID = InsertToWorkoutTable(workoutRoutine, intUserID);

            bool success = false;

            // insert each id in array to workoutExerciseType table
            foreach (ExerciseType ex in exercises)
            {
                success = InsertToWorkoutExerciseTypeTable(intWorkoutRoutineID, ex.intExerciseTypeID);
            }

            // remove time from alloted exercise minutes
            bool exMinsSuccess = RemoveTime(intTotalMinutes, intUserID, intDayID);

            // add calories to users' calories for the day
            bool calsSuccess = AddCals(workoutRoutine.intTotalCalsBurned, intUserID, intDayID);

            // insert to day/exercise table
            bool daySuccess = InsertToDayExerciseTable(intWorkoutRoutineID, intDayID);

            return(success && exMinsSuccess && calsSuccess);
        }
Esempio n. 13
0
        public void PurchaseWorkoutRoutine(Athlete athlete, WorkoutRoutine workoutRoutine)
        {
            DateTime?expirationDate = workoutRoutineService.GetExpirationDate(workoutRoutine.LicensingModel);
            decimal  price          = CalculatePrice(athlete.Status, athlete.StatusExpirationDate, workoutRoutine.LicensingModel);

            var purchasedWorkoutRoutine = new PurchasedWorkoutRoutine
            {
                WorkoutRoutineId = workoutRoutine.Id,
                AthleteId        = athlete.Id,
                ExpirationDate   = expirationDate,
                Price            = price
            };

            athlete.PurchasedWorkoutRoutine.Add(purchasedWorkoutRoutine);
            athlete.MoneySpent += price;
        }
Esempio n. 14
0
        public async Task <bool> AddRoutineForUser(int?userId, WorkoutRoutine routine)
        {
            var user = await GetUserByUserId(userId);

            if (user == null)
            {
                return(false);
            }

            routine.ID       = 0;
            routine.WTUserID = userId;
            routine.ExerciseRoutineEntries.ToList().ForEach(item => item.WorkoutRoutineID = routine.ID);
            routine.RoutineProgramEntries.ToList().ForEach(item => item.WorkoutRoutineID  = routine.ID);
            if (string.IsNullOrEmpty(routine.ImagePath))
            {
                routine.ImagePath = "Images/monkasRoutine.jpg";
            }


            //check if the posted programIDs or exerciseIDs belong to the user
            var allUserProgramsIds = await _context.WorkoutPrograms
                                     .AsNoTracking()
                                     .Where(item => item.WTUserID == userId)
                                     .Select(item => item.ID)
                                     .ToListAsync();

            var allUserExercisesIDs = await _context.Exercises
                                      .AsNoTracking()
                                      .Where(item => item.WTUserID == userId)
                                      .Select(item => item.ID)
                                      .ToListAsync();

            var programsCheck = routine.RoutineProgramEntries.All(item => allUserProgramsIds.Contains((int)item.WorkoutProgramID));
            var exerciseCheck = routine.ExerciseRoutineEntries.All(item => allUserExercisesIDs.Contains((int)item.ExerciseID));

            if (!programsCheck || !exerciseCheck)
            {
                return(false);
            }


            _context.WorkoutRoutines.Add(routine);

            await _context.SaveChangesAsync();

            return(true);
        }
Esempio n. 15
0
        private async Task <bool> SaveRoutineImage(WorkoutRoutine routineEntity)
        {
            try
            {
                // get this environment's web root path (the path
                // from which static content, like an image, is served)
                var    webRootPath    = _hostingEnvironment.WebRootPath;
                string folderName     = "Images/Routines/" + routineEntity.WTUserID.ToString();
                string fullFolderPath = $"{webRootPath}/{folderName}/";

                // create path if not exists... write bytes and auto-close stream
                FileInfo file = new FileInfo(fullFolderPath);
                file.Directory.Create();

                // create the filename
                string imageName      = routineEntity.ImagePath;
                var    imageExtension = imageName.Substring(imageName.LastIndexOf("."));

                string fileName = "routine_" + routineEntity.ID + "_" + Guid.NewGuid() + imageExtension;

                //delete previuos image
                string[] fileList = Directory.GetFiles(fullFolderPath, $"*routine_{routineEntity.ID}*");
                foreach (var fileToDelete in fileList)
                {
                    System.IO.File.Delete(fileToDelete);
                }

                // the full file path
                var filePath = Path.Combine($"{fullFolderPath}/{fileName}");

                System.IO.File.WriteAllBytes(filePath, routineEntity.ImageBytes);

                // fill out the filename
                routineEntity.ImagePath = folderName + "/" + fileName;

                await _repository.UpdateImageForRoutine(routineEntity.ID, routineEntity.ImagePath);

                return(true);
            }
            catch (Exception ex)
            {
                _logger.LogError(500, ex, ex.Message);
                return(false);
            }
        }
Esempio n. 16
0
        public ActionResult GetWorkoutRoutine(GeneratorSettings generatorSettings)
        {
            generatorSettings.Initialize();

            var generator = new RoutineGeneration.RoutineGenerator(generatorSettings);

            try
            {
                var routine = generator.Generate(_context);

                return(new JsonResult(routine));
            }
            catch (Exception ex)
            {
                WorkoutRoutine wr = new WorkoutRoutine();
                wr.failed         = true;
                wr.failureMessage = ex.Message;
                return(new JsonResult(wr));
            }
        }
Esempio n. 17
0
        public async Task Write(Workout workout)
        {
            var            history = Read(workout.RoutineId);
            WorkoutRoutine routine = null;

            if (history == null)
            {
                history = new WorkoutHistory(getKeyFromRoutine(workout.RoutineId));
            }
            else
            {
                routine = getMostRecentNotCompletedWorkout(history);
            }
            if (routine == null)
            {
                history.WorkoutRoutines.Add(new WorkoutRoutine());
            }

            routine.Workouts.Add(workout);
            history.key = getKeyFromRoutine(workout.RoutineId);
            history.WorkoutRoutinesJSON = JsonConvert.SerializeObject(history.WorkoutRoutines);
            await SaveAsync(history, _config);
        }
Esempio n. 18
0
        public async Task <bool> UpdateProgramsForRoutine(WorkoutRoutine routineEntity, List <RoutineProgramEntry> routinePrograms)
        {
            if (routineEntity == null)
            {
                return(false);
            }

            //remove programs that arent present
            var programsToBeRemoved = routineEntity.RoutineProgramEntries.Where(item => !routinePrograms.Any(rp => rp.WorkoutProgramID == item.WorkoutProgramID)).ToList();

            _context.RemoveRange(programsToBeRemoved);

            //add new programs
            var toBeAdded = routinePrograms.Where(item => !routineEntity.RoutineProgramEntries.Any(rp => rp.WorkoutProgramID == item.WorkoutProgramID)).ToList();


            var allUserProgramsIds = await _context.WorkoutPrograms
                                     .AsNoTracking()
                                     .Where(item => item.WTUserID == routineEntity.WTUserID)
                                     .Select(item => item.ID)
                                     .ToListAsync();

            //check if all programs to be added belong to this user
            var programsCheck = toBeAdded.All(item => allUserProgramsIds.Contains((int)item.WorkoutProgramID));

            if (programsCheck == false)
            {
                return(false);
            }

            toBeAdded.ForEach(item => routineEntity.RoutineProgramEntries.Add(item));

            await _context.SaveChangesAsync();

            return(true);
        }
Esempio n. 19
0
        public static int InsertToWorkoutTable(WorkoutRoutine workout, int intUserID)
        {
            NpgsqlConnection conn = DatabaseConnection.GetConnection();

            conn.Open();

            // define a query
            string query = "INSERT INTO \"workoutRoutine\"" +
                           " (\"intTotalMinutes\", \"intTotalCalsBurned\", \"intUserID\")" +
                           " VALUES" +
                           " (@intTotalMinutes, @intTotalCalsBurned, @intUserID)" +
                           " RETURNING \"intWorkoutRoutineID\"";
            NpgsqlCommand cmd = new NpgsqlCommand(query, conn);

            cmd.Parameters.AddWithValue("intTotalMinutes", workout.intTotalMinutes);
            cmd.Parameters.AddWithValue("intTotalCalsBurned", workout.intTotalCalsBurned);
            cmd.Parameters.AddWithValue("intUserID", intUserID);

            int result = (int)cmd.ExecuteScalar();

            conn.Close();

            return(result);
        }
Esempio n. 20
0
        public async Task <bool> UpdateExercisesForRoutine(WorkoutRoutine routineEntity, List <ExerciseRoutineEntry> routineExercises)
        {
            if (routineEntity == null)
            {
                return(false);
            }

            //remove exercises that arent present
            var exercisesToBeRemoved = routineEntity.ExerciseRoutineEntries.Where(item => !routineExercises.Any(re => re.ExerciseID == item.ExerciseID)).ToList();

            _context.RemoveRange(exercisesToBeRemoved);

            //add new exercises
            var toBeAdded = routineExercises.Where(item => !routineEntity.ExerciseRoutineEntries.Any(ex => ex.ExerciseID == item.ExerciseID)).ToList();


            var allUserExercisesIDs = await _context.Exercises
                                      .AsNoTracking()
                                      .Where(item => item.WTUserID == routineEntity.WTUserID)
                                      .Select(item => item.ID)
                                      .ToListAsync();

            //check if all exercises to be added belong to this user
            var exercisesCheck = toBeAdded.All(item => allUserExercisesIDs.Contains((int)item.ExerciseID));

            if (exercisesCheck == false)
            {
                return(false);
            }

            toBeAdded.ForEach(item => routineEntity.ExerciseRoutineEntries.Add(item));

            await _context.SaveChangesAsync();

            return(true);
        }
Esempio n. 21
0
        public static void Initialize(WorkoutTrackingDBContext context)
        {
            context.Database.EnsureCreated();

            if (context.Users.Any())
            {
                return;   // DB has been seeded
            }

            var users = new WTUser[]
            {
                new WTUser {
                    FirstName = "Riste", LastName = "Poposki", RegisterDate = DateTime.Parse("2017-09-01"), Email = "*****@*****.**", Password = "******", Username = "******"
                },
                new WTUser {
                    FirstName = "Monkas", LastName = "MonkaGiga", RegisterDate = DateTime.Now, Email = "*****@*****.**", Password = "******", Username = "******"
                },
            };

            context.Users.AddRange(users);
            context.SaveChanges();


            var exercises = new Exercise[]
            {
                new Exercise {
                    Name = "Riste Execise 1", WTUserID = 1, Category = Category.ARMS, Description = "Riste Execise Desc 1", IsEditable = true, ImagePath = "Images/monkas.jpg"
                },
                new Exercise {
                    Name = "Riste Execise 2", WTUserID = 1, Category = Category.CHEST, Description = "Riste Execise Desc 2", IsEditable = true, ImagePath = "Images/monkas.jpg"
                },
                new Exercise {
                    Name = "Monkas Execise 1", WTUserID = 2, Category = Category.LEGS, Description = "Monkas Execise Desc 1", IsEditable = true, ImagePath = "Images/monkas.jpg"
                },
                new Exercise {
                    Name = "Monkas Execise 2", WTUserID = 2, Category = Category.OTHER, Description = "Monkas Execise Desc 2", IsEditable = true, ImagePath = "Images/monkas.jpg"
                }
            };

            context.Exercises.AddRange(exercises);
            context.SaveChanges();


            var routines = new WorkoutRoutine[]
            {
                new WorkoutRoutine {
                    Name = "Riste Workout 1", Description = "Riste Routine Desc 1", WTUserID = 1, ImagePath = "Images/monkasRoutine.jpg"
                },
                new WorkoutRoutine {
                    Name = "Riste Workout 2", Description = "Riste Routine Desc 2", WTUserID = 1, ImagePath = "Images/monkasRoutine.jpg"
                },
                new WorkoutRoutine {
                    Name = "Monkas Workout 1", Description = "Monkas Routine Desc 1", WTUserID = 2, ImagePath = "Images/monkasRoutine.jpg"
                },
                new WorkoutRoutine {
                    Name = "Monkas Workout 1", Description = "Monkas Routine Desc 2", WTUserID = 2, ImagePath = "Images/monkasRoutine.jpg"
                }
            };

            context.WorkoutRoutines.AddRange(routines);
            context.SaveChanges();


            var programs = new WorkoutProgram[]
            {
                new WorkoutProgram {
                    Name = "Riste Program 1", Description = "Riste Program Desc 1", WTUserID = 1, ImagePath = "Images/monkasProgram.png"
                },
                new WorkoutProgram {
                    Name = "Riste Program 2", Description = "Riste Program Desc 2", WTUserID = 1, ImagePath = "Images/monkasProgram.png"
                },
                new WorkoutProgram {
                    Name = "Monkas Program 1", Description = "Monkas Program Desc 1", WTUserID = 2, ImagePath = "Images/monkasProgram.png"
                },
                new WorkoutProgram {
                    Name = "Monkas Program 1", Description = "Monkas Program Desc 2", WTUserID = 2, ImagePath = "Images/monkasProgram.png"
                },
            };

            context.WorkoutPrograms.AddRange(programs);
            context.SaveChanges();


            var sessions = new WorkoutSession[]
            {
                new WorkoutSession {
                    Date = DateTime.Now, WTUserID = 1
                },
                new WorkoutSession {
                    Date = DateTime.Now.AddDays(1), WTUserID = 1
                },
                new WorkoutSession {
                    Date = DateTime.Now, WTUserID = 2
                },
                new WorkoutSession {
                    Date = DateTime.Now.AddDays(1), WTUserID = 2
                },
            };

            context.WorkoutSessions.AddRange(sessions);
            context.SaveChanges();


            var bodyStats = new BodyStatistic[]
            {
                new BodyStatistic {
                    DateCreated = DateTime.Now, Year = DateTime.Now.Year, Month = DateTime.Now.Month, Week = DateTime.Now.GetWeekOfMonth(), WTUserID = 1
                },
                new BodyStatistic {
                    DateCreated = DateTime.Now.AddDays(7), Year = DateTime.Now.AddDays(7).Year,
                    Month       = DateTime.Now.AddDays(7).Month, Week = DateTime.Now.AddDays(7).GetWeekOfMonth(), WTUserID = 1
                },

                new BodyStatistic {
                    DateCreated = DateTime.Now, Year = DateTime.Now.Year, Month = DateTime.Now.Month, Week = DateTime.Now.GetWeekOfMonth(), WTUserID = 2
                },
                new BodyStatistic {
                    DateCreated = DateTime.Now.AddDays(7), Year = DateTime.Now.AddDays(7).Year,
                    Month       = DateTime.Now.AddDays(7).Month, Week = DateTime.Now.AddDays(7).GetWeekOfMonth(), WTUserID = 2
                },
            };

            context.BodyStatistics.AddRange(bodyStats);
            context.SaveChanges();



            var bodyAttributeTemplate = new BodyAttributeTemplate[]
            {
                new BodyAttributeTemplate {
                    AttributeName = "Template Attr 1", AttributeValue = "OK1", WTUserID = 1, IsDeletable = true
                },
                new BodyAttributeTemplate {
                    AttributeName = "Template Attr 2", AttributeValue = "OK2", WTUserID = 1, IsDeletable = true
                },
                new BodyAttributeTemplate {
                    AttributeName = "Template Attr 3", AttributeValue = "NO1", WTUserID = 2, IsDeletable = true
                },
                new BodyAttributeTemplate {
                    AttributeName = "Template Attr 4", AttributeValue = "NO2", WTUserID = 2, IsDeletable = true
                }
            };

            context.BodyAttributeTemplates.AddRange(bodyAttributeTemplate);
            context.SaveChanges();



            var exerciseAttribute1 = new ExerciseAttribute {
                AttributeName = "Sets", AttributeValue = "value1", ExerciseID = 1, IsDeletable = false
            };
            var exerciseAttribute2 = new ExerciseAttribute {
                AttributeName = "Repetitions", AttributeValue = "value2", ExerciseID = 2, IsDeletable = false
            };
            var exerciseAttribute3 = new ExerciseAttribute {
                AttributeName = "Sets", AttributeValue = "value1", ExerciseID = 3, IsDeletable = false
            };
            var exerciseAttribute4 = new ExerciseAttribute {
                AttributeName = "Repetitions", AttributeValue = "value2", ExerciseID = 4, IsDeletable = false
            };

            var exercise = context.Exercises.SingleOrDefault(e => e.ID == 1);

            exercise.Attributes = new List <ExerciseAttribute>();
            exercise.Attributes.Add(exerciseAttribute1);

            exercise            = context.Exercises.SingleOrDefault(e => e.ID == 2);
            exercise.Attributes = new List <ExerciseAttribute>();
            exercise.Attributes.Add(exerciseAttribute2);

            exercise            = context.Exercises.SingleOrDefault(e => e.ID == 3);
            exercise.Attributes = new List <ExerciseAttribute>();
            exercise.Attributes.Add(exerciseAttribute3);

            exercise            = context.Exercises.SingleOrDefault(e => e.ID == 4);
            exercise.Attributes = new List <ExerciseAttribute>();
            exercise.Attributes.Add(exerciseAttribute4);
            context.SaveChanges();



            var bodyStatAttribute1 = new BodyStatAttribute {
                AttributeName = "Riste Height", AttributeValue = "173", BodyStatisticID = 1, IsDeletable = true
            };
            var bodyStatAttribute2 = new BodyStatAttribute {
                AttributeName = "Riste Weight", AttributeValue = "71", BodyStatisticID = 2, IsDeletable = true
            };
            var bodyStatAttribute3 = new BodyStatAttribute {
                AttributeName = "Monkas Height", AttributeValue = "195", BodyStatisticID = 3, IsDeletable = true
            };
            var bodyStatAttribute4 = new BodyStatAttribute {
                AttributeName = "Monkas Weight", AttributeValue = "91", BodyStatisticID = 4, IsDeletable = true
            };

            var bodyStat = context.BodyStatistics.SingleOrDefault(e => e.ID == 1);

            bodyStat.BodyStatAttributes = new List <BodyStatAttribute>();
            bodyStat.BodyStatAttributes.Add(bodyStatAttribute1);

            bodyStat = context.BodyStatistics.SingleOrDefault(e => e.ID == 2);
            bodyStat.BodyStatAttributes = new List <BodyStatAttribute>();
            bodyStat.BodyStatAttributes.Add(bodyStatAttribute2);

            bodyStat = context.BodyStatistics.SingleOrDefault(e => e.ID == 3);
            bodyStat.BodyStatAttributes = new List <BodyStatAttribute>();
            bodyStat.BodyStatAttributes.Add(bodyStatAttribute3);

            bodyStat = context.BodyStatistics.SingleOrDefault(e => e.ID == 4);
            bodyStat.BodyStatAttributes = new List <BodyStatAttribute>();
            bodyStat.BodyStatAttributes.Add(bodyStatAttribute4);
            context.SaveChanges();



            var progressImage1 = new ProgressImage {
                DateCreated = DateTime.Now, Url = "url1", BodyStatisticID = 1
            };
            var progressImage2 = new ProgressImage {
                DateCreated = DateTime.Now.AddDays(1), Url = "url2", BodyStatisticID = 2
            };
            var progressImage3 = new ProgressImage {
                DateCreated = DateTime.Now.AddDays(2), Url = "url3", BodyStatisticID = 3
            };
            var progressImage4 = new ProgressImage {
                DateCreated = DateTime.Now.AddDays(3), Url = "url4", BodyStatisticID = 4
            };

            bodyStat = context.BodyStatistics.SingleOrDefault(e => e.ID == 1);
            bodyStat.ProgressImages = new List <ProgressImage>();
            bodyStat.ProgressImages.Add(progressImage1);

            bodyStat = context.BodyStatistics.SingleOrDefault(e => e.ID == 2);
            bodyStat.ProgressImages = new List <ProgressImage>();
            bodyStat.ProgressImages.Add(progressImage2);

            bodyStat = context.BodyStatistics.SingleOrDefault(e => e.ID == 3);
            bodyStat.ProgressImages = new List <ProgressImage>();
            bodyStat.ProgressImages.Add(progressImage3);

            bodyStat = context.BodyStatistics.SingleOrDefault(e => e.ID == 4);
            bodyStat.ProgressImages = new List <ProgressImage>();
            bodyStat.ProgressImages.Add(progressImage4);
            context.SaveChanges();



            var exerciseRoutineEntry1 = new ExerciseRoutineEntry {
                ExerciseID = 1, WorkoutRoutineID = 1
            };
            var exerciseRoutineEntry2 = new ExerciseRoutineEntry {
                ExerciseID = 2, WorkoutRoutineID = 1
            };
            var exerciseRoutineEntry3 = new ExerciseRoutineEntry {
                ExerciseID = 1, WorkoutRoutineID = 2
            };

            var routine = context.WorkoutRoutines.SingleOrDefault(u => u.ID == 1);

            routine.ExerciseRoutineEntries = new List <ExerciseRoutineEntry>();
            routine.ExerciseRoutineEntries.Add(exerciseRoutineEntry1);
            routine.ExerciseRoutineEntries.Add(exerciseRoutineEntry2);

            routine = context.WorkoutRoutines.SingleOrDefault(u => u.ID == 2);
            routine.ExerciseRoutineEntries = new List <ExerciseRoutineEntry>();
            routine.ExerciseRoutineEntries.Add(exerciseRoutineEntry3);

            var exerciseRoutineEntry4 = new ExerciseRoutineEntry {
                ExerciseID = 3, WorkoutRoutineID = 3
            };
            var exerciseRoutineEntry5 = new ExerciseRoutineEntry {
                ExerciseID = 4, WorkoutRoutineID = 3
            };
            var exerciseRoutineEntry6 = new ExerciseRoutineEntry {
                ExerciseID = 3, WorkoutRoutineID = 4
            };

            routine = context.WorkoutRoutines.SingleOrDefault(u => u.ID == 3);
            routine.ExerciseRoutineEntries = new List <ExerciseRoutineEntry>();
            routine.ExerciseRoutineEntries.Add(exerciseRoutineEntry4);
            routine.ExerciseRoutineEntries.Add(exerciseRoutineEntry5);

            routine = context.WorkoutRoutines.SingleOrDefault(u => u.ID == 4);
            routine.ExerciseRoutineEntries = new List <ExerciseRoutineEntry>();
            routine.ExerciseRoutineEntries.Add(exerciseRoutineEntry6);
            context.SaveChanges();



            var routineProgramEntry1 = new RoutineProgramEntry {
                WorkoutRoutineID = 1, WorkoutProgramID = 1, PlannedDates = "2018-05-26;2018-06-01"
            };
            var routineProgramEntry2 = new RoutineProgramEntry {
                WorkoutRoutineID = 2, WorkoutProgramID = 1, PlannedDates = "2018-05-29"
            };
            var routineProgramEntry3 = new RoutineProgramEntry {
                WorkoutRoutineID = 1, WorkoutProgramID = 2, PlannedDates = "2018-07-26;2018-07-27"
            };

            var program = context.WorkoutPrograms.SingleOrDefault(u => u.ID == 1);

            program.RoutineProgramEntries = new List <RoutineProgramEntry>();
            program.RoutineProgramEntries.Add(routineProgramEntry1);
            program.RoutineProgramEntries.Add(routineProgramEntry2);

            program = context.WorkoutPrograms.SingleOrDefault(u => u.ID == 2);
            program.RoutineProgramEntries = new List <RoutineProgramEntry>();
            program.RoutineProgramEntries.Add(routineProgramEntry3);

            var routineProgramEntry4 = new RoutineProgramEntry {
                WorkoutRoutineID = 3, WorkoutProgramID = 3, PlannedDates = "2018-01-26;2018-01-27"
            };
            var routineProgramEntry5 = new RoutineProgramEntry {
                WorkoutRoutineID = 4, WorkoutProgramID = 3, PlannedDates = "2018-02-26"
            };
            var routineProgramEntry6 = new RoutineProgramEntry {
                WorkoutRoutineID = 3, WorkoutProgramID = 4, PlannedDates = "2018-03-26;2018-03-27"
            };

            program = context.WorkoutPrograms.SingleOrDefault(u => u.ID == 3);
            program.RoutineProgramEntries = new List <RoutineProgramEntry>();
            program.RoutineProgramEntries.Add(routineProgramEntry4);
            program.RoutineProgramEntries.Add(routineProgramEntry5);

            program = context.WorkoutPrograms.SingleOrDefault(u => u.ID == 4);
            program.RoutineProgramEntries = new List <RoutineProgramEntry>();
            program.RoutineProgramEntries.Add(routineProgramEntry6);
            context.SaveChanges();



            var ConcreteExercisesList = exercises.ToList().Select(item => item.GetConcreteExerciseObject()).ToList();

            for (int i = 0; i < ConcreteExercisesList.Count(); i++)
            {
                var item = ConcreteExercisesList[i];
                item.WorkoutSessionID = i + 1;
                context.ConcreteExercises.Add(item);
            }
            context.SaveChanges();
        }