Дипломная работа: Автоматизация учета предоставленных услуг в комплексном центре социального обслуживания населения и анализа данных на примере СПБ ГБУСОН "КЦСОН Адмиралтейского района Санкт-Петербурга"

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
146
@Slot()
def on_action_save_triggered(self):
"""save all tables in active tab
"""
ui = self.ui
d = self.data
debug("on_action_save_triggered")
if self.isDirty():
for key, obj in self.tableList.items():
try:
if obj.isDirty():
name = key[6:]
d.models[name].submitAll()
debug("saving %s ", key)
except:
pass
@Slot()
def on_action_update_tables_triggered(self):
"""
"""
ui = self.ui
d = self.data
for name, mdl in d.models.items():
mdl.select()
debug("updated model %s ", name)
debug("models updated")
@Slot()
def on_action_discard_triggered(self):
"""discard all tables in active tab
"""
ui = self.ui
d = self.data
debug("on_discard_save_triggered")
if self.isDirty():
for key, obj in self.tableList.items():
try:
if obj.isDirty():
name = key[6:]
d.models[name].select()
d.models[name].setDirty.emit(False)
debug("discard %s ", key)
except:
pass
@Slot()
def on_qaFontSmaller_triggered(self):
self.set_current_font(-1)
self.ui.qaFontSmaller.setChecked(False)
@Slot()
def on_qaFontBigger_triggered(self):
self.set_current_font(+1)
self.ui.qaFontBigger.setChecked(False)
def set_current_font(self, fsize):
qfont: QFont = self.font()
147
fsize = qfont.pointSize() + fsize
if fsize > 4:
self.qsettings.setValue("font_size", fsize)
qfont.setPointSize(fsize)
QtWidgets.QApplication.instance().setFont(qfont)
#############################
# check sql queries - for debug
# ---------------------------
@Slot()
def on_btn_check_sql_clicked(self):
"""
"""
ui = self.ui
qry = QSqlQuery()
qry.exec_(ui.txt_sql.toPlainText())
res = ""
while qry.next():
for i in range(qry.record().count()):
res = res + str(qry.record().value(i))
res = res + "\n"
ui.txt_sql2.setPlainText(res + qry.lastError().text())
#############################
# Add services tab
# ---------------------------
@Slot(bool)
def on_tab_add_serv_widgetVisibilityChanged(self, state):
"""
"""
ui = self.ui
models = self.data.models
self.data.addModel("dep_has_serv")
models["dep_has_ufio"].select()
#############################
# second tab - calendar
# ---------------------------
if ui.qle_date.date() == QDate(2000, 1, 1): # TODO rework it
ui.comboFIO2.setCurrentIndex(-1)
ui.comboServ2.setCurrentIndex(-1)
ui.comboW2.setCurrentIndex(-1)
ui.qleAmount2.setValue(0)
ui.comboFIO2.setModel(models["dep_has_ufio"])
ui.comboFIO2.setModelColumn(1)
ui.comboW2.setModel(models["dep_has_worker"])
ui.comboW2.setModelColumn(1)
# TODO: on change fio replace this list
# TODO subclass combo - bold for total and don't select it
ui.comboServ2.setModel(models["dep_has_serv"])
ui.comboServ2.setModelColumn(2)
#############################
# first tab - 1 serv
# ---------------------------
if ui.qle_date.date() == QDate(2000, 1, 1): # TODO rework it
ui.qle_date.setDate(QDate.currentDate())
ui.comboFIO.setCurrentIndex(-1)
ui.comboServ.setCurrentIndex(-1)
ui.comboW.setCurrentIndex(-1)
148
ui.qleAmount.setValue(0)
ui.comboFIO.setModel(models["dep_has_ufio"])
ui.comboFIO.setModelColumn(1)
ui.comboW.setModel(models["dep_has_worker"])
ui.comboW.setModelColumn(3)
# TODO: on change fio replace this list
ui.comboServ.setModel(models["dep_has_serv"])
ui.comboServ.setModelColumn(2)
@Slot(int)
def on_comboServ_currentIndexChanged(self, ind):
self.set_qle_serv_left()
@Slot(int)
def on_comboFIO_currentIndexChanged(self, ind):
self.set_qle_serv_left()
def set_qle_serv_left(self):
ui=self.ui
d=self.data
tr=self.tr
try:
tmr=self.set_qle_serv_left_tmr
if tmr.isActive():
return
tmr.singleShot(500, self._set_qle_serv_left)

except AttributeError:
self.set_qle_serv_left_tmr = QTimer()
@Slot()
def _set_qle_serv_left(self):
ui=self.ui
d=self.data
tr=self.tr
ufio = self.getComboBox0(ui.comboFIO)
serv = self.getComboBox0(ui.comboServ)
if not (ufio and ui.comboFIO.currentText()):
ui.qle_serv_left.setText(tr("  "))
return
if not (serv and ui.comboServ.currentText()):
ui.qle_serv_left.setText(tr(" "))
return
vdate = ui.qle_date.date().toString("yyyy-MM-dd")
contr=d.get_contract(ufio, vdate)
if contr > 0 :
qry = QSqlQuery()
qry.prepare("""select planned, filled, prim
from contracts_has_serv
where contracts_id = ? and serv_id = ? """)
qry.addBindValue(contr)
qry.addBindValue(serv)
ret = qry.exec_()
try:
if qry.next():
res = qry.value(0) - qry.value(1)
149
res = str(res) + " " + str(qry.value(3))
ui.qle_serv_left.setText(str(res))
else:
ui.qle_serv_left.setText(tr("    !"))
except:
- 
else:

@Slot("QDate")
def on_qle_date_dateChanged(self, ndate):
ui = self.ui
d = self.data
s = self.data.si
dbeg = s.dbeg
dend = s.dend
vdate = ui.qle_date.date()
self.set_qle_serv_left()
# TODO: move most of it into self.data.si
if (s.model_dep_has_main_by_day and dbeg
and vdate > dbeg and vdate < dend):
#############################
# update 1st filter model
# ---------------------------
vdate = vdate.toString(SQL_DATE_FORMAT)
debug(vdate)
mdl = d.setFilterCol(ui.table_dep_has_main_by_day, "vdate")
mdl.setFilterFixedString(vdate)
# print_model_data(mdl)
#############################
# update 2nd filter model
# ---------------------------
worker = ui.comboW.currentText()
mdl = d.setFilterCol(ui.table_dep_has_main_by_day_by_worker, "worker_id")
mdl.setFilterFixedString(worker)
else:
#############################
# (re)init filters
# ---------------------------
# get qry for +-32 days
dbeg = ui.qle_date.date().addDays(-32)
dend = ui.qle_date.date().addDays(32)
s.dbeg = dbeg
s.dend = dend
debug("start setup model_dep_has_main_by_day")
where = " vdate between '%s' and '%s' "
where = where % (dbeg.toString(SQL_DATE_FORMAT), dend.toString(SQL_DATE_FORMAT))
mdl = d.addModel("dep_has_main_by_day", "", "main_nz", where)
s.model_dep_has_main_by_day = mdl
#############################
# init first filter for table_dep_has_main_by_day
# ---------------------------
sfm = QSortFilterProxyModel()
sfm.setSourceModel(mdl)
s.model_dep_has_main_by_day = sfm
tv_bd = ui.table_dep_has_main_by_day
tv_bd.setModel(sfm)
150
tv_bd.setItemDelegate(myItemDelegate(tv_bd))
#############################
# init 2nd filter for table_dep_has_main_by_day_by_worker
# ---------------------------
sfm1 = QSortFilterProxyModel()
sfm1.setSourceModel(sfm)
s.model_dep_has_main_by_day_by_worker = sfm1
tv_bdbw = ui.table_dep_has_main_by_day_by_worker
tv_bdbw.setModel(sfm1)
tv_bdbw.setItemDelegate(myItemDelegate(tv_bdbw))
#############################
# and now update filters
# ---------------------------
self.on_qle_date_dateChanged(ndate)
@Slot(QDate)
def on_cldr_date_clicked(self, qdate: QDate):
"""
"""
ui = self.ui
d = self.data
#############################
# get data for insert
# ---------------------------
ufio = self.getComboBox0(ui.comboFIO2)
vdate = qdate.toString("yyyy-MM-dd")
dep = self.data.dep
if ui.qleAmount2.value() <= 0: # TODO: more checks
return
debug(self.data.get_contract(ufio, vdate, dep), )
qry_data = [
self.data.get_contract(ufio, vdate, dep),
dep,
ufio,
self.getComboBox0(ui.comboServ2),
vdate,
ui.qleAmount.value(),
self.getComboBox0(ui.comboW2),
ui.qleNote.text()
]
self.ins_main(qry_data)
@Slot()
def on_btn_qle_date_1_clicked(self):
qle_date: QtWidgets.QDateEdit = self.ui.qle_date
qle_date.setDate(qle_date.date().addDays(-1))
@Slot()
def on_btn_qle_date_p1_clicked(self):
qle_date: QtWidgets.QDateEdit = self.ui.qle_date
qle_date.setDate(qle_date.date().addDays(1))
@Slot()
def on_btn_serv_bydayQ_clicked(self):
self.pre_ins_main(self.ui.comboFIO)
def getComboBox0(self, cmb: QComboBox, col=0):
row = cmb.currentIndex()
ind = cmb.model().index(row, col)
Источник: https://baza.diplomsite.ru/previewfile/2412