private List <ButtonConfig> GetControls()
        {
            var buttonConfigs = new List <ButtonConfig> {
                GetRefreshButtonConfig(),
                new ButtonConfig {
                    Command = ReactiveCommand.Create(() => {
                        _host.AddPageAsync(
                            new StudentFormToken("Редактирование " + this.Student.LastName, this.Student));
                    }),
                    Text = "Редактировать"
                },
                new ButtonConfig {
                    Command = ReactiveCommand.Create(() => {
                        var noteListFormToken = new NoteListFormToken("Заметки", () => new StudentNote {
                            Student  = this.Student,
                            EntityId = this.Student.Id
                        }, _context.StudentNotes.Where(note => note.EntityId == this.Student.Id).ToList());
                        _windowPageHost.AddPageAsync(noteListFormToken);
                    }),
                    Text = "Заметки"
                }
            };

            return(buttonConfigs);
        }
예제 #2
0
        private async Task <List <ButtonConfig> > GetControls()
        {
            var buttonConfigs = new List <ButtonConfig>();
            var nextLesson    = (await _db.Lessons.Where(lesson => lesson._Date != null &&
                                                         lesson.Schedule != null &&
                                                         lesson._Date.Equals(this.Lesson._Date))
                                 .ToListAsync())
                                .OrderBy(lesson => lesson.Schedule.Begin)
                                .FirstOrDefault(lesson => lesson.Schedule.Begin > this.Lesson.Schedule.Begin);

            if (nextLesson != null)
            {
                buttonConfigs.Add(new ButtonConfig
                {
                    Command = ReactiveCommand.Create(() =>
                    {
                        _tabPageHost.AddPageAsync(new RegistrationPageToken("Регистрация", nextLesson));
                    }),
                    Text = "Следующее занятие",
                });
            }
            buttonConfigs.Add(new ButtonConfig
            {
                Command = ReactiveCommand.Create(() =>
                {
                    var title = this.Lesson.Group == null
                        ? this.Lesson.Stream.Name
                        : this.Lesson.Group.Name + " " +
                                Localization["common.lesson.type." + this.Lesson.LessonType] + " " +
                                this.Lesson.Date?.ToString("dd.MM");
                    var token = new TableLessonViewToken(title, this.Lesson);
                    _tabPageHost.AddPageAsync <TableLessonViewModule, TableLessonViewToken>(token);
                }),
                Text = "Занятие 1"
            });
            buttonConfigs.Add(new ButtonConfig
            {
                Command = ReactiveCommand.Create(() =>
                                                 _windowPageHost.AddPageAsync(new NoteListFormToken(
                                                                                  "Заметки",
                                                                                  () => new LessonNote {
                    Lesson = Lesson, EntityId = Lesson.Id
                },
                                                                                  Lesson.Notes
                                                                                  ))
                                                 ),
                Text = "Заметки"
            });
            buttonConfigs.Add(new ButtonConfig
            {
                Command = ReactiveCommand.Create(() =>
                                                 _windowPageHost.AddPageAsync(new LessonFormToken("Занятие", this.Lesson, _tabPageHost))
                                                 ),
                Text = "Редактировать"
            });
            return(buttonConfigs);
        }
        private void OpenLessonEditForm()
        {
            if (this.SelectedLesson == null)
            {
                return;
            }

            var lesson = this.SelectedLesson.Lesson;
            var lessonFormModuleToken = new LessonFormToken("Lesson", lesson, _currentHost);

            _windowPageHost.AddPageAsync <LessonFormModule, LessonFormToken>(lessonFormModuleToken);
        }
예제 #4
0
 private void AddStudent_Click()
 {
     _windowPageHost.AddPageAsync(new StudentFormToken("Добавить студента", new StudentEntity()));
 }
예제 #5
0
        public RegistrationPageModel(
            StudentCardService studentCardService,
            PhotoService photoService,
            TabPageHost tabPageHost,
            WindowPageHost windowPageHost,
            LocalDbContext db,
            RegistrationPageToken token,
            MainReducer mainReducer,
            PageControllerReducer reducer
            )
        {
            _tabPageHost            = tabPageHost;
            _windowPageHost         = windowPageHost;
            _db                     = db;
            _token                  = token;
            _mainReducer            = mainReducer;
            this.StudentCardService = studentCardService;
            this.PhotoService       = photoService;
            this.DoRegister         = ReactiveCommand.Create(() => {
                if (this.AllStudentsMode)
                {
                    foreach (IStudentViewModel selectedStudent in this.SelectedStudents.ToList())
                    {
                        RegisterExtStudent(selectedStudent.Student);
                    }
                }
                else
                {
                    Register();
                }
            });
            this.DoUnRegister             = ReactiveCommand.Create(UnRegister);
            this.OpenStudentLessonHandler = ReactiveCommand.Create(() =>
                                                                   OpenLesson(this.SelectedStudentLessonNote?.Note?.StudentLesson?.Lesson));

            this.ShowStudent = ReactiveCommand.Create(() => {
                var selectedStudent      = _selectedStudent;
                var studentViewPageToken = new StudentViewPageToken("Студент", selectedStudent);
                tabPageHost.AddPageAsync <StudentViewPageModule, StudentViewPageToken>(studentViewPageToken);
            });
            this.AddStudentNote = ReactiveCommand.Create(() => {
                var noteFormToken = new NoteListFormToken("Заметки", () => new StudentLessonNote()
                {
                    StudentLesson = _selectedStudentLesson.StudentLesson,
                    EntityId      = _selectedStudentLesson.StudentLesson.Id
                }, _selectedStudentLesson.StudentLesson.Notes);
                windowPageHost.AddPageAsync <NoteListFormModule, NoteListFormToken>(noteFormToken);
            });
            this.ToggleAllStudentTable = new ButtonConfig {
                Command = ReactiveCommand.Create(() => this.AllStudentsMode = !this.AllStudentsMode),
                Text    = Localization["Все студенты"]
            };
            this.AllStudentsFilter = (o, s) => {
                var student      = ((IStudentViewModel)o).Student;
                var alreadyAdded =
                    IsStudentAlreadyRegistered(RegisteredStudents.Cast <StudentLessonInfoViewModel>(), student) ||
                    IsStudentAlreadyRegistered(LessonStudents.Cast <StudentLessonInfoViewModel>(), student);
                if (alreadyAdded)
                {
                    return(false);
                }
                s = s.ToLowerInvariant();
                return(student.FirstName != null &&
                       student.FirstName.ToLowerInvariant()
                       .Contains(s) ||
                       student.LastName != null &&
                       student.LastName.ToLowerInvariant()
                       .Contains(s) ||
                       student.SecondName != null &&
                       student.SecondName.ToLowerInvariant()
                       .Contains(s));
            };

            InitTableConfigs();
            Init(token.Lesson);
            this.WhenActivated(disposable => {
                this.WhenAnyValue(model => model.TimerState)
                .Where(LambdaHelper.NotNull)
                .ObserveOnDispatcher(DispatcherPriority.Background)
                .Subscribe(state => {
                    this.TimerString = $"{state.TimeLeft:hh\\:mm\\:ss}/{state.CurrentTime:HH:mm:ss}";
                }).DisposeWith(disposable);
                this.WhenAnyValue(model => model.Lesson)
                .Where(LambdaHelper.NotNull)
                .ObserveOnDispatcher(DispatcherPriority.Background)
                .Subscribe(entity => {
                    var groupName  = entity.Group?.Name ?? entity.Stream.Name;
                    var lessonInfo =
                        $"{Localization["common.lesson.type." + entity.LessonType]}: {entity.Order}/{entity.GetLessonsCount()}";
                    this.LessonInfoState = new LessonInfoState {
                        GroupName  = groupName,
                        LessonInfo = lessonInfo,
                        Date       = entity.Date?.ToString("dd.MM.yyyy"),
                        Time       =
                            $"[{entity.Schedule.OrderNumber}] {entity.Schedule.Begin:hh\\:mm} - {entity.Schedule.End:hh\\:mm}"
                    };
                }).DisposeWith(disposable);
                this.WhenAnyValue(model => model.AllStudentsMode)
                .Throttle(TimeSpan.FromMilliseconds(100))
                .ObserveOnDispatcher(DispatcherPriority.Background)
                .Subscribe(b => {
                    this.ToggleAllStudentTable.Text = b ? Localization["Занятие"] : Localization["Все студенты"];
                    if (!b || this.AllStudents.Count != 0)
                    {
                        return;
                    }
                    var studentViewModels = db.Students
                                            .Include(model => model.Groups)
                                            .ToList() // create query and load
                                            .Select(model => new StudentViewModel(model))
                                            .ToList();
                    this.AllStudents.AddRange(studentViewModels);
                }).DisposeWith(disposable);

                this.WhenAnyValue(model => model.IsLessonChecked)
                .ObserveOnDispatcher(DispatcherPriority.Background)
                .Subscribe(b => {
                    if (this.Lesson == null)
                    {
                        return;
                    }

                    this.Lesson.Checked = b;
                    this._db.ThrottleSave();
                }).DisposeWith(disposable);
                this.LessonStudentsTableConfig.SelectedItem
                .Where(LambdaHelper.NotNull)
                .Merge(this.RegisteredStudentsTableConfig.SelectedItem.AsObservable().Where(LambdaHelper.NotNull))
                .Cast <StudentLessonInfoViewModel>()
                .Do(o => this._selectedStudentLesson = o)
                .Select(o => o.StudentLesson.Student)
                .Merge(this.AllStudentsTableConfig.SelectedItem.Where(LambdaHelper.NotNull))
                .Throttle(TimeSpan.FromMilliseconds(200))
                .Subscribe
                (
                    async o => {
                    var studentEntity = o as StudentEntity;
                    _selectedStudent  = studentEntity;
                    await UpdateDescription(studentEntity);
                    await UpdateStudentLessonNotes(studentEntity);
                }
                ).DisposeWith(disposable);

                this.WhenRemoved <LessonEntity>()
                .Where(entities => entities.Any(entity => entity.Id == this.Lesson?.Id))
                .Subscribe(_ => token.Deactivate())
                .DisposeWith(disposable);
                this.WhenRemoved <StudentLessonNote>()
                .Merge(this.WhenAdded <StudentLessonNote>())
                .Merge(this.WhenUpdated <StudentLessonNote>())
                .Where(notes => this._selectedStudent != null &&
                       notes.Any(note => note.StudentLesson._StudentId == this._selectedStudent.Id))
                .ObserveOnDispatcher(DispatcherPriority.Background)
                .Subscribe(_ => UpdateStudentLessonNotes(this._selectedStudent));
                this.StudentCardService.ReadStudentCard.Subscribe(ReadStudentData);
            });
            GetControls()
            .ToObservable()
            .TakeUntil(DestroySubject)
            .Subscribe(controls =>
            {
                reducer.Dispatch(new RegisterControlsAction(token, controls));
            });
        }