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

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам
156
self.port = None
#############################
# load local config file
# ---------------------------
try:
config = configparser.ConfigParser()
conf_path = os.path.join(home_dir, "3uson.conf")
if not os.path.exists(conf_path):
conf_path = "3uson.conf"
config.read(conf_path)
self.config = config
debug(config.sections())
self.user = self.config['DEFAULT']['lastuser']
self.server = self.config['DEFAULT']['server']
self.port = self.config['DEFAULT']['port']
# self.dep = self.config['DEFAULT']['lastdep']
self.password = self.config['DEFAULT']['DIRTY_HACK_FOR_DEBUG_SPW']
except:
error("config read error")
#############################
# init _sql_column_replace
# ---------------------------
tr = self.tr
self._sql_column_replace = {





"2ndpr








"contracts_id": tr(""),
"serv": tr(" "),
"ripso": tr(" "),
"dep": tr(" "),
"contracts": tr(""),
"uslnum": tr("- "),


"worker": tr(" "),
"worker_id": tr(""),
"ufio_id": tr(""),
"ufio": tr(" "),









157









-







"perc": tr("")
}
#############################
# init members
# ---------------------------
self.db: QSqlDatabase = None
self.notifies = []
#############################
# main models storage
# ---------------------------
self.models = {}
# self.init_main_model()
#############################
# some vars
# ---------------------------
self.si = self.servIns(self)
class servIns(QObject):
"""data and functions related to tab insert into main """
def __init__(self, parent):
"""Constructor for servIns"""
super().__init__(parent)
self.dbeg = None
self.dend = None
self.model_dep_has_main_by_day = None
self.model_dep_has_main_by_day_by_worker = None
self.model_dep_has_main_by_day_by_you = None
self.model_dep_has_main_by_day_by_serv = None
@staticmethod
def insert_main_table(*arg):
"""insert into main (contracts_id,
dep_id, ufio_id, serv_id,
vdate, uslnum, worker_id, note)"""
qry = QSqlQuery()
qry.prepare("""insert into main (contracts_id,
dep_id, ufio_id, serv_id,
vdate, uslnum, worker_id, note)
VALUES(?, ?, ?, ?, ?, ?, ?, ?)""")
for val in arg:
158
qry.addBindValue(val)
ret = qry.exec_()
rid=TsonData.line_query("SELECT LAST_INSERT_ID();")
return (ret, rid, qry.lastError().text().strip())
@staticmethod
def line_query(qry_str, val=0):
qry = QSqlQuery()
qry.exec_(qry_str)
qry.next()
return qry.value(val)
def init_main_model(self):
#############################
# create model
# ---------------------------
sqlTable = "servOFdep"
self.addModel(sqlTable)
def createDBConnection(self):
db = QSqlDatabase.addDatabase('QODBC3')
self.db = db
debug(QSqlDatabase.drivers())
user = self.user
if not self.server:
self.server = "127.0.0.1"
if not self.port:
self.port = "3306"
bdstr = "Driver={MySQL ODBC 8.0 Unicode Driver};" \
"SERVER=%s;DATABASE=kcson;UID=%s;PORT=%s" % \
(self.server, user, self.port)
db.setDatabaseName(bdstr)
debug(bdstr)
db.setUserName(user) # didn't work?
# db.setServer("127.0.0.1")
# db.setPort(3307)
info(user)
db.setPassword(self.password) # PWD=<password>"
res = db.open()
debug(res)
self.dep = self.line_query("select GET_DEP(GET_wID()) "
"as res", 0)
self.createUnAssignedModels()
return res
def createUnAssignedModels(self):
self.addModel("serv")
self.addModel("dep")
self.addModel("ufio")
self.addModel("serv")
self.addModel("serv_activ")
def closeDBConnection(self):
if self.db:
self.db.close()
self.db = None
def getNotifies(self) -> [str, ]:
"""
159
"""
try:
if self.db:
qry = QSqlQuery()
qry.exec_("SELECT msg from notifies "
"WHERE archive=0")
index = qry.record().indexOf('msg')
while qry.next():
yield qry.value(index)
else:
return None
except:
return None
def local_reports_compiler(self):
QSqlDatabase()
self.dbLocal = QSqlDatabase.addDatabase("QSQLITE", "conn1")
db1 = self.dbLocal
db1.setDatabaseName(":memory:")
if db1.open():
db = self.db
def addModel(self, modelName: str = None,
sql: str = None, sqlTable: str = None,
where: str = None) -> QSqlTableModel:
""" Create @model from @sql
Args:
self, modelName=None, sql=None,
sqlTable=None, where=None
Returns:
model or False
"""
if not (sql or sqlTable):
sqlTable = modelName
if not sql:
if sqlTable not in self.db.tables(QSql.AllTables):
return False
if not modelName: modelName = sqlTable
if not modelName: return False
debug("addModel %s to %s", modelName, sqlTable)
#############################
# create model
# ---------------------------
model: tsSqlTableModel = tsSqlTableModel(None, self.db)
try:
if sqlTable:
model.setTable(sqlTable)
if where:
model.setFilter(where)
elif sql:
qry = QSqlQuery()
qry.exec_(sql)
qry.next()
model.qry_text = sql
model.setQuery(qry)
model.setEditStrategy(QSqlTableModel.OnManualSubmit)
model.select()
160
except:
warning("addModel bad sql %s",
(modelName, sql, sqlTable))
return False
#############################
# replace sql column names
# ---------------------------
for i in range(0, model.columnCount()):
label = model.headerData(i, Qt.Horizontal)
if label in self._sql_column_replace.keys():
label = self._sql_column_replace[label]
model.setHeaderData(i, Qt.Horizontal, label)
#############################
# add model to dict
# ---------------------------
self.models[modelName] = model
return model
def convColName(self, colName: str) -> str:
"""
Args:
original SQL column Name
Returns:
new column Name
"""
try:
if self._sql_column_replace[colName]:
return self._sql_column_replace[colName]
except:
return colName
def setFilterCol(self, table: QTableView, colName, model=None):
"""Prepare filter model if needed and set column for filtering"""
if not model:
model = table.model()
if isinstance(model, tsSqlTableModel):
newmdl = QSortFilterProxyModel()
newmdl.setSourceModel(model)
table.setModel(newmdl)
model = newmdl
smdl: tsSqlTableModel = model.sourceModel()
while not isinstance(smdl, tsSqlTableModel):
smdl = smdl.sourceModel()
# orig = self.convColName(colName)
col = smdl.tsFieldNames.index(colName)
model.setFilterKeyColumn(col)
return model
def saveConfig(self):
"""Save config file
"""
debug("saveConfig")
config = self.config
config['DEFAULT']['lastuser'] = self.user
config['DEFAULT']['dep'] = str(self.dep)
conf_path = os.path.join(home_dir, "3uson.conf")
try:
with open(conf_path, 'w', encoding='utf-8') as conf_file:
config.write(conf_file)
Источник: https://baza.diplomsite.ru/previewfile/2412