diff --git a/mods/diagnosis.py b/mods/diagnosis.py index b2bb184..5524f24 100644 --- a/mods/diagnosis.py +++ b/mods/diagnosis.py @@ -35,7 +35,7 @@ def cats_subcats(cat): def get_categories(parent=None): with db.atomic(): return DiagnosisCategory.select().where(DiagnosisCategory.parent == parent) -def get_reception_diagnosisses(cat=None): +def get_reception_diagnosis_items(cat=None): with db.atomic(): if cat: d = list(Diagnosis.select().where(Diagnosis.category == cat).order_by(Diagnosis.code)) @@ -87,7 +87,7 @@ def create_choose_diagnosis_win(reception_b): def redraw_diagnosis_list(self, cat): for c in diagnosis_list.get_children(): diagnosis_list.remove(c) - for d in get_reception_diagnosisses(cat): + for d in get_reception_diagnosis_items(cat): diagnosis_list.add(build_diagnosis_row(d)) diagnosis_list.show_all() def diagnosis_row_selected(self, *a): diff --git a/mods/files.py b/mods/files.py index cbbcf9c..90ab108 100644 --- a/mods/files.py +++ b/mods/files.py @@ -32,6 +32,9 @@ with open(diagnosis_row_file, 'r') as f: anamnesis_row_file = os.path.join(ui_dir, 'anamnesis_row.glade') with open(anamnesis_row_file, 'r') as f: anamnesis_row_ui_str = f.read() +observe_row_file = os.path.join(ui_dir, 'observe_row.glade') +with open(observe_row_file, 'r') as f: + observe_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/lists.py b/mods/lists.py index aa94d76..e9d9a7f 100644 --- a/mods/lists.py +++ b/mods/lists.py @@ -8,11 +8,11 @@ import re import peewee ANAMNEZ_LIST = 'anamnez' -OBSERV_LIST = 'observ' +OBSERVE_LIST = 'observ' lists_map = { ANAMNEZ_LIST: 'Анамнез', - OBSERV_LIST: 'Осмотр', + OBSERVE_LIST: 'Осмотр', } for s_id in lists_map: diff --git a/mods/receptions.py b/mods/receptions.py index bdfa5c8..b2f8f25 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 +from mods.db import db, Reception, Patient, ReceptionDiagnosis, ReceptionAnamnesis, ReceptionObserve 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 +from mods.files import anamnesis_row_ui_str, observe_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.lists import get_listrecord, get_list_by_system_id, create_open_list_win, ANAMNEZ_LIST +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 @@ -64,16 +64,26 @@ class ReceptionAnamnesisRow(Gtk.ListBoxRow): @db_id.setter def db_id_setter(self, value): self._db_id = value +class ReceptionObserveRow(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(): return Reception.get_by_id(reception_id) -def get_reception_diagnosisses(reception): +def get_reception_diagnosis_items(reception): with db.atomic(): return ReceptionDiagnosis.select().where(ReceptionDiagnosis.reception == reception) -def get_reception_anamnesisses(reception): +def get_reception_anamnesis_items(reception): with db.atomic(): return ReceptionAnamnesis.select().where(ReceptionAnamnesis.reception == reception) +def get_reception_observe_items(reception): + with db.atomic(): + return ReceptionObserve.select().where(ReceptionObserve.reception == reception) def delete_reception_diagnosisses(reception, diag_id_list): if not len(diag_id_list): return with db.atomic(): @@ -82,6 +92,10 @@ def delete_reception_anamnesisses(reception, anam_id_list): if not len(anam_id_list): return with db.atomic(): ReceptionAnamnesis.delete().where((ReceptionAnamnesis.reception == reception) & (ReceptionAnamnesis.anamnesis.in_(anam_id_list))).execute() +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 add_reception_diagnosisses(reception, diag_id_list): if not len(diag_id_list): return with db.atomic(): @@ -92,20 +106,32 @@ def add_reception_anamnesisses(reception, anam_id_list): with db.atomic(): inserts = list(map(lambda x: {'reception': reception, 'anamnesis': get_listrecord(x)}, anam_id_list)) _ = ReceptionAnamnesis.insert_many(inserts).execute() +def add_reception_observe_symptoms(reception, observe_id_list): + if not len(observe_id_list): return + with db.atomic(): + inserts = list(map(lambda x: {'reception': reception, 'symptom': get_listrecord(x)}, observe_id_list)) + _ = ReceptionObserve.insert_many(inserts).execute() def save_reception_diagnosisses(reception, diag_id_list): - exist_diags = set(map(lambda x: x.diagnosis.id, get_reception_diagnosisses(reception))) + exist_diags = set(map(lambda x: x.diagnosis.id, get_reception_diagnosis_items(reception))) new_diags = set(diag_id_list) to_del = list(exist_diags - new_diags) to_add = list(new_diags - exist_diags) delete_reception_diagnosisses(reception, to_del) add_reception_diagnosisses(reception, to_add) def save_reception_anamnesisses(reception, anam_id_list): - exist_anams = set(map(lambda x: x.anamnesis.id, get_reception_anamnesisses(reception))) + exist_anams = set(map(lambda x: x.anamnesis.id, get_reception_anamnesis_items(reception))) new_anams = set(anam_id_list) to_del = list(exist_anams - new_anams) to_add = list(new_anams - exist_anams) delete_reception_anamnesisses(reception, to_del) add_reception_anamnesisses(reception, to_add) +def save_reception_observe(reception, observe_id_list): + exist_symptoms = set(map(lambda x: x.symptom.id, get_reception_observe_items(reception))) + new_symptoms = set(observe_id_list) + to_del = list(exist_symptoms - new_symptoms) + to_add = list(new_symptoms - exist_symptoms) + delete_reception_observe_symptoms(reception, to_del) + add_reception_observe_symptoms(reception, to_add) ################################################################################## def build_reception_row(reception_datetime): @@ -157,6 +183,17 @@ def build_reception_anamnesis_row(anamnesis): row.props.db_id = anamnesis.id row.add(box) return row +def build_reception_observe_row(observe): + b = Gtk.Builder() + b.add_from_string(observe_row_ui_str) + win = b.get_object('win') + box = b.get_object('observe_box') + b.get_object('title').set_text(f'{observe.text}') + win.remove(win.get_children()[0]) + row = ReceptionObserveRow() + row.props.db_id = observe.id + row.add(box) + return row def create_open_reception_win(): b = Gtk.Builder() reception_list = builder.get_object('reception_list') @@ -170,6 +207,10 @@ def create_open_reception_win(): anam_db_list = get_list_by_system_id(ANAMNEZ_LIST) choose_anamnesis_win = create_open_list_win(anam_db_list.id, choose=True, parent_list=reception_anam_list) choose_anamnesis_win.show_all() + def show_choose_observe_win(self, button): + observe_db_list = get_list_by_system_id(OBSERVE_LIST) + choose_symptom_win = create_open_list_win(observe_db_list.id, choose=True, parent_list=reception_observe_list) + choose_symptom_win.show_all() def remove_diagnosis(self, button): row = reception_diag_list.get_selected_row() reception_diag_list.remove(row) @@ -180,10 +221,17 @@ def create_open_reception_win(): reception_anam_list.remove(row) disable_widget([remove_anam_button]) reception_anam_list.show_all() + def remove_observe(self, button): + row = reception_observe_list.get_selected_row() + reception_observe_list.remove(row) + disable_widget([remove_observe_button]) + reception_observe_list.show_all() def diagnosis_selected(self, *s): enable_widget([remove_diag_button]) def anamnesis_selected(self, *a): enable_widget([remove_anam_button]) + def observe_selected(self, *a): + enable_widget([remove_observe_button]) def save(self, button): # Диагнозы diag_id_list = list(map(lambda x: x.props.db_id, reception_diag_list.get_children())) @@ -193,6 +241,10 @@ def create_open_reception_win(): anam_id_list = list(map(lambda x: x.props.db_id, reception_anam_list.get_children())) save_reception_anamnesisses(reception, anam_id_list) ####### + # Осмотр + observe_id_list = list(map(lambda x: x.props.db_id, reception_observe_list.get_children())) + save_reception_observe(reception, observe_id_list) + ####### w.destroy() b.add_from_file(open_reception_win_file) b.connect_signals(OpenReceptionWinHandler()) @@ -203,14 +255,20 @@ def create_open_reception_win(): reception_dt.set_markup(f'{reception_row.props.datetime.strftime("%d.%m.%Y - %H:%M")}') reception_diag_list = b.get_object('diagnosis_list') reception_anam_list = b.get_object('anamnesis_list') + reception_observe_list = b.get_object('observe_list') remove_diag_button = b.get_object('remove_diag_button') remove_anam_button = b.get_object('remove_anam_button') - # Анамнезы - for ra in [x.anamnesis for x in get_reception_anamnesisses(reception)]: + remove_observe_button = b.get_object('remove_observe_button') + # Анамнез + for ra in [x.anamnesis for x in get_reception_anamnesis_items(reception)]: reception_anam_list.add(build_reception_anamnesis_row(ra)) # + # Осмотр + for ro in [x.symptom for x in get_reception_observe_items(reception)]: + reception_observe_list.add(build_reception_observe_row(ro)) + # # Диагнозы - for rd in [x.diagnosis for x in get_reception_diagnosisses(reception)]: + for rd in [x.diagnosis for x in get_reception_diagnosis_items(reception)]: reception_diag_list.add(build_reception_diagnosis_row(rd)) # w = b.get_object('open_reception_window') diff --git a/res/ui/observe_row.glade b/res/ui/observe_row.glade new file mode 100644 index 0000000..e8e6a85 --- /dev/null +++ b/res/ui/observe_row.glade @@ -0,0 +1,31 @@ + + + + + + False + False + + + + + + True + False + + + True + False + label + 0 + + + True + True + 1 + + + + + + diff --git a/res/ui/open_reception_win.glade b/res/ui/open_reception_win.glade index 7ef52ff..0a1dcb7 100644 --- a/res/ui/open_reception_win.glade +++ b/res/ui/open_reception_win.glade @@ -316,6 +316,7 @@ True False + @@ -348,6 +349,7 @@ True True True + True @@ -364,11 +366,12 @@ - + True False True True + True