diff --git a/app.py b/app.py
index 247370f..d341e0f 100644
--- a/app.py
+++ b/app.py
@@ -1,73 +1,17 @@
import gi
-import os
gi.require_version('Gtk', '3.0')
-from gi.repository import Gtk, GObject, Gdk
-from mods.db import db, Patient, Reception, Catalog, List
-from mods.settings import s_get_reception_list, s_set_reception_list
-from mods.catalogs import add_catalog, search_catalogs
+from gi.repository import Gtk
+from mods.db import db, Patient, Catalog, List
+from mods.catalogs import create_new_catalog_win, build_catalog_row, catalog_sort_func, catalog_filter_func
from mods.patients import build_patient_row, patient_sort_func, patient_filter_func_factory, create_new_patient_win, create_open_patient_win
-from mods.receptions import create_new_reception_win, build_reception_row
-from mods.lists import create_open_list_win
-from mods.files import list_row_ui_str
-from mods.utils import show_msg, ConditionalFilter, enable_widget, disable_widget
-from datetime import datetime, timedelta
-import peewee
-import re
+from mods.patients import search_patients
+from mods.receptions import create_new_reception_win, redraw_reception_list, create_reception_list_settings_win
+from mods.lists import create_open_list_win, build_list_row
+from mods.root import builder
+from mods.utils import enable_widget, disable_widget, ConditionalFilter
+from datetime import datetime
-# Variables
-resource_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'res')
-ui_dir = os.path.join(resource_dir, 'ui')
-
-main_win_file = os.path.join(ui_dir, 'main_win.glade')
-reception_list_settings_win_file = os.path.join(ui_dir, 'reception_list_settings.glade')
-
-new_catalog_win_file = os.path.join(ui_dir, 'new_catalog_win.glade')
-
-catalog_row_file = os.path.join(ui_dir, 'catalog_list_row.glade')
-with open(catalog_row_file, 'r') as f:
- catalog_row_ui_str = f.read()
-
-############
-
-builder = Gtk.Builder()
-
-def get_reception_timelist(rec_date):
- s = s_get_reception_list()
- dstart = datetime(rec_date.year, rec_date.month, rec_date.day, s.day_start[0], s.day_start[1])
- dend = datetime(rec_date.year, rec_date.month, rec_date.day, s.day_end[0], s.day_end[1])
- work_day_minutes_total = (dend.hour - dstart.hour) * 60 + dend.minute - dstart.minute
- shift_minutes_range = range(0, work_day_minutes_total, s.interval)
- return [dstart + timedelta(minutes=x) for x in shift_minutes_range]
-
-
-catalog_filter = ConditionalFilter(search_catalogs)
-
-class CatalogRow(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 name(self):
- return self._name
- @name.setter
- def name_setter(self, value):
- self._name = value
-class ListRow(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 name(self):
- return self._name
- @name.setter
- def name_setter(self, value):
- self._name = value
+patient_filter = ConditionalFilter(search_patients)
class MainWinHandler:
def main_win_close(self, *args):
@@ -82,20 +26,23 @@ class MainWinHandler:
cal = builder.get_object('reception_cal')
cal_date = cal.get_date()
d = datetime(cal_date.year, cal_date.month + 1, cal_date.day)
+ rl = builder.get_object('reception_list')
+ rl.unselect_all()
+ self.reception_list_unselected()
redraw_reception_list(d)
def show_reception_list_settings_win(self, button):
reception_list_settings_win = create_reception_list_settings_win()
reception_list_settings_win.show_all()
def show_new_reception_win(self, button):
- new_reception_win = create_new_reception_win(builder)
+ new_reception_win = create_new_reception_win()
new_reception_win.show_all()
def show_new_patient_win(self, button):
- new_patient_win = create_new_patient_win(patient_list)
+ new_patient_win = create_new_patient_win()
new_patient_win.show_all()
def show_open_patient_win(self, button):
pl = builder.get_object('patient_list')
row = pl.get_selected_row()
- open_patient_win = create_open_patient_win(row.props.db_id, patient_list)
+ open_patient_win = create_open_patient_win(row.props.db_id)
open_patient_win.show_all()
def show_open_list_win(self, button):
ll = builder.get_object('list_list')
@@ -103,19 +50,25 @@ class MainWinHandler:
open_list_win = create_open_list_win(row.props.db_id)
open_list_win.show_all()
def show_new_catalog_win(self, button):
- new_catalog_win = create_new_catalog_win()
+ new_catalog_win = create_new_catalog_win(catalog_list)
new_catalog_win.show_all()
def reception_list_selected(self, *a):
rl = builder.get_object('reception_list')
new_button = builder.get_object('new_reception_button')
edit_button = builder.get_object('edit_reception_button')
row = rl.get_selected_row()
+ if not row:
+ return
if row.props.scheduled:
enable_widget([edit_button])
disable_widget([new_button])
else:
enable_widget([new_button])
disable_widget([edit_button])
+ def reception_list_unselected(self, *a):
+ new_button = builder.get_object('new_reception_button')
+ edit_button = builder.get_object('edit_reception_button')
+ disable_widget([new_button, edit_button])
def patient_list_selected(self, *a):
button = builder.get_object('patient_open_button')
enable_widget([button])
@@ -144,67 +97,20 @@ class MainWinHandler:
self.catalog_list_unselected()
cl.invalidate_filter()
-def build_list_row(list_o):
- b = Gtk.Builder()
- b.add_from_string(list_row_ui_str)
- win = b.get_object('win')
- box = b.get_object('list_box')
- b.get_object('name').set_text(list_o.name)
- row = ListRow()
- row.props.db_id = list_o.id
- row.name = list_o.name
- win.remove(win.get_children()[0])
- row.add(box)
- return row
-
-def build_catalog_row(catalog):
- b = Gtk.Builder()
- b.add_from_string(catalog_row_ui_str)
- win = b.get_object('win')
- box = b.get_object('catalog_box')
- b.get_object('name').set_text(catalog.name)
- row = CatalogRow()
- row.props.db_id = catalog.id
- row.name = catalog.name
- win.remove(win.get_children()[0])
- row.add(box)
- return row
-
-
def list_sort_func(row1, row2, *a):
text1 = row1.props.name
text2 = row2.props.name
return (text1 > text2) - (text1 < text2)
-def catalog_sort_func(row1, row2, *a):
- text1 = row1.props.name
- text2 = row2.props.name
- return (text1 > text2) - (text1 < text2)
-def catalog_filter_func(row):
- fstr = builder.get_object('catalog_filter').get_text().strip()
- if not fstr:
- catalog_filter.reset()
- return True
- return row.props.db_id in catalog_filter.filter(fstr)
-def redraw_reception_list(selected_date):
- reception_timelist = get_reception_timelist(selected_date)
- reception_list = builder.get_object('reception_list')
- for c in reception_list.get_children():
- reception_list.remove(c)
- for d in reception_timelist:
- reception_list.add(build_reception_row(d))
- reception_list.show_all()
-
-builder.add_from_file(main_win_file)
builder.connect_signals(MainWinHandler())
#####
redraw_reception_list(datetime.now())
#####
patient_list = builder.get_object('patient_list')
patient_list.set_sort_func(patient_sort_func)
-patient_list.set_filter_func(patient_filter_func_factory(builder))
+patient_list.set_filter_func(patient_filter_func_factory(patient_filter, builder))
with db.atomic():
for p in Patient.select():
patient_list.add(build_patient_row(p))
@@ -222,54 +128,6 @@ with db.atomic():
for c in Catalog.select():
catalog_list.add(build_catalog_row(c))
-
-
-
-
-def create_reception_list_settings_win():
- b = Gtk.Builder()
- class ReceptionListSettingsHandler:
- def save_settings(self, *a):
- start_hour = int(b.get_object('start_hour').get_value())
- start_minute = int(b.get_object('start_minute').get_value())
- end_hour = int(b.get_object('end_hour').get_value())
- end_minute = int(b.get_object('end_minute').get_value())
- interval = int(b.get_object('interval').get_value())
- s_set_reception_list([start_hour, start_minute], [end_hour, end_minute], interval)
- redraw_reception_list(datetime.now())
- b.get_object('reception_list_settings_win').close()
- b.add_from_file(reception_list_settings_win_file)
- b.connect_signals(ReceptionListSettingsHandler())
- s = s_get_reception_list()
- b.get_object('start_hour').set_value(s.day_start[0])
- b.get_object('start_minute').set_value(s.day_start[1])
- b.get_object('end_hour').set_value(s.day_end[0])
- b.get_object('end_minute').set_value(s.day_end[1])
- b.get_object('interval').set_value(s.interval)
- w = b.get_object('reception_list_settings_win')
- return w
-
-def create_new_catalog_win():
- b = Gtk.Builder()
- class NewCatalogHandler:
- def save_catalog(self, *a):
- catname = re.sub(r'\s+', ' ', b.get_object('catalog_name').get_text()).strip()
- if not len(catname):
- return show_msg('Не указано имя справочника', 'Данное поле должно быть заполнено', level='warn')
- try:
- catalog = add_catalog(catname)
- except peewee.IntegrityError:
- return show_msg('Данный справочник уже существует', 'Справочник с указанным названием уже есть с базе данных', level='warn')
- row = build_catalog_row(catalog)
- catalog_list.add(row)
- catalog_list.select_row(row)
- catalog_list.show_all()
- b.get_object('new_catalog_window').close()
- b.add_from_file(new_catalog_win_file)
- b.connect_signals(NewCatalogHandler())
- w = b.get_object('new_catalog_window')
- return w
-
main_win = builder.get_object('main_window')
main_win.show_all()
Gtk.main()
diff --git a/mods/catalogs.py b/mods/catalogs.py
index 082479f..4a8b7f7 100644
--- a/mods/catalogs.py
+++ b/mods/catalogs.py
@@ -1,5 +1,26 @@
from mods.db import db, Catalog, CatalogIndex
import re
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk, GObject
+from mods.utils import show_msg, ConditionalFilter
+from mods.files import catalog_row_ui_str, new_catalog_win_file
+from mods.root import builder
+import peewee
+
+class CatalogRow(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 name(self):
+ return self._name
+ @name.setter
+ def name_setter(self, value):
+ self._name = value
def add_catalog(name):
with db.atomic():
@@ -23,3 +44,52 @@ def search_catalogs(q):
.where(CatalogIndex.match(q))
.order_by(CatalogIndex.bm25()))
+catalog_filter = ConditionalFilter(search_catalogs)
+
+###########################################################################
+
+def build_catalog_row(catalog):
+ b = Gtk.Builder()
+ b.add_from_string(catalog_row_ui_str)
+ win = b.get_object('win')
+ box = b.get_object('catalog_box')
+ b.get_object('name').set_text(catalog.name)
+ row = CatalogRow()
+ row.props.db_id = catalog.id
+ row.name = catalog.name
+ win.remove(win.get_children()[0])
+ row.add(box)
+ return row
+
+def create_new_catalog_win(catalog_list):
+ b = Gtk.Builder()
+ class NewCatalogHandler:
+ def save_catalog(self, *a):
+ catname = re.sub(r'\s+', ' ', b.get_object('catalog_name').get_text()).strip()
+ if not len(catname):
+ return show_msg('Не указано имя справочника', 'Данное поле должно быть заполнено', level='warn')
+ try:
+ catalog = add_catalog(catname)
+ except peewee.IntegrityError:
+ return show_msg('Данный справочник уже существует', 'Справочник с указанным названием уже есть с базе данных', level='warn')
+ row = build_catalog_row(catalog)
+ catalog_list.add(row)
+ catalog_list.select_row(row)
+ catalog_list.show_all()
+ b.get_object('new_catalog_window').close()
+ b.add_from_file(new_catalog_win_file)
+ b.connect_signals(NewCatalogHandler())
+ w = b.get_object('new_catalog_window')
+ return w
+
+def catalog_sort_func(row1, row2, *a):
+ text1 = row1.props.name
+ text2 = row2.props.name
+ return (text1 > text2) - (text1 < text2)
+def catalog_filter_func(row):
+ fstr = builder.get_object('catalog_filter').get_text().strip()
+ if not fstr:
+ catalog_filter.reset()
+ return True
+ return row.props.db_id in catalog_filter.filter(fstr)
+
diff --git a/mods/files.py b/mods/files.py
index 6d2feb7..437d9a4 100644
--- a/mods/files.py
+++ b/mods/files.py
@@ -22,8 +22,15 @@ with open(female_patient_row_file, 'r') as f:
reception_row_file = os.path.join(ui_dir, 'reception_row.glade')
with open(reception_row_file, 'r') as f:
reception_row_ui_str = f.read()
+catalog_row_file = os.path.join(ui_dir, 'catalog_list_row.glade')
+with open(catalog_row_file, 'r') as f:
+ catalog_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')
open_patient_win_file = os.path.join(ui_dir, 'open_patient_win.glade')
edit_patient_win_file = os.path.join(ui_dir, 'edit_patient_win.glade')
new_reception_win_file = os.path.join(ui_dir, 'new_reception_win.glade')
+reception_list_settings_win_file = os.path.join(ui_dir, 'reception_list_settings.glade')
+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')
diff --git a/mods/lists.py b/mods/lists.py
index 3173677..d23db63 100644
--- a/mods/lists.py
+++ b/mods/lists.py
@@ -2,7 +2,7 @@ import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject, Gdk
from mods.db import db, List, ListRecord, ListRecordIndex
-from mods.files import open_list_win_file, listrecord_row_ui_str, editable_row_ui_str
+from mods.files import open_list_win_file, listrecord_row_ui_str, editable_row_ui_str, list_row_ui_str
from mods.utils import show_msg, disable_widget, enable_widget, ConditionalFilter
import re
import peewee
@@ -27,6 +27,20 @@ class ListRecFilter(ConditionalFilter):
self.ids = list(map(lambda x: x.id, self.search_func(list_id, query)))
return self.ids
+class ListRow(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 name(self):
+ return self._name
+ @name.setter
+ def name_setter(self, value):
+ self._name = value
+
class ListRecordRow(Gtk.ListBoxRow):
@GObject.Property
def db_id(self):
@@ -87,6 +101,18 @@ def search_list_record(list_id, q):
.where((ListRecord.list == list_o) & (ListRecordIndex.match(q)))
.order_by(ListRecordIndex.bm25()))
#####################################################################################################################
+def build_list_row(list_o):
+ b = Gtk.Builder()
+ b.add_from_string(list_row_ui_str)
+ win = b.get_object('win')
+ box = b.get_object('list_box')
+ b.get_object('name').set_text(list_o.name)
+ row = ListRow()
+ row.props.db_id = list_o.id
+ row.name = list_o.name
+ win.remove(win.get_children()[0])
+ row.add(box)
+ return row
def build_listrecord_row(listrec_o):
b = Gtk.Builder()
b.add_from_string(listrecord_row_ui_str)
@@ -124,6 +150,8 @@ def create_open_list_win(list_id):
if ev.keyval == Gdk.KEY_Escape:
lr_list.remove(row)
row.destroy()
+ lr_list.unselect_all()
+ self.listrec_row_unselected()
def row_edit_cancel(self, entry, ev, edit_row):
if ev.keyval == Gdk.KEY_Escape:
rec = get_listrecord(edit_row.props.db_id)
diff --git a/mods/patients.py b/mods/patients.py
index 5ba1ccf..b489910 100644
--- a/mods/patients.py
+++ b/mods/patients.py
@@ -2,9 +2,10 @@ import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject
import os
-from mods.files import gender_ui_str, icon_dir, open_patient_win_file, new_patient_win_file, edit_patient_win_file
-from mods.utils import ConditionalFilter, show_msg, gender_dict, doc_type_dict
+from mods.files import gender_ui_str, icon_dir, open_patient_win_file, new_patient_win_file, edit_patient_win_file, choose_patient_win_file
+from mods.utils import ConditionalFilter, show_msg, gender_dict, doc_type_dict, enable_widget, disable_widget
from mods.db import db, Patient, PatientIndex
+from mods.root import builder
from datetime import date
import re
import peewee
@@ -39,8 +40,9 @@ def search_patients(q):
on=(Patient.id == PatientIndex.rowid))
.where(PatientIndex.match(q))
.order_by(PatientIndex.bm25()))
-
-patient_filter = ConditionalFilter(search_patients)
+def get_all_patients():
+ with db.atomic():
+ return Patient.select()
class PatientRow(Gtk.ListBoxRow):
@GObject.Property
@@ -155,8 +157,9 @@ def set_patient_win_values(patient_id, b, edit=False):
b.get_object('snils_number').set_text(pat.snils_number)
b.get_object('notes_buffer').set_text(pat.notes)
-def create_open_patient_win(patient_id, patient_list):
+def create_open_patient_win(patient_id):
b = Gtk.Builder()
+ patient_list = builder.get_object('patient_list')
class OpenPatientWinHandler:
def show_edit_patient_win(self, *a):
edit_patient_win = create_edit_patient_win(patient_id, patient_list)
@@ -170,8 +173,9 @@ def create_open_patient_win(patient_id, patient_list):
set_patient_win_values(patient_id, b)
return w
-def create_edit_patient_win(patient_id, patient_list):
+def create_edit_patient_win(patient_id):
b = Gtk.Builder()
+ patient_list = builder.get_object('patient_list')
class EditPatientWinHandler:
def edit_patient_win_close(self, *args):
w.destroy()
@@ -205,9 +209,9 @@ def create_edit_patient_win(patient_id, patient_list):
set_patient_win_values(patient_id, b, edit=True)
return w
-
-def create_new_patient_win(patient_list):
+def create_new_patient_win():
b = Gtk.Builder()
+ patient_list = builder.get_object('patient_list')
class NewPatienWinHandler:
def only_digits(self, entry):
text = entry.get_text()
@@ -232,11 +236,40 @@ def create_new_patient_win(patient_list):
b.connect_signals(NewPatienWinHandler())
w = b.get_object('new_patient_window')
return w
+
+def create_choose_patient_win(new_reception_b):
+ b = Gtk.Builder()
+ patient_cont = new_reception_b.get_object('patient')
+ patient_filter = ConditionalFilter(search_patients)
+ class ChoosePatientWinHandler:
+ def patient_filter_changed(self, filter_widget):
+ pl.unselect_all()
+ self.patient_list_unselected()
+ pl.invalidate_filter()
+ def patient_list_selected(self, *a):
+ accept_button = b.get_object('accept_button')
+ enable_widget([accept_button])
+ def patient_list_unselected(self, *a):
+ accept_button = b.get_object('accept_button')
+ disable_widget([accept_button])
+ b.add_from_file(choose_patient_win_file)
+ b.connect_signals(ChoosePatientWinHandler())
+ pl = b.get_object('patient_list')
+ pl.set_sort_func(patient_sort_func)
+ pl.set_filter_func(patient_filter_func_factory(patient_filter, b))
+ ###
+ for p in get_all_patients():
+ pl.add(build_patient_row(p))
+ ###
+ w = b.get_object('choose_patient_window')
+ return w
+
def patient_sort_func(row1, row2, *a):
text1 = row1.props.fio
text2 = row2.props.fio
return (text1 > text2) - (text1 < text2)
-def patient_filter_func_factory(b):
+
+def patient_filter_func_factory(patient_filter, b):
def patient_filter_func(row):
fstr = b.get_object('patient_filter').get_text().strip()
if not fstr:
@@ -244,3 +277,4 @@ def patient_filter_func_factory(b):
return True
return row.props.db_id in patient_filter.filter(fstr)
return patient_filter_func
+
diff --git a/mods/receptions.py b/mods/receptions.py
index 1a95541..46dcb7b 100644
--- a/mods/receptions.py
+++ b/mods/receptions.py
@@ -2,7 +2,18 @@ import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk, GObject, Gdk
from mods.db import db, Reception
-from mods.files import new_reception_win_file, reception_row_ui_str
+from mods.files import new_reception_win_file, reception_row_ui_str, reception_list_settings_win_file
+from mods.settings import s_get_reception_list, s_set_reception_list
+from mods.root import builder
+from datetime import datetime, timedelta
+
+def get_reception_timelist(rec_date):
+ s = s_get_reception_list()
+ dstart = datetime(rec_date.year, rec_date.month, rec_date.day, s.day_start[0], s.day_start[1])
+ dend = datetime(rec_date.year, rec_date.month, rec_date.day, s.day_end[0], s.day_end[1])
+ work_day_minutes_total = (dend.hour - dstart.hour) * 60 + dend.minute - dstart.minute
+ shift_minutes_range = range(0, work_day_minutes_total, s.interval)
+ return [dstart + timedelta(minutes=x) for x in shift_minutes_range]
class ReceptionRow(Gtk.ListBoxRow):
@GObject.Property
@@ -23,6 +34,13 @@ class ReceptionRow(Gtk.ListBoxRow):
@scheduled.setter
def scheduled_setter(self, value):
self._scheduled = value
+class NewReceptionPatientLabel(Gtk.Label):
+ @GObject.Property
+ def patient_db_id(self):
+ return self._patient_db_id
+ @patient_db_id.setter
+ def db_id_setter(self, value):
+ self._patient_db_id = value
def build_reception_row(reception_datetime):
b = Gtk.Builder()
@@ -50,11 +68,57 @@ def build_reception_row(reception_datetime):
row.add(box)
return row
-def create_new_reception_win(root_builder):
+def create_new_reception_win():
b = Gtk.Builder()
+ reception_list = builder.get_object('reception_list')
+ row = reception_list.get_selected_row()
class NewReceptionWinHandler:
- pass
+ def show_choose_patient_win(self, button):
+ from mods.patients import create_choose_patient_win
+ choose_patient_win = create_choose_patient_win(b)
+ choose_patient_win.show_all()
b.add_from_file(new_reception_win_file)
b.connect_signals(NewReceptionWinHandler())
+ #####
+ patient_label = NewReceptionPatientLabel()
+ patient_label.props.patient_db_id = -1
+ #patient_label.set_markup('test')
+ #####
+ patient_cont = b.get_object('patient')
+ patient_cont.pack_start(patient_label, True, True, 0)
+ patient_cont.reorder_child(patient_label, 0)
w = b.get_object('new_reception_window')
+ dt_label = b.get_object('datetime')
+ dt_label.set_text(row.props.datetime.strftime('%m.%d.%Y - %H:%M'))
return w
+def create_reception_list_settings_win():
+ b = Gtk.Builder()
+ class ReceptionListSettingsHandler:
+ def save_settings(self, *a):
+ start_hour = int(b.get_object('start_hour').get_value())
+ start_minute = int(b.get_object('start_minute').get_value())
+ end_hour = int(b.get_object('end_hour').get_value())
+ end_minute = int(b.get_object('end_minute').get_value())
+ interval = int(b.get_object('interval').get_value())
+ s_set_reception_list([start_hour, start_minute], [end_hour, end_minute], interval)
+ redraw_reception_list(datetime.now())
+ b.get_object('reception_list_settings_win').close()
+ b.add_from_file(reception_list_settings_win_file)
+ b.connect_signals(ReceptionListSettingsHandler())
+ s = s_get_reception_list()
+ b.get_object('start_hour').set_value(s.day_start[0])
+ b.get_object('start_minute').set_value(s.day_start[1])
+ b.get_object('end_hour').set_value(s.day_end[0])
+ b.get_object('end_minute').set_value(s.day_end[1])
+ b.get_object('interval').set_value(s.interval)
+ w = b.get_object('reception_list_settings_win')
+ return w
+def redraw_reception_list(selected_date):
+ reception_timelist = get_reception_timelist(selected_date)
+ reception_list = builder.get_object('reception_list')
+ for c in reception_list.get_children():
+ reception_list.remove(c)
+ for d in reception_timelist:
+ reception_list.add(build_reception_row(d))
+ reception_list.show_all()
+
diff --git a/mods/root.py b/mods/root.py
new file mode 100644
index 0000000..f1be5ce
--- /dev/null
+++ b/mods/root.py
@@ -0,0 +1,7 @@
+import gi
+gi.require_version('Gtk', '3.0')
+from gi.repository import Gtk
+from mods.files import main_win_file
+
+builder = Gtk.Builder()
+builder.add_from_file(main_win_file)
diff --git a/res/ui/choose_patient_win.glade b/res/ui/choose_patient_win.glade
index 4f55a5c..b15fc34 100644
--- a/res/ui/choose_patient_win.glade
+++ b/res/ui/choose_patient_win.glade
@@ -2,7 +2,7 @@
-