internal static List <ScheduleHistory> GetScheduleHistory(int accountId)
        {
            List <ScheduleHistory> modelList = new List <ScheduleHistory>();

            using (DBConnector connector = new DBConnector("get_ScheduleHistory", CommandType.StoredProcedure))
            {
                connector.Cmd.Parameters.AddWithValue("@AccountID", accountId);
                connector.Execute(DBOperation.GetWhileReader);

                if (connector.Rdr.HasRows)
                {
                    while (connector.Rdr.Read())
                    {
                        ScheduleHistory model = new ScheduleHistory();

                        model.UserName         = connector.Rdr["UserName"].ToString();
                        model.Avatar           = connector.Rdr["Avatar"].ToString();
                        model.MedicineName     = connector.Rdr["MedicineName"].ToString();
                        model.MedicineDateTime = (DateTime)connector.Rdr["MedicineDateTime"];
                        model.Active           = (bool)connector.Rdr["Active"];

                        modelList.Add(model);
                    }
                }
            }
            return(modelList);
        }
예제 #2
0
        private void HousekeepSchedules()
        {
            _scheduleRepo = _scope.ServiceProvider.GetRequiredService <IAppRepository>();
            if (_scheduleRepo.GetScheduleCount() == 0)
            {
                NeedToGenerateNewSchedule = true;
                return;
            }

            var latestScheduleRecord = _scheduleRepo.GetLatestScheduleRecord();

            if (latestScheduleRecord < FirstWorkingDayDate)
            {
                var scheduleHistoryItems = new List <ScheduleHistory>();
                var existingSchedules    = _scheduleRepo.GetAllSchedules();
                foreach (var existingSchedule in existingSchedules)
                {
                    ScheduleHistory shItem = new ScheduleHistory();
                    shItem.PreviousId = existingSchedule.Id;
                    shItem.Shift      = existingSchedule.Shift;
                    shItem.StaffId    = existingSchedule.StaffId;
                    shItem.Date       = existingSchedule.Date;
                    scheduleHistoryItems.Add(shItem);
                }
                _scheduleRepo.AddToHistory(scheduleHistoryItems);
                _scheduleRepo.DeleteAllSchedules();
                NeedToGenerateNewSchedule = true;
            }
            else
            {
                NeedToGenerateNewSchedule = false;
            }
        }
예제 #3
0
        public bool ScheduleActivity(ScheduledActivity scheduledActivity, bool doneToday, bool repeatable, bool multiDorm)
        {
            if (doneToday)
            {
                Options        = 0;
                AvailableToday = false;
            }
            else if (!scheduledActivity.HasOther)
            {
                --Options;
            }

            ScheduleHistory.Add(scheduledActivity.Abbreviation);

            bool soloTracker = ThisDorm == Dorm;

            if (repeatable && (!soloTracker || multiDorm))
            {
                if (!PreviousRepeatableActivities.Add(scheduledActivity.Activity))
                {
                    throw new NotImplementedException("Did a repeatable activity twice with the same Dorm.");
                }
            }

            if (!soloTracker && --Priority == 0)
            {
                Options        = 0;
                AvailableToday = false;
                return(true);
            }

            return(false);
        }
        public void CreateHitory(Scheduler sch, string response)
        {
            var scheduleHistory = new ScheduleHistory
            {
                HistoryDateTime = DateTime.Now,
                Response        = response,
                ScheduleId      = sch.ScheduleId
            };

            _history.Add(scheduleHistory);

            sch.State        = Db.Abstractions.MaintananceState.Modified;
            sch.NextDateTime = sch.LatestNextDateTime;
            Update(sch);
            _context.SaveChangesAsync().Wait();
        }
예제 #5
0
        public void ClearFromHistory(ScheduledActivity scheduledActivity, bool repeatable, bool multiDorm)
        {
            bool soloTracker = ThisDorm == Dorm;

            if (!soloTracker)
            {
                ++Priority;
                AvailableToday = true;
            }

            if (repeatable && (!soloTracker || multiDorm))
            {
                if (!PreviousRepeatableActivities.Remove(scheduledActivity.Activity))
                {
                    throw new NotImplementedException("Activity not found in PreviousRepeatableActivities.");
                }
            }

            ScheduleHistory.Remove(scheduledActivity.Abbreviation);
        }
예제 #6
0
        public void ScheduleActivity(ActivityInfo activity, ScheduledActivity scheduledActivity)
        {
            if (!activity.Flags.HasFlag(ActivityFlags.Manual) && (!activity.Flags.HasFlag(ActivityFlags.Exclusive) || !activity.Flags.HasFlag(ActivityFlags.Excess)))
            {
                TotalScheduledDuration += activity.Duration;
            }
            else
            {
                TotalManualDuration += activity.Duration;
            }

            bool repeatable = activity.Flags.HasFlag(ActivityFlags.Repeatable);
            bool multiDorm  = activity.Flags.HasFlag(ActivityFlags.MultiDorm);

            AvailableActivitiesToday.Remove(activity.ID);
            if (multiDorm)
            {
                AvailableMultiDormActivitiesToday.Remove(activity.ID);
            }

            bool clear = !repeatable;

            if (repeatable)
            {
                if (!RepeatableHistory.Add(activity.ID))
                {
                    clear = true;
                }
                else
                {
                    if (ActivityPriorities.TryGetValue(activity.ID, out int activityPriority))
                    {
                        if (--activityPriority == 0)
                        {
                            ActivityPriorities.Remove(activity.ID);
                        }
                    }
                    else
                    {
                        ActivityPriorities.Add(activity.ID, -1);
                    }
                }

                /*if (!RepeatableTodayHistory.Add(activity.ID))
                 *  throw new IndexOutOfRangeException("Activity repeated twice the same day.");*/
            }

            if (clear)
            {
                AvailableActivities.Remove(activity.ID);
                if (multiDorm)
                {
                    AvailableMultiDormActivities.Remove(activity.ID);
                }
            }

            ActivitiesDoneToday.Add(activity.ID);
            if (activity.IncompatibleActivities.Any())
            {
                AvailableActivitiesToday.ExceptWith(activity.IncompatibleActivities);
                AvailableMultiDormActivitiesToday.ExceptWith(activity.IncompatibleActivities);
            }

            ScheduleHistory.Add(scheduledActivity.Abbreviation);
            if (scheduledActivity.HasOther)
            {
                if (scheduledActivity.Dorm == Dorm)
                {
                    if (
                        DormPriorities.TryGetValue(
                            scheduledActivity.OtherDorm,
                            out InterDormTracking otherDorm
                            ) && otherDorm.ScheduleActivity(
                            scheduledActivity,
                            !OtherDormsDoneToday.Add(scheduledActivity.OtherDorm),
                            repeatable, multiDorm
                            )
                        )
                    {
                        UsedUpOtherDorms.Add((InterDormTracking)otherDorm.Clone());
                        DormPriorities.Remove(scheduledActivity.OtherDorm);
                    }
                }
            }
            else
            {
                DormPriorities[Dorm].ScheduleActivity(scheduledActivity, false, repeatable, multiDorm);
                OtherDormsDoneToday.Add(Dorm);
            }
        }
예제 #7
0
        internal void ClearFromHistory(ScheduledActivity scheduledActivity, bool ignoreHasOther = false)
        {
            ScheduleHistory.Remove(scheduledActivity.Abbreviation);
            var activity = Schedule.Activities[scheduledActivity.Activity];

            bool repeatable = activity.Flags.HasFlag(ActivityFlags.Repeatable);
            bool multiDorm  = activity.Flags.HasFlag(ActivityFlags.MultiDorm);

            if (activity.IncompatibleActivities.Any())
            {
                var incompat = new SortedSet <int>(activity.IncompatibleActivities);
                incompat.ExceptWith(ActivitiesDoneToday);
                if (incompat.Any())
                {
                    AvailableActivitiesToday.UnionWith(incompat);
                    AvailableMultiDormActivitiesToday.UnionWith(incompat.Intersect(ActivityInfo.MultiDormActivities));
                }
            }
            ActivitiesDoneToday.Remove(activity.ID);

            if (scheduledActivity.HasOther)
            {
                if (!ignoreHasOther)
                {
                    if (!DormPriorities.TryGetValue(scheduledActivity.OtherDorm, out InterDormTracking interDorm))
                    {
                        var index = UsedUpOtherDorms.FindIndex(d => d.Dorm == scheduledActivity.OtherDorm);
                        interDorm = (InterDormTracking)UsedUpOtherDorms[index].Clone();
                        UsedUpOtherDorms.RemoveAt(index);
                        DormPriorities.Add(scheduledActivity.OtherDorm, interDorm);
                    }

                    interDorm.ClearFromHistory(scheduledActivity, repeatable, multiDorm);
                    OtherDormsDoneToday.Remove(scheduledActivity.OtherDorm);
                }
            }
            else
            {
                DormPriorities[Dorm].ClearFromHistory(scheduledActivity, repeatable, multiDorm);
                OtherDormsDoneToday.Remove(Dorm);
            }

            if (repeatable)
            {
                if (RepeatableHistory.Contains(activity.ID))
                {
                    // if it wasn't cleared, it was the first time the activity was done by that dorm
                    if (!AvailableActivities.Add(activity.ID))
                    {
                        RepeatableHistory.Remove(activity.ID);
                    }
                    if (multiDorm)
                    {
                        AvailableMultiDormActivities.Add(activity.ID);
                    }
                    RepeatableTodayHistory.Remove(activity.ID);
                }
                else
                {
                    throw new NotImplementedException("Activity being cleared hasn't been undergone.");
                }

                if (ActivityPriorities.TryGetValue(activity.ID, out int activityPriority))
                {
                    if (++activityPriority == 0)
                    {
                        ActivityPriorities.Remove(activity.ID);
                    }
                }
                else
                {
                    ActivityPriorities.Add(activity.ID, 1);
                }
            }
            else
            {
                if (!AvailableActivities.Add(activity.ID))
                {
                    throw new NotImplementedException("Activity being cleared hasn't been undergone.");
                }
                if (multiDorm)
                {
                    AvailableMultiDormActivities.Add(activity.ID);
                }
            }

            AvailableActivitiesToday.Add(activity.ID);
            if (multiDorm)
            {
                AvailableMultiDormActivitiesToday.Add(activity.ID);
            }

            if (!activity.Flags.HasFlag(ActivityFlags.Manual) && (!activity.Flags.HasFlag(ActivityFlags.Exclusive) || !activity.Flags.HasFlag(ActivityFlags.Excess)))
            {
                TotalScheduledDuration -= activity.Duration;
            }
            else
            {
                TotalManualDuration -= activity.Duration;
            }
        }
예제 #8
0
 internal void FetchScheduleHistory(ScheduleHistory history, SafeDataReader dr)
 {
     history.Id = dr.GetInt32("Id");
     history.ScheduleName = dr.GetString("ScheduleName");
     history.Parameter = dr.GetString("Parameter");
     history.ScheduleDescription = dr.GetString("ScheduleDescription");
     history.RunbySystem = dr.GetString("RunbySystem");
     history.LatRunOn = dr.GetDateTime("LatRunOn").ToString("dd MMM yyyy hh:mm:ss tt");
 }
예제 #9
0
        public static List<ScheduleHistory> GetScheduleHistory()
        {
            List<ScheduleHistory> history = new List<ScheduleHistory>();
            System.Diagnostics.StackFrame stackFrame = new System.Diagnostics.StackFrame();
            System.Reflection.MethodBase methodBase = stackFrame.GetMethod();
            log.Debug("Start: " + methodBase.Name);
            var reader = SqlHelper.ExecuteReader(ConnectionUtility.GetConnectionString(), CommandType.StoredProcedure, "SPGetScheduleHistory");
            var safe = new SafeDataReader(reader);
            while (reader.Read())
            {
                var detail = new ScheduleHistory();
                detail.FetchScheduleHistory(detail, safe);
                history.Add(detail);
            }

            log.Debug("End: " + methodBase.Name);
            return history;
        }
 public ApplyCategoryPriceRules(ScheduleHistory scheduleHistory)
     : base()
 {
     base.TaskRecordItem = scheduleHistory;
 }