137 lines
5.7 KiB
Python
137 lines
5.7 KiB
Python
import gi
|
|
gi.require_version('Gtk', '3.0')
|
|
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.patients import search_patients
|
|
from mods.receptions import create_new_reception_win, redraw_reception_list, create_reception_list_settings_win, create_open_reception_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
|
|
|
|
patient_filter = ConditionalFilter(search_patients)
|
|
|
|
class MainWinHandler:
|
|
def main_win_close(self, *args):
|
|
Gtk.main_quit()
|
|
def set_reception_list_today(self, *a):
|
|
cal = builder.get_object('reception_cal')
|
|
d = datetime.now()
|
|
cal.select_month(d.month - 1, d.year)
|
|
cal.select_day(d.day)
|
|
redraw_reception_list(d)
|
|
def change_reception_list_day(self, *a):
|
|
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()
|
|
new_reception_win.show_all()
|
|
def show_open_reception_win(self, button):
|
|
open_reception_win = create_open_reception_win()
|
|
open_reception_win.show_all()
|
|
def show_new_patient_win(self, button):
|
|
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)
|
|
open_patient_win.show_all()
|
|
def show_open_list_win(self, button):
|
|
ll = builder.get_object('list_list')
|
|
row = ll.get_selected_row()
|
|
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(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')
|
|
remove_button = builder.get_object('remove_reception_button')
|
|
row = rl.get_selected_row()
|
|
if not row:
|
|
return True
|
|
if row.props.scheduled:
|
|
enable_widget([edit_button, remove_button])
|
|
disable_widget([new_button])
|
|
else:
|
|
enable_widget([new_button])
|
|
disable_widget([edit_button, remove_button])
|
|
def reception_list_unselected(self, *a):
|
|
new_button = builder.get_object('new_reception_button')
|
|
edit_button = builder.get_object('edit_reception_button')
|
|
remove_button = builder.get_object('remove_reception_button')
|
|
disable_widget([new_button, edit_button, remove_button])
|
|
def patient_list_selected(self, *a):
|
|
button = builder.get_object('patient_open_button')
|
|
enable_widget([button])
|
|
def patient_list_unselected(self, *a):
|
|
button = builder.get_object('patient_open_button')
|
|
disable_widget([button])
|
|
def patient_filter_changed(self, filter_widget):
|
|
pl = builder.get_object('patient_list')
|
|
pl.unselect_all()
|
|
self.patient_list_unselected()
|
|
pl.invalidate_filter()
|
|
def list_list_selected(self, *a):
|
|
open_button = builder.get_object('list_open_button')
|
|
enable_widget([open_button])
|
|
def catalog_list_selected(self, *a):
|
|
open_button = builder.get_object('catalog_open_button')
|
|
rename_button = builder.get_object('catalog_rename_button')
|
|
enable_widget([open_button, rename_button])
|
|
def catalog_list_unselected(self, *a):
|
|
open_button = builder.get_object('catalog_open_button')
|
|
rename_button = builder.get_object('catalog_rename_button')
|
|
disable_widget([open_button, rename_button])
|
|
def catalog_filter_changed(self, filter_widget):
|
|
cl = builder.get_object('catalog_list')
|
|
cl.unselect_all()
|
|
self.catalog_list_unselected()
|
|
cl.invalidate_filter()
|
|
|
|
def list_sort_func(row1, row2, *a):
|
|
text1 = row1.props.name
|
|
text2 = row2.props.name
|
|
return (text1 > text2) - (text1 < text2)
|
|
|
|
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(patient_filter, builder))
|
|
with db.atomic():
|
|
for p in Patient.select():
|
|
patient_list.add(build_patient_row(p))
|
|
#####
|
|
list_list = builder.get_object('list_list')
|
|
list_list.set_sort_func(list_sort_func)
|
|
with db.atomic():
|
|
for l in List.select():
|
|
list_list.add(build_list_row(l))
|
|
#####
|
|
catalog_list = builder.get_object('catalog_list')
|
|
catalog_list.set_sort_func(catalog_sort_func)
|
|
catalog_list.set_filter_func(catalog_filter_func)
|
|
with db.atomic():
|
|
for c in Catalog.select():
|
|
catalog_list.add(build_catalog_row(c))
|
|
|
|
main_win = builder.get_object('main_window')
|
|
main_win.show_all()
|
|
Gtk.main()
|