From c67e4fb479f6000958aa897a2875db35a1c74412 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=91=D0=BE=D1=80=D0=BE=D0=B4=D0=B8=D0=BD=20=D0=A0=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD?= Date: Wed, 6 May 2020 19:08:58 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=B0=D0=BB=D0=B8=D0=B7=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=8B=20?= =?UTF-8?q?=D1=81=20=D0=BB=D0=B5=D0=BA=D0=B0=D1=80=D1=81=D1=82=D0=B2=D0=B0?= =?UTF-8?q?=D0=BC=D0=B8=20=D0=B2=20=D0=BF=D1=80=D0=B8=D1=91=D0=BC=D0=B5.?= =?UTF-8?q?=20=D0=A7=D0=B0=D1=81=D1=82=D1=8C...?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mods/db.py | 36 +++++++++++++++++------------ mods/files.py | 3 +++ mods/medicines.py | 12 ++++++++++ mods/receptions.py | 36 ++++++++++++++++++++++++++--- res/ui/choose_medicine_win.glade | 1 + res/ui/observe_row.glade | 4 ++-- res/ui/reception_medicine_row.glade | 31 +++++++++++++++++++++++++ 7 files changed, 103 insertions(+), 20 deletions(-) create mode 100644 res/ui/reception_medicine_row.glade diff --git a/mods/db.py b/mods/db.py index 3e792f3..a447649 100644 --- a/mods/db.py +++ b/mods/db.py @@ -100,6 +100,9 @@ class Patient(BaseModel): policy_company = TextField(null=True) snils_number = TextField(null=True) notes = TextField(null=True) +class PatientIndex(BaseFTSModel): + rowid = RowIDField() + fio = SearchField() class List(BaseModel): id = AutoIncrementField() name = TextField() @@ -142,21 +145,6 @@ class DiagnosisIndex(BaseFTSModel): rowid = RowIDField() code = SearchField() title = SearchField() -class ReceptionDiagnosis(BaseModel): - id = AutoIncrementField() - reception = ForeignKeyField(Reception, backref='reception_diagnosisses', on_delete='CASCADE') - diagnosis = ForeignKeyField(Diagnosis, backref='reception_diagnosisses', on_delete='CASCADE') -class ReceptionAnamnesis(BaseModel): - id = AutoIncrementField() - reception = ForeignKeyField(Reception, backref='reception_anamnesisses', on_delete='CASCADE') - anamnesis = ForeignKeyField(ListRecord, backref='reception_anamnesisses', on_delete='CASCADE') -class ReceptionObserve(BaseModel): - id = AutoIncrementField() - reception = ForeignKeyField(Reception, backref='reception_symptoms', on_delete='CASCADE') - symptom = ForeignKeyField(ListRecord, backref='reception_symptoms', on_delete='CASCADE') -class PatientIndex(BaseFTSModel): - rowid = RowIDField() - fio = SearchField() class RlsPharmacoTherapeuticGroup(BaseModel): id = AutoIncrementField() title = TextField(null=True) @@ -182,6 +170,23 @@ class RlsIndex(BaseFTSModel): rowid = RowIDField() tradename = SearchField() internationalname = SearchField() +class ReceptionDiagnosis(BaseModel): + id = AutoIncrementField() + reception = ForeignKeyField(Reception, backref='reception_diagnosisses', on_delete='CASCADE') + diagnosis = ForeignKeyField(Diagnosis, backref='reception_diagnosisses', on_delete='CASCADE') +class ReceptionAnamnesis(BaseModel): + id = AutoIncrementField() + reception = ForeignKeyField(Reception, backref='reception_anamnesisses', on_delete='CASCADE') + anamnesis = ForeignKeyField(ListRecord, backref='reception_anamnesisses', on_delete='CASCADE') +class ReceptionObserve(BaseModel): + id = AutoIncrementField() + reception = ForeignKeyField(Reception, backref='reception_symptoms', on_delete='CASCADE') + symptom = ForeignKeyField(ListRecord, backref='reception_symptoms', on_delete='CASCADE') +class ReceptionMedicine(BaseModel): + id = AutoIncrementField() + reception = ForeignKeyField(Reception, backref='reception_medicine', on_delete='CASCADE') + medicine = ForeignKeyField(Rls, backref='reception_medicine', on_delete='CASCADE') + ### Настройки class Settings(BaseModel): key = TextField() @@ -213,6 +218,7 @@ db.create_tables([ ReceptionDiagnosis, ReceptionAnamnesis, ReceptionObserve, + ReceptionMedicine, RlsPharmacoTherapeuticGroup, RlsCountry, Rls, diff --git a/mods/files.py b/mods/files.py index 9889b6b..9dd39ca 100644 --- a/mods/files.py +++ b/mods/files.py @@ -38,6 +38,9 @@ with open(observe_row_file, 'r') as f: medicine_row_file = os.path.join(ui_dir, 'medicine_row.glade') with open(medicine_row_file, 'r') as f: medicine_row_ui_str = f.read() +reception_midicine_row_file = os.path.join(ui_dir, 'reception_medicine_row.glade') +with open(reception_midicine_row_file, 'r') as f: + reception_midicine_row_ui_str = f.read() main_win_file = os.path.join(ui_dir, 'main_win.glade') new_patient_win_file = os.path.join(ui_dir, 'new_patient_win.glade') diff --git a/mods/medicines.py b/mods/medicines.py index 8b259e1..b2507e2 100644 --- a/mods/medicines.py +++ b/mods/medicines.py @@ -22,6 +22,9 @@ def search_medicines(q): def get_all_medicines(): with db.atomic(): return Rls.select() +def get_medicine(med_id): + with db.atomic(): + return Rls.get_by_id(med_id) ######################################################## class MedicineRow(Gtk.ListBoxRow): @@ -72,6 +75,15 @@ def create_choose_medicine_win(reception_b): enable_widget([accept_button]) def medicine_list_unselected(self, *a): disable_widget([accept_button]) + def submit(self, button): + from mods.receptions import build_reception_medicine_row + exist_rows = list(map(lambda x: x.props.db_id, rm_list.get_children())) + row = ml.get_selected_row() + if row.props.db_id not in exist_rows: + medicine = get_medicine(row.props.db_id) + rm_list.add(build_reception_medicine_row(medicine)) + rm_list.show_all() + w.destroy() b.add_from_file(choose_medicine_win_file) b.connect_signals(ChooseMedicineWinHandler()) accept_button = b.get_object('accept_button') diff --git a/mods/receptions.py b/mods/receptions.py index 7baae3f..488cb3c 100644 --- a/mods/receptions.py +++ b/mods/receptions.py @@ -2,12 +2,12 @@ import gi from mods.utils import disable_widget, enable_widget gi.require_version('Gtk', '3.0') from gi.repository import Gtk, GObject, Gdk -from mods.db import db, Reception, Patient, ReceptionDiagnosis, ReceptionAnamnesis, ReceptionObserve +from mods.db import db, Reception, Patient, ReceptionDiagnosis, ReceptionAnamnesis, ReceptionObserve, ReceptionMedicine from mods.files import new_reception_win_file, reception_row_ui_str, reception_list_settings_win_file, open_reception_win_file, diagnosis_row_ui_str -from mods.files import anamnesis_row_ui_str, observe_row_ui_str +from mods.files import anamnesis_row_ui_str, observe_row_ui_str, reception_midicine_row_ui_str from mods.settings import s_get_reception_list, s_set_reception_list from mods.diagnosis import create_choose_diagnosis_win, get_giagnosis -from mods.medicines import create_choose_medicine_win +from mods.medicines import create_choose_medicine_win, get_medicine from mods.lists import get_listrecord, get_list_by_system_id, create_open_list_win, ANAMNEZ_LIST, OBSERVE_LIST from mods.root import builder from datetime import datetime, timedelta @@ -72,6 +72,13 @@ class ReceptionObserveRow(Gtk.ListBoxRow): @db_id.setter def db_id_setter(self, value): self._db_id = value +class ReceptionMedicineRow(Gtk.ListBoxRow): + @GObject.Property + def db_id(self): + return self._db_id + @db_id.setter + def db_id_setter(self, value): + self._db_id = value def get_reception(reception_id): with db.atomic(): @@ -85,6 +92,9 @@ def get_reception_anamnesis_items(reception): def get_reception_observe_items(reception): with db.atomic(): return ReceptionObserve.select().where(ReceptionObserve.reception == reception) +def get_reception_medicine_items(reception): + with db.atomic(): + return ReceptionMedicine.select().where(ReceptionMedicine.reception == reception) def delete_reception_diagnosisses(reception, diag_id_list): if not len(diag_id_list): return with db.atomic(): @@ -97,6 +107,10 @@ def delete_reception_observe_symptoms(reception, observe_id_list): if not len(observe_id_list): return with db.atomic(): ReceptionObserve.delete().where((ReceptionObserve.reception == reception) & (ReceptionObserve.symptom.in_(observe_id_list))).execute() +def delete_reception_medicines(reception, medicine_id_list): + if not len(medicine_id_list): return + with db.atomic(): + ReceptionMedicine.delete().where((ReceptionMedicine.reception == reception) & (ReceptionMedicine.medicine.in_(medicine_id_list))).execute() def add_reception_diagnosisses(reception, diag_id_list): if not len(diag_id_list): return with db.atomic(): @@ -112,6 +126,11 @@ def add_reception_observe_symptoms(reception, observe_id_list): with db.atomic(): inserts = list(map(lambda x: {'reception': reception, 'symptom': get_listrecord(x)}, observe_id_list)) _ = ReceptionObserve.insert_many(inserts).execute() +def add_reception_medicines(reception, medicine_id_list): + if not len(medicine_id_list): return + with db.atomic(): + inserts = list(map(lambda x: {'reception': reception, 'medicine': get_medicine(x)}, medicine_id_list)) + _ = ReceptionMedicine.insert_many(inserts).execute() def save_reception_diagnosisses(reception, diag_id_list): exist_diags = set(map(lambda x: x.diagnosis.id, get_reception_diagnosis_items(reception))) new_diags = set(diag_id_list) @@ -195,6 +214,17 @@ def build_reception_observe_row(observe): row.props.db_id = observe.id row.add(box) return row +def build_reception_medicine_row(medicine): + b = Gtk.Builder() + b.add_from_string(reception_midicine_row_ui_str) + win = b.get_object('win') + box = b.get_object('reception_medicine_box') + b.get_object('title').set_text(f'{medicine.tradename}') + win.remove(win.get_children()[0]) + row = ReceptionMedicineRow() + row.props.db_id = medicine.id + row.add(box) + return row def create_open_reception_win(): b = Gtk.Builder() reception_list = builder.get_object('reception_list') diff --git a/res/ui/choose_medicine_win.glade b/res/ui/choose_medicine_win.glade index 9de7e30..11c386f 100644 --- a/res/ui/choose_medicine_win.glade +++ b/res/ui/choose_medicine_win.glade @@ -23,6 +23,7 @@ False True True + True diff --git a/res/ui/observe_row.glade b/res/ui/observe_row.glade index e8e6a85..81ee3c3 100644 --- a/res/ui/observe_row.glade +++ b/res/ui/observe_row.glade @@ -1,11 +1,11 @@ - + False False - + diff --git a/res/ui/reception_medicine_row.glade b/res/ui/reception_medicine_row.glade new file mode 100644 index 0000000..13a693e --- /dev/null +++ b/res/ui/reception_medicine_row.glade @@ -0,0 +1,31 @@ + + + + + + False + False + + + + + + True + False + + + True + False + label + 0 + + + True + True + 1 + + + + + +