/// <summary>
 /// speichert ein WorkoutPlanModel in der Datenbank ab. Wenn das Objekt bereits in der DB existiert, dann
 /// wird es geaendert, ansonsten neu angelegt.
 /// </summary>
 /// <param name="model">Das WorkoutPlanModel-Objekt das gespeichert werden soll</param>
 public void SaveWorkout(ml_WorkoutPlan workout)
 {
     if (workout.ID <= 0)
     {
         _repo.Insert(workout);
     }
     else
     {
         _repo.Update(workout);
     }
 }
        public ActionResult Create(FormCollection formData)
        {
            RedirectIfNotLoggedIn();

            bool isValid = true;

            // Anzahl der Trainingseinheiten validieren
            int numWorkouts = -1;
            if (!Int32.TryParse(formData["numWorkouts"], out numWorkouts) || numWorkouts < 1 || numWorkouts > 7)
            {
                ModelState.AddModelError("numWorkouts", "Die Anzahl der Trainingseinheiten ist nicht gültig.");
                isValid = false;
            }

            // Trainingsplan-Name validieren
            string workoutName = formData["workoutName"] ?? "";
            if (String.IsNullOrEmpty(workoutName))
            {
                ModelState.AddModelError("workoutName", "Bitte gib einen gültigen Namen für den Trainingsplan an.");
                isValid = false;
            }

            // einzelne Trainingseinheiten validieren
            Dictionary<int, IEnumerable<ml_WorkoutDay>> daysOfWorkout = null;
            try
            {
                daysOfWorkout = _workoutDayService.GetDaysOfWorkout(formData, numWorkouts);
                if (daysOfWorkout == null || daysOfWorkout.Count == 0)
                {
                    ModelState.AddModelError("noWorkouts", "Es wurden keine gültigen Trainingseinheiten erstellt.");
                    isValid = false;
                }
                else
                {
                    int workoutIndex = 0;
                    foreach (var singleDayOfWorkout in daysOfWorkout)
                    {
                        workoutIndex++;
                        if (singleDayOfWorkout.Value == null)
                        {
                            ModelState.AddModelError("day-" + workoutIndex, "Die Angaben für Trainingseinheit " + workoutIndex + " sind nicht vollständig.");
                            isValid = false;
                        }
                    }
                }
            }
            catch (muscle_log.framework.Exceptions.WorkoutDayException e)
            {
                ModelState.AddModelError("day-" + e.Day, e.Message);
                isValid = false;
            }

            // wenn Validierung keine Fehler gefunden hat, dann koennen jetzt der Plan und die Einheiten gespeichert werden..
            if (isValid)
            {
                MuscleLogContext ctx = new MuscleLogContext();
                // WorkoutModel erstellen
                ml_WorkoutPlan workoutModel = new ml_WorkoutPlan();
                workoutModel.PlanName = workoutName;
                workoutModel.NumWorkouts = (byte)numWorkouts;
                workoutModel.Public = (byte)(((formData["workoutPublic"] ?? "").ToString() == "on") ? 1 : 0);
                workoutModel.CRDT = DateTime.Now;
                workoutModel.LUDT = DateTime.Now;
                workoutModel.UserID = CurrentUser.ID;
                workoutModel.Deleted = 0;
                _workoutService.SaveWorkout(workoutModel);

                // WorkoutDayModels speichern
                _workoutDayService.SaveDaysOfWorkout(daysOfWorkout, workoutModel.ID);
                _unitOfWork.SaveChanges();

                var workouts = _workoutService.List(CurrentUser.ID);

                var pager = new Pager(workouts);
                pager.DisplayedPages = 5;
                pager.PageSize = 10; // TODO: retrieve from DB.
                pager.StartIndex = 0;
                ViewData["WorkoutPageSize"] = pager.PageSize;
                ViewData["WorkoutCount"] = pager.Count;
                ViewData["WorkoutPagesCount"] = pager.PageCount;
                ViewData["ActivePage"] = pager.GetActivePage();
                ViewData["FirstPage"] = pager.StartPage;
                ViewData["LastPage"] = Math.Min(pager.StartPage + pager.DisplayedPages, pager.PageCount);

                ViewData["success"] = "Der Trainingsplan wurde erstellt.";
                return View("List", workouts);
            }

            return View();
        }