/// <summary> /// Добавление работы в БД /// </summary> /// <param name="athlete"></param> public void AddWork(Work work) { using (SQLiteCommand cmd = connection.CreateCommand()) { Dictionary<String, String> data = new Dictionary<string, string>(); data.Add("workoutId", work.workoutId.ToString()); data.Add("resultId", work.resultId.ToString()); data.Add("workTypeId", work.workTypeId.ToString()); if (work.comment != "") data.Add("comment", work.comment.ToString()); bool ok = Insert(cmd, TABLE_WORK, data); if (!ok) throw new Exception("Не удалось записать работу!"); } }
/// <summary> /// Записывает тренировку в БД /// </summary> private void SaveWorkout() { //показывались ли какие-либо сообщения во время прохождения этого метода bool notMessagesShowed = true; long newWorkoutId = -1; try { if (textBoxWorkoutTimeBegin.Text.Split(timeBeginEndSeparator).Length > 1 && textBoxWorkoutTimeEnd.Text.Split(timeBeginEndSeparator).Length > 1) { OtherMethods.Debug("userId: " + userId.ToString()); TimeSpan begin = new TimeSpan(int.Parse(textBoxWorkoutTimeBegin.Text.Split(timeBeginEndSeparator)[0]), int.Parse(textBoxWorkoutTimeBegin.Text.Split(timeBeginEndSeparator)[1]), 0); TimeSpan end = new TimeSpan(int.Parse(textBoxWorkoutTimeEnd.Text.Split(timeBeginEndSeparator)[0]), int.Parse(textBoxWorkoutTimeEnd.Text.Split(timeBeginEndSeparator)[1]), 0); OtherMethods.Debug("begin: " + begin.ToString()); OtherMethods.Debug("end: " + end.ToString()); DateTime date = horizontalCalender.selectedDate; sqlite.AddWorkout(new Workout(userId, (short)sqlite.GetIdByValue(SQLite.TABLE_WORKOUT_TYPE, comboBoxWorkoutType.Text), (short)sqlite.GetIdByValue(SQLite.TABLE_MUSCLES_GROUP, comboBoxWorkoutMusclesGroup.Text), date, begin, end, byte.Parse(textBoxWarmUpTime.Text), -1, DateTime.Now)); newWorkoutId = sqlite.GetLastWorkout(userId).id; OtherMethods.Debug("newWorkoutId: " + newWorkoutId.ToString()); string work = ""; string result = ""; string comment = ""; bool ok = false; foreach (object ob in itemsControlKardioWorks.Items) { ok = false; if (ob is Grid) { foreach (object obChild in ((Grid)ob).Children) { if (obChild is ComboBox) { if (((ComboBox)obChild).Name.IndexOf("comboBoxWorkDistance_") != -1) { ok = true; work = ((ComboBox)obChild).Text; OtherMethods.Debug("work: " + work); } } else if (obChild is TextBox) { if (((TextBox)obChild).Name.IndexOf("textBoxWorkResultTime_") != -1) { result = ((TextBox)obChild).Text; OtherMethods.Debug("result: " + result); } else if (((TextBox)obChild).Name.IndexOf("textBoxWorkComment_") != -1) { if (((TextBox)obChild).Text != DEFAULT_VALUE_TEXTBOX_COMMENT) { comment = ((TextBox)obChild).Text; OtherMethods.Debug("comment: " + comment); } } } } if (ok) { Result r = new Result(result); sqlite.AddResult(r); long lastResultId = sqlite.GetLastResultId(); OtherMethods.Debug("lastResultId: " + lastResultId.ToString()); Work w = new Work(lastResultId, newWorkoutId, sqlite.GetIdByValue(SQLite.TABLE_WORK_TYPE, work), comment); sqlite.AddWork(w); } } } string hardWork = ""; string weight = ""; string repeat = ""; string commentHardWork = ""; ok = false; foreach (object ob in itemsControlHardWorks.Items) { ok = false; if (ob is Grid) { foreach (object obChild in ((Grid)ob).Children) { if (obChild is Label) { if (((Label)obChild).Name.IndexOf("labelHardWork_") != -1) { //ok = true; //hardWork = ((Label)obChild).Content.ToString(); //OtherMethods.Debug("hard work: " + hardWork); } } else if (obChild is ComboBox) { if (((ComboBox)obChild).Name.IndexOf("comboBoxHardWorks_") != -1) { ok = true; hardWork = ((ComboBox)obChild).Text; OtherMethods.Debug("hard work: " + hardWork); } } else if (obChild is TextBox) { if (((TextBox)obChild).Name.IndexOf("textBoxWeight_") != -1) { weight = ((TextBox)obChild).Text; OtherMethods.Debug("weight: " + weight); } else if (((TextBox)obChild).Name.IndexOf("textBoxRepeat_") != -1) { repeat = ((TextBox)obChild).Text; OtherMethods.Debug("repeat: " + repeat); } else if (((TextBox)obChild).Name.IndexOf("textBoxHardWorkComment_") != -1) { if (((TextBox)obChild).Text != DEFAULT_VALUE_TEXTBOX_COMMENT) { commentHardWork = ((TextBox)obChild).Text; OtherMethods.Debug("comment: " + comment); } } } } if (ok) { //проверенный список всех весов List<string> normalizeWeights = new List<string>(); //проверенный список всех повторов List<string> normalizeRepeats = new List<string>(); string[] weights = new string[0]; string[] repeats = new string[0]; //в случае, если вес НЕ заполнен if (weight == "") { for (int i = 0; i < normalizeRepeats.Count; i++) normalizeWeights.Add("0"); } else if (weight == DEFAULT_VALUE_TEXTBOX_WEIGHT) { normalizeWeights.Add("0"); } else weights = weight.Split(weightsSeparator);//результаты всегда будут писаться только через запятую if (repeat == "") { for (int i = 0; i < normalizeWeights.Count; i++) normalizeRepeats.Add("0"); } else if (repeat == DEFAULT_VALUE_TEXTBOX_REPEAT) { } else repeats = repeat.Split(repeatsSeparator); //результаты всегда будут писаться только через запятую //начинаем проверку весов на корректность foreach (string w in weights) { if (w.IndexOfAny(equalRecordsSeparator) == -1) { normalizeWeights.Add(w); } else //если есть специальный разделитель, то { //нулевой элемент - количество повторений веса, а первый - сам вес string[] wSplited = w.Split(equalRecordsSeparator); if (wSplited.Length == 2) { int count = int.Parse(wSplited[0]); for (int i = 0; i < count; i++ ) normalizeWeights.Add(wSplited[1]); } else { Messages.Warning("Ошибка", "Неверный формат записи весов! Возможно отделение весов запятыми (Например: \"40, 50, 60\"), сокращенная запись одинаковых весов (например: \"3х40\") и комбинированная запись весов (например: \"3х40, 50, 2х60\"). Тренировка не записана!"); labelMessage.Content = "Неверный формат записи весов! Возможно отделение весов запятыми (Например: \"40, 50, 60\"), сокращенная запись одинаковых весов (например: \"3х40\") и комбинированная запись весов (например: \"3х40, 50, 2х60\"). Тренировка не записана!"; sqlite.DeleteWorkout(newWorkoutId); notMessagesShowed = false; } } } foreach (string r in repeats) { if (r.IndexOfAny(equalRecordsSeparator) == -1) { normalizeRepeats.Add(r); } else //если есть специальный разделитель, то { //нулевой элемент - количество повторений веса, а первый - сам вес string[] rSplited = r.Split(equalRecordsSeparator); if (rSplited.Length == 2) { int count = int.Parse(rSplited[0]); for (int i = 0; i < count; i++) normalizeRepeats.Add(rSplited[1]); } else { Messages.Warning("Ошибка", "Неверный формат записи повторов! Возможно отделение повторов запятыми (Например: \"10, 13, 15\"), сокращенная запись одинаковых повторов (например: \"8х10\") и комбинированная запись повторов (например: \"3х20, 30, 2х40\"). Тренировка не записана!"); labelMessage.Content = "Неверный формат записи повторов! Возможно отделение повторов запятыми (Например: \"10, 13, 15\"), сокращенная запись одинаковых повторов (например: \"8х10\") и комбинированная запись повторов (например: \"3х20, 30, 2х40\"). Тренировка не записана!"; sqlite.DeleteWorkout(newWorkoutId); notMessagesShowed = false; } } } if (normalizeWeights.Count == normalizeRepeats.Count) { for (int i = 0; i < normalizeWeights.Count; i++) { Result r = new Result(float.Parse(normalizeWeights[i], format), byte.Parse(normalizeRepeats[i])); sqlite.AddResult(r); long lastResultId = sqlite.GetLastResultId(); OtherMethods.Debug("lastResultId: " + lastResultId.ToString()); Work w = new Work(lastResultId, newWorkoutId, sqlite.GetIdByValue(SQLite.TABLE_WORK_TYPE, hardWork), commentHardWork); sqlite.AddWork(w); labelMessage.Content = ""; } } else { Messages.Warning("Ошибка", "Количество весов и соответствующих повторов в одной или нескольких силовых работах не одинаково! Тренировка не записана!"); labelMessage.Content = "Количество весов и соответствующих повторов в одной или нескольких силовых работах не одинаково! Тренировка не записана!"; sqlite.DeleteWorkout(newWorkoutId); notMessagesShowed = false; } } } } } else { MessageBox.Show("Введите корректное время тренировки!", "Ошибка", MessageBoxButton.OK, MessageBoxImage.Warning); notMessagesShowed = false; } if (notMessagesShowed) Messages.Info("Сообщение", "Тренировка сохранена успешно!"); } catch(Exception e) { ErrorsHandler.ShowError(e); sqlite.DeleteWorkout(newWorkoutId); Messages.Warning("Ошибка", "Тренировка не сохранена из-за возникшей программной ошибки! Проверьте корректность ввода полей и повторите сохранение. Если ошибка повторится, обратитесь к разработчику."); } }
/// <summary> /// Записывает план тренировки в БД /// </summary> private void SaveWorkoutForWorkoutPlan() { long newWorkoutId = -1; bool notMessagesShowed = true; try { OtherMethods.Debug("userId: " + userId.ToString()); sqlite.AddWorkout(new Workout(userId, (short)4,//да, захардкожено, но я не знаю, как сделать иначе (short)sqlite.GetIdByValue(SQLite.TABLE_MUSCLES_GROUP, comboBoxWorkoutPlanMusclesGroup.Text), DateTime.Now, new TimeSpan(), new TimeSpan(), 0, sqlite.GetWorkoutPlanId(comboBoxWorkoutPlanTitle.Text), (short)sqlite.GetIdByValue(SQLite.TABLE_WORKOUT_PLAN_TYPE, comboBoxWorkoutPlanType.Text), DateTime.Now)); newWorkoutId = sqlite.GetLastWorkout(userId).id; OtherMethods.Debug("newWorkoutId: " + newWorkoutId.ToString()); string comment = ""; bool ok = false; string hardWork = ""; string weight = ""; string repeat = ""; foreach (object ob in gridWorkoutPlanRecords.Children) { ok = false; if (ob is Grid) { foreach (object obChild in ((Grid)ob).Children) { if (obChild is ComboBox) { if (((ComboBox)obChild).Name.IndexOf("comboBoxWorkoutPlanRecordHardWorks_") != -1) { ok = true; hardWork = ((ComboBox)obChild).Text; OtherMethods.Debug("hard work: " + hardWork); } } else if (obChild is TextBox) { if (((TextBox)obChild).Name.IndexOf("textBoxWorkoutPlanRecordWeight_") != -1) { weight = ((TextBox)obChild).Text; OtherMethods.Debug("weight: " + weight); } else if (((TextBox)obChild).Name.IndexOf("textBoxWorkoutPlanRecordRepeat_") != -1) { repeat = ((TextBox)obChild).Text; OtherMethods.Debug("repeat: " + repeat); } else if (((TextBox)obChild).Name.IndexOf("textBoxWorkoutPlanRecordComment_") != -1) { if (((TextBox)obChild).Text != DEFAULT_VALUE_TEXTBOX_COMMENT) { comment = ((TextBox)obChild).Text; OtherMethods.Debug("comment: " + comment); } } } } if (ok) { //проверенный список всех весов List<string> normalizeWeights = new List<string>(); //проверенный список всех повторов List<string> normalizeRepeats = new List<string>(); string[] weights = new string[0]; string[] repeats = new string[0]; //в случае, если вес НЕ заполнен if (weight == "") { for (int i = 0; i < normalizeRepeats.Count; i++) normalizeWeights.Add("0"); } else if (weight == DEFAULT_VALUE_TEXTBOX_WEIGHT) { normalizeWeights.Add("0"); } else weights = weight.Split(weightsSeparator);//результаты всегда будут писаться только через запятую if (repeat == "") { for (int i = 0; i < normalizeWeights.Count; i++) normalizeRepeats.Add("0"); } else if (repeat == DEFAULT_VALUE_TEXTBOX_REPEAT) { } else repeats = repeat.Split(repeatsSeparator); //результаты всегда будут писаться только через запятую //начинаем проверку весов на корректность foreach (string w in weights) { if (w.IndexOfAny(equalRecordsSeparator) == -1) { normalizeWeights.Add(w); } else //если есть специальный разделитель, то { //нулевой элемент - количество повторений веса, а первый - сам вес string[] wSplited = w.Split(equalRecordsSeparator); if (wSplited.Length == 2) { int count = int.Parse(wSplited[0]); for (int i = 0; i < count; i++) normalizeWeights.Add(wSplited[1]); } else { Messages.Warning("Ошибка", "Неверный формат записи весов! Возможно отделение весов запятыми (Например: \"40, 50, 60\"), сокращенная запись одинаковых весов (например: \"3х40\") и комбинированная запись весов (например: \"3х40, 50, 2х60\"). План тренировки не сохранен!"); sqlite.DeleteWorkout(newWorkoutId); notMessagesShowed = false; } } } foreach (string r in repeats) { if (r.IndexOfAny(equalRecordsSeparator) == -1) { normalizeRepeats.Add(r); } else //если есть специальный разделитель, то { //нулевой элемент - количество повторений веса, а первый - сам вес string[] rSplited = r.Split(equalRecordsSeparator); if (rSplited.Length == 2) { int count = int.Parse(rSplited[0]); for (int i = 0; i < count; i++) normalizeRepeats.Add(rSplited[1]); } else { Messages.Warning("Ошибка", "Неверный формат записи повторов! Возможно отделение повторов запятыми (Например: \"10, 13, 15\"), сокращенная запись одинаковых повторов (например: \"8х10\") и комбинированная запись повторов (например: \"3х20, 30, 2х40\"). План тренировки не сохранен!"); sqlite.DeleteWorkout(newWorkoutId); notMessagesShowed = false; } } } if (normalizeWeights.Count == normalizeRepeats.Count) { for (int i = 0; i < normalizeWeights.Count; i++) { Result r = new Result(float.Parse(normalizeWeights[i], format), byte.Parse(normalizeRepeats[i])); sqlite.AddResult(r); long lastResultId = sqlite.GetLastResultId(); OtherMethods.Debug("lastResultId: " + lastResultId.ToString()); Work w = new Work(lastResultId, newWorkoutId, sqlite.GetIdByValue(SQLite.TABLE_WORK_TYPE, hardWork), comment); sqlite.AddWork(w); } } else { Messages.Warning("Ошибка", "Количество весов и соответствующих повторов в одной или нескольких силовых работах не одинаково! План тренировки не сохранен!"); sqlite.DeleteWorkout(newWorkoutId); notMessagesShowed = false; } } } } if (notMessagesShowed) Messages.Info("Сообщение", "План тренировки сохранен успешно!"); } catch (Exception e) { ErrorsHandler.ShowError(e); sqlite.DeleteWorkout(newWorkoutId); Messages.Warning("Ошибка", "План тренировки не сохранен из-за возникшей программной ошибки! Проверьте корректность ввода полей и повторите сохранение. Если ошибка повторится, обратитесь к разработчику."); } }