示例#1
0
        private void OnSchedulesLoaded(object obj)
        {
            switch (ScheduleType)
            {
            case ScheduleTypes.AC:
                Schedules = _schedulesRepository.ACSchedules;
                break;

            case ScheduleTypes.Heat:
                Schedules = _schedulesRepository.HeatSchedules;
                break;

            case ScheduleTypes.Light:
                Schedules = _schedulesRepository.LightSchedules;
                break;

            case ScheduleTypes.SKUD:
                Schedules = _schedulesRepository.SKUDSchedules;
                break;

            case ScheduleTypes.Ventilation:
                Schedules = _schedulesRepository.VentilationSchedules;
                break;
            }
            _changedByServer = true;
            if (AddressList.Any())
            {
                var currentSchedule = Schedules.FirstOrDefault(s => s.ControlledObjects.Contains(new Property()));
                CurrentSchedule = currentSchedule ?? Schedules[0];
            }
        }
示例#2
0
 public TimeTrigger GetActiveTimeTrigger()
 {
     if (Schedules.Any(s => s.Active))
     {
         return(Schedules.FirstOrDefault(s => s.Active).GetActiveTimeTrigger());
     }
     else //It is possible that a user deletes the active schedule, then there is no active program
     {
         return(null);
     }
 }
示例#3
0
 public TimeTrigger GetActiveTimeTriggerForDevice(string deviceName)
 {
     if (Schedules?.Any(s => s.Active && s.AppliesToDeviceNames.Contains(deviceName)) == true)
     {
         return(Schedules?.FirstOrDefault(s => s.Active && s.AppliesToDeviceNames.Contains(deviceName)).GetActiveTimeTrigger());
     }
     else //It is possible that a user deletes the active schedule, then there is no active program
     {
         return(null);
     }
 }
示例#4
0
        private IEnumerable <int> PopulateWeeks(Schedule schedule)
        {
            List <int> weeks = new List <int>();

            foreach (KeyValuePair <int, double> item in Schedules.FirstOrDefault().Nutrients.FirstOrDefault().WeekAndDoseDict)
            {
                weeks.Add(item.Key);
            }

            return(weeks);
        }
示例#5
0
 private void Cancel()
 {
     if (CurrentSchedule != null)
     {
         if (CurrentSchedule.Id == 0)
         {
             CurrentSchedule = Schedule.FromScheduleClass(Schedules.FirstOrDefault());
         }
         else
         {
             CurrentSchedule = null;
             CurrentSchedule = Schedule.FromScheduleClass(SelectedSchedule);
         }
     }
 }
示例#6
0
        private async void SaveSchedule()
        {
            if (CurrentSchedule == null)
            {
                throw new Exception("Расписание не выбрано");
            }

            if (string.IsNullOrWhiteSpace(CurrentSchedule.Name))
            {
                throw new Exception("Не задано название расписания");
            }

            try
            {
                IsBusy = true;
                var sc = Schedules.FirstOrDefault(s => s.Id == CurrentSchedule.Id) ?? new ScheduleClass();
                if (sc.Id == 0)
                {
                    sc.SetType(CurrentSchedule.Type);
                }
                sc.Days = CurrentSchedule.DaySchedules.Select(s => new List <ValueTimeRange>(s.Spans)).ToArray();
                sc.Name = CurrentSchedule.Name;

                var savedSchedule = await _scheduleRepository.SaveSchedule(sc, CurrentSchedule.Id == 0);

                if (savedSchedule == null)
                {
                    throw new Exception("Не удалось сохранить расписание, попробуйте позже.");
                }
                else
                {
                    if (CurrentSchedule.Id != 0)
                    {
                        Schedules.Remove(SelectedSchedule);
                    }

                    Schedules.Add(savedSchedule);
                    SelectedSchedule = savedSchedule;
                }
            }
            finally
            {
                IsBusy = false;
            }
        }
        private async void  DeleteSchedule()
        {
            int index = Schedules.IndexOf(SelectedItem);

            if (SelectedItem.Exceptions.Count > 0)
            {
                if (await(new ViewModelLocator()).Main.DialogBox("In Use Exception",
                                                                 "The Schedule Is Being Used In The Default Weekly Schedule Or Exceptions. If you choose to continue exceptions contaning this schedule will be deleted too",
                                                                 MessageDialogStyle.AffirmativeAndNegative) ==
                    MessageDialogResult.Affirmative)
                {
                    _dataService.DeleteSchedule(SelectedItem);
                }

                if (index > 0)
                {
                    SelectedItem = Schedules.ElementAt(index - 1);
                }
                else
                {
                    if (Schedules.Count > 0)
                    {
                        SelectedItem = Schedules.FirstOrDefault();
                    }
                }
            }
            else
            {
                _dataService.DeleteSchedule(SelectedItem);
                if (index > 0)
                {
                    SelectedItem = Schedules.ElementAt(index - 1);
                }
                else
                {
                    if (Schedules.Count > 0)
                    {
                        SelectedItem = Schedules.FirstOrDefault();
                    }
                }
            }


            (new ViewModelLocator()).Main.StartScheduler();
        }
示例#8
0
        public ReorderExistingPdfViewModel(Document document, IErrorLogger logger)
        {
            this.Document = document;
            this.Logger   = logger;

            if (ReorderExistingPdfCommand.ReorderOptions?.Schedule == null)
            {
                this.SelectedSchedule = Schedules.FirstOrDefault();
            }
            else
            {
                this.SelectedSchedule         = Schedules.Where(schedule => schedule.ViewName == ReorderExistingPdfCommand.ReorderOptions.Schedule.ViewName).FirstOrDefault();
                this.InclusionExclusionColumn = ReorderExistingPdfCommand.ReorderOptions.InclusionColumn;
                this.SortColumn      = ReorderExistingPdfCommand.ReorderOptions.SortColumn;
                this.SelectedPdfFile = ReorderExistingPdfCommand.ReorderOptions.PdfFileName;
            }

            this.PropertyChanged += ReorderExistingPdfViewModel_PropertyChanged;
        }
示例#9
0
        private async void DropSchedule()
        {
            if (CurrentSchedule != null && CurrentSchedule.Id != null)
            {
                IsBusy = true;
                try
                {
                    const string dropScheduleUrl = @"/Schedules/";
                    await _dataTransport.DeleteRequestAsync(dropScheduleUrl + CurrentSchedule.Id, true);

                    Schedules.Remove(SelectedSchedule);
                    SelectedSchedule = Schedules.FirstOrDefault();
                }
                catch
                {
                    throw new Exception("Не удалось удалить расписание, попробуйте позже.");
                }
                finally
                {
                    IsBusy = false;
                }
            }
        }
        public void Initialize(ViewRequest viewRequest)
        {
            if (Shell.Role == ServiceUserRole.Editor)
            {
                Shell.AddVMCommand("File", "Save",
                                   "SaveChangesCommand", this)
                .SetHotKey(ModifierKeys.Control, Key.S);

                Shell.AddVMCommand("Edit", "Add operation from existing templates",
                                   "OpenTemplatesListCommand", this);

                Shell.AddVMCommand("Edit", "Add new operation",
                                   "CreateOperConfigCommand", this);
            }

            tasks.ClearAndAddRange(cachedService.Tasks.Items
                                   .Select(task => mapper.Map <DesktopTaskNameId>(task)));

            Schedules = cachedService.Schedules.SpawnCollection();

            if (viewRequest is TaskEditorRequest request)
            {
                mapper.Map(request.Task, this);
                HasSchedule = ScheduleId > 0;

                if (request.TaskOpers != null)
                {
                    bindedOpers.ClearAndAddRange(request.TaskOpers.OrderBy(to => to.Number)
                                                 .Select(to => mapper.Map <DesktopOperation>(to)));
                }

                if (request.Task.DependsOn != null)
                {
                    taskDependencies.ClearAndAddRange(request.Task.DependsOn
                                                      .Select(dep =>
                    {
                        tasks
                        .Connect()
                        .Bind(out var cachedTasks)
                        .Subscribe();

                        var desktopDep   = mapper.Map <DesktopTaskDependence>(dep);
                        desktopDep.Tasks = cachedTasks;

                        return(desktopDep);
                    }));
                }

                if (request.DependsOn != null)
                {
                    taskDependencies.ClearAndAddRange(request
                                                      .DependsOn.OrderBy(dep => dep.TaskId));
                }

                if (!string.IsNullOrEmpty(request.Task.Parameters))
                {
                    taskParameters.ClearAndAddRange(JsonConvert
                                                    .DeserializeObject <Dictionary <string, object> >(request.Task.Parameters)
                                                    .Select(pair => new TaskParameter
                    {
                        Name  = pair.Key,
                        Value = pair.Value
                    }));
                }

                TaskDependencies = new ObservableCollectionExtended <DesktopTaskDependence>();

                taskDependencies.Connect()
                .Bind(TaskDependencies)
                .Subscribe(_ => this.RaisePropertyChanged(nameof(TaskDependencies)));

                taskDependencies.Connect()
                .WhenAnyPropertyChanged("TaskId", "MaxSecondsPassed")
                .Subscribe(_ => this.RaisePropertyChanged(nameof(TaskDependencies)));

                if (request.ViewId == "Creating new Task")
                {
                    HasSchedule = true;
                    ScheduleId  = Schedules.First()?.Id;
                    Name        = "New task";
                }

                if (request.ViewId.Contains("copy"))
                {
                    Name = request.ViewId;
                }
            }

            void Changed(object sender, PropertyChangedEventArgs e)
            {
                if (Shell.Role == ServiceUserRole.Viewer || IsDirty || e.PropertyName == "SelectedOperation")
                {
                    return;
                }
                IsDirty = true;
                Title  += '*';
            }

            AllErrors.Connect()
            .Subscribe(_ => IsValid = !AllErrors.Items.Any());

            this.ObservableForProperty(s => s.HasSchedule)
            .Subscribe(hassch =>
                       ScheduleId = hassch.Value ? Schedules.FirstOrDefault()?.Id : null);

            taskParameters.Connect() //todo: real-time updating of duplicates indicators
            .WhenAnyPropertyChanged("Name")
            .Subscribe(_ =>
            {
                foreach (var dim in TaskParameters)
                {
                    dim.IsDuplicate = false;
                }

                var duplicatgroups = TaskParameters
                                     .GroupBy(dim => dim.Name)
                                     .Where(g => g.Count() > 1)
                                     .ToList();

                foreach (var group in duplicatgroups)
                {
                    foreach (var dim in group)
                    {
                        dim.IsDuplicate = true;
                        dim.HasErrors   = true;
                    }
                }

                this.RaisePropertyChanged(nameof(TaskParameters));
            });

            taskParameters.Connect()
            .WhenAnyPropertyChanged("Value")
            .Subscribe(_ => this.RaisePropertyChanged(nameof(TaskParameters)));

            taskParameters.Connect()
            .WhenAnyPropertyChanged("HasErrors")
            .Subscribe(_ =>
            {
                IsValid = !AllErrors.Items.Any() &&
                          !TaskParameters.Any(param => param.HasErrors);
            });

            TaskParameters = new ObservableCollectionExtended <TaskParameter>();

            taskParameters.Connect()
            .Bind(TaskParameters)
            .Skip(1)
            .Subscribe(_ =>
            {
                UpdateParametersList();
                this.RaisePropertyChanged(nameof(TaskParameters));
            });


            ImplementationTypes = implementationTypes.SpawnCollection();

            BindedOpers = new ObservableCollectionExtended <DesktopOperation>();

            bindedOpers.Connect()
            .Bind(BindedOpers)
            .Subscribe(_ => this.RaisePropertyChanged(nameof(bindedOpers)));



            bindedOpers.Connect()
            .Subscribe(_ =>
            {
                var packages = bindedOpers.Items.Where(oper => DataImporters.ContainsKey(oper.ImplementationType))
                               .Select(oper =>
                                       (DeserializeOperationConfigByType(oper.ImplementationType, oper.Config) as
                                        IPackagedImporterConfig)
                                       ?.PackageName).Where(name => !string.IsNullOrEmpty(name)).Distinct().ToList();

                incomingPackages.ClearAndAddRange(packages);
                this.RaisePropertyChanged(nameof(bindedOpers));
            });

            PropertyChanged += Changed;
        } //init vm
示例#11
0
        public void Refresh(Area Area)
        {
            var CurrentSchedules = new List <TimeTableItemViewModel>();

            var SchedulesResult = m_CalculationBll.GetSchedulesByTime(CurrentStation.Schedules, CurrentStation.ESTW.Time);

            if (!SchedulesResult.Succeeded)
            {
                Dispatcher.Invoke(() => MessageBox.Show(SchedulesResult.Message, "Fehler", MessageBoxButton.OK, MessageBoxImage.Error));
                return;
            }

            foreach (var Schedule in SchedulesResult.Result)
            {
                if (Schedule.Train == null)
                {
                    continue;
                }

                bool Visible = true;
                bool IsNew   = false;

                if (Schedule.Time < CurrentStation.ESTW.Time)
                {
                    Visible = false;
                }

                var Current = Schedules.FirstOrDefault(s => s.TrainNumber == Schedule.Train.Number);

                if (Current == null)
                {
                    Current = new TimeTableItemViewModel(Schedule);
                    IsNew   = true;
                }

                if (Area.LiveTrains.ContainsKey(Current.TrainNumber))
                {
                    var LiveTrain = Area.LiveTrains[Current.TrainNumber];
                    Current.Delay = LiveTrain.Delay;

                    var LiveSchedule = LiveTrain.Schedules.FirstOrDefault(s => s.Schedule == Schedule);

                    if (LiveSchedule != null)
                    {
                        Visible           = true;
                        Current.LiveTrack = LiveSchedule.LiveTrack;

                        var Index = LiveTrain.Schedules.IndexOf(LiveSchedule);

                        if (LiveSchedule.LiveDeparture != null || LiveTrain.Schedules.Where((s, i) => i > Index && s.LiveArrival != null).Count() > 0)
                        {
                            Visible = false;
                        }
                    }

                    LeibitTime ActualTime;

                    if (LiveTrain.Block != null && LiveTrain.Block.Track != null)
                    {
                        ActualTime = LiveTrain.Block.Track.Station.ESTW.Time;
                    }
                    else
                    {
                        ActualTime = Area.ESTWs.Where(e => e.IsLoaded).DefaultIfEmpty().Max(e => e.Time);
                    }

                    if (ActualTime != null && LiveTrain.LastModified != null && ActualTime > LiveTrain.LastModified.AddMinutes(1))
                    {
                        Visible = false;
                    }

                    if (Visible)
                    {
                        var DelayInfos = LiveTrain.Schedules.SelectMany(s => s.Delays).Where(d => d.Reason.IsNotNullOrWhiteSpace()).Select(d => d.Reason);

                        if (DelayInfos.Count() > 0)
                        {
                            Current.DelayReason = String.Join(", ", DelayInfos);
                        }

                        var StartSchedule = LiveTrain.Schedules.SingleOrDefault(s => s.Schedule.Handling == eHandling.Start && s.Schedule.Station == CurrentStation);
                        Current.IsReady = StartSchedule != null && StartSchedule.Schedule.Station.ESTW.Time >= StartSchedule.Schedule.Departure.AddMinutes(-2);
                    }
                }

                if (Visible)
                {
                    if (IsNew)
                    {
                        Dispatcher.Invoke(() => Schedules.Add(Current));
                    }

                    CurrentSchedules.Add(Current);
                }
            }

            var RemovedItems = Schedules.Except(CurrentSchedules).ToList();

            Dispatcher.Invoke(() => RemovedItems.ForEach(s => Schedules.Remove(s)));
        }
示例#12
0
        public override void CalcSchedules()
        {
            Schedules.Clear();

            Schedules.Add(Device.StartTime);
            var nextTime = Device.StartTime.AddMinutes(GetFirstSpan());

            //如下一次开始时间 < endtime,且够一个周期的时间
            if (nextTime.AddMinutes(Device.Period * (int)Device.TimeType) <= Device.EndTime)
            {
                Schedules.Add(nextTime);

                while (true)
                {
                    nextTime = nextTime.AddMinutes(Device.Period * (int)Device.TimeType);
                    if (nextTime.AddMinutes(Device.Period * (int)Device.TimeType) > Device.EndTime)
                    {
                        break;
                    }
                    Schedules.Add(nextTime);
                }
            }

            LogFactory.Create().Info($"DEVICE{Device.DeviceId} CalcSchedules ==>{Schedules.Count}, first{Schedules.FirstOrDefault():yyyy-MM-dd HH:mm:ss}, last{Schedules.LastOrDefault():yyyy-MM-dd HH:mm:ss}");
        }
示例#13
0
 public virtual Schedule GetSchedule(string scheduleType)
 {
     return(Schedules.FirstOrDefault(s => s.ScheduleType == scheduleType));
 }