From: Agnibho Mondal Date: Mon, 6 Nov 2023 21:32:45 +0000 (+0530) Subject: Prescriber selector X-Git-Tag: v0.5~53 X-Git-Url: https://code.agnibho.com/repo?a=commitdiff_plain;h=9a94471a0bf200a63b97fd1d0b48893fed58c979;p=medscript.git Prescriber selector --- diff --git a/prescription.py b/prescription.py index d52602c..ab4ccc9 100644 --- a/prescription.py +++ b/prescription.py @@ -37,8 +37,17 @@ class Prescriber: print(e) def read_from(self, file): - with open(file, "r") as f: - self.set_data_from_json(json.loads(f.read())) + try: + with open(file, "r") as f: + self.set_data_from_json(json.loads(f.read())) + except Exception as e: + self.name = "" + self.qualification = "" + self.registration = "" + self.address = "" + self.contact = "" + self.extra = "" + self.properties = "" class Prescription: diff --git a/setting.py b/setting.py index a3471e4..d211956 100644 --- a/setting.py +++ b/setting.py @@ -5,10 +5,12 @@ # MedScript is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. # You should have received a copy of the GNU General Public License along with MedScript. If not, see . -from PyQt6.QtWidgets import QDialog, QFormLayout, QHBoxLayout, QPushButton, QLabel, QLineEdit, QTextEdit, QComboBox, QCheckBox, QStatusBar, QMessageBox, QFileDialog +from PyQt6.QtWidgets import QDialog, QFormLayout, QHBoxLayout, QVBoxLayout, QPushButton, QLabel, QLineEdit, QTextEdit, QComboBox, QCheckBox, QMessageBox, QFileDialog, QListWidget from PyQt6.QtGui import QIcon from PyQt6.QtCore import Qt, pyqtSignal +from glob import glob import os, json +from prescription import Prescriber from config import config, config_file class EditConfiguration(QDialog): @@ -70,7 +72,7 @@ class EditConfiguration(QDialog): with open(config_file, "w") as f: f.write(json.dumps(self.config, indent=4)) QMessageBox.information(self,"Saved", "Configuration saved. Please restart MedScript.") - self.hide() + self.close() except Exception as e: QMessageBox.critical(self,"Failed to save", "Failed to save the data to the file.") print(e) @@ -158,9 +160,12 @@ class EditPrescriber(QDialog): file="" prescriber="" - def load(self): + def load(self, file=None): try: - self.file=config["prescriber"] + if(file): + self.file=file + else: + self.file=config["prescriber"] with open(self.file) as data: self.prescriber=json.loads(data.read()) self.input_name.setText(self.prescriber["name"]) @@ -171,7 +176,7 @@ class EditPrescriber(QDialog): self.input_extra.setText(self.prescriber["extra"]) except Exception as e: QMessageBox.critical(self,"Failed to load", "Failed to load the data into the application.") - raise(e) + print(e) def save(self, file=False): if(file is not False or QMessageBox.StandardButton.Yes==QMessageBox.question(self,"Confirm Save", "This action will overwrite the previous information. Continue?")): @@ -188,18 +193,11 @@ class EditPrescriber(QDialog): f.write(json.dumps(self.prescriber, indent=4)) QMessageBox.information(self,"Saved", "Information saved.") self.signal_save.emit(self.file) - self.hide() + self.close() except Exception as e: QMessageBox.critical(self,"Failed to save", "Failed to save the data to the file.") print(e) - def save_as(self): - try: - self.save(QFileDialog.getSaveFileName(self, "Save prescriber", config["prescriber_directory"], "JSON (*.json);; All Files (*)")[0]) - except Exception as e: - print(e) - - def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) @@ -220,15 +218,86 @@ class EditPrescriber(QDialog): layout.addRow("Extra", self.input_extra) button_save=QPushButton("Save") button_save.clicked.connect(self.save) - button_save_as=QPushButton("Save As") - button_save_as.clicked.connect(self.save_as) - button_reset=QPushButton("Reset") - button_reset.clicked.connect(self.load) - layout_btn=QHBoxLayout() - layout_btn.addWidget(button_save) - layout_btn.addWidget(button_save_as) - layout_btn.addWidget(button_reset) - layout.addRow("", layout_btn) + layout.addRow("", button_save) + + self.setWindowIcon(QIcon(os.path.join("resource", "icon_medscript.ico"))) + + self.load() + +class SelectPrescriber(QDialog): + + signal_select=pyqtSignal(str) + signal_edit=pyqtSignal(str) + + listAll={"obj": [], "name": [], "file": []} + + def load(self): + self.listAll={"obj": [], "name": [], "file": []} + self.showAll.clear() + for i in glob(os.path.join(config["prescriber_directory"], "*.json")): + self.listAll["obj"].append(Prescriber(i)) + try: + self.listAll["name"].append(self.listAll["obj"][-1].name) + except AttributeError: + del self.listAll["obj"][-1] + self.listAll["file"].append(i) + for i in self.listAll["name"]: + self.showAll.addItem(i) + + def select(self): + txt=self.showAll.currentItem().text() + idx=self.listAll["name"].index(txt) + self.signal_select.emit(self.listAll["file"][idx]) + self.close() + + def new(self): + num=1 + file=os.path.join(config["prescriber_directory"], "prescriber"+str(num)+".json") + while(os.path.exists(file)): + num=num+1 + file=os.path.join(config["prescriber_directory"], "prescriber"+str(num)+".json") + self.signal_edit.emit(file) + self.close() + + def edit(self): + txt=self.showAll.currentItem().text() + idx=self.listAll["name"].index(txt) + self.signal_edit.emit(self.listAll["file"][idx]) + self.close() + + def delete(self): + txt=self.showAll.currentItem().text() + idx=self.listAll["name"].index(txt) + file=self.listAll["file"][idx] + if(file==config["prescriber"]): + QMessageBox.warning(self,"Unable to Delete", "Default prescriber file cannot be deleted.") + else: + if(QMessageBox.StandardButton.Yes==QMessageBox.question(self,"Confirm Delete", "Are you sure you want to delete the prescriber? This action cannot be undone.")): + os.unlink(self.listAll["file"][idx]) + self.showAll.takeItem(self.showAll.currentRow()) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + self.setWindowTitle("Prescriber") + + layout=QVBoxLayout(self) + self.showAll=QListWidget() + layout.addWidget(self.showAll) + layout2=QHBoxLayout() + btn_select=QPushButton("Select") + btn_select.clicked.connect(self.select) + layout2.addWidget(btn_select) + btn_new=QPushButton("New") + btn_new.clicked.connect(self.new) + layout2.addWidget(btn_new) + btn_edit=QPushButton("Edit") + btn_edit.clicked.connect(self.edit) + layout2.addWidget(btn_edit) + btn_del=QPushButton("Delete") + btn_del.clicked.connect(self.delete) + layout2.addWidget(btn_del) + layout.addLayout(layout2) self.setWindowIcon(QIcon(os.path.join("resource", "icon_medscript.ico"))) diff --git a/window.py b/window.py index c4787f8..96030e8 100644 --- a/window.py +++ b/window.py @@ -16,11 +16,11 @@ from packaging import version from functools import partial from config import config, info, real_dir -from prescription import Prescription +from prescription import Prescription, Prescriber from renderer import Renderer from filehandler import FileHandler from renderbox import RenderBox -from setting import EditConfiguration, EditPrescriber +from setting import EditConfiguration, EditPrescriber, SelectPrescriber from editpreset import EditPreset from viewbox import ViewBox from preset import Preset @@ -36,6 +36,7 @@ class MainWindow(QMainWindow): current_file=FileHandler() prescription=Prescription() + prescriber=Prescriber() renderer=Renderer() plugin=Plugin() save_state=md5("".encode()).hexdigest() @@ -207,17 +208,14 @@ class MainWindow(QMainWindow): def cmd_configuration(self): self.edit_configuration.exec() - def cmd_prescriber(self): + def cmd_prescriber(self, file=None): + self.edit_prescriber.load(file) self.edit_prescriber.exec() - def cmd_prescriber_reload(self, file=None): - self.prescription.reload_prescriber(file=None) - self.refresh() - def cmd_switch(self): try: - self.prescription.reload_prescriber(QFileDialog.getOpenFileName(self, "Open File", config["prescriber_directory"], "JSON (*.json);; All Files (*)")[0]) - self.refresh() + self.select_prescriber.load() + self.select_prescriber.exec() except FileNotFoundError as e: print(e) @@ -371,7 +369,7 @@ class MainWindow(QMainWindow): self.input_additional.setText(additional) self.input_certificate.setText(certificate) self.input_custom.setData(custom) - self.label_prescriber.setText(self.prescription.prescriber.name) + self.label_prescriber.setText(self.prescriber.name) except Exception as e: QMessageBox.warning(self,"Failed to load", "Failed to load the data into the application.") print(e) @@ -445,6 +443,11 @@ class MainWindow(QMainWindow): self.load_interface_from_instance() self.save_state=md5(self.prescription.get_json().encode()).hexdigest() + def change_prescriber(self, file): + self.prescription.reload_prescriber(file) + self.prescriber.read_from(file) + self.refresh() + def refresh(self): self.update_instance() self.load_interface_from_instance() @@ -888,7 +891,10 @@ class MainWindow(QMainWindow): self.signal_view.connect(self.renderbox.update) self.edit_configuration=EditConfiguration() self.edit_prescriber=EditPrescriber() - self.edit_prescriber.signal_save.connect(self.cmd_prescriber_reload) + self.edit_prescriber.signal_save.connect(self.change_prescriber) + self.select_prescriber=SelectPrescriber() + self.select_prescriber.signal_edit.connect(self.cmd_prescriber) + self.select_prescriber.signal_select.connect(self.change_prescriber) self.viewbox=ViewBox() self.index=Index() self.edit_preset=EditPreset()