After Graduate Update

This commit is contained in:
Daniel 2025-11-26 19:31:33 +03:00
parent b92a91ab37
commit c6917dd85e
69 changed files with 7540 additions and 0 deletions

View file

@ -0,0 +1,460 @@
CREATE DATABASE master_pol;
use master_pol;
CREATE TABLE `partners` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`partner_type_id` INTEGER NOT NULL,
`partner_name` VARCHAR(255) NOT NULL,
`first_name_director` VARCHAR(50) NOT NULL,
`last_name_director` VARCHAR(50) NOT NULL,
`middle_name_director` VARCHAR(255),
`email_partner` VARCHAR(100) NOT NULL,
`phone_partner` VARCHAR(15) NOT NULL,
`address` VARCHAR(255) NOT NULL,
`INN` VARCHAR(10) NOT NULL,
`rating` INTEGER NOT NULL,
`logo` LONGBLOB,
PRIMARY KEY(`id`)
);
CREATE TABLE `partners_type` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`name` VARCHAR(255),
PRIMARY KEY(`id`)
);
CREATE TABLE `products` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`article` VARCHAR(10) NOT NULL,
`name` VARCHAR(100) NOT NULL,
`product_type_id` INTEGER NOT NULL,
`description` VARCHAR(255),
`picture` LONGBLOB,
`min_price_partners` DECIMAL(10,2) NOT NULL,
`cert_quality` LONGBLOB,
`standard_number` VARCHAR(255),
`selfcost` DECIMAL(10,2),
`length` DECIMAL(10,2),
`width` DECIMAL(10,2),
`height` DECIMAL(10,2),
`weight_no_package` DECIMAL(10,2),
`weight_with_package` DECIMAL(10,2),
`time_to_create_min` INTEGER,
`workshop_number` INTEGER,
`people_count_production` INTEGER,
`product_current_stock` INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY(`id`)
);
CREATE TABLE `products_types` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`name` VARCHAR(70) NOT NULL,
`coefficent` DECIMAL(3,2) NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `product_partners` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`product_id` INTEGER NOT NULL,
`partner_id` INTEGER NOT NULL,
`amount` INTEGER NOT NULL,
`sale_date` DATE NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `employees` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`employee_type_id` INTEGER NOT NULL,
`first_name` VARCHAR(50) NOT NULL,
`last_name` VARCHAR(50) NOT NULL,
`middle_name` VARCHAR(60) NULL,
`birth_date` DATE NOT NULL,
`passport_data` VARCHAR(11) NOT NULL,
`bank_details` VARCHAR(100) NOT NULL,
`has_family` BOOLEAN,
`health_status` VARCHAR(25),
PRIMARY KEY(`id`)
);
CREATE TABLE `employees_types` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `users` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`username` VARCHAR(30) NOT NULL,
`password` VARCHAR(80) NOT NULL,
`employee_id` INTEGER NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `materials` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`material_type_id` INTEGER NOT NULL,
`supplier_id` INTEGER NOT NULL,
`name` VARCHAR(60) NOT NULL,
`package_quantity` INTEGER NOT NULL,
`unit` VARCHAR(20) NOT NULL,
`cost` DECIMAL(8,2) NOT NULL,
`image` LONGBLOB,
`min_stock` INTEGER,
`material_current_stock` INTEGER NOT NULL DEFAULT 0,
PRIMARY KEY(`id`)
);
CREATE TABLE `materials_type` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`name` VARCHAR(50) NOT NULL,
`defect_percent` DECIMAL(10,2) NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `products_recipes` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`product_id` INTEGER NOT NULL,
`material_id` INTEGER NOT NULL,
`material_count` INTEGER NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `partners_rating_history` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`partner_id` INTEGER NOT NULL,
`new_rating` INTEGER NOT NULL,
`changed` DATETIME NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `orders` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`partner_id` INTEGER NOT NULL,
`manager_id` INTEGER NOT NULL,
`total_price` DECIMAL(10,2) NOT NULL,
`order_payment` DECIMAL(10,2) NOT NULL DEFAULT 0,
`created` DATETIME NOT NULL,
`status` ENUM('created', 'waiting prepayment', 'prepayment received', 'completed', 'canceled', 'ready for shipment', 'pending', 'in production') NOT NULL,
`prepayment_date` DATETIME,
`payment_date` DATETIME,
PRIMARY KEY(`id`)
);
CREATE TABLE `products_orders` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`order_id` INTEGER NOT NULL,
`product_id` INTEGER NOT NULL,
`quantity` INTEGER NOT NULL,
`agreed_price_per` DECIMAL(8,2),
`production_date` DATE,
PRIMARY KEY(`id`)
);
CREATE TABLE `suppliers` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`name` VARCHAR(50) NOT NULL,
`INN` VARCHAR(10) NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `materials_supply_history` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`material_id` INTEGER NOT NULL,
`supplier_id` INTEGER NOT NULL,
`quantity` INTEGER NOT NULL,
`delivery_date` DATE NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `materials_movement` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`material_id` INTEGER NOT NULL,
`amount` INTEGER NOT NULL,
`movement_type` ENUM('incoming', 'reserve', 'write off') NOT NULL DEFAULT 'incoming',
`movement_date` DATETIME NOT NULL,
PRIMARY KEY(`id`)
);
CREATE TABLE `employees_access` (
`id` INTEGER NOT NULL AUTO_INCREMENT UNIQUE,
`employee_id` INTEGER NOT NULL,
`door_id` INTEGER NOT NULL,
`access_date` DATETIME NOT NULL,
PRIMARY KEY(`id`)
);
ALTER TABLE `partners`
ADD FOREIGN KEY(`partner_type_id`) REFERENCES `partners_type`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `products`
ADD FOREIGN KEY(`product_type_id`) REFERENCES `products_types`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `product_partners`
ADD FOREIGN KEY(`product_id`) REFERENCES `products`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `product_partners`
ADD FOREIGN KEY(`partner_id`) REFERENCES `partners`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `employees`
ADD FOREIGN KEY(`employee_type_id`) REFERENCES `employees_types`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `users`
ADD FOREIGN KEY(`employee_id`) REFERENCES `employees`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `materials`
ADD FOREIGN KEY(`material_type_id`) REFERENCES `materials_type`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `products_recipes`
ADD FOREIGN KEY(`product_id`) REFERENCES `products`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `products_recipes`
ADD FOREIGN KEY(`material_id`) REFERENCES `materials`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `partners_rating_history`
ADD FOREIGN KEY(`partner_id`) REFERENCES `partners`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `orders`
ADD FOREIGN KEY(`partner_id`) REFERENCES `partners`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `orders`
ADD FOREIGN KEY(`manager_id`) REFERENCES `employees`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `products_orders`
ADD FOREIGN KEY(`order_id`) REFERENCES `orders`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `products_orders`
ADD FOREIGN KEY(`product_id`) REFERENCES `products`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `materials`
ADD FOREIGN KEY(`supplier_id`) REFERENCES `suppliers`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `materials_supply_history`
ADD FOREIGN KEY(`material_id`) REFERENCES `materials`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `materials_supply_history`
ADD FOREIGN KEY(`supplier_id`) REFERENCES `suppliers`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `materials_movement`
ADD FOREIGN KEY(`material_id`) REFERENCES `materials`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
ALTER TABLE `employees_access`
ADD FOREIGN KEY(`employee_id`) REFERENCES `employees`(`id`)
ON UPDATE NO ACTION ON DELETE NO ACTION;
INSERT INTO materials_type (name, defect_percent) VALUES
('Тип материала 1', 0.001),
('Тип материала 2', 0.0095),
('Тип материала 3', 0.0028),
('Тип материала 4', 0.0055),
('Тип материала 5', 0.0034);
INSERT INTO products_types (name, coefficent) VALUES
('Ламинат', 2.35),
('Массивная доска', 5.15),
('Паркетная доска', 4.34),
('Пробковое покрытие', 1.5);
INSERT INTO partners_type (name) VALUES
('ЗАО'),
('ООО'),
('ПАО'),
('ОАО');
INSERT INTO partners (partner_type_id, partner_name, first_name_director, last_name_director, middle_name_director, email_partner, phone_partner, address, INN, rating) VALUES
(1, 'База Строитель', 'Александра', 'Иванова', 'Ивановна', 'aleksandraivanova@ml.ru', '4931234567', '652050, Кемеровская область, город Юрга, ул. Лесная, 15', '2222455179', 7),
(2, 'Паркет 29', 'Василий', 'Петров', 'Петрович', 'vppetrov@vl.ru', '9871235678', '164500, Архангельская область, город Северодвинск, ул. Строителей, 18', '3333888520', 7),
(3, 'Стройсервис', 'Андрей', 'Соловьев', 'Николаевич', 'ansolovev@st.ru', '8122233200', '188910, Ленинградская область, город Приморск, ул. Парковая, 21', '4440391035', 7),
(4, 'Ремонт и отделка', 'Екатерина', 'Воробьева', 'Валерьевна', 'ekaterina.vorobeva@ml.ru', '4442223311', '143960, Московская область, город Реутов, ул. Свободы, 51', '1111520857', 5),
(1, 'МонтажПро', 'Степан', 'Степанов', 'Сергеевич', 'stepanov@stepan.ru', '9128883333', '309500, Белгородская область, город Старый Оскол, ул. Рабочая, 122', '5552431140', 10);
INSERT INTO products (article, name, product_type_id, min_price_partners) VALUES
('8758385', 'Паркетная доска Ясень темный однополосная 14 мм', 3, 4456.90),
('8858958', 'Инженерная доска Дуб Французская елка однополосная 12 мм', 3, 7330.99),
('7750282', 'Ламинат Дуб дымчато-белый 33 класс 12 мм', 1, 1799.33),
('7028748', 'Ламинат Дуб серый 32 класс 8 мм с фаской', 1, 3890.41),
('5012543', 'Пробковое напольное клеевое покрытие 32 класс 4 мм', 4, 5450.59);
INSERT INTO product_partners (product_id, partner_id, amount, sale_date) VALUES
(1, 1, 15500, '2023-03-23'),
(3, 1, 12350, '2023-12-18'),
(4, 1, 37400, '2024-06-07'),
(2, 2, 35000, '2022-12-02'),
(5, 2, 1250, '2023-05-17'),
(3, 2, 1000, '2024-06-07'),
(1, 2, 7550, '2024-07-01'),
(1, 3, 7250, '2023-01-22'),
(2, 3, 2500, '2024-07-05'),
(4, 4, 59050, '2023-03-20'),
(3, 4, 37200, '2024-03-12'),
(5, 4, 4500, '2024-05-14'),
(3, 5, 50000, '2023-09-19'),
(4, 5, 670000, '2023-11-10'),
(1, 5, 35000, '2024-04-15'),
(2, 5, 25000, '2024-06-12');
-- === 1. Типы сотрудников ===
INSERT INTO employees_types (name)
VALUES
('Менеджер'),
('Бухгалтер'),
('Программист'),
('Охранник'),
('Уборщик');
-- === 2. Сотрудники ===
INSERT INTO employees (
employee_type_id, first_name, last_name, middle_name, birth_date,
passport_data, bank_details, has_family, health_status
)
VALUES
-- Менеджеры
(1, 'Иван', 'Петров', 'Сергеевич', '1988-03-15', '40051234567', '123456789', TRUE, 'Хорошее'),
(1, 'Мария', 'Сидорова', 'Игоревна', '1990-11-02', '40057891234', '987654321', FALSE, 'Отличное'),
-- Программист
(3, 'Андрей', 'Кузнецов', 'Алексеевич', '1995-07-21', '40101234567', '111122223333', TRUE, 'Хорошее'),
-- Бухгалтер
(2, 'Елена', 'Морозова', 'Павловна', '1982-05-08', '40104561234', '444455556666', TRUE, 'Удовлетворительное'),
-- Охранник
(4, 'Сергей', 'Волков', 'Владимирович', '1979-09-10', '40205678901', '555566667777', FALSE, 'Хорошее'),
-- Уборщик
(5, 'Наталья', 'Орлова', 'Геннадьевна', '1975-12-25', '40307891234', '888899990000', TRUE, 'Хорошее');
-- === 3. Пользователи ===
-- Пользователи, связанные с менеджерами
INSERT INTO users (username, password, employee_id)
VALUES
('ivan', 'test', 1),
('manager_maria', 'hashed_password_456', 2);
CREATE VIEW show_partners
AS
SELECT p.id, pt.name AS type_name, p.partner_name, p.first_name_director, p.last_name_director, p.middle_name_director, p.phone_partner, p.rating
FROM partners p JOIN partners_type pt
ON
p.partner_type_id = pt.id;
DELIMITER //
CREATE PROCEDURE add_parther (IN p_partner_type_id INT, IN p_partner_name VARCHAR(255),
IN p_first_name_director VARCHAR(50), IN p_last_name_director VARCHAR(50), IN p_middle_name_director VARCHAR(255),
IN p_email_partner VARCHAR(100), IN p_phone_partner VARCHAR(15), IN p_address VARCHAR(255), IN p_INN VARCHAR(10), IN p_rating INT)
BEGIN
INSERT INTO partners (
partner_type_id,
partner_name,
first_name_director,
last_name_director,
middle_name_director,
email_partner,
phone_partner,
address,
INN,
rating
) VALUES (
p_partner_type_id,
p_partner_name,
p_first_name_director,
p_last_name_director,
p_middle_name_director,
p_email_partner,
p_phone_partner,
p_address,
p_INN,
p_rating
);
END //
DELIMITER ;
DELIMITER //
CREATE PROCEDURE upd_partner (IN p_partner_type_id INT, IN p_id INT, IN p_partner_name VARCHAR(255),
IN p_first_name_director VARCHAR(50), IN p_last_name_director VARCHAR(50), IN p_middle_name_director VARCHAR(255),
IN p_email_partner VARCHAR(100), IN p_phone_partner VARCHAR(15), IN p_address VARCHAR(255), IN p_INN VARCHAR(10), IN p_rating INT)
BEGIN
UPDATE partners
SET
partner_type_id = p_partner_type_id,
partner_name = p_partner_name,
first_name_director = p_first_name_director,
last_name_director = p_last_name_director,
middle_name_director = p_middle_name_director,
email_partner = p_email_partner,
phone_partner = p_phone_partner,
address = p_address,
INN = p_INN,
rating = p_rating
WHERE id = p_id;
END //
DELIMITER ;
DELIMITER //
CREATE FUNCTION get_disc(partner_id INT)
RETURNS INT
BEGIN
DECLARE total_amount INT;
SELECT SUM(amount) INTO total_amount
FROM product_partners
WHERE partner_id = partner_id;
IF total_amount >= 300000 THEN RETURN 15;
ELSEIF total_amount >= 50000 THEN RETURN 10;
ELSEIF total_amount >= 10000 THEN RETURN 5;
ELSE RETURN 0;
END IF;
END //
DELIMITER ;
DELIMITER //
CREATE PROCEDURE partner_history(IN p_partner_id INT)
BEGIN
SELECT
pr.name AS product_name,
pp.amount AS quantity,
pp.sale_date AS sale_date
FROM product_partners pp JOIN products pr
ON
pp.product_id = pr.id
WHERE pp.partner_id = p_partner_id
ORDER BY pp.sale_date DESC;
END//
DELIMITER ;