diff --git a/mods/files.py b/mods/files.py
index 90ab108..9889b6b 100644
--- a/mods/files.py
+++ b/mods/files.py
@@ -35,6 +35,9 @@ with open(anamnesis_row_file, 'r') as f:
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()
+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()
main_win_file = os.path.join(ui_dir, 'main_win.glade')
new_patient_win_file = os.path.join(ui_dir, 'new_patient_win.glade')
@@ -46,3 +49,4 @@ new_catalog_win_file = os.path.join(ui_dir, 'new_catalog_win.glade')
choose_patient_win_file = os.path.join(ui_dir, 'choose_patient_win.glade')
open_reception_win_file = os.path.join(ui_dir, 'open_reception_win.glade')
choose_diagnosis_win_file = os.path.join(ui_dir, 'choose_diagnosis_win.glade')
+choose_medicine_win_file = os.path.join(ui_dir, 'choose_medicine_win.glade')
diff --git a/mods/medicines.py b/mods/medicines.py
new file mode 100644
index 0000000..8b259e1
--- /dev/null
+++ b/mods/medicines.py
@@ -0,0 +1,81 @@
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk, GObject
+from mods.files import choose_medicine_win_file, medicine_row_ui_str
+from mods.db import db, Rls, RlsIndex
+from mods.utils import enable_widget, disable_widget
+import re
+
+MAX_SEARCH_RESULTS = 50
+
+def search_medicines(q):
+ q = re.sub(r'\s+', ' ', q).strip()
+ q = ' '.join([ f'{x}*' for x in q.split(' ')])
+ with db.atomic():
+ return (Rls.select()
+ .join(
+ RlsIndex,
+ on=(Rls.id == RlsIndex.rowid))
+ .where(RlsIndex.match(q))
+ .order_by(RlsIndex.bm25())
+ .limit(MAX_SEARCH_RESULTS))
+def get_all_medicines():
+ with db.atomic():
+ return Rls.select()
+########################################################
+
+class MedicineRow(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
+ @GObject.Property
+ def tradename(self):
+ return self._fio
+ @tradename.setter
+ def tradename_setter(self, value):
+ self._fio = value
+
+def build_medicine_row(medicine):
+ b = Gtk.Builder()
+ b.add_from_string(medicine_row_ui_str)
+ win = b.get_object('win')
+ box = b.get_object('medicine_box')
+ tradename = medicine.tradename
+ b.get_object('tradename').set_text(tradename)
+ internationalname = medicine.internationalname
+ b.get_object('internationalname').set_text(internationalname)
+ win.remove(win.get_children()[0])
+ row = MedicineRow()
+ row.props.db_id = medicine.id
+ row.props.tradename = tradename
+ row.add(box)
+ return row
+
+def create_choose_medicine_win(reception_b):
+ b = Gtk.Builder()
+ rm_list = reception_b.get_object('medicines_list')
+ class ChooseMedicineWinHandler:
+ def medicine_filter_changed(self, filter_widget):
+ ml.unselect_all()
+ self.medicine_list_unselected()
+ for c in ml.get_children():
+ ml.remove(c)
+ fstr = med_filter.get_text().strip()
+ if fstr:
+ for m in search_medicines(fstr):
+ ml.add(build_medicine_row(m))
+ ml.show_all()
+ def medicine_list_selected(self, *a):
+ enable_widget([accept_button])
+ def medicine_list_unselected(self, *a):
+ disable_widget([accept_button])
+ b.add_from_file(choose_medicine_win_file)
+ b.connect_signals(ChooseMedicineWinHandler())
+ accept_button = b.get_object('accept_button')
+ ml = b.get_object('medicine_list')
+ med_filter = b.get_object('medicine_filter')
+ w = b.get_object('choose_medicine_window')
+ return w
diff --git a/mods/receptions.py b/mods/receptions.py
index b2f8f25..7baae3f 100644
--- a/mods/receptions.py
+++ b/mods/receptions.py
@@ -7,6 +7,7 @@ from mods.files import new_reception_win_file, reception_row_ui_str, reception_l
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.medicines import create_choose_medicine_win
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
@@ -200,6 +201,9 @@ def create_open_reception_win():
reception_row = reception_list.get_selected_row()
reception = get_reception(reception_row.props.db_id)
class OpenReceptionWinHandler:
+ def show_choose_medicine_win(self, button):
+ choose_medicine_win = create_choose_medicine_win(b)
+ choose_medicine_win.show_all()
def show_choose_diagnosis_win(self, button):
choose_diagnosis_win = create_choose_diagnosis_win(b)
choose_diagnosis_win.show_all()
diff --git a/res/ui/choose_medicine_win.glade b/res/ui/choose_medicine_win.glade
new file mode 100644
index 0000000..9de7e30
--- /dev/null
+++ b/res/ui/choose_medicine_win.glade
@@ -0,0 +1,121 @@
+
+
+
+
+
+
diff --git a/res/ui/medicine_row.glade b/res/ui/medicine_row.glade
new file mode 100644
index 0000000..0be9e1f
--- /dev/null
+++ b/res/ui/medicine_row.glade
@@ -0,0 +1,50 @@
+
+
+
+
+
+ False
+ False
+
+
+
+
+
+ True
+ False
+
+
+ True
+ False
+ label
+ 0
+
+
+
+
+
+ True
+ True
+ 0
+
+
+
+
+ True
+ False
+ 5
+ label
+
+
+
+
+
+ False
+ True
+ 1
+
+
+
+
+
+
diff --git a/res/ui/open_reception_win.glade b/res/ui/open_reception_win.glade
index 0a1dcb7..f759f02 100644
--- a/res/ui/open_reception_win.glade
+++ b/res/ui/open_reception_win.glade
@@ -1,5 +1,5 @@
-
+
@@ -643,6 +643,7 @@
True
True
True
+
True