/
Riny
/
additional-duties-system
Обзор
Документация
Войти
/
Riny
/
additional-duties-system
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
database/schema.sql
938 строк
41 KB
Riny
Загрузить файлы в «»
24 июн 2026, 05:18
Верифицирован
24 июн 2026, 05:18
3640fca
Код
Авторство
О чём код?
CREATE TABLE IF NOT EXISTS roles ( role_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(100) NOT NULL UNIQUE, access_level INT NOT NULL, CONSTRAINT chk_roles_access_level CHECK (access_level BETWEEN 1 AND 4) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE IF NOT EXISTS system_users ( user_id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(100) NOT NULL UNIQUE, password_hash VARCHAR(255) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE IF NOT EXISTS user_roles ( user_id INT NOT NULL, role_id INT NOT NULL, PRIMARY KEY (user_id, role_id), KEY idx_user_roles_role (role_id), CONSTRAINT user_roles_ibfk_1 FOREIGN KEY (user_id) REFERENCES system_users(user_id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT user_roles_ibfk_2 FOREIGN KEY (role_id) REFERENCES roles(role_id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE IF NOT EXISTS employees ( employee_id INT AUTO_INCREMENT PRIMARY KEY, full_name VARCHAR(150) NOT NULL, salary DECIMAL(12,2) NOT NULL, qualification VARCHAR(100) DEFAULT NULL, user_id INT NOT NULL UNIQUE, KEY idx_employees_user_id (user_id), CONSTRAINT employees_ibfk_1 FOREIGN KEY (user_id) REFERENCES system_users(user_id) ON UPDATE CASCADE, CONSTRAINT chk_employees_salary CHECK (salary >= 0) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE IF NOT EXISTS work_types ( work_type_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(150) NOT NULL UNIQUE, payment_amount DECIMAL(12,2) NOT NULL, CONSTRAINT chk_work_types_payment CHECK (payment_amount >= 0) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE IF NOT EXISTS additional_work ( work_id INT AUTO_INCREMENT PRIMARY KEY, responsible_employee_id INT NOT NULL, work_type_id INT NOT NULL, start_date DATE NOT NULL, end_date DATE DEFAULT NULL, planned_duration INT NOT NULL, planned_employee_count INT NOT NULL, KEY idx_additional_work_employee (responsible_employee_id), KEY idx_additional_work_type (work_type_id), CONSTRAINT additional_work_ibfk_1 FOREIGN KEY (responsible_employee_id) REFERENCES employees(employee_id) ON UPDATE CASCADE, CONSTRAINT additional_work_ibfk_2 FOREIGN KEY (work_type_id) REFERENCES work_types(work_type_id) ON UPDATE CASCADE, CONSTRAINT chk_additional_work_duration CHECK (planned_duration > 0), CONSTRAINT chk_additional_work_employee_count CHECK (planned_employee_count > 0), CONSTRAINT chk_additional_work_dates CHECK (end_date IS NULL OR end_date >= start_date) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; CREATE TABLE IF NOT EXISTS work_execution ( work_id INT NOT NULL, employee_id INT NOT NULL, calculated_bonus DECIMAL(12,2) NOT NULL DEFAULT 0, PRIMARY KEY (work_id, employee_id), KEY idx_work_execution_employee (employee_id), CONSTRAINT work_execution_ibfk_1 FOREIGN KEY (work_id) REFERENCES additional_work(work_id) ON DELETE CASCADE ON UPDATE CASCADE, CONSTRAINT work_execution_ibfk_2 FOREIGN KEY (employee_id) REFERENCES employees(employee_id) ON UPDATE CASCADE, CONSTRAINT chk_work_execution_bonus CHECK (calculated_bonus >= 0) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci; INSERT IGNORE INTO roles(name, access_level) VALUES ('ADMIN', 1), ('MANAGER', 2), ('EMPLOYEE', 3), ('VIEWER', 4); UPDATE roles SET access_level = 1 WHERE name = 'ADMIN' AND access_level NOT BETWEEN 1 AND 4; UPDATE roles SET access_level = 2 WHERE name = 'MANAGER' AND access_level NOT BETWEEN 1 AND 4; UPDATE roles SET access_level = 3 WHERE name = 'EMPLOYEE' AND access_level NOT BETWEEN 1 AND 4; UPDATE roles SET access_level = 4 WHERE name = 'VIEWER' AND access_level NOT BETWEEN 1 AND 4; -- ----------------------------------------------------------------------------- -- Фиктивные демонстрационные данные. Блок не изменяет таблицу roles. -- Пароль для всех созданных пользователей: DemoPass!2026 -- ----------------------------------------------------------------------------- INSERT IGNORE INTO system_users(username, password_hash) VALUES ('admin.demo', 'QJ2OQ7+UISjKpCX8vm8A8A==:qqce0SizENAFFJjfdX3YyhZA8I2tHDc2adLIb8m5Ihc='), ('manager.ivanov', 'cuqzImniOn8NaHd9onfnpg==:lvR8B/b5Is3sJeDnG6n7X83uGR3hxtQ5FLkUfaltrWU='), ('manager.smirnova', 'MQy9D2BXmimLHYfUtU4BAg==:bwCNVedcQL8ihBAlxSlPqX2hG84IAj5XXlhxhvRCfM0='), ('petrov', '5EyYE092cqCJeRlF1PN+3w==:vBM+k/Q8FDtllWwTSOQeBJyDQWX4ywlONPQ7qkkSPxY='), ('sidorova', 'G/B0oh6WbF5FUMUREUTGBQ==:ztuSMsC8Xxo05v1+KOWha3IA0gOumOlPtpPqmkUHUvE='), ('kuznetsov', 'lVGh3kWtWp33n7i2ggA4AQ==:1FW/cGYfVO1Sep1REszEahEAx5uG+Imcuogkb+Ajm0c='), ('volkov', 'EGf5JrKm9pyGhTVPUK8spg==:We8WM6MgvyBe55QzoNRMyRY6kvF37jhoxJKncgARnzg='), ('morozova', '9+dWARn3cE/DYK3QD6I28Q==:ClbwDEf58feMWzyIkDgxoksj+ua5lOzBjUQ2KAQmnjU='), ('lebedev', 'jz+ROE1fBZYqCXQ1tRQqsA==:na0zucNeLiTnz7+VTz53Bw+bze5DUDIzdkl+RchlGVI='), ('novikova', 'fDcB8DKIcWRuwfu9Tilvlg==:awGPBxVVn/hX4ENZyYi802+Gra5gwd0A/fmgqNBW4Po='), ('viewer.demo', 'CFxSYecI4Tuxdp+A7GacYg==:URXrxoef08S7tIVRjA3PNGehvnimGE54hX2TYVePKm4='); INSERT IGNORE INTO user_roles(user_id, role_id) SELECT u.user_id, r.role_id FROM system_users u INNER JOIN roles r ON r.name = 'ADMIN' WHERE u.username = 'admin.demo'; INSERT IGNORE INTO user_roles(user_id, role_id) SELECT u.user_id, r.role_id FROM system_users u INNER JOIN roles r ON r.name = 'MANAGER' WHERE u.username = 'manager.ivanov'; INSERT IGNORE INTO user_roles(user_id, role_id) SELECT u.user_id, r.role_id FROM system_users u INNER JOIN roles r ON r.name = 'MANAGER' WHERE u.username = 'manager.smirnova'; INSERT IGNORE INTO user_roles(user_id, role_id) SELECT u.user_id, r.role_id FROM system_users u INNER JOIN roles r ON r.name = 'EMPLOYEE' WHERE u.username = 'petrov'; INSERT IGNORE INTO user_roles(user_id, role_id) SELECT u.user_id, r.role_id FROM system_users u INNER JOIN roles r ON r.name = 'EMPLOYEE' WHERE u.username = 'sidorova'; INSERT IGNORE INTO user_roles(user_id, role_id) SELECT u.user_id, r.role_id FROM system_users u INNER JOIN roles r ON r.name = 'EMPLOYEE' WHERE u.username = 'kuznetsov'; INSERT IGNORE INTO user_roles(user_id, role_id) SELECT u.user_id, r.role_id FROM system_users u INNER JOIN roles r ON r.name = 'EMPLOYEE' WHERE u.username = 'volkov'; INSERT IGNORE INTO user_roles(user_id, role_id) SELECT u.user_id, r.role_id FROM system_users u INNER JOIN roles r ON r.name = 'EMPLOYEE' WHERE u.username = 'morozova'; INSERT IGNORE INTO user_roles(user_id, role_id) SELECT u.user_id, r.role_id FROM system_users u INNER JOIN roles r ON r.name = 'EMPLOYEE' WHERE u.username = 'lebedev'; INSERT IGNORE INTO user_roles(user_id, role_id) SELECT u.user_id, r.role_id FROM system_users u INNER JOIN roles r ON r.name = 'EMPLOYEE' WHERE u.username = 'novikova'; INSERT IGNORE INTO user_roles(user_id, role_id) SELECT u.user_id, r.role_id FROM system_users u INNER JOIN roles r ON r.name = 'VIEWER' WHERE u.username = 'viewer.demo'; INSERT IGNORE INTO work_types(name, payment_amount) VALUES ('Инвентаризация склада', 18000.00), ('Подготовка отчетности', 15000.00), ('Настройка рабочих мест', 22000.00), ('Обучение новых сотрудников', 20000.00), ('Аудит документации', 16000.00), ('Переезд архива', 14000.00), ('Тестирование релиза', 24000.00), ('Срочная обработка заявок', 12000.00); INSERT INTO employees(full_name, salary, qualification, user_id) SELECT 'Ольга Васильева', 145000.00, 'Высшая категория', u.user_id FROM system_users u WHERE u.username = 'admin.demo' AND NOT EXISTS (SELECT 1 FROM employees e WHERE e.user_id = u.user_id); INSERT INTO employees(full_name, salary, qualification, user_id) SELECT 'Дмитрий Иванов', 125000.00, 'Ведущий специалист', u.user_id FROM system_users u WHERE u.username = 'manager.ivanov' AND NOT EXISTS (SELECT 1 FROM employees e WHERE e.user_id = u.user_id); INSERT INTO employees(full_name, salary, qualification, user_id) SELECT 'Елена Смирнова', 122000.00, 'Старший специалист', u.user_id FROM system_users u WHERE u.username = 'manager.smirnova' AND NOT EXISTS (SELECT 1 FROM employees e WHERE e.user_id = u.user_id); INSERT INTO employees(full_name, salary, qualification, user_id) SELECT 'Алексей Петров', 88000.00, 'Первая категория', u.user_id FROM system_users u WHERE u.username = 'petrov' AND NOT EXISTS (SELECT 1 FROM employees e WHERE e.user_id = u.user_id); INSERT INTO employees(full_name, salary, qualification, user_id) SELECT 'Мария Сидорова', 92000.00, 'Старший специалист', u.user_id FROM system_users u WHERE u.username = 'sidorova' AND NOT EXISTS (SELECT 1 FROM employees e WHERE e.user_id = u.user_id); INSERT INTO employees(full_name, salary, qualification, user_id) SELECT 'Павел Кузнецов', 78000.00, 'Средний уровень', u.user_id FROM system_users u WHERE u.username = 'kuznetsov' AND NOT EXISTS (SELECT 1 FROM employees e WHERE e.user_id = u.user_id); INSERT INTO employees(full_name, salary, qualification, user_id) SELECT 'Сергей Волков', 81000.00, '1.10', u.user_id FROM system_users u WHERE u.username = 'volkov' AND NOT EXISTS (SELECT 1 FROM employees e WHERE e.user_id = u.user_id); INSERT INTO employees(full_name, salary, qualification, user_id) SELECT 'Ирина Морозова', 76000.00, 'Младший специалист', u.user_id FROM system_users u WHERE u.username = 'morozova' AND NOT EXISTS (SELECT 1 FROM employees e WHERE e.user_id = u.user_id); INSERT INTO employees(full_name, salary, qualification, user_id) SELECT 'Артем Лебедев', 99000.00, 'Ведущий специалист', u.user_id FROM system_users u WHERE u.username = 'lebedev' AND NOT EXISTS (SELECT 1 FROM employees e WHERE e.user_id = u.user_id); INSERT INTO employees(full_name, salary, qualification, user_id) SELECT 'Наталья Новикова', 85000.00, 'Первая категория', u.user_id FROM system_users u WHERE u.username = 'novikova' AND NOT EXISTS (SELECT 1 FROM employees e WHERE e.user_id = u.user_id); INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-05-10', '2026-05-12', 16, 3 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Инвентаризация склада' WHERE ru.username = 'manager.ivanov' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'manager.ivanov' AND tw.name = 'Инвентаризация склада' AND aw.start_date = '2026-05-10' AND aw.planned_duration = 16 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 8400.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.ivanov' AND wt.name = 'Инвентаризация склада' AND aw.start_date = '2026-05-10' AND aw.planned_duration = 16 AND eu.username = 'manager.ivanov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 7200.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.ivanov' AND wt.name = 'Инвентаризация склада' AND aw.start_date = '2026-05-10' AND aw.planned_duration = 16 AND eu.username = 'petrov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 7800.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.ivanov' AND wt.name = 'Инвентаризация склада' AND aw.start_date = '2026-05-10' AND aw.planned_duration = 16 AND eu.username = 'sidorova'; INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-05-20', '2026-05-22', 18, 2 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Подготовка отчетности' WHERE ru.username = 'manager.smirnova' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'manager.smirnova' AND tw.name = 'Подготовка отчетности' AND aw.start_date = '2026-05-20' AND aw.planned_duration = 18 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 9750.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.smirnova' AND wt.name = 'Подготовка отчетности' AND aw.start_date = '2026-05-20' AND aw.planned_duration = 18 AND eu.username = 'manager.smirnova'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 9000.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.smirnova' AND wt.name = 'Подготовка отчетности' AND aw.start_date = '2026-05-20' AND aw.planned_duration = 18 AND eu.username = 'novikova'; INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-06-03', NULL, 24, 4 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Настройка рабочих мест' WHERE ru.username = 'petrov' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'petrov' AND tw.name = 'Настройка рабочих мест' AND aw.start_date = '2026-06-03' AND aw.planned_duration = 24 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'petrov' AND wt.name = 'Настройка рабочих мест' AND aw.start_date = '2026-06-03' AND aw.planned_duration = 24 AND eu.username = 'petrov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'petrov' AND wt.name = 'Настройка рабочих мест' AND aw.start_date = '2026-06-03' AND aw.planned_duration = 24 AND eu.username = 'kuznetsov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'petrov' AND wt.name = 'Настройка рабочих мест' AND aw.start_date = '2026-06-03' AND aw.planned_duration = 24 AND eu.username = 'volkov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'petrov' AND wt.name = 'Настройка рабочих мест' AND aw.start_date = '2026-06-03' AND aw.planned_duration = 24 AND eu.username = 'morozova'; INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-04-15', '2026-04-18', 20, 3 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Обучение новых сотрудников' WHERE ru.username = 'sidorova' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'sidorova' AND tw.name = 'Обучение новых сотрудников' AND aw.start_date = '2026-04-15' AND aw.planned_duration = 20 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 8666.67 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'sidorova' AND wt.name = 'Обучение новых сотрудников' AND aw.start_date = '2026-04-15' AND aw.planned_duration = 20 AND eu.username = 'sidorova'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 9333.33 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'sidorova' AND wt.name = 'Обучение новых сотрудников' AND aw.start_date = '2026-04-15' AND aw.planned_duration = 20 AND eu.username = 'lebedev'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 5333.33 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'sidorova' AND wt.name = 'Обучение новых сотрудников' AND aw.start_date = '2026-04-15' AND aw.planned_duration = 20 AND eu.username = 'morozova'; INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-06-10', NULL, 12, 2 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Аудит документации' WHERE ru.username = 'manager.ivanov' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'manager.ivanov' AND tw.name = 'Аудит документации' AND aw.start_date = '2026-06-10' AND aw.planned_duration = 12 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.ivanov' AND wt.name = 'Аудит документации' AND aw.start_date = '2026-06-10' AND aw.planned_duration = 12 AND eu.username = 'manager.ivanov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.ivanov' AND wt.name = 'Аудит документации' AND aw.start_date = '2026-06-10' AND aw.planned_duration = 12 AND eu.username = 'kuznetsov'; INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-03-28', '2026-03-29', 10, 2 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Переезд архива' WHERE ru.username = 'manager.smirnova' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'manager.smirnova' AND tw.name = 'Переезд архива' AND aw.start_date = '2026-03-28' AND aw.planned_duration = 10 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 9100.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.smirnova' AND wt.name = 'Переезд архива' AND aw.start_date = '2026-03-28' AND aw.planned_duration = 10 AND eu.username = 'manager.smirnova'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 7700.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.smirnova' AND wt.name = 'Переезд архива' AND aw.start_date = '2026-03-28' AND aw.planned_duration = 10 AND eu.username = 'volkov'; INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-06-01', '2026-06-05', 32, 5 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Тестирование релиза' WHERE ru.username = 'admin.demo' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'admin.demo' AND tw.name = 'Тестирование релиза' AND aw.start_date = '2026-06-01' AND aw.planned_duration = 32 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 7200.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'admin.demo' AND wt.name = 'Тестирование релиза' AND aw.start_date = '2026-06-01' AND aw.planned_duration = 32 AND eu.username = 'admin.demo'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 6720.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'admin.demo' AND wt.name = 'Тестирование релиза' AND aw.start_date = '2026-06-01' AND aw.planned_duration = 32 AND eu.username = 'manager.ivanov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 6240.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'admin.demo' AND wt.name = 'Тестирование релиза' AND aw.start_date = '2026-06-01' AND aw.planned_duration = 32 AND eu.username = 'manager.smirnova'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 6720.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'admin.demo' AND wt.name = 'Тестирование релиза' AND aw.start_date = '2026-06-01' AND aw.planned_duration = 32 AND eu.username = 'lebedev'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 5760.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'admin.demo' AND wt.name = 'Тестирование релиза' AND aw.start_date = '2026-06-01' AND aw.planned_duration = 32 AND eu.username = 'novikova'; INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-06-18', NULL, 8, 3 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Срочная обработка заявок' WHERE ru.username = 'petrov' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'petrov' AND tw.name = 'Срочная обработка заявок' AND aw.start_date = '2026-06-18' AND aw.planned_duration = 8 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'petrov' AND wt.name = 'Срочная обработка заявок' AND aw.start_date = '2026-06-18' AND aw.planned_duration = 8 AND eu.username = 'petrov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'petrov' AND wt.name = 'Срочная обработка заявок' AND aw.start_date = '2026-06-18' AND aw.planned_duration = 8 AND eu.username = 'morozova'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'petrov' AND wt.name = 'Срочная обработка заявок' AND aw.start_date = '2026-06-18' AND aw.planned_duration = 8 AND eu.username = 'novikova'; INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-02-11', '2026-02-12', 10, 2 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Подготовка отчетности' WHERE ru.username = 'lebedev' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'lebedev' AND tw.name = 'Подготовка отчетности' AND aw.start_date = '2026-02-11' AND aw.planned_duration = 10 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 10500.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'lebedev' AND wt.name = 'Подготовка отчетности' AND aw.start_date = '2026-02-11' AND aw.planned_duration = 10 AND eu.username = 'lebedev'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 7500.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'lebedev' AND wt.name = 'Подготовка отчетности' AND aw.start_date = '2026-02-11' AND aw.planned_duration = 10 AND eu.username = 'kuznetsov'; INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-01-25', '2026-01-27', 14, 3 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Инвентаризация склада' WHERE ru.username = 'kuznetsov' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'kuznetsov' AND tw.name = 'Инвентаризация склада' AND aw.start_date = '2026-01-25' AND aw.planned_duration = 14 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 6000.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'kuznetsov' AND wt.name = 'Инвентаризация склада' AND aw.start_date = '2026-01-25' AND aw.planned_duration = 14 AND eu.username = 'kuznetsov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 6600.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'kuznetsov' AND wt.name = 'Инвентаризация склада' AND aw.start_date = '2026-01-25' AND aw.planned_duration = 14 AND eu.username = 'volkov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 4800.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'kuznetsov' AND wt.name = 'Инвентаризация склада' AND aw.start_date = '2026-01-25' AND aw.planned_duration = 14 AND eu.username = 'morozova'; INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-06-07', '2026-06-08', 10, 2 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Аудит документации' WHERE ru.username = 'novikova' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'novikova' AND tw.name = 'Аудит документации' AND aw.start_date = '2026-06-07' AND aw.planned_duration = 10 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 9600.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'novikova' AND wt.name = 'Аудит документации' AND aw.start_date = '2026-06-07' AND aw.planned_duration = 10 AND eu.username = 'novikova'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 10400.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'novikova' AND wt.name = 'Аудит документации' AND aw.start_date = '2026-06-07' AND aw.planned_duration = 10 AND eu.username = 'sidorova'; INSERT INTO additional_work(responsible_employee_id, work_type_id, start_date, end_date, planned_duration, planned_employee_count) SELECT resp.employee_id, wt.work_type_id, '2026-06-21', NULL, 30, 4 FROM employees resp INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.name = 'Тестирование релиза' WHERE ru.username = 'manager.smirnova' AND NOT EXISTS ( SELECT 1 FROM additional_work aw INNER JOIN employees er ON er.employee_id = aw.responsible_employee_id INNER JOIN system_users ur ON ur.user_id = er.user_id INNER JOIN work_types tw ON tw.work_type_id = aw.work_type_id WHERE ur.username = 'manager.smirnova' AND tw.name = 'Тестирование релиза' AND aw.start_date = '2026-06-21' AND aw.planned_duration = 30 ); INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.smirnova' AND wt.name = 'Тестирование релиза' AND aw.start_date = '2026-06-21' AND aw.planned_duration = 30 AND eu.username = 'manager.smirnova'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.smirnova' AND wt.name = 'Тестирование релиза' AND aw.start_date = '2026-06-21' AND aw.planned_duration = 30 AND eu.username = 'petrov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.smirnova' AND wt.name = 'Тестирование релиза' AND aw.start_date = '2026-06-21' AND aw.planned_duration = 30 AND eu.username = 'volkov'; INSERT IGNORE INTO work_execution(work_id, employee_id, calculated_bonus) SELECT aw.work_id, emp.employee_id, 0.00 FROM additional_work aw INNER JOIN employees resp ON resp.employee_id = aw.responsible_employee_id INNER JOIN system_users ru ON ru.user_id = resp.user_id INNER JOIN work_types wt ON wt.work_type_id = aw.work_type_id CROSS JOIN employees emp INNER JOIN system_users eu ON eu.user_id = emp.user_id WHERE ru.username = 'manager.smirnova' AND wt.name = 'Тестирование релиза' AND aw.start_date = '2026-06-21' AND aw.planned_duration = 30 AND eu.username = 'novikova';