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); }
// Вывод данных из БД 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); }