Частично реализовал добавление медикаментов в приёме
This commit is contained in:
parent
d51402e91b
commit
2012391d08
|
@ -35,6 +35,9 @@ with open(anamnesis_row_file, 'r') as f:
|
||||||
observe_row_file = os.path.join(ui_dir, 'observe_row.glade')
|
observe_row_file = os.path.join(ui_dir, 'observe_row.glade')
|
||||||
with open(observe_row_file, 'r') as f:
|
with open(observe_row_file, 'r') as f:
|
||||||
observe_row_ui_str = f.read()
|
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')
|
main_win_file = os.path.join(ui_dir, 'main_win.glade')
|
||||||
new_patient_win_file = os.path.join(ui_dir, 'new_patient_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')
|
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')
|
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_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')
|
||||||
|
|
|
@ -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
|
|
@ -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.files import anamnesis_row_ui_str, observe_row_ui_str
|
||||||
from mods.settings import s_get_reception_list, s_set_reception_list
|
from mods.settings import s_get_reception_list, s_set_reception_list
|
||||||
from mods.diagnosis import create_choose_diagnosis_win, get_giagnosis
|
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.lists import get_listrecord, get_list_by_system_id, create_open_list_win, ANAMNEZ_LIST, OBSERVE_LIST
|
||||||
from mods.root import builder
|
from mods.root import builder
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
|
@ -200,6 +201,9 @@ def create_open_reception_win():
|
||||||
reception_row = reception_list.get_selected_row()
|
reception_row = reception_list.get_selected_row()
|
||||||
reception = get_reception(reception_row.props.db_id)
|
reception = get_reception(reception_row.props.db_id)
|
||||||
class OpenReceptionWinHandler:
|
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):
|
def show_choose_diagnosis_win(self, button):
|
||||||
choose_diagnosis_win = create_choose_diagnosis_win(b)
|
choose_diagnosis_win = create_choose_diagnosis_win(b)
|
||||||
choose_diagnosis_win.show_all()
|
choose_diagnosis_win.show_all()
|
||||||
|
|
|
@ -0,0 +1,121 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.22.2 -->
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.20"/>
|
||||||
|
<object class="GtkWindow" id="choose_medicine_window">
|
||||||
|
<property name="width_request">600</property>
|
||||||
|
<property name="height_request">500</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="modal">True</property>
|
||||||
|
<property name="window_position">center</property>
|
||||||
|
<property name="default_width">800</property>
|
||||||
|
<property name="default_height">500</property>
|
||||||
|
<property name="type_hint">dialog</property>
|
||||||
|
<child type="titlebar">
|
||||||
|
<object class="GtkHeaderBar">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="title" translatable="yes">Выбор лекарственного средства</property>
|
||||||
|
<property name="show_close_button">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="accept_button">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="sensitive">False</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="receives_default">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkImage">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="icon_name">object-select-symbolic</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="medicines_page">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="orientation">vertical</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkScrolledWindow">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="shadow_type">in</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkViewport">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkListBox" id="medicine_list">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<signal name="row-selected" handler="medicine_list_selected" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_top">3</property>
|
||||||
|
<property name="margin_bottom">3</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkFixed">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSearchEntry" id="medicine_filter">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">True</property>
|
||||||
|
<property name="primary_icon_name">edit-find-symbolic</property>
|
||||||
|
<property name="primary_icon_activatable">False</property>
|
||||||
|
<property name="primary_icon_sensitive">False</property>
|
||||||
|
<signal name="changed" handler="medicine_filter_changed" swapped="no"/>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkFixed">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="pack_type">end</property>
|
||||||
|
<property name="position">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
|
@ -0,0 +1,50 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<!-- Generated with glade 3.22.2 -->
|
||||||
|
<interface>
|
||||||
|
<requires lib="gtk+" version="3.20"/>
|
||||||
|
<object class="GtkWindow" id="win">
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="decorated">False</property>
|
||||||
|
<child type="titlebar">
|
||||||
|
<placeholder/>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkBox" id="medicine_box">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="tradename">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="label" translatable="yes">label</property>
|
||||||
|
<property name="xalign">0</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="scale" value="2"/>
|
||||||
|
</attributes>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">True</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="internationalname">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="can_focus">False</property>
|
||||||
|
<property name="margin_right">5</property>
|
||||||
|
<property name="label" translatable="yes">label</property>
|
||||||
|
<attributes>
|
||||||
|
<attribute name="style" value="oblique"/>
|
||||||
|
</attributes>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="expand">False</property>
|
||||||
|
<property name="fill">True</property>
|
||||||
|
<property name="position">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</interface>
|
|
@ -1,5 +1,5 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<!-- Generated with glade 3.22.1 -->
|
<!-- Generated with glade 3.22.2 -->
|
||||||
<interface>
|
<interface>
|
||||||
<requires lib="gtk+" version="3.20"/>
|
<requires lib="gtk+" version="3.20"/>
|
||||||
<object class="GtkTextBuffer" id="notes_buffer"/>
|
<object class="GtkTextBuffer" id="notes_buffer"/>
|
||||||
|
@ -643,6 +643,7 @@
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
<property name="can_focus">True</property>
|
<property name="can_focus">True</property>
|
||||||
<property name="receives_default">True</property>
|
<property name="receives_default">True</property>
|
||||||
|
<signal name="clicked" handler="show_choose_medicine_win" swapped="no"/>
|
||||||
<child>
|
<child>
|
||||||
<object class="GtkImage">
|
<object class="GtkImage">
|
||||||
<property name="visible">True</property>
|
<property name="visible">True</property>
|
||||||
|
|
Loading…
Reference in New Issue