Skip to content

HeisPovedim/Desktop-application-for-ordering-a-pass

Repository files navigation

Настольное приложение для заказа пропуска


Информация о проекте

Используемые библиотеки:

  • PyQt6
  • dnspython
  • mysql-connector-python

Проект следует запускать через файл - executable.py

Desktop-application-for-ordering-a-pass
├─ assets
├─ configuration
├─ data
├─ database
├─ helpers
├─ interface
├─ executable.py ←-THIS
├─ README.md
└─ venv_activate.bat

Для запуска проекта необходимо находиться в корневой папке Desktop-application-for-ordering-a-pass.
После мы открываем командную строку в нашей папке или с помощью команды cd переходим к нашему проекту (пример: cd D:\Project\GitHub\Desktop-application-for-ordering-a-pass) и запускаем скрипт путем ввода в консоль команды: python.exe executable.py

Также перед запуском проекта в обязательном порядке нужно изменить импорты и конфигурацию подключения к БД.

  1. Все импорты находятся в файле path.py в папке configuration. В этом файле нужно поменять только абсолютный путь до папки с проектом.
  2. Конфигурация подключения к БД находится в фале config.py в папке database. В этом файле вам нужно изменить настройки подключения к БД на свои.

Настройка БД для проекта

Для быстрого развертывания понадобится программа MySQL Workbench. С помощью неё можно быстро и легко через графический интерфейс управлять базой данных, а также создавать модели ER диаграмм, который в последующем можно преобразовывать в SQL скрипты.

1. Автоматическое развертывание через SQL Script

В проекте присутствует SQL_Script.sql для быстрого развертывания БД. Чтобы загрузить скрипт для этого в программе MySQL Workbench нажимаем на "File" в левом верхнем углу и выбираем пункт "Open SQL Script..." , затем в окне выбираем файл SQL_Script.sql и открываем его, файл находится в ../database/SQL_Script.sql. После открытия файла в области редактирования кода на верхней панели инструментов выполняем скрипт (значок молнии на панели инструментов).
ezgif.com-video-to-gif5e6f78bebade03c2.gif
Путь до файла "SQL_Script.sql":

Desktop-application-for-ordering-a-pass
├─ assets
├─ configuration
├─ data
├─ database
│  ├─ config.py
│  ├─ connect_db.py
│  ├─ Models.mwb
│  ├─ Models.mwb.bak
│  ├─ requests.py
│  ├─ SQL_Script.sql ←-THIS
│  └─ SQL.sql
├─ helpers
├─ interface
├─ executable.py
├─ README.md
└─ venv_activate.bat

2. Готовый скрипт

Я могу забыть поменять скрипт в описании проекта, поэтому если у вас что-то будет не работать советую следовать первому пункту. Для того чтобы загрузить скрипт нажимаем на "File" в левом верхнем углу и выбираем пункт "New Query Tab". В новое открывшееся окно вставляем скрипт и в области редактирования кода на верхней панели инструментов выполняем его (значок молнии на панели инструментов).
ezgif.com-video-to-gif-1aeaaef424d4b758d.gif
Скрипт который нужно вставить:

-- MySQL Script generated by MySQL Workbench
-- Wed Mar 22 00:31:03 2023
-- Model: New Model    Version: 1.0
-- MySQL Workbench Forward Engineering

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`users`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`users` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `email` VARCHAR(255) NOT NULL,
  `login` VARCHAR(255) NOT NULL,
  `password` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`receiving_party`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`receiving_party` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `division` VARCHAR(255) NOT NULL,
  `FIO` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`pass_information`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`pass_information` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `date_from` DATE NOT NULL,
  `date_by` DATE NOT NULL,
  `visit_purpose` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`visitor_information`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`visitor_information` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `surname` VARCHAR(255) NOT NULL,
  `name` VARCHAR(255) NOT NULL,
  `patronymic` VARCHAR(255) NOT NULL,
  `phone` VARCHAR(12) NULL,
  `email` VARCHAR(255) NOT NULL,
  `organization` VARCHAR(255) NULL,
  `note` VARCHAR(255) NOT NULL,
  `birthdate` DATE NOT NULL,
  `passport_series` VARCHAR(4) NOT NULL,
  `passport_number` VARCHAR(6) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`documents_personal`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`documents_personal` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `document` VARCHAR(64) NOT NULL,
  `photo` LONGBLOB NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`personal_visit`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`personal_visit` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `users_id` INT NOT NULL,
  `pass_information_id` INT NOT NULL,
  `receiving_party_id` INT NOT NULL,
  `visitor_information_id` INT NOT NULL,
  `documents_id` INT NOT NULL,
  `creation_time` DATETIME NOT NULL,
  `status` VARCHAR(30) NOT NULL,
  `reason` VARCHAR(255) NULL DEFAULT 'None',
  PRIMARY KEY (`id`, `users_id`, `pass_information_id`, `receiving_party_id`, `visitor_information_id`, `documents_id`),
  INDEX `fk_personal_visit_users_idx` (`users_id` ASC) VISIBLE,
  INDEX `fk_personal_visit_receiving_party1_idx` (`receiving_party_id` ASC) VISIBLE,
  INDEX `fk_personal_visit_information_for_the_pass1_idx` (`pass_information_id` ASC) VISIBLE,
  INDEX `fk_personal_visit_visitor_information1_idx` (`visitor_information_id` ASC) VISIBLE,
  INDEX `fk_personal_visit_documents1_idx` (`documents_id` ASC) VISIBLE,
  CONSTRAINT `fk_personal_visit_users`
    FOREIGN KEY (`users_id`)
    REFERENCES `mydb`.`users` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_personal_visit_receiving_party1`
    FOREIGN KEY (`receiving_party_id`)
    REFERENCES `mydb`.`receiving_party` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_personal_visit_information_for_the_pass1`
    FOREIGN KEY (`pass_information_id`)
    REFERENCES `mydb`.`pass_information` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_personal_visit_visitor_information1`
    FOREIGN KEY (`visitor_information_id`)
    REFERENCES `mydb`.`visitor_information` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_personal_visit_documents1`
    FOREIGN KEY (`documents_id`)
    REFERENCES `mydb`.`documents_personal` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`documents_group`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`documents_group` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `document` VARCHAR(64) NOT NULL,
  `visitor_list` VARCHAR(64) NOT NULL,
  PRIMARY KEY (`id`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`group_visit`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`group_visit` (
  `id` INT NOT NULL AUTO_INCREMENT,
  `users_id` INT NOT NULL,
  `pass_information_id` INT NOT NULL,
  `receiving_party_id` INT NOT NULL,
  `visitor_information_id` INT NOT NULL,
  `documents_id` INT NOT NULL,
  `creation_time` DATETIME NOT NULL,
  `status` VARCHAR(30) NOT NULL,
  `reason` VARCHAR(255) NULL DEFAULT 'None',
  PRIMARY KEY (`id`, `users_id`, `pass_information_id`, `receiving_party_id`, `visitor_information_id`, `documents_id`),
  INDEX `fk_personal_visit_users_idx` (`users_id` ASC) VISIBLE,
  INDEX `fk_personal_visit_receiving_party1_idx` (`receiving_party_id` ASC) VISIBLE,
  INDEX `fk_personal_visit_information_for_the_pass1_idx` (`pass_information_id` ASC) VISIBLE,
  INDEX `fk_personal_visit_visitor_information1_idx` (`visitor_information_id` ASC) VISIBLE,
  INDEX `fk_group_visit_documents_group1_idx` (`documents_id` ASC) VISIBLE,
  CONSTRAINT `fk_personal_visit_users0`
    FOREIGN KEY (`users_id`)
    REFERENCES `mydb`.`users` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_personal_visit_receiving_party10`
    FOREIGN KEY (`receiving_party_id`)
    REFERENCES `mydb`.`receiving_party` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_personal_visit_information_for_the_pass10`
    FOREIGN KEY (`pass_information_id`)
    REFERENCES `mydb`.`pass_information` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_personal_visit_visitor_information10`
    FOREIGN KEY (`visitor_information_id`)
    REFERENCES `mydb`.`visitor_information` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_group_visit_documents_group1`
    FOREIGN KEY (`documents_id`)
    REFERENCES `mydb`.`documents_group` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published