Beispiel #1
0
        /// <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("Ошибка", "План тренировки не сохранен из-за возникшей программной ошибки! Проверьте корректность ввода полей и повторите сохранение. Если ошибка повторится, обратитесь к разработчику.");
            }
        }