public static string GetNextDate(this Medi medi) { if (medi.IntervallType == IntervallType.IfNeeded) { return("-"); } if (medi.NextDate == DateTimeOffset.MinValue) { return("-"); } var span = medi.NextDate - DateTimeOffset.Now; var today = DateTimeOffset.Now.DayOfWeek; Today = today.ToString(); var next = medi.NextDate.DayOfWeek; if (span.Days == 0 && today == next) { return(medi.MinutesToNext() <= 1440 ? $"{Today} - {medi.NextDate.ToString("t")}" : Today); } if (span.Days < 6 && today != next)// Diese Woche { return(medi.NextDate.ToString("dddd")); } return(medi.NextDate.ToString("dd. MMMM")); }
public static Medi GetDependend(this Medi medi) { var target = medi.DependsOn; var storage = AppStore.Instance.User.Medis; return(storage.SingleOrDefault(m => m.Id == target)); }
public static int MinutesToNext(this Medi medi) { var factor = medi.TimeFactor(); var minutesUntilNext = factor * medi.PureIntervall; return(minutesUntilNext); }
public static void CalculateNewWeekdayIntervall(this Medi medi) { var currentWeekday = AppStore.Instance.Weekdays[medi.Id]; var days = currentWeekday.AsArray(); var now = DateTimeOffset.Now; var today = (int)now.DayOfWeek; int diffDay = 0; for (var i = today + 1; i < days.Length; i++) { if (days[i]) { diffDay = i - today; break; } } if (diffDay == 0) { for (var i = 0; i < today; i++) { if (days[i]) { diffDay = i - today + 7; break; } } } if (diffDay == 0) { diffDay = 7; } medi.PureIntervall = diffDay; }
public static void SetNotification(Medi medi) { // TODO - Notification handling for Android var logger = App.Container.Get <ILogger>(); logger.Log($"Notification for '{medi.Name}' has to be set.", typeof(MainApplication)); }
public MediDetailViewModel(Medi item = null) { if (item != null) { Title = item.Name; Medi = item; } }
public async Task UpdateList(Medi medi) { var s = App.Container.Get <ISomeLogic>(); await s.HandleIntoke(medi); ViewModel.LoadItemsCommand.Execute(this); return; }
public void SetStartTime(Medi medi) { if (medi.NextDate != DateTimeOffset.MinValue) { PickerStartTime.Date = medi.NextDate.DateTime.ToNSDate(); } else { PickerStartTime.MinimumDate = NSDate.Now; } }
public Medi RemoveMedi(Medi medi) { // Local remove Medis.Remove(medi); // Store remove var medis = AppStore.Instance.User.Medis; medis.Remove(medi); return(medi); }
void SetCurrentMedi(Medi medi) { if (medi.NeedsNoStartDate()) { NavigateForward(); } else { SetStartTime(medi); } }
public static string GetLastDate(this Medi medi) { if (medi.LastDate == DateTimeOffset.MinValue) { return("-"); } var now = DateTimeOffset.Now; var latest = medi.LastDate; var diffDay = now - latest; return(now.DayOfWeek == latest.DayOfWeek && diffDay.Days <= 1 ? medi.LastDate.ToString("t") : medi.LastDate.ToString("M")); }
public static void SetNotification(Medi medi) { var newTime = medi.NextDate.DateTime.ToNSDate(); var notification = new UILocalNotification { FireDate = newTime, //notification.FireDate = NSDate.FromTimeIntervalSinceNow(15); AlertTitle = $"{medi.Name}", // required for Apple Watch notifications AlertAction = $"View Alert for {medi.Name}", AlertBody = $"Zeit für {medi.Dosage} Einheit(en)!", SoundName = UILocalNotification.DefaultSoundName }; UIApplication.SharedApplication.ScheduleLocalNotification(notification); }
private void CheckDependencys(Medi medi, IEnumerable <Medi> medis) { var dep = medis.SingleOrDefault(m => m.DependsOn == medi.Id); if (dep == null) { return; // fertig } var pureInterall = dep.PureIntervall; var intervallType = dep.IntervallTime.ToMinutes(); if (dep.IntervallTime == IntervallTime.Day) { dep.NextDate = medi.LastDate.AddDays(pureInterall); } dep.NextDate = medi.LastDate.AddMinutes(pureInterall * intervallType); SetNotification(dep); //await _store.UpdateItemAsync(dep); }
public static int TimeFactor(this Medi medi) { switch (medi.IntervallTime) { case IntervallTime.Minute: return(1); case IntervallTime.Hour: return(60); case IntervallTime.Day: return(60 * 24); case IntervallTime.Week: return(60 * 24 * 7); case IntervallTime.Month: return(0); default: return(-1); } }
public static string GetDosage(this Medi medi) => medi.IntervallType == IntervallType.IfNeeded ? "-" : medi.Dosage.ToString("F1");
private void AddItem(Medi medi) { Medis.Add(medi); AppStore.Instance.User.Medis.Add(medi); }
public static bool NeedsNoStartDate(this Medi medi) => medi.DependsOn != Guid.Empty || medi.DailyAppointments != null;
public static string GetStockInfo(this Medi medi) => $"{medi.Stock.ToString("F1")}/{medi.MinimumStock.ToString("F1")}";
private void SetNotification(Medi medi) => _setNotification?.Invoke(medi);
public async Task HandleIntoke(Medi medi) { var medis = AppStore.Instance.User.Medis; var t = Settings.GetStdTime(); var now = DateTimeOffset.Now; switch (medi.IntervallType) { case IntervallType.Depend: medi.LastDate = now; medi.NextDate = DateTimeOffset.MinValue; medi.Stock = medi.Stock - medi.Dosage < 0 ? 0 : medi.Stock - medi.Dosage; SetNotification(medi); //await _store.UpdateItemAsync(medi); return; case IntervallType.Intervall: switch (medi.IntervallTime) { case IntervallTime.Minute: medi.NextDate = DateTimeOffset.Now.AddMinutes(medi.PureIntervall); break; case IntervallTime.Hour: medi.NextDate = DateTimeOffset.Now.AddHours(medi.PureIntervall); break; case IntervallTime.Day: medi.NextDate = t.AddDays(medi.PureIntervall); break; case IntervallTime.Week: medi.NextDate = t.AddDays(medi.PureIntervall * 7); break; case IntervallTime.Month: medi.NextDate = t.AddMonths(medi.PureIntervall); break; } break; case IntervallType.Weekdays: medi.CalculateNewWeekdayIntervall(); medi.NextDate = t.AddDays(medi.PureIntervall); break; case IntervallType.DailyAppointment: var h = now.Hour; var m = now.Minute; var dailyAppointments = AppStore.Instance.CurrentMedi.DailyAppointments; foreach (var item in dailyAppointments) { if (item.Hour == h && item.Minute >= m) // Treffer { medi.NextDate = new DateTimeOffset(now.Year, now.Month, now.Day, item.Hour, item.Minute, 0, now.Offset); break; } if (item.Hour > h) // Treffer { medi.NextDate = new DateTimeOffset(now.Year, now.Month, now.Day, item.Hour, item.Minute, 0, now.Offset); break; } } if (medi.NextDate < now) // Kein treffer Gefunden, dann ist es der erste { medi.NextDate = new DateTimeOffset(now.Year, now.Month, now.Day, medi.DailyAppointments[0].Hour, medi.DailyAppointments[0].Minute, 0, now.Offset).AddDays(1); } break; } medi.Stock = medi.Stock - medi.Dosage < 0 ? 0 : medi.Stock - medi.Dosage; medi.LastDate = now; SetNotification(medi); await _store.UpdateItemAsync(medi); CheckDependencys(medi, medis); }