Пример #1
0
        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"));
        }
Пример #2
0
        public static Medi GetDependend(this Medi medi)
        {
            var target  = medi.DependsOn;
            var storage = AppStore.Instance.User.Medis;

            return(storage.SingleOrDefault(m => m.Id == target));
        }
Пример #3
0
        public static int MinutesToNext(this Medi medi)
        {
            var factor           = medi.TimeFactor();
            var minutesUntilNext = factor * medi.PureIntervall;

            return(minutesUntilNext);
        }
Пример #4
0
        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;
        }
Пример #5
0
        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));
        }
Пример #6
0
 public MediDetailViewModel(Medi item = null)
 {
     if (item != null)
     {
         Title = item.Name;
         Medi  = item;
     }
 }
Пример #7
0
        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;
     }
 }
Пример #9
0
        public Medi RemoveMedi(Medi medi)
        {
            // Local remove
            Medis.Remove(medi);

            // Store remove
            var medis = AppStore.Instance.User.Medis;

            medis.Remove(medi);
            return(medi);
        }
Пример #10
0
 void SetCurrentMedi(Medi medi)
 {
     if (medi.NeedsNoStartDate())
     {
         NavigateForward();
     }
     else
     {
         SetStartTime(medi);
     }
 }
Пример #11
0
        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"));
        }
Пример #12
0
        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);
        }
Пример #13
0
        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);
        }
Пример #14
0
        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);
            }
        }
Пример #15
0
 public static string GetDosage(this Medi medi)
 => medi.IntervallType == IntervallType.IfNeeded ? "-" : medi.Dosage.ToString("F1");
Пример #16
0
 private void AddItem(Medi medi)
 {
     Medis.Add(medi);
     AppStore.Instance.User.Medis.Add(medi);
 }
Пример #17
0
 public static bool NeedsNoStartDate(this Medi medi)
 => medi.DependsOn != Guid.Empty ||
 medi.DailyAppointments != null;
Пример #18
0
 public static string GetStockInfo(this Medi medi)
 => $"{medi.Stock.ToString("F1")}/{medi.MinimumStock.ToString("F1")}";
Пример #19
0
 private void SetNotification(Medi medi)
 => _setNotification?.Invoke(medi);
Пример #20
0
        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);
        }