Комментарии 8
Долистал :)
Прямо в тексте пишите запросы. Можно как- то группировать в отдельном файле или использовать orm
Мне кажется, было бы лучше, если бы вы просто оставили ссылку на репу с проектом - даже при потребности в подобном функционале это все копипастить - ад, не говоря уж о том, чтобы это просто пролистать
Мне тоже кажется что в таком виде это не может быть полезно вообще никому. Как правило мне интересен график работы сотрудников, в рамках проекта где есть управление этими самыми сотрудниками. То есть, это как некая дополнительная часть к моим сотрудникам.
Если же мы ставим цель наполнить и распечатать, то мне нужен либо какой то плагин к системе которая уже развернута (СMS, CRM и т.п.), либо какой то докер образ который я смогу быстро запустить. А еще лучше, чтобы это уже было где то развернуто, и мне оставалось только заполнить.
Согласен. Код точно спрятать под каты, либо показывать только куски в которых описана идея того или иного блока: посылка -> результат. Что не нужно хорошо знать PHP или JS чтобы понять суть. Блок-схемы или какую-то инфографику, тогда статья внезапно станет общеобразовательной.
Стоит задаваться вопросом в конце статьи: а что я узнал (нового), что получил?
Тема интересная для планирования работы сотрудников в более-менее внятной конторе.
Но
не увидел как происходит взаимодействие с производственным каледарем.
зато увидел ненужные здесь портянки кода. Разве гитхаб уже заблокировали?
Итого — вполне ожидаемое итого.
Первый раз здесь писал, на будущее учту
Привет. Всё прекрасно описано и пусть не говорят что комуто не нравится что код вы выложили тут а не на git. Единственное что было бы это указать параметры базы данных. Я конечно по коду посмотрю что и где запрашивается и постараюсь воссоздать БД но структуру я бы добавил чтобы позлить ещё какое-то количество читателей.
Молодец что создал такоё проект.
CREATE DATABASE IF NOT EXISTS `schedule_db` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
USE `schedule_db`;
CREATE TABLE IF NOT EXISTS `employees` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`fullname` varchar(255) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
CREATE TABLE IF NOT EXISTS `employee_status` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`employee_id` int(11) NOT NULL,
`start_date` date NOT NULL,
`end_date` date NOT NULL,
`status_type` enum('vacation','sick_leave') NOT NULL,
`created_at` timestamp NOT NULL DEFAULT current_timestamp(),
`created_by` int(11) DEFAULT NULL COMMENT 'ID пользователя, установившего статус',
PRIMARY KEY (`id`),
KEY `date_range` (`start_date`,`end_date`),
KEY `employee_dates` (`employee_id`,`start_date`,`end_date`),
CONSTRAINT `employee_status_ibfk_1` FOREIGN KEY (`employee_id`) REFERENCES `employees` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
DELIMITER $$
CREATE TRIGGER IF NOT EXISTS `check_status_overlap` BEFORE INSERT ON `employee_status` FOR EACH ROW BEGIN
IF EXISTS (
SELECT 1 FROM employee_status
WHERE employee_id = NEW.employee_id
AND NEW.start_date <= end_date
AND NEW.end_date >= start_date
) THEN
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Новый статус пересекается с существующим периодом';
END IF;
END$$
DELIMITER ;
CREATE TABLE IF NOT EXISTS `shifts` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`employee_id` int(11) NOT NULL,
`shift_date` date NOT NULL,
`shift_type` enum('day','night','off') NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `employee_date` (`employee_id`,`shift_date`),
CONSTRAINT `shifts_ibfk_1` FOREIGN KEY (`employee_id`) REFERENCES `employees` (`id`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
Мини система web управления графиком смен сотрудников