diff --git a/Desktop/data/connect.py b/Desktop/data/connect.py
index 3250456..8e3ab70 100644
--- a/Desktop/data/connect.py
+++ b/Desktop/data/connect.py
@@ -197,7 +197,6 @@ class Attendance(base):
id = Column(Integer, primary_key=True, autoincrement=True)
date = Column(Date)
- is_attended = Column(Boolean)
reason = Column(Text)
user_id = Column(Integer, ForeignKey('users.id'))
diff --git a/Desktop/events_list_dialog.py b/Desktop/events_list_dialog.py
index 12a5587..1cb6a3a 100644
--- a/Desktop/events_list_dialog.py
+++ b/Desktop/events_list_dialog.py
@@ -1,5 +1,7 @@
+import datetime
+
from PyQt6 import uic
-from PyQt6.QtWidgets import QDialog
+from PyQt6.QtWidgets import QDialog, QWidget, QHBoxLayout, QLabel, QDateEdit, QMessageBox
from data.connect import connect, Event, UserEvent, EventType, Attendance, VacationTimetable
@@ -19,3 +21,322 @@ class EventsListDialog(QDialog):
self.attendances = session.query(Attendance).filter(Attendance.user_id == user.id).all()
self.vacations = session.query(VacationTimetable).filter(VacationTimetable.user_id == user.id).all()
+
+ self.past = False
+ self.current = False
+ self.future = False
+
+ self.user = user
+
+ self.dateEdit.dateChanged.connect(self.set_minimum_date)
+ self.dateEdit.setDate(datetime.date.today())
+
+ self.pushButton_3.clicked.connect(self.change_past)
+ self.pushButton_2.clicked.connect(self.change_current)
+ self.pushButton_4.clicked.connect(self.change_future)
+
+ self.label_6.setVisible(False)
+ self.dateEdit_2.setVisible(False)
+
+ self.label_7.setVisible(False)
+ self.lineEdit.setVisible(False)
+
+ self.comboBox.currentTextChanged.connect(self.change_type_event)
+
+ self.pushButton_5.clicked.connect(self.add_new_event)
+
+ self.change_future()
+ self.change_current()
+
+ def add_new_event(self):
+ if self.comboBox.currentText() == 'Обучение':
+ with connect() as session:
+ type_edu_event = session.query(EventType).filter(EventType.title == 'Обучение').first()
+
+ new_event = Event(
+ type_id=type_edu_event.id,
+ datetime_event=self.dateEdit.date().toPyDate()
+ )
+ session.add(new_event)
+ session.flush()
+
+ new_user_event = UserEvent(
+ event_id=new_event.id,
+ user_id=self.user.id
+ )
+ session.add(new_user_event)
+ session.commit()
+
+ elif self.comboBox.currentText() == 'Отгул':
+ new_attendance = Attendance(
+ date=self.dateEdit.date().toPyDate(),
+ reason=self.lineEdit.text() if self.lineEdit.text() else None,
+ user_id=self.user.id,
+ )
+ with connect() as session:
+ session.add(new_attendance)
+ session.commit()
+
+ elif self.comboBox.currentText() == 'Отпуск':
+ new_vacation = VacationTimetable(
+ user_id=self.user.id,
+ start_date=self.dateEdit.date().toPyDate(),
+ end_date=self.dateEdit_2.date().toPyDate()
+ )
+ with connect() as session:
+ session.add(new_vacation)
+ session.commit()
+
+ self.lineEdit.clear()
+ QMessageBox.information(
+ self,
+ 'Данные сохранены',
+ 'Новое событие было добавлено'
+ )
+
+ with connect() as session:
+ self.curses = session.query(Event).join(UserEvent).join(EventType).filter(
+ UserEvent.user_id == self.user.id,
+ EventType.title == 'Обучение'
+ ).all()
+
+ self.attendances = session.query(Attendance).filter(Attendance.user_id == self.user.id).all()
+
+ self.vacations = session.query(VacationTimetable).filter(VacationTimetable.user_id == self.user.id).all()
+
+ self.display_list()
+
+ def set_minimum_date(self):
+ self.dateEdit_2.setMinimumDate(
+ self.dateEdit.date().toPyDate() + datetime.timedelta(days=1)
+ )
+
+ def change_type_event(self):
+ if self.comboBox.currentText() == 'Обучение':
+ self.label_6.setVisible(False)
+ self.dateEdit_2.setVisible(False)
+
+ self.label_7.setVisible(False)
+ self.lineEdit.setVisible(False)
+ elif self.comboBox.currentText() == 'Отгул':
+ self.label_6.setVisible(False)
+ self.dateEdit_2.setVisible(False)
+
+ self.label_7.setVisible(True)
+ self.lineEdit.setVisible(True)
+ elif self.comboBox.currentText() == 'Отпуск':
+ self.label_6.setVisible(True)
+ self.dateEdit_2.setVisible(True)
+
+ self.label_7.setVisible(False)
+ self.lineEdit.setVisible(False)
+
+ def change_future(self):
+ self.future = not self.future
+
+ if self.future:
+ self.pushButton_4.setStyleSheet('''
+ QPushButton {
+ background-color: #2f9836;
+ }
+ ''')
+ else:
+ self.pushButton_4.setStyleSheet('''
+ QPushButton {
+ background-color: rgb(228, 244, 204);
+ }
+ ''')
+
+ self.display_list()
+
+ def change_current(self):
+ self.current = not self.current
+
+ if self.current:
+ self.pushButton_2.setStyleSheet('''
+ QPushButton {
+ background-color: #2f9836;
+ }
+ ''')
+ else:
+ self.pushButton_2.setStyleSheet('''
+ QPushButton {
+ background-color: rgb(228, 244, 204);
+ }
+ ''')
+
+ self.display_list()
+
+ def change_past(self):
+ self.past = not self.past
+
+ if self.past:
+ self.pushButton_3.setStyleSheet('''
+ QPushButton {
+ background-color: #2f9836;
+ }
+ ''')
+ else:
+ self.pushButton_3.setStyleSheet('''
+ QPushButton {
+ background-color: rgb(228, 244, 204);
+ }
+ ''')
+
+ self.display_list()
+
+ def display_list(self):
+ for i in range(self.verticalLayout.count()):
+ self.verticalLayout.itemAt(i).widget().close()
+
+ for i in range(self.verticalLayout_2.count()):
+ self.verticalLayout_2.itemAt(i).widget().close()
+
+ for i in range(self.verticalLayout_3.count()):
+ self.verticalLayout_3.itemAt(i).widget().close()
+
+ curses = sorted(self.curses, key=lambda x: x.datetime_event)
+ attendances = sorted(self.attendances, key=lambda x: x.date)
+ vacations = sorted(self.vacations, key=lambda x: x.start_date)
+
+ if self.past:
+ past_curser = list(
+ filter(
+ lambda x: x.datetime_event.date() < datetime.date.today(),
+ curses
+ )
+ )
+
+ for i in past_curser:
+ event_widget = EventWidget(i.datetime_event)
+ self.verticalLayout.addWidget(event_widget)
+
+ past_attendances = list(
+ filter(
+ lambda x: x.date < datetime.date.today(),
+ attendances
+ )
+ )
+
+ for i in past_attendances:
+ event_widget = EventWidget(i.date, reason=i.reason)
+ self.verticalLayout_2.addWidget(event_widget)
+
+ past_vacations = list(
+ filter(
+ lambda x: x.start_date < datetime.date.today(),
+ vacations
+ )
+ )
+
+ for i in past_vacations:
+ event_widget = EventWidget(i.start_date, i.end_date)
+ self.verticalLayout_3.addWidget(event_widget)
+
+ if self.current:
+ current_curser = list(
+ filter(
+ lambda x: x.datetime_event.date() == datetime.date.today(),
+ curses
+ )
+ )
+
+ for i in current_curser:
+ event_widget = EventWidget(i.datetime_event)
+ self.verticalLayout.addWidget(event_widget)
+
+ current_attendances = list(
+ filter(
+ lambda x: x.date == datetime.date.today(),
+ attendances
+ )
+ )
+
+ for i in current_attendances:
+ event_widget = EventWidget(i.date, reason=i.reason)
+ self.verticalLayout_2.addWidget(event_widget)
+
+ current_vacations = list(
+ filter(
+ lambda x: x.start_date <= datetime.date.today() <= x.end_date,
+ vacations
+ )
+ )
+
+ for i in current_vacations:
+ event_widget = EventWidget(i.start_date, i.end_date)
+ self.verticalLayout_3.addWidget(event_widget)
+
+ if self.future:
+ future_curser = list(
+ filter(
+ lambda x: x.datetime_event.date() > datetime.date.today(),
+ curses
+ )
+ )
+
+ for i in future_curser:
+ event_widget = EventWidget(i.datetime_event)
+ self.verticalLayout.addWidget(event_widget)
+
+ future_attendances = list(
+ filter(
+ lambda x: x.date > datetime.date.today(),
+ attendances
+ )
+ )
+
+ for i in future_attendances:
+ event_widget = EventWidget(i.date, reason=i.reason)
+ self.verticalLayout_2.addWidget(event_widget)
+
+ future_vacations = list(
+ filter(
+ lambda x: x.start_date > datetime.date.today(),
+ vacations
+ )
+ )
+
+ for i in future_vacations:
+ event_widget = EventWidget(i.start_date, i.end_date)
+ self.verticalLayout_3.addWidget(event_widget)
+
+
+class EventWidget(QWidget):
+ def __init__(self, start_date, end_date=None, reason=None):
+ super().__init__()
+
+ self.setMinimumHeight(90)
+ self.setMaximumHeight(90)
+
+ self.layout = QHBoxLayout()
+ label1 = QLabel(
+ str(start_date) if end_date is None else 'Дата начала:\n' + str(start_date)
+ )
+ self.layout.addWidget(label1)
+
+ if not end_date is None:
+ label2 = QLabel(
+ 'Дата окончания:\n' + str(end_date)
+ )
+ self.layout.addWidget(label2)
+
+ if not reason is None:
+ label3 = QLabel('Причина:\n' + reason)
+ self.layout.addWidget(label3)
+
+ wdg = QWidget()
+
+ wdg.setLayout(self.layout)
+ wdg.setStyleSheet('''
+ QWidget {
+ border: 1px solid black;
+ }
+ QLabel {
+ border: none;
+ }
+ ''')
+
+ lyt = QHBoxLayout()
+ lyt.addWidget(wdg)
+ self.setLayout(lyt)
diff --git a/Desktop/ui/events_dialog_window.ui b/Desktop/ui/events_dialog_window.ui
index 8402ad0..fa3d22b 100644
--- a/Desktop/ui/events_dialog_window.ui
+++ b/Desktop/ui/events_dialog_window.ui
@@ -26,13 +26,91 @@
QPushButton {
background-color: rgb(228, 244, 204);
-}
-QPushButton:hover {
-background-color: #2f9836;
}
- -
+
-
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 69
+ 606
+
+
+
+
-
+
+
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+
+ 40
+ 20
+
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ Назад
+
+
+
+ -
true
@@ -42,8 +120,8 @@ background-color: #2f9836;
0
0
- 923
- 606
+ 897
+ 504
@@ -82,8 +160,8 @@ background-color: #2f9836;
0
0
- 903
- 554
+ 877
+ 452
@@ -125,36 +203,7 @@ background-color: #2f9836;
- -
-
-
- true
-
-
-
-
- 0
- 0
- 69
- 606
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
- Назад
-
-
-
- -
+
-
Qt::Horizontal
@@ -167,8 +216,111 @@ background-color: #2f9836;
- -
-
+
-
+
+
+ Qt::Vertical
+
+
+
+ 20
+ 40
+
+
+
+
+ -
+
+
+ true
+
+
+
+
+ 0
+ 0
+ 897
+ 94
+
+
+
+
-
+
+
+ -
+
+
+ true
+
+
+
+ -
+
+
+ Добавить
+
+
+
+ -
+
+
+ Тип события
+
+
+
+ -
+
+
+ Дата начала
+
+
+
+ -
+
+
-
+
+ Обучение
+
+
+ -
+
+ Отгул
+
+
+ -
+
+ Отпуск
+
+
+
+
+ -
+
+
+ true
+
+
+
+ -
+
+
+ Краткое обоснование
+
+
+
+ -
+
+
+ Дата окончания
+
+
+
+
+
+
+
+ -
+
Qt::Horizontal
@@ -180,15 +332,15 @@ background-color: #2f9836;
- -
-
+
-
+
- Qt::Horizontal
+ Qt::Vertical
- 40
- 20
+ 20
+ 40