private void GetAverageSpan(MyDate a, MyDate b)
        {
            AverageSpan *= GetInformation["Cnt_sigarets"] - 2;
            AverageSpan += (MyDate.DateToLong(b) - MyDate.DateToLong(a));
            AverageSpan /= GetInformation["Cnt_sigarets"] - 1;

            LabelAverageSpan.Text = MyDate.TimeToString((long)AverageSpan, 3);
        }
Example #2
0
        // Вывод данных из БД
        private void PrintInfo(string SearchDate, MyDate NeedDay)
        {
            if (DateTime.Today.ToString() != SearchDate)
            {
                NeedDay.Hour   = 23;
                NeedDay.Minute = 59;
                NeedDay.Second = 00;
            }
            else
            {
                NeedDay = new MyDate(DateTime.Now);
            }

            LabelSigaretsAll.Text         = "Количество сигарет всего: " + GetInformation["Cnt_sigarets"];
            LabelSigaretsToday.Text       = "Количество сигарет сегодня: " + GetInformation["Cnt_sigarets_today"];
            LabelFromLastSigaret.Text     = MyDate.TimeToString(MyDate.DateToLong(NeedDay) - MyDate.DateToLong(LastSigarete), 1);
            LabelAverageSpan.Text         = MyDate.TimeToString((long)AverageSpan, 3);
            LabelFirstSigaret.Text        = "Дата первой сигареты: \n" + FirstSigaret.ToString();
            LabelFromFirstSigaret.Text    = MyDate.TimeToString(MyDate.DateToLong(NeedDay) - MyDate.DateToLong(FirstSigaret), 5);
            LabelCntEndSmoking.Text       = "Попытка бросить курить: " + CntEndSmoking + "я";
            LabelMaxTime.Text             = MyDate.TimeToString(MaxTime, 7);
            LabelSpentOnSigaretAll.Text   = "Потрачено на сигареты: " + SpentOnSigaretAll + "RUB";
            LabelSpentOnSigaretToday.Text = "Потрачено на сигареты сегодня: " + SpentOnSigaretToday + "RUB";
        }
        // Проверка на перевод времени назад
        private void CheckChangeTime()
        {
            int t;

            if (GetInformation.Count != 0 && GetInformation["Cnt_sigarets"] == 1)
            {
                t = 1;
            }

            DateTime dateTime  = DateTime.Today;
            DateTime dateTime1 = DateTime.Now;

            var config = new RealmConfiguration()
            {
                SchemaVersion = 1
            };
            Realm _realm  = Realm.GetInstance(config);
            var   LastDay = _realm.All <Day>().Where(f => f.NextDay == null).ToList();

            if (LastDay.Count != 0)
            {
                MyDate   myDate       = new MyDate(LastDay[0].Date);
                DateTime dateTimeLast = new DateTime(myDate.Year, myDate.Month, myDate.Day);

                if (dateTime.CompareTo(dateTimeLast) < 0) // значит время переводили назад как минимум на 1 день
                {
                    string str    = (new MyDate(dateTime)).ToString();
                    var    NowDay = _realm.All <Day>().Where(f => f.Date == str).ToList();
                    var    ForUpd = _realm.All <Day>().Where(f => f.NextDay == str).ToList();

                    if (NowDay.Count == 0 || ForUpd.Count == 0) // Удалим все дни и добавим новый
                    {
                        var AllDays = _realm.All <Day>().ToList();

                        for (int i = 0; i < AllDays.Count; ++i)
                        {
                            _realm.Write(() => _realm.Remove(AllDays[i]));
                        }

                        _realm.Write(() => _realm.Add(new Day()));
                        var    AllNewDay = _realm.All <Day>().Where(f => f.NextDay == null).ToList();
                        var    NewDay    = AllNewDay[0];
                        MyDate Time      = new MyDate(DateTime.Now);
                        string StrTime   = Time.ToString();
                        string nowdate   = (new MyDate(DateTime.Today)).ToString();

                        _realm.Write(() => NewDay.Date                        = nowdate);
                        _realm.Write(() => NewDay.CntSigarets                 = 0);
                        _realm.Write(() => NewDay.CntSigaretsToday            = 0);
                        _realm.Write(() => NewDay.DateLast                    = StrTime);
                        _realm.Write(() => NewDay.LastSigaret                 = StrTime);
                        _realm.Write(() => NewDay.LastSigaretYesterday        = StrTime);
                        _realm.Write(() => NewDay.SigaretAverageSpan          = 0);
                        _realm.Write(() => NewDay.SigaretAverageSpanYesterday = 0);
                        _realm.Write(() => NewDay.FirstSigaret                = StrTime);
                        _realm.Write(() => NewDay.CntEndSmoking               = 1);
                        _realm.Write(() => NewDay.MaxTimeWithoutSigaret       = 0);
                        _realm.Write(() => NewDay.SpentOnSigaretAll           = 0);
                        _realm.Write(() => NewDay.SpentOnSigaretToday         = 0);
                    }
                    else // Удалим все дни после текущего и удалим информацию за текущий
                    {
                        var AllDays = _realm.All <Day>().ToList();

                        for (int i = 0; i < AllDays.Count; ++i)
                        {
                            MyDate   CheckMyDate   = new MyDate(AllDays[i].Date);
                            DateTime CheckDateTime = new DateTime(CheckMyDate.Year, CheckMyDate.Month, CheckMyDate.Day);

                            if (dateTime.CompareTo(CheckDateTime) < 0)
                            {
                                _realm.Write(() => _realm.Remove(AllDays[i]));
                            }
                            else if (dateTime.CompareTo(CheckDateTime) == 0)
                            {
                                MyDate Time    = new MyDate(DateTime.Now);
                                string StrTime = Time.ToString();

                                _realm.Write(() => AllDays[i].Date                        = str);
                                _realm.Write(() => AllDays[i].CntSigarets                 = ForUpd[0].CntSigarets);
                                _realm.Write(() => AllDays[i].CntSigaretsToday            = 0);
                                _realm.Write(() => AllDays[i].LastSigaret                 = ForUpd[0].LastSigaret);
                                _realm.Write(() => AllDays[i].LastSigaretYesterday        = ForUpd[0].LastSigaret);
                                _realm.Write(() => AllDays[i].SigaretAverageSpan          = ForUpd[0].SigaretAverageSpan);
                                _realm.Write(() => AllDays[i].SigaretAverageSpanYesterday = ForUpd[0].SigaretAverageSpan);
                                _realm.Write(() => AllDays[i].FirstSigaret                = ForUpd[0].FirstSigaret);
                                _realm.Write(() => AllDays[i].CntEndSmoking               = ForUpd[0].CntEndSmoking);
                                _realm.Write(() => AllDays[i].MaxTimeWithoutSigaret       = ForUpd[0].MaxTimeWithoutSigaret);
                                _realm.Write(() => AllDays[i].LastDay                     = ForUpd[0].Date);
                                _realm.Write(() => AllDays[i].SpentOnSigaretAll           = ForUpd[0].SpentOnSigaretAll);
                                _realm.Write(() => AllDays[i].SpentOnSigaretToday         = 0);
                                _realm.Write(() => AllDays[i].NextDay                     = null);
                                _realm.Write(() => AllDays[i].DateLast                    = StrTime);
                            }
                        }
                    }
                }
                else if (dateTime.CompareTo(dateTimeLast) == 0) // проверим не перевели ли на сколько-то часов
                {
                    string str    = (new MyDate(dateTime)).ToString();
                    var    NowDay = _realm.All <Day>().Where(f => f.Date == str).ToList();

                    MyDate CheckDateLast  = new MyDate(NowDay[0].DateLast);
                    long   CheckDateLast2 = MyDate.DateToLong(CheckDateLast);

                    MyDate CheckLastSigaret  = new MyDate(NowDay[0].LastSigaret);
                    long   CheckLastSigaret2 = MyDate.DateToLong(CheckLastSigaret);

                    long NowLong = MyDate.DateToLong(new MyDate(dateTime1));

                    if (CheckLastSigaret2 > NowLong) // Сбросим данные за сегодня
                    {
                        var ForUpd = _realm.All <Day>().Where(f => f.NextDay == str).ToList();

                        MyDate Time    = new MyDate(DateTime.Now);
                        string StrTime = Time.ToString();

                        if (ForUpd.Count != 0) // Если есть предыдущий день
                        {
                            _realm.Write(() => NowDay[0].Date                        = str);
                            _realm.Write(() => NowDay[0].CntSigarets                 = ForUpd[0].CntSigarets);
                            _realm.Write(() => NowDay[0].CntSigaretsToday            = 0);
                            _realm.Write(() => NowDay[0].LastSigaret                 = ForUpd[0].LastSigaret);
                            _realm.Write(() => NowDay[0].LastSigaretYesterday        = ForUpd[0].LastSigaret);
                            _realm.Write(() => NowDay[0].SigaretAverageSpan          = ForUpd[0].SigaretAverageSpan);
                            _realm.Write(() => NowDay[0].SigaretAverageSpanYesterday = ForUpd[0].SigaretAverageSpan);
                            _realm.Write(() => NowDay[0].FirstSigaret                = ForUpd[0].FirstSigaret);
                            _realm.Write(() => NowDay[0].CntEndSmoking               = ForUpd[0].CntEndSmoking);
                            _realm.Write(() => NowDay[0].MaxTimeWithoutSigaret       = ForUpd[0].MaxTimeWithoutSigaret);
                            _realm.Write(() => NowDay[0].LastDay                     = ForUpd[0].Date);
                            _realm.Write(() => NowDay[0].SpentOnSigaretAll           = ForUpd[0].SpentOnSigaretAll);
                            _realm.Write(() => NowDay[0].SpentOnSigaretToday         = 0);
                            _realm.Write(() => NowDay[0].NextDay                     = null);
                            _realm.Write(() => NowDay[0].DateLast                    = StrTime);
                        }
                        else // Если нет предыдущего дня
                        {
                            var AllDays = _realm.All <Day>().ToList();

                            for (int i = 0; i < AllDays.Count; ++i)
                            {
                                _realm.Write(() => _realm.Remove(AllDays[i]));
                            }

                            _realm.Write(() => _realm.Add(new Day()));
                            var    AllNewDay = _realm.All <Day>().Where(f => f.NextDay == null).ToList();
                            var    NewDay    = AllNewDay[0];
                            string nowdate   = (new MyDate(DateTime.Today)).ToString();

                            _realm.Write(() => NewDay.Date                        = nowdate);
                            _realm.Write(() => NewDay.CntSigarets                 = 0);
                            _realm.Write(() => NewDay.CntSigaretsToday            = 0);
                            _realm.Write(() => NewDay.DateLast                    = StrTime);
                            _realm.Write(() => NewDay.LastSigaret                 = StrTime);
                            _realm.Write(() => NewDay.LastSigaretYesterday        = StrTime);
                            _realm.Write(() => NewDay.SigaretAverageSpan          = 0);
                            _realm.Write(() => NewDay.SigaretAverageSpanYesterday = 0);
                            _realm.Write(() => NewDay.FirstSigaret                = StrTime);
                            _realm.Write(() => NewDay.CntEndSmoking               = 1);
                            _realm.Write(() => NewDay.MaxTimeWithoutSigaret       = 0);
                            _realm.Write(() => NewDay.SpentOnSigaretAll           = 0);
                            _realm.Write(() => NewDay.SpentOnSigaretToday         = 0);
                        }
                    }
                }
            }
        }
        // Проверка на наличие и выполнение плана
        private async void CheckPlan(object sender, EventArgs e)
        {
            bool ans1 = true, ans2 = true;
            var  config = new RealmConfiguration()
            {
                SchemaVersion = 1
            };
            Realm _realm   = Realm.GetInstance(config);
            var   AllPlans = _realm.All <Plans>().ToList();
            var   Plan     = AllPlans[0];

            if (Plan.NeedCntSigaretsInDay != -1)
            {
                if (GetInformation["Cnt_sigarets_today"] >= Plan.NeedCntSigaretsInDay)
                {
                    ans1 = await DisplayAlert("", "Вы уверены, что хотите превысить свой план сигарет на день?", "Да", "Нет");
                }
            }
            if (Plan.NeedCntMoneyInDay != -1)
            {
                if (SpentOnSigaretToday >= Plan.NeedCntMoneyInDay)
                {
                    ans2 = await DisplayAlert("", "Вы уверены, что хотите превысить свой план траты денег на день?", "Да", "Нет");
                }
            }
            MayBreakPlan = (ans1 && ans2);

            // В случае положительного ответа увеличиваем количество сигарет
            if (!MayBreakPlan)
            {
                return;
            }
            Button button = (Button)sender;

            if (GetInformation["Cnt_sigarets"] == 0)
            {
                FirstSigaret           = new MyDate(DateTime.Now);
                LabelFirstSigaret.Text = "Дата первой сигареты: " + FirstSigaret.ToString();
            }
            else
            {
                MaxTime = Math.Max(MyDate.DateToLong(new MyDate(DateTime.Now)) - MyDate.DateToLong(LastSigarete), MaxTime);
            }

            GetInformation["Cnt_sigarets"]++;
            GetInformation["Cnt_sigarets_today"]++;

            if (GetInformation["Cnt_sigarets"] > 1)
            {
                GetAverageSpan(LastSigarete, new MyDate(DateTime.Now));
            }

            LastSigarete = new MyDate(DateTime.Now);

            var AllMemory = _realm.All <Memory>().ToList();

            if (AllMemory.Count != 0)
            {
                var NewMemory = AllMemory[0];

                var config1 = new RealmConfiguration()
                {
                    SchemaVersion = 1
                };
                Realm _Realm       = Realm.GetInstance(config1);
                var   AllSigaret   = _Realm.All <SigaretsBrands>();
                var   AllMySigaret = _Realm.All <SigaretsBrands>().Where(f => f.Name == NewMemory.SigaretBrand).ToList();
                var   MySigaret    = AllMySigaret[0];

                SpentOnSigaretToday += (int)(MySigaret.Cost / MySigaret.Cnt);
                SpentOnSigaretAll   += (int)(MySigaret.Cost / MySigaret.Cnt);
            }

            ChangeInfo();
        }
        // Проверка и перезапись времени последнего обновления
        private bool OnTimerTick()
        {
            CheckChangeTime();
            ReadMyInfo();

            if (Sigarets.flag)
            {
                return(true);
            }

            var config = new RealmConfiguration()
            {
                SchemaVersion = 1
            };
            Realm _realm    = Realm.GetInstance(config);
            var   AllMemory = _realm.All <Memory>().ToList();

            if (AllMemory.Count == 0)
            {
                BrandSigaret.Text = "Выбранный бренд: ?";
            }
            else
            {
                var NewMemory = AllMemory[0];
                BrandSigaret.Text = "Выбранный бренд: " + NewMemory.SigaretBrand;
            }

            DateNow = new MyDate(DateTime.Now);
            LabelCntEndSmoking.Text = "Попытка бросить курить: " + CntEndSmoking + "я";

            if (DateLast.Day != DateNow.Day || DateLast.Month != DateNow.Month || DateLast.Year != DateNow.Year)
            {
                AddDays();
            }

            if (GetInformation["Cnt_sigarets"] >= 1)
            {
                LabelFromLastSigaret.Text = MyDate.TimeToString(MyDate.DateToLong(DateNow) - MyDate.DateToLong(LastSigarete), 1);

                LabelFromFirstSigaret.Text = MyDate.TimeToString(MyDate.DateToLong(DateNow) - MyDate.DateToLong(FirstSigaret), 5);

                LabelFirstSigaret.Text = "Дата первой сигареты: \n" + FirstSigaret.ToString();

                if (GetInformation["Cnt_sigarets"] >= 2)
                {
                    LabelAverageSpan.Text = MyDate.TimeToString((long)AverageSpan, 3);
                    LabelMaxTime.Text     = MyDate.TimeToString(MaxTime, 7);
                }
            }
            else
            {
                LabelFromLastSigaret.Text = "С последней сигареты прошло: ?";

                LabelFromFirstSigaret.Text = "С первой сигареты прошло: ?";

                LabelFirstSigaret.Text = "Дата первой сигареты: ?";
            }

            DateLast = new MyDate(DateNow.ToString());
            ChangeInfo();
            return(true);
        }