Beispiel #1
0
        /// <summary>
        /// Method call to schedule manager about routed days in current range and adds received dates to dictionary
        /// </summary>
        /// <param name="startDate"></param>
        /// <param name="endDate"></param>
        private void _CreateNewDayStatuses(DateTime startDate, DateTime endDate)
        {
            List <DateTime>  datesRange    = _GetDaysFromRange(startDate, endDate);
            IList <DateTime> newRoutedDays = App.Current.Project.Schedules.SearchDaysWithBuiltRoutes(startDate, endDate);
            IList <DateTime> newDaysWithUnassignedOrders = App.Current.Project.Orders.SearchDaysWithOrders(startDate, endDate);

            List <KeyValuePair <DateTime, DayStatus> > listOfDayStatuses = _dayStatuses.ToList <KeyValuePair <DateTime, DayStatus> >();

            listOfDayStatuses.Sort(new DayStatusesComparer());

            foreach (DateTime date in datesRange)
            {
                if (newRoutedDays.Contains(date))
                {
                    _dayStatuses[date] = new DayStatus(BuildStatus.RoutesBuilt, null);
                }
                else if (newDaysWithUnassignedOrders.Contains(date))
                {
                    _dayStatuses[date] = new DayStatus(BuildStatus.HasUnassignedOrders, null);
                }
                else
                {
                    _dayStatuses[date] = new DayStatus(BuildStatus.Empty, null);
                }
            }
        }
Beispiel #2
0
        /// <summary>
        /// Method upfates day status.
        /// </summary>
        private void _UpdateDayStatus()
        {
            WorkingStatusHelper.SetBusy(null);

            if (_pendingDatesToUpdate.Count == 0)
            {
                return;
            }

            DateTime scheduleDate = _pendingDatesToUpdate[0];

            _pendingDatesToUpdate.RemoveAt(0);

            BuildStatus status = new BuildStatus();

            // If any solve operation is running on current date - define status as "Building".
            if (App.Current.Solver.GetAsyncOperations(scheduleDate).Count != 0)
            {
                status = BuildStatus.BuildingRoutes;
            }

            // If no solve operations running - define completed status by orders and routes collections of each schedule.
            else
            {
                status = _DefineCompletedStatus(scheduleDate);
            }

            DayStatus dayStatus = new DayStatus(status, null);

            _dayStatuses[scheduleDate] = dayStatus;

            // Raise event about status changed.
            if (DayStatusesChanged != null)
            {
                DayStatusesChanged(null, EventArgs.Empty);
            }

            WorkingStatusHelper.SetReleased();
        }
Beispiel #3
0
        /// <summary>
        /// Occurs when any solve operation started
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OnAsyncSolveStarted(object sender, AsyncSolveStartedEventArgs e)
        {
            DateTime           plannedDate = new DateTime();
            AsyncOperationInfo info        = null;
            Schedule           schedule    = null;

            if (App.Current.Solver.GetAsyncOperationInfo(e.OperationId, out info))
            {
                schedule = info.Schedule;
            }

            if (schedule != null)
            {
                plannedDate = (DateTime)schedule.PlannedDate;
            }

            _dayStatuses[plannedDate] = new DayStatus(BuildStatus.BuildingRoutes, null);

            if (DayStatusesChanged != null)
            {
                DayStatusesChanged(null, EventArgs.Empty);
            }
        }
Beispiel #4
0
        /// <summary>
        /// Method sets day's status to HasUnassignedOrders or Empty if no BuiltRoutes and Routing operations on this day
        /// </summary>
        /// <param name="date"></param>
        public void UpdateDayStatus(DateTime date)
        {
            if (_dayStatuses[date].Status == BuildStatus.RoutesBuilt || _dayStatuses[date].Status == BuildStatus.BuildingRoutes)
            {
                return;
            }
            else if (_dayStatuses[date].Status == BuildStatus.HasUnassignedOrders || _dayStatuses[date].Status == BuildStatus.Empty)
            {
                if (App.Current.Project.Orders.GetCount(date) > 0)
                {
                    _dayStatuses[date] = new DayStatus(BuildStatus.HasUnassignedOrders, null);
                }
                else
                {
                    _dayStatuses[date] = new DayStatus(BuildStatus.Empty, null);
                }
            }

            // raise event
            if (DayStatusesChanged != null)
            {
                DayStatusesChanged(null, EventArgs.Empty);
            }
        }
Beispiel #5
0
        /// <summary>
        /// Occurs when saves completed
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Project_SavingChanges(object sender, ESRI.ArcLogistics.Data.SavingChangesEventArgs e)
        {
            IList <Order> orders;
            bool          statusesChanged = false;

            // if orders was added
            if (e.AddedItems != null && e.AddedItems.Count > 0)
            {
                orders = _GetOrdersFromObjectsCollection(e.AddedItems);
                if (orders.Count > 0)
                {
                    foreach (Order order in orders)
                    {
                        DateTime date = (DateTime)order.PlannedDate;
                        if (_dayStatuses.ContainsKey(date))
                        {
                            if (_dayStatuses[date].Status != BuildStatus.RoutesBuilt)
                            {
                                _dayStatuses[date] = new DayStatus(BuildStatus.HasUnassignedOrders, null);
                                statusesChanged    = true;
                            }
                        }
                        else
                        {
                            _dayStatuses[date] = new DayStatus(BuildStatus.HasUnassignedOrders, null);
                            statusesChanged    = true;
                        }
                    }
                }
            }
            // if orders was removed
            else if (e.DeletedItems != null && e.DeletedItems.Count > 0)
            {
                orders = _GetOrdersFromObjectsCollection(e.DeletedItems);
                if (orders.Count > 0)
                {
                    Dictionary <DateTime, IList <Order> > deletedOrders = _GetDatesWithDeletedOrders(orders);

                    foreach (KeyValuePair <DateTime, IList <Order> > val in deletedOrders)
                    {
                        DateTime date = (DateTime)val.Key;
                        Debug.Assert(_dayStatuses.ContainsKey(date));

                        if (_dayStatuses[date].Status == BuildStatus.HasUnassignedOrders)
                        {
                            int unassignedOrdersCount = App.Current.Project.Orders.GetCount(date);
                            if (unassignedOrdersCount == ((IList <Order>)val.Value).Count)
                            {
                                _dayStatuses[date] = new DayStatus(BuildStatus.Empty, null);
                                statusesChanged    = true;
                            }
                        }
                    }
                }
            }

            if (statusesChanged && DayStatusesChanged != null)
            {
                DayStatusesChanged(null, EventArgs.Empty);
            }
        }