/// <summary>
 ///     Raise the set ready event.
 /// </summary>
 private static void RaiseSetReady()
 {
     SetReady?.Invoke(null, EventArgs.Empty);
 }
        public OrdersViewModel()
        {
            PeriodFilter = new PeriodFilter();
            PeriodFilter.Periods.ForEach(p => p.IsActive = true);
            PeriodFilter.PeriodChanged.Select(p => 0).InvokeCommand(LoadItems);

            Items.ShapeView().OrderBy(p => p.InTime).Apply();
            Items.ShapeView().GroupBy(p => p.InTime.Date).Apply();

            EditorViewModel = new OrderEditorViewModel();
            EditorViewModel.Save.Subscribe(id =>
            {
                if (EditorViewModel.EditingItem.InDate < PeriodFilter.StartDate ||
                    EditorViewModel.EditingItem.InDate > PeriodFilter.EndDate)
                {
                    PeriodFilter.SetManualDate(EditorViewModel.EditingItem.InTime.Date);
                }

                LoadItems.Execute(id).Subscribe();
            });

            SetReady = ReactiveCommand.Create(() =>
            {
                using (var db = DbService.GetDb())
                {
                    var manager = new OrderManager(db);
                    if (IsMultiSelect == false)
                    {
                        manager.ValidateAndSetReadiness(SelectedItem, true);
                    }
                    else
                    {
                        db.BeginTransaction();
                        manager.SetReadiness(Items.OnlySelected(), true);
                        db.CommitTransaction();
                    }
                }
            }, canMultiEdit);
            SetReady.Select(p => 0).InvokeCommand(LoadItems);
            SetReady.ThrownExceptions.Subscribe(async ex => await Interactions.ShowError(ex.Message));
            SetUnready = ReactiveCommand.Create(() =>
            {
                using (var db = DbService.GetDb())
                {
                    var manager = new OrderManager(db);
                    if (IsMultiSelect == false)
                    {
                        manager.ValidateAndSetReadiness(SelectedItem, false);
                    }
                    else
                    {
                        db.BeginTransaction();
                        manager.SetReadiness(Items.OnlySelected(), false);
                        db.CommitTransaction();
                    }
                }
            }, canMultiEdit);
            SetUnready.Select(p => 0).InvokeCommand(LoadItems);
            SwitchReadiness = ReactiveCommand.Create(() =>
            {
                EntityManagerService.DefaultOrderManager.ValidateAndSetReadiness(SelectedItem, !SelectedItem.IsClosed);
            }, canEdit);
            SwitchReadiness.Select(p => 0).InvokeCommand(LoadItems);
            SwitchReadiness.ThrownExceptions.Subscribe(async ex => await Interactions.ShowError(ex.Message));

            DaySummaryViewModel = new DaySummaryViewModel();
            ShowDaySummary      = ReactiveCommand.Create <DateTime>((day) =>
            {
                DaySummaryViewModel.Init(day);
            });

            Print = ReactiveCommand.CreateFromTask(async() =>
            {
                if (SelectedItem.IsClosed == false)
                {
                    await Interactions.ShowError("Заезд не закрыт!");
                    return;
                }
                var report = new OrderForClientReport("Reports/ReportResources/OrderForClient.frx");
                report.ShowReport(SelectedItem.ID);
            }, canEdit);
        }