This repository was archived by the owner on Jan 25, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSearchWindow.py
More file actions
160 lines (124 loc) · 6.58 KB
/
SearchWindow.py
File metadata and controls
160 lines (124 loc) · 6.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
from PySide6 import QtCore
from PySide6.QtCore import Qt, QRect, QCoreApplication
from PySide6 import QtWidgets
from PySide6.QtGui import QResizeEvent, QShortcut, QKeySequence, QMouseEvent
from PySide6.QtWidgets import QTableWidgetItem, QMessageBox
from ui_searchWindow import Ui_SearchWindow
from PatientInfoWindow import PatientInfoWindow
from Database import Database
from Exportdata import Exportdata
class SearchWindow(QtWidgets.QMainWindow):
def __init__(self, parent, database: Database, export_data: Exportdata):
super().__init__(parent)
self.ui = Ui_SearchWindow()
self.ui.setupUi(self)
self.database = database
self.parent = parent
self.export_data = export_data
self.table = self.ui.patient_tableWidget
self.reTranslate_headers()
# Allow manual resizing of the header sections
horizontal_header = self.table.horizontalHeader()
horizontal_header.setSectionResizeMode(QtWidgets.QHeaderView.Interactive)
horizontal_header.setSectionResizeMode(self.table.columnCount()-1, QtWidgets.QHeaderView.Stretch)
vertical_header = self.table.verticalHeader()
vertical_header.setSectionResizeMode(QtWidgets.QHeaderView.Interactive)
vertical_header.setSectionsMovable(True)
vertical_header.setDragEnabled(True)
self.table.setEditTriggers(QtWidgets.QAbstractItemView.NoEditTriggers)
self.table.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectRows)
self.table.setSelectionMode(QtWidgets.QAbstractItemView.SingleSelection)
self.table.setShowGrid(False)
self.table.setFocusPolicy(QtCore.Qt.NoFocus)
self.table.setAlternatingRowColors(True)
self.table.setSortingEnabled(True)
self.table.horizontalHeader().setSortIndicatorShown(True)
self.table.setColumnHidden(0, True)
self.ui.search_pushButton_3.clicked.connect(self.search_patients)
self.ui.delete_selected_pushButton_3.clicked.connect(self.delete_selected_patient)
self.table.itemDoubleClicked.connect(self.on_item_doule_clicked)
shortcut = QShortcut(QKeySequence(Qt.CTRL | Qt.Key_W), self)
shortcut.activated.connect(self.close)
self.search_patients()
def reTranslate_headers(self):
# set header labels
self.labels = [
QCoreApplication.translate("SearchWindow", "ID"),
QCoreApplication.translate("SearchWindow", "Full Name"),
QCoreApplication.translate("SearchWindow", "Gender"),
QCoreApplication.translate("SearchWindow", "Birthdate"),
QCoreApplication.translate("SearchWindow", "Telephone"),
QCoreApplication.translate("SearchWindow", "Home Address"),
QCoreApplication.translate("SearchWindow", "Remark"),
QCoreApplication.translate("SearchWindow", "Allergic History"),
QCoreApplication.translate("SearchWindow", "Past Medical History")
]
self.table.setColumnCount(len(self.labels))
for i, label in enumerate(self.labels):
self.table.setHorizontalHeaderItem(i, QTableWidgetItem(label))
def resizeEvent(self, event: QResizeEvent) -> None:
super().resizeEvent(event)
#resize the table widget as the cursor dragging the window
XY = self.table.geometry().topLeft()
width = self.geometry().width()
height = self.geometry().height()
self.table.setGeometry(QRect(XY.x(), XY.y(), width, height))
self.table.resizeColumnsToContents()
self.table.resizeRowsToContents()
def mousePressEvent(self, event: QMouseEvent):
self.search_patients()
def search_patients(self):
name = self.ui.name_plainTextEdit_3.toPlainText()
tel = self.ui.tel_plainTextEdit_3.toPlainText()
gender = self.ui.gender_comboBox_3.currentText()
if gender == QCoreApplication.translate("SearchWindow", u"(Select)", None):
gender = ""
elif gender == QCoreApplication.translate("SearchWindow", u"Male", None):
gender = "Male"
elif gender == QCoreApplication.translate("SearchWindow", u"Female", None):
gender = "Female"
patients_list = self.database.get_patient_by_condition(name, tel, gender)
# Clear the table before populating with new data
self.table.clearContents()
self.table.setRowCount(0)
# Populating the table with the fetched patient data
for row, data in enumerate(patients_list):
self.table.insertRow(row)
for col, value in enumerate(data):
self.table.setItem(row, col, QTableWidgetItem(str(value)))
self.table.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Interactive)
self.table.horizontalHeader().setSectionResizeMode(self.table.columnCount()-1, QtWidgets.QHeaderView.Stretch)
def delete_selected_patient(self):
if not self.show_confirmation_dialog():
return
selected_row = self.table.currentRow()
patient_id_item = self.table.item(selected_row, 0)
patient_id = int(patient_id_item.text())
self.database.delete_patient(patient_id)
self.search_patients()
def show_confirmation_dialog(self) -> bool:
confirm_dialog = QMessageBox(self)
confirm_dialog.setIcon(QMessageBox.Warning)
confirm_dialog.setWindowTitle(QCoreApplication.translate("SearchWindow", u"Confirmation", None))
confirm_dialog.setText(QCoreApplication.translate("SearchWindow", u"Are you sure you want to delete this patient?", None))
confirm_dialog.setStandardButtons(QMessageBox.Yes | QMessageBox.Cancel)
confirm_dialog.setDefaultButton(QMessageBox.Cancel)
response = confirm_dialog.exec_()
if response == QMessageBox.Yes:
return True
else:
return False
def on_item_doule_clicked(self, item):
row = item.row()
patient_id_item = self.table.item(row, 0)
patient_id = int(patient_id_item.text())
self.showPatientInfoWindow(patient_id)
def showPatientInfoWindow(self, patient_id):
patient_info_window = PatientInfoWindow(self, self.database, patient_id, self.export_data )
patient_info_window.show()
self.parent.languageRadioButtonConnect(patient_info_window.reTranslate)
@QtCore.Slot()
def reTranslate(self):
self.reTranslate_headers()
self.ui.retranslateUi(self)
self.update()