diff --git a/API/data/connect.py b/API/data/connect.py
index 06ea978..de24582 100644
--- a/API/data/connect.py
+++ b/API/data/connect.py
@@ -39,6 +39,8 @@ class User(base):
other_info = Column(Text)
email = Column(VARCHAR(100))
password = Column(VARCHAR(150))
+ is_dismissed = Column(Boolean, default=False)
+ dismiss_date = Column(Date)
helper_id = Column(Integer, ForeignKey('users.id'))
director_id = Column(Integer, ForeignKey('users.id'))
@@ -48,6 +50,7 @@ class User(base):
post = relationship('Post', back_populates='users')
comments = relationship('Comment', back_populates='user')
+ users_event = relationship('UserEvent', back_populates='user')
class DepartmentUser(base):
@@ -131,6 +134,8 @@ class EventType(base):
id = Column(Integer, primary_key=True, autoincrement=True)
title = Column(VARCHAR(100))
+ events = relationship('Event', back_populates='type')
+
class EventStatus(base):
__tablename__ = 'event_statuses'
@@ -150,6 +155,9 @@ class Event(base):
type_id = Column(Integer, ForeignKey('event_types.id'))
status_id = Column(Integer, ForeignKey('event_statuses.id'))
+ type = relationship('EventType', back_populates='events')
+ users_event = relationship('UserEvent', back_populates='event')
+
class DepartmentEvent(base):
__tablename__ = 'department_events'
@@ -174,6 +182,9 @@ class UserEvent(base):
event_id = Column(Integer, ForeignKey('events.id'))
user_id = Column(Integer, ForeignKey('users.id'))
+ event = relationship('Event', back_populates='users_event')
+ user = relationship('User', back_populates='users_event')
+
class WorkingCalendar(base):
__tablename__ = 'workingcalendar'
@@ -188,9 +199,9 @@ class Attendance(base):
id = Column(Integer, primary_key=True, autoincrement=True)
date = Column(Date)
- is_attended = Column(Boolean)
+ reason = Column(Text)
- user = Column(Integer, ForeignKey('users.id'))
+ user_id = Column(Integer, ForeignKey('users.id'))
class VacationTimetable(base):
@@ -200,7 +211,7 @@ class VacationTimetable(base):
start_date = Column(Date)
end_date = Column(Date)
- user = Column(Integer, ForeignKey('users.id'))
+ user_id = Column(Integer, ForeignKey('users.id'))
def init_db():
diff --git a/Desktop/data/connect.py b/Desktop/data/connect.py
index 8e3ab70..de24582 100644
--- a/Desktop/data/connect.py
+++ b/Desktop/data/connect.py
@@ -39,6 +39,8 @@ class User(base):
other_info = Column(Text)
email = Column(VARCHAR(100))
password = Column(VARCHAR(150))
+ is_dismissed = Column(Boolean, default=False)
+ dismiss_date = Column(Date)
helper_id = Column(Integer, ForeignKey('users.id'))
director_id = Column(Integer, ForeignKey('users.id'))
diff --git a/Desktop/employee_card_widget.py b/Desktop/employee_card_widget.py
index 0d6d115..51fb61b 100644
--- a/Desktop/employee_card_widget.py
+++ b/Desktop/employee_card_widget.py
@@ -11,11 +11,19 @@ class EmployeeCardWidget(QWidget):
uic.loadUi('ui/card_widget.ui', self)
- self.setStyleSheet('''
- QWidget {
- background-color: rgb(228, 244, 204);
- }
- ''')
+ if user.is_dismissed:
+ self.setStyleSheet('''
+ QWidget {
+ background-color: rgba(150, 150, 150, 150);
+ }
+ ''')
+ self.pushButton.setEnabled(False)
+ else:
+ self.setStyleSheet('''
+ QWidget {
+ background-color: rgb(228, 244, 204);
+ }
+ ''')
with connect() as session:
department = session.query(Department).filter(Department.id == user.department_id).first()
diff --git a/Desktop/events_list_dialog.py b/Desktop/events_list_dialog.py
index 5d1ab71..c8dbeb7 100644
--- a/Desktop/events_list_dialog.py
+++ b/Desktop/events_list_dialog.py
@@ -1,13 +1,13 @@
import datetime
from PyQt6 import uic
-from PyQt6.QtWidgets import QDialog, QWidget, QHBoxLayout, QLabel, QDateEdit, QMessageBox
+from PyQt6.QtWidgets import QDialog, QWidget, QHBoxLayout, QLabel, QDateEdit, QMessageBox, QVBoxLayout, QPushButton
-from data.connect import connect, Event, UserEvent, EventType, Attendance, VacationTimetable, WorkingCalendar
+from data.connect import connect, Event, UserEvent, EventType, Attendance, VacationTimetable, WorkingCalendar, User
class EventsListDialog(QDialog):
- def __init__(self, user):
+ def __init__(self, user, parent, department):
super().__init__()
uic.loadUi('ui/events_dialog_window.ui', self)
@@ -27,6 +27,8 @@ class EventsListDialog(QDialog):
self.future = False
self.user = user
+ self.parent = parent
+ self.department = department
self.dateEdit.dateChanged.connect(self.set_minimum_date)
self.dateEdit.setDate(datetime.date.today())
@@ -45,9 +47,30 @@ class EventsListDialog(QDialog):
self.pushButton_5.clicked.connect(self.add_new_event)
+ self.pushButton_6.clicked.connect(self.dismiss_employee)
+
self.change_future()
self.change_current()
+ def dismiss_employee(self):
+ future_curser = list(
+ filter(
+ lambda x: x.datetime_event.date() > datetime.date.today(),
+ self.curses
+ )
+ )
+
+ if future_curser:
+ QMessageBox.warning(
+ self,
+ 'Внимание',
+ 'Увольнение сотрудников с предстоящими обучениями запрещено!'
+ )
+ return
+
+ self.accept_dissmiss = AcceptDismissEmployee(self.user, self)
+ self.accept_dissmiss.exec()
+
def add_new_event(self):
if self.comboBox.currentText() == 'Обучение':
with connect() as session:
@@ -353,6 +376,72 @@ class EventsListDialog(QDialog):
self.verticalLayout_3.addWidget(event_widget)
+class AcceptDismissEmployee(QDialog):
+ def __init__(self, user, parent):
+ super().__init__()
+
+ self.setWindowTitle('Увольнение сотрудника')
+
+ self.lyt = QVBoxLayout()
+
+ self.user = user
+ self.parent = parent
+
+ lbl1 = QLabel(f'Вы уверены, что хотите уволить сотрудника: {user.last_name} {user.first_name}?')
+ self.lyt.addWidget(lbl1)
+
+ h_lyt = QHBoxLayout()
+ button1 = QPushButton('Уволить')
+ button1.clicked.connect(self.dismiss_employee)
+ h_lyt.addWidget(button1)
+
+ button2 = QPushButton('Отмена')
+ h_lyt.addWidget(button2)
+ button2.clicked.connect(self.close)
+
+ self.lyt.addLayout(h_lyt)
+
+ self.setLayout(self.lyt)
+
+ def dismiss_employee(self):
+ with connect() as session:
+ user = session.query(User).filter(User.id == self.user.id).first()
+
+ user.is_dismissed = True
+ user.dismiss_date = datetime.date.today()
+ session.commit()
+
+ QMessageBox.information(
+ self,
+ 'Внимание',
+ 'Сотрудник был уволен'
+ )
+
+ future_attendances = list(
+ filter(
+ lambda x: x.date > datetime.date.today(),
+ self.parent.attendances
+ )
+ )
+ future_vacations = list(
+ filter(
+ lambda x: x.start_date > datetime.date.today(),
+ self.parent.vacations
+ )
+ )
+
+ with connect() as session:
+ for i in future_attendances:
+ session.delete(i)
+
+ for i in future_vacations:
+ session.delete(i)
+
+ self.parent.parent.select_department(self.parent.department.id)
+ self.parent.close()
+ self.close()
+
+
class EventWidget(QWidget):
def __init__(self, start_date, end_date=None, reason=None):
super().__init__()
diff --git a/Desktop/main_window.py b/Desktop/main_window.py
index c67e123..9550449 100644
--- a/Desktop/main_window.py
+++ b/Desktop/main_window.py
@@ -1,3 +1,5 @@
+import datetime
+
from PyQt6 import uic
from PyQt6.QtWidgets import QMainWindow
@@ -48,15 +50,21 @@ class MainWindow(QMainWindow):
employee = button.employee
edit_widget = EmployeeDialogWidget(self.selected_department, self.department_employees, self,
- employee)
- self.create_employee_dialog = EventsListDialog(employee)
+ employee)
+ self.create_employee_dialog = EventsListDialog(employee, self, self.selected_department)
self.create_employee_dialog.gridLayout_2.addWidget(edit_widget)
self.create_employee_dialog.exec()
def search_employees(self, department_id):
with connect() as session:
employees = session.query(User).filter(User.department_id == department_id).all()
- self.department_employees += employees
+
+ for employee in employees:
+ if employee.is_dismissed:
+ if (datetime.date.today() - employee.dismiss_date).days <= 30:
+ self.department_employees.append(employee)
+ else:
+ self.department_employees.append(employee)
child_departments = session.query(Department).filter(Department.parent_id == department_id).all()
diff --git a/Desktop/ui/events_dialog_window.ui b/Desktop/ui/events_dialog_window.ui
index fa3d22b..1d1f80d 100644
--- a/Desktop/ui/events_dialog_window.ui
+++ b/Desktop/ui/events_dialog_window.ui
@@ -40,7 +40,7 @@ background-color: rgb(228, 244, 204);
0
0
69
- 606
+ 595
@@ -121,7 +121,7 @@ background-color: rgb(228, 244, 204);
0
0
897
- 504
+ 495
@@ -161,7 +161,7 @@ background-color: rgb(228, 244, 204);
0
0
877
- 452
+ 443
@@ -240,7 +240,7 @@ background-color: rgb(228, 244, 204);
0
0
897
- 94
+ 92
@@ -345,6 +345,22 @@ background-color: rgb(228, 244, 204);
+ -
+
+
+
+ 13
+ true
+
+
+
+ background-color: rgb(255, 0, 0);
+
+
+ Уволить
+
+
+