._.
This commit is contained in:
parent
68b858be84
commit
9baaba223d
@ -39,6 +39,8 @@ class User(base):
|
|||||||
other_info = Column(Text)
|
other_info = Column(Text)
|
||||||
email = Column(VARCHAR(100))
|
email = Column(VARCHAR(100))
|
||||||
password = Column(VARCHAR(150))
|
password = Column(VARCHAR(150))
|
||||||
|
is_dismissed = Column(Boolean, default=False)
|
||||||
|
dismiss_date = Column(Date)
|
||||||
|
|
||||||
helper_id = Column(Integer, ForeignKey('users.id'))
|
helper_id = Column(Integer, ForeignKey('users.id'))
|
||||||
director_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')
|
post = relationship('Post', back_populates='users')
|
||||||
|
|
||||||
comments = relationship('Comment', back_populates='user')
|
comments = relationship('Comment', back_populates='user')
|
||||||
|
users_event = relationship('UserEvent', back_populates='user')
|
||||||
|
|
||||||
|
|
||||||
class DepartmentUser(base):
|
class DepartmentUser(base):
|
||||||
@ -131,6 +134,8 @@ class EventType(base):
|
|||||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
title = Column(VARCHAR(100))
|
title = Column(VARCHAR(100))
|
||||||
|
|
||||||
|
events = relationship('Event', back_populates='type')
|
||||||
|
|
||||||
|
|
||||||
class EventStatus(base):
|
class EventStatus(base):
|
||||||
__tablename__ = 'event_statuses'
|
__tablename__ = 'event_statuses'
|
||||||
@ -150,6 +155,9 @@ class Event(base):
|
|||||||
type_id = Column(Integer, ForeignKey('event_types.id'))
|
type_id = Column(Integer, ForeignKey('event_types.id'))
|
||||||
status_id = Column(Integer, ForeignKey('event_statuses.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):
|
class DepartmentEvent(base):
|
||||||
__tablename__ = 'department_events'
|
__tablename__ = 'department_events'
|
||||||
@ -174,6 +182,9 @@ class UserEvent(base):
|
|||||||
event_id = Column(Integer, ForeignKey('events.id'))
|
event_id = Column(Integer, ForeignKey('events.id'))
|
||||||
user_id = Column(Integer, ForeignKey('users.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):
|
class WorkingCalendar(base):
|
||||||
__tablename__ = 'workingcalendar'
|
__tablename__ = 'workingcalendar'
|
||||||
@ -188,9 +199,9 @@ class Attendance(base):
|
|||||||
|
|
||||||
id = Column(Integer, primary_key=True, autoincrement=True)
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
||||||
date = Column(Date)
|
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):
|
class VacationTimetable(base):
|
||||||
@ -200,7 +211,7 @@ class VacationTimetable(base):
|
|||||||
start_date = Column(Date)
|
start_date = Column(Date)
|
||||||
end_date = Column(Date)
|
end_date = Column(Date)
|
||||||
|
|
||||||
user = Column(Integer, ForeignKey('users.id'))
|
user_id = Column(Integer, ForeignKey('users.id'))
|
||||||
|
|
||||||
|
|
||||||
def init_db():
|
def init_db():
|
||||||
|
|||||||
@ -39,6 +39,8 @@ class User(base):
|
|||||||
other_info = Column(Text)
|
other_info = Column(Text)
|
||||||
email = Column(VARCHAR(100))
|
email = Column(VARCHAR(100))
|
||||||
password = Column(VARCHAR(150))
|
password = Column(VARCHAR(150))
|
||||||
|
is_dismissed = Column(Boolean, default=False)
|
||||||
|
dismiss_date = Column(Date)
|
||||||
|
|
||||||
helper_id = Column(Integer, ForeignKey('users.id'))
|
helper_id = Column(Integer, ForeignKey('users.id'))
|
||||||
director_id = Column(Integer, ForeignKey('users.id'))
|
director_id = Column(Integer, ForeignKey('users.id'))
|
||||||
|
|||||||
@ -11,11 +11,19 @@ class EmployeeCardWidget(QWidget):
|
|||||||
|
|
||||||
uic.loadUi('ui/card_widget.ui', self)
|
uic.loadUi('ui/card_widget.ui', self)
|
||||||
|
|
||||||
self.setStyleSheet('''
|
if user.is_dismissed:
|
||||||
QWidget {
|
self.setStyleSheet('''
|
||||||
background-color: rgb(228, 244, 204);
|
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:
|
with connect() as session:
|
||||||
department = session.query(Department).filter(Department.id == user.department_id).first()
|
department = session.query(Department).filter(Department.id == user.department_id).first()
|
||||||
|
|||||||
@ -1,13 +1,13 @@
|
|||||||
import datetime
|
import datetime
|
||||||
|
|
||||||
from PyQt6 import uic
|
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):
|
class EventsListDialog(QDialog):
|
||||||
def __init__(self, user):
|
def __init__(self, user, parent, department):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|
||||||
uic.loadUi('ui/events_dialog_window.ui', self)
|
uic.loadUi('ui/events_dialog_window.ui', self)
|
||||||
@ -27,6 +27,8 @@ class EventsListDialog(QDialog):
|
|||||||
self.future = False
|
self.future = False
|
||||||
|
|
||||||
self.user = user
|
self.user = user
|
||||||
|
self.parent = parent
|
||||||
|
self.department = department
|
||||||
|
|
||||||
self.dateEdit.dateChanged.connect(self.set_minimum_date)
|
self.dateEdit.dateChanged.connect(self.set_minimum_date)
|
||||||
self.dateEdit.setDate(datetime.date.today())
|
self.dateEdit.setDate(datetime.date.today())
|
||||||
@ -45,9 +47,30 @@ class EventsListDialog(QDialog):
|
|||||||
|
|
||||||
self.pushButton_5.clicked.connect(self.add_new_event)
|
self.pushButton_5.clicked.connect(self.add_new_event)
|
||||||
|
|
||||||
|
self.pushButton_6.clicked.connect(self.dismiss_employee)
|
||||||
|
|
||||||
self.change_future()
|
self.change_future()
|
||||||
self.change_current()
|
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):
|
def add_new_event(self):
|
||||||
if self.comboBox.currentText() == 'Обучение':
|
if self.comboBox.currentText() == 'Обучение':
|
||||||
with connect() as session:
|
with connect() as session:
|
||||||
@ -353,6 +376,72 @@ class EventsListDialog(QDialog):
|
|||||||
self.verticalLayout_3.addWidget(event_widget)
|
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):
|
class EventWidget(QWidget):
|
||||||
def __init__(self, start_date, end_date=None, reason=None):
|
def __init__(self, start_date, end_date=None, reason=None):
|
||||||
super().__init__()
|
super().__init__()
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
import datetime
|
||||||
|
|
||||||
from PyQt6 import uic
|
from PyQt6 import uic
|
||||||
from PyQt6.QtWidgets import QMainWindow
|
from PyQt6.QtWidgets import QMainWindow
|
||||||
|
|
||||||
@ -48,15 +50,21 @@ class MainWindow(QMainWindow):
|
|||||||
employee = button.employee
|
employee = button.employee
|
||||||
|
|
||||||
edit_widget = EmployeeDialogWidget(self.selected_department, self.department_employees, self,
|
edit_widget = EmployeeDialogWidget(self.selected_department, self.department_employees, self,
|
||||||
employee)
|
employee)
|
||||||
self.create_employee_dialog = EventsListDialog(employee)
|
self.create_employee_dialog = EventsListDialog(employee, self, self.selected_department)
|
||||||
self.create_employee_dialog.gridLayout_2.addWidget(edit_widget)
|
self.create_employee_dialog.gridLayout_2.addWidget(edit_widget)
|
||||||
self.create_employee_dialog.exec()
|
self.create_employee_dialog.exec()
|
||||||
|
|
||||||
def search_employees(self, department_id):
|
def search_employees(self, department_id):
|
||||||
with connect() as session:
|
with connect() as session:
|
||||||
employees = session.query(User).filter(User.department_id == department_id).all()
|
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()
|
child_departments = session.query(Department).filter(Department.parent_id == department_id).all()
|
||||||
|
|
||||||
|
|||||||
@ -40,7 +40,7 @@ background-color: rgb(228, 244, 204);
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>69</width>
|
<width>69</width>
|
||||||
<height>606</height>
|
<height>595</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_3">
|
<layout class="QGridLayout" name="gridLayout_3">
|
||||||
@ -121,7 +121,7 @@ background-color: rgb(228, 244, 204);
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>897</width>
|
<width>897</width>
|
||||||
<height>504</height>
|
<height>495</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_5">
|
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||||
@ -161,7 +161,7 @@ background-color: rgb(228, 244, 204);
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>877</width>
|
<width>877</width>
|
||||||
<height>452</height>
|
<height>443</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_4">
|
<layout class="QVBoxLayout" name="verticalLayout_4">
|
||||||
@ -240,7 +240,7 @@ background-color: rgb(228, 244, 204);
|
|||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>897</width>
|
<width>897</width>
|
||||||
<height>94</height>
|
<height>92</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_4">
|
<layout class="QGridLayout" name="gridLayout_4">
|
||||||
@ -345,6 +345,22 @@ background-color: rgb(228, 244, 204);
|
|||||||
</property>
|
</property>
|
||||||
</spacer>
|
</spacer>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="7" column="0" colspan="3">
|
||||||
|
<widget class="QPushButton" name="pushButton_6">
|
||||||
|
<property name="font">
|
||||||
|
<font>
|
||||||
|
<pointsize>13</pointsize>
|
||||||
|
<bold>true</bold>
|
||||||
|
</font>
|
||||||
|
</property>
|
||||||
|
<property name="styleSheet">
|
||||||
|
<string notr="true">background-color: rgb(255, 0, 0);</string>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Уволить</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<tabstops>
|
<tabstops>
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user