Exemplo n.º 1
0
        public MainWindow(Users user) // user is a param which sended from AuthViewModel [User or Admin]
        {
            InitializeComponent();

            this.DataContext = new MainViewModel(user, this);
            this.User        = user;
            using (var db = new ReserveClassroomDBEntities())
            {
                this.ClassroomsCount = db.Classrooms.ToList().Count();
            };

            GenerateWindowBody();
        }
Exemplo n.º 2
0
        public MainViewModel(Users user, MainWindow oldWindow)
        {
            using (var db = new ReserveClassroomDBEntities())
            {
                this.user   = user;
                this.window = oldWindow;

                listApps       = db.Applications.ToList();           // load applications
                listClassrooms = db.Classrooms.ToList();             // load classrooms
                window.classRoomNumber.ItemsSource = listClassrooms; // bind MainWindow container to local collection

                DateButtonsSet();
            }
        }
        public void RefreshLocalApplicationView()
        {
            using (var db = new ReserveClassroomDBEntities())
            {
                this.Applications = db.Applications.Include("Users").Include("Classrooms").Include("Groups")
                                    .Where(a => a.Date == CurrentDate &&
                                           a.Classrooms.Number == ClassroomNumber &&
                                           a.LessonNumber == LessonNumber).ToList();

                this.ApplicationView = CollectionViewSource.GetDefaultView(Applications
                                                                           .Where(a => (a.Status.Type == "InProgress" || a.Status.Type == "Accepted")).ToList());
                this.AvaliableSeatCount = getAvaliableSeatCount();
            }
        }
Exemplo n.º 4
0
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            try
            {
                using (var db = new ReserveClassroomDBEntities())
                {
                    var appStatus = db.Applications.Include("Status").First(a => a.Status.Type == value.ToString()).Status.Type;

                    // if application has status Accepted, converter disables "Принять" button
                    // if application has status InProgress, converter enables "Принять" button

                    return((appStatus == "InProgress") ? true : false);
                }
            }
            catch { return(true); }
        }
Exemplo n.º 5
0
        public ReserveViewModel(DateTime date, int classroomNumber, int lessonNumber, Users user)
        {
            CurrentDate     = date;
            LessonNumber    = lessonNumber;
            ClassroomNumber = classroomNumber;
            SelectedUser    = user;

            // enabling checkboxes depending on user's role
            isCheckBoxActive = (user.Role == "admin") ? true : false;


            using (var db = new ReserveClassroomDBEntities())
            {
                // Get data for comboboxes
                Users  = db.Users.ToList();
                Groups = db.Groups.ToList();
            }
        }
        public AdminAcceptingViewModel(DateTime date, int classroomNumber, int lessonNumber, Users user, AdminAccepting ownedWindow)
        {
            using (var db = new ReserveClassroomDBEntities())
            {
                this.CurrentDate     = date;
                this.LessonNumber    = lessonNumber;
                this.ClassroomNumber = classroomNumber;
                this.User            = user;
                this.OwnedWindow     = ownedWindow;

                // Load applications from db
                Applications = db.Applications.Include("Users").Include("Classrooms").Include("Groups")
                               .Where(a => a.Date == CurrentDate &&
                                      a.Classrooms.Number == ClassroomNumber &&
                                      a.LessonNumber == LessonNumber).ToList();

                // Display only "Accepted" and "InProgress" Applications
                ApplicationView = CollectionViewSource.GetDefaultView(Applications
                                                                      .Where(a => a.Status.Type == "InProgress" || a.Status.Type == "Accepted").ToList());
                AvaliableSeatCount = getAvaliableSeatCount();
            }
        }
 private int getFreeSeatCount()
 {
     // take max capbility of classroom
     using (var db = new ReserveClassroomDBEntities())
         return(db.Classrooms.FirstOrDefault(g => g.Number == this.ClassroomNumber).MaxPersonCount);
 }
Exemplo n.º 8
0
        public void GenerateWindowBody()
        {
            WrapApplicationsPanel.Children.Clear();

            using (var db = new ReserveClassroomDBEntities())
            {
                var localApps = db.Applications.Where(a => a.Date == this.CurrentDate).ToList();

                // Всего у нас 8 рядов (8 пар)
                for (int lessonNumber = 1; lessonNumber <= 8; lessonNumber++)
                {
                    // Выбираем заявки или пары по каждой из 8 пар
                    var applications = localApps.Where(a => a.LessonNumber == lessonNumber).ToList();

                    // Если есть записи с такой парой
                    if (applications.Count > 0)
                    {
                        // Проверяем каждую аудитрию
                        for (int classroomNumber = 1; classroomNumber <= this.ClassroomsCount; classroomNumber++)
                        {
                            var app = applications.FirstOrDefault(a => a.Classrooms.Number == classroomNumber);

                            // Если есть заявка на текщую итерируемую аудиторию
                            if (app != null)
                            {
                                // Количество заявок на одну пару + аудиторию
                                var countOfApplications = GetApplicationsCountForLesson(applications, classroomNumber);

                                // Считаем количество занятых мест с учетом пар по расписанию и утвежденных заявок
                                var countOfStudents = GetTakenSeatsForLesson(applications, classroomNumber);

                                // Считаем количество свободных мест
                                var freeSeats = app.Classrooms.MaxPersonCount - countOfStudents;


                                var btn = new Button()
                                {
                                    Content  = freeSeats, // К-во свободных мест
                                    Width    = 80,
                                    Height   = 71,
                                    Tag      = $"{classroomNumber}||{lessonNumber}||{app.Status.Type}",
                                    FontSize = 16,
                                    // Уставнавливаем bg в зависимости от статуса и количества свободных мест
                                    Background = GetBackgroundAccordingToStatus(app, freeSeats),
                                };

                                // Подписали метод на событие кнопки
                                btn.Click += BtnClickCallback;


                                var label = new Label()
                                {
                                    Content    = countOfApplications, // К-во заявок
                                    Foreground = new SolidColorBrush(Colors.White),
                                    Margin     = new Thickness(-20, -5, 0, 0),
                                    FontSize   = 15,
                                };

                                // Добавили компоненты в MainWindow
                                WrapApplicationsPanel.Children.Add(btn);
                                WrapApplicationsPanel.Children.Add(label);
                            }
                            else
                            {
                                SetEmptyButton(classroomNumber, lessonNumber);
                            }
                        }
                    }
                    else // Если нет записей - ряд из пустых кнопкок
                    {
                        for (int i = 1; i <= this.ClassroomsCount; i++)
                        {
                            SetEmptyButton(i, lessonNumber);
                        }
                    }
                }
            }
        }