123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- from PySide6.QtWidgets import QMainWindow, QMessageBox
- from PySide6.QtCore import Slot, QDate, QDateTime
- from module.WorkWithDB import *
- from module.MyMessageBox import show_dialog
- from PropuskWidgets.PStackedWidget import PStackedWidget
- from module.TemplatePropusk import TemplatePropusk
- from module.Printer import Printer
- from module.lang.ru import *
- from module.ImageTool import rotate_image
- from module.cam import IPCam, USBCam
- from .ui_py.ui_MainWindow import Ui_MainWindow
- from .ListPersonal import ListPersonal
- from .ListPlace import ListPlace
- from .DialogSettingCam import SettingCam
- from .DialogAbout import DialogAbout
- from .DialogHistory import DialogHistory
- from time import sleep
- from datetime import datetime
- from logger import logger
- from pathlib import Path
- import platform
- class MainWindow(QMainWindow, Ui_MainWindow):
- def __init__(self, parent=None) -> None:
- super(MainWindow, self).__init__(parent)
- self.setupUi(self)
- self.date_from.setDateTime(QDateTime().currentDateTime())
- self.date_to.setDateTime(QDateTime().currentDateTime())
- # self.stacked_widget_photo.currentChanged.connect(
- # self.current_change_photo
- # )
- self._init_menu_btn_action()
- self._init_push_btn_action()
- self._update_list_combobox()
- self._check_setting_cam()
- self._init_widget_cam()
- def open_history(self) -> None:
- DialogHistory(self).exec_()
- # def current_change_photo(self):
- # if self.stacked_widget_photo.currentIndex() == os.environ.get('INDEX_CAMERA'):
- # self.btn_start_cam_photo.setText(stop_cam)
- # else:
- # self.btn_start_cam_photo.setText(start_cam)
- def _init_menu_btn_action(self) -> None:
- self.action_open_history.triggered.connect(self.open_history)
- self.btn_show_personal_window.triggered.connect(
- self._show_personal_window
- )
- self.btn_show_place_window.triggered.connect(
- self._show_place_window
- )
- self.setting_cam.triggered.connect(
- self._show_setting_cam_window
- )
- self.update_list.triggered.connect(
- self._update_list_combobox
- )
- self.btn_show_about.triggered.connect(
- self._show_about_dialog
- )
- def _show_about_dialog(self):
- DialogAbout(self).exec_()
- def _check_setting_cam(self) -> None:
- try:
- self.__mode, self.__cam = self.__get_selected_cam()
- except ValueError:
- logger.warning(warring_cams.get("title"))
- if show_dialog(
- QMessageBox.Warning,
- warring_cams.get("title"),
- warring_cams.get("body")
- ):
- self._show_setting_cam_window()
- self._check_setting_cam()
- else:
- self.close()
- def _init_push_btn_action(self) -> None:
- self.btn_start_cam_photo.clicked.connect(
- self._start_cam_photo
- )
- self.capturePhoto.clicked.connect(
- self._take_image_face
- )
- self.btn_save.clicked.connect(self._save)
- self.btn_clear.clicked.connect(self._clear)
- self.btn_print.clicked.connect(self._print)
- def _show_personal_window(self) -> None:
- ListPersonal(self).exec_()
- self._update_list_combobox()
- @Slot()
- def _show_place_window(self) -> None:
- ListPlace(self).exec_()
- self._update_list_combobox()
- @Slot()
- def _show_setting_cam_window(self) -> None:
- SettingCam(self).exec_()
- def _update_list_combobox(self) -> None:
- self._load_personal()
- self._load_place()
- def _load_personal(self) -> None:
- self.personal_combobox.clear()
- with connect() as conn:
- for personal in conn.execute(
- list_personal.select()
- ).all():
- fio = F"{personal.lastname} {personal.firstname} {personal.middlename}"
- self.personal_combobox.addItem(
- fio,
- userData={"id": personal.id}
- )
- def _load_place(self) -> None:
- self.place_combobox.clear()
- with connect() as conn:
- for place in conn.execute(
- list_place.select()
- ).all():
- self.place_combobox.addItem(
- place.name_place,
- userData={"id": place.id}
- )
- def __get_selected_cam(self) -> bool:
- with connect() as conn:
- cam = conn.execute(
- cam_setting.select()
- ).fetchone()
- try:
- return cam.mode, cam.selected_cam
- except:
- raise ValueError('Нет записи о камерах')
- def _init_widget_cam(self) -> None:
-
- self.stacked_widget = PStackedWidget(self.groupBox_2, self.__mode)
- self.stacked_widget.setObjectName(u'stacked_widget')
- self.verticalLayout_4.addWidget(self.stacked_widget)
-
- @Slot()
- def _start_cam_photo(self) -> None:
- if not hasattr(self, '__wwc'):
- if self.stacked_widget.currentIndex() == int(os.environ.get('INDEX_CAMERA')):
- self.__stop_cam()
- self.stacked_widget.to_image()
- self.stacked_widget.to_video()
- self._create_wwc()
- def _create_wwc(self) -> None:
- match self.__mode:
- case 'video':
- self.__wwc = USBCam(self.stacked_widget.video, self.__cam)
- self.__wwc.start_cam()
- case 'snapshot':
- self.__wwc = IPCam()
- self.__wwc.qLabel = self.stacked_widget.video
- self.__wwc.lnk_connect = self.__cam
- self.__wwc.start()
- print("Started...")
- case _: return None
- @Slot()
- def _take_image_face(self) -> None:
- self.__file_name = self.__wwc.cupture_image(self.stacked_widget.image)
-
- sleep(1)
- self.stacked_widget.to_image()
- self.__stop_cam()
- @Slot()
- def _print(self) -> None:
- if not hasattr(self, "data_propusk"):
- self._save()
- propusk_data = self.data_propusk.copy()
- propusk_data["personal"] = self.personal_combobox.currentText()
- propusk_data["place"] = self.place_combobox.currentText()
- propusk_data["date_from"] = self.date_from.dateTime().toString(
- 'dd.MM.yyyy hh:mm')
- propusk_data["date_to"] = self.date_to.dateTime().toString(
- 'dd.MM.yyyy hh:mm')
- rotate_img = rotate_image(self.__file_name, -90)
- if platform.system() in 'Linux':
- rotate_img = F"file://{rotate_img}"
- propusk_data["face_photo"] = rotate_img
- render_text = TemplatePropusk(
- propusk_data,
- os.path.join(os.environ.get('ABSOLUTE_PATH'), 'docs')
- )
- Printer(str(render_text)).print()
- @Slot()
- def _clear(self) -> None:
- if hasattr(self, "data_propusk"):
- del self.data_propusk
- self._set_default_data()
- @Slot()
- def _save(self) -> None:
- date_from = self.date_from.dateTime().toMSecsSinceEpoch() / 1000
- date_to = self.date_to.dateTime().toMSecsSinceEpoch() / 1000
- self.data_propusk = {
- "id_propusk": int(self.number_propusk.text()),
- "date_from": datetime.fromtimestamp(date_from),
- "date_to": datetime.fromtimestamp(date_to),
- "personal": self.personal_combobox.currentData()['id'],
- "place": self.place_combobox.currentData()['id'],
- "receiving_man": self.receiving_man.toPlainText(),
- "purpose_visite": self.purpose_visite.toPlainText(),
- "face_photo": F"{Path(self.__file_name).name}",
- "pasport_photo": F"{Path(self.__file_name).name}"
- }
- with connect() as conn:
- conn.execute(
- list_propusk.insert().values(**self.data_propusk)
- )
- def _set_default_data(self) -> None:
- self.number_propusk.clear()
- self.date_from.setDate(QDate().currentDate())
- self.date_to.setDate(QDate().currentDate())
-
- if hasattr(self, 'stacked_widget'):
- self.__stop_cam()
- self.stacked_widget.to_image()
-
- # self._init_widget_cam()
- self.receiving_man.clear()
- self.purpose_visite.clear()
-
- # self.__stop_cam()
- def __stop_cam(self):
- if hasattr(self, '__wwc'):
- self.__wwc.stop_cam()
- del self.__wwc
-
- self.stacked_widget.to_image()
|