Расписание занятий(PHP,Laravel, Filament 3)

PHP

Задача: разработать веб-приложение для управления расписанием занятий в учебном заведении.

Требования к функционалу:

  1. Управление структурой данных:
      — добавление новых дней недели, занятий, групп, преподавателей и аудиторий;
      — редактирование существующих данных;
      — удаление ненужных данных.
  2. Отображение расписания:
      — вывод расписания занятий на определённый день недели;
      — возможность фильтрации данных по различным параметрам (группа, преподаватель, аудитория и т. д.);
      — отображение информации о занятом и свободном времени в расписании.
  3. Управление событиями:
      — добавление событий (например, замена преподавателя, отмена занятия и т. п.);
      — отображение событий в календаре;
      — возможность редактирования и удаления событий.
  4. Статистика:
      — отображение статистики использования аудиторий, преподавателей и других параметров;
      — возможность анализа данных для оптимизации расписания.

Установка проекта

Для начала установим проект и подключим нужные библиотеки

Теперь можно подключить филамент

Models and migrations

В нашем проекте будут следующие сущности

  1. Classroom — Аудитория
  2. Teacher — Преподаватель
  3. Group — Группа
  4. Lesson — Расписание занятий
Расписание занятий(PHP,Laravel, Filament 3)

Создадим файлы моделей и миграций

Расписание занятий(PHP,Laravel, Filament 3)

Аудитория(Classroom)

Эта сущность состоит из следующих полей

Имя поляОписаниеТип
NameИмя аудиторииstring
DescriptionОписаниеstring
Migration

Model

Преподаватель(Teacher)

Эта сущность состоит из следующих полей

Имя поляОписаниеТип
LastNameФамилияstring
FirstNameИмяstring
FatherNameОтчествоstring
LectionПредметstring
Migration

Model

Группа(Group)

Эта сущность состоит из следующих полей

Имя поляОписаниеТип
NameИмя группыstring
DescriptionОписаниеstring
Migration

Model

Расписание занятий(Lesson)

Эта сущность состоит из следующих полей

Имя поляОписаниеТип
start_lnДата и время начала занятияdatetime
end_lnДата и время окончания занятияdatetime
ClassroomАудиторияfk:Classroom_id
TeacherПреподавательfk:Teacher_id
GroupГруппаfk:Group_id
Migration

Model

Создание factories и seeders

Для создание тестовых данных для групп, учителей и аудиторий создадим фабрики выполнив в консоли команды:

ClassroomFactory.php

GroupFactory.php

TeacherFactory.php

В файле DatabaseSeeder.php  добавляем следующие строки:

Сохраняем все файлы и запускаем миграцию

Расписание занятий(PHP,Laravel, Filament 3)

Создание ресурсов

Для создания ресурсов необходимо в консоли ввести следующие команды:

Расписание занятий(PHP,Laravel, Filament 3)

Созданные ресурсы сразу появятся в меню. Нам остается только заменить значки.

Расписание занятий(PHP,Laravel, Filament 3)

Создадим пользователя для админки

После создания ресурсов и пользователя можно войти в систему и внести тестовый данные

Ресурс расписания

Ресурс расписания будет выглядеть следующим образом

Расписание занятий(PHP,Laravel, Filament 3)
LessonResource.php

Фильтр

Наш фильтр по умолчанию будет выводить текущую неделю

Для вычисления текущей недели мы использовали следующие переменные

Расписание занятий(PHP,Laravel, Filament 3)

Таблица

Таблица будет сгруппирована по дате лекции

И иметь следующие колонки

Для определения занятости ячейки расписания был создан атрибут в модели Lesson

Расписание занятий(PHP,Laravel, Filament 3)

Действия

Нужно заменить стандартные действия на наши. Если аудитория занята, то вывести кнопку отменить, но если свободна, то вывести модальное окно для указания группы и учителя.

Расписание занятий(PHP,Laravel, Filament 3)

Форма 

Создавать элемент расписания можно только через генерацию на неделю. Редактировать можно уже сгенерированные элементы назначая им Учителя и Группу.

Форма редактирования будет выводить для выбора только два поля. 

В поле Teacher можно будет выбрать учителя у которого нет занятий в это время в других аудиториях. Для этого мы используем параметр modifyQueryUsing

Расписание занятий(PHP,Laravel, Filament 3)

В поле Group можно будет выбрать группу у которой нет занятий в это время в других аудиториях. Для этого мы используем параметр modifyQueryUsing

Генерация расписания на неделю

Заменим кнопку «Добавить» на наше действие.

Для этого нужно найти файл с соответствующим названием.

\app\Filament\Resources\LessonResource\Pages\ListLessons.php

В функцию getHeaderActions  удаляем action create и создаем свой.

  1. Получаем текущую неделю
  2. Создаем Action с формой для выбора дат и нужной нам аудитории
  3. После нажатия submit будет выполняться следующая функция, которая сгенерирует 10 ячеек лекций в с диапазоном в 1 час на каждый день в диапазоне нашей формы

Заменим кнопку «Добавить» на наше действие.

Расписание занятий(PHP,Laravel, Filament 3)

Создание экспорта для пользователя сайта

Начиная с версии 0.2 Filament Excel должен работать как с пакетами  filament/filament , так и с пакетами filament/tables. Самое простое использование — это просто добавить ExportBulkAction к вашим массовым действиям.

Установка пакета

Далее нам нужно добавить кнопку действия на странице списка записей для вашего ресурса.

Теперь мы видим кнопку действия в заголовке таблицы.

Поскольку мы экспортируем из таблицы, все поля будут выгружены из нее, но, используя метод withColumns, мы добавим в выгрузку дополнительное поле updated_at.

Мы также указываем имя файла, используя метод withFilename. И поскольку этот пакет использует пакет laravel-excel, тип файла в методе withWriterType задается с помощью пакета laravel-excel.

Расписание занятий(PHP,Laravel, Filament 3)

После нажатия кнопки export мы загружаем экспортированные данные в виде файла XLSX.

Документацию по этой библиотеке можно найти по ссылке

filament-excel

Создание календаря для расписания занятий

Расписание занятий(PHP,Laravel, Filament 3)

Создадим командой файл с виджетом

Установите пакет Filament FullCalendar через Composer.

Добавить в AdminPanelProvider.php следующие строки

и создадим страницу календаря

app\Filament\Pages\Calendar.php
resources\views\filament\pages\calendar.blade.php

CalendarWidget

Заключение

В результате выполнения данной задачи будет разработано веб-приложение, которое позволит эффективно управлять расписанием занятий в учебном заведении. Это обеспечит прозрачность и доступность информации о расписании для всех участников образовательного процесса: студентов, преподавателей, администрации.

Добавить комментарий