def update(self, dates, times): oldValues = {} oldComments = {} for i in xrange(self._count): date = self._dates[i] time = self._times[i] dose = self._items[i] comment = self._comments[i] oldValues[(date, time)] = dose oldComments[(date, time)] = comment self._datesCount = len(dates) self._timesCount = len(times) self._count = self._datesCount*self._timesCount self._dates = sorted([pyDate(date) for date in dates]*self._timesCount) self._times = list(times)*self._datesCount self._items = [0.0]*(self._count) self._comments = [''] * (self._count) for i in xrange(self._count): date = self._dates[i] time = self._times[i] oldValue = oldValues.get((date, time), None) if oldValue: self._items[i] = oldValue oldComment = oldComments.get((date, time), None) if oldComment: self._comments[i] = oldComment
def _get(context, clientId, begDate, endDate, types=None): if isinstance(endDate, CDateInfo): endDate = endDate.date if isinstance(begDate, CDateInfo): begDate = begDate.date if isinstance(types, (set, frozenset, list, tuple)): types = tuple(types) elif isinstance(types, (int, long, basestring)): types = (types, ) elif types is None: types = (0, ) else: raise ValueError( 'parameter "types" must be list, tuple, set or int') # потребность в pyDate обусловлена использованием дат в ключе кеша объектов. return context.getInstance(CTempInvalidInfoList, clientId, pyDate(begDate), pyDate(endDate), types)
def __init__(self, dates=None, times=None): if not dates: dates = [] if not times: times = [] self._datesCount = len(dates) self._timesCount = len(times) self._count = self._datesCount*self._timesCount self._dates = sorted([pyDate(date) for date in dates]*self._timesCount) self._times = list(times)*self._datesCount self._items = [0.0]*(self._count) self._comments = [''] * (self._count)
def process(self, dbf, record, insurerCode): row = dbf.newRecord() row['SMO_CODE'] = insurerCode row['CODE_MO'] = forceString(record.value('bookkeeperCode')) row['SPV'] = forceInt(record.value('policyKindCode')) row['SPS'] = forceString(record.value('serial')) row['SPN'] = forceString(record.value('number')) row['FIO'] = forceString(record.value('lastName')) row['IMA'] = forceString(record.value('firstName')) row['OTCH'] = forceString(record.value('patrName')) row['DATR'] = pyDate(forceDate(record.value('birthDate'))) row.store()
def setup(self, cols, tableName, order, record, executionPlan, forSelect=False, filterClass=None): self.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.WindowMaximizeButtonHint | QtCore.Qt.WindowCloseButtonHint) self.forSelect = forSelect self.executionPlan = executionPlan self.record = record self.filterClass = filterClass self.props = {} self.order = order self.model = CExecutionPlanModel(self) self.tblExecutionPlan.setModel(self.model) self.btnEdit.setDefault(not self.forSelect) self.tblExecutionPlan.setFocus(QtCore.Qt.OtherFocusReason) directionDateTime = forceDateTime(record.value('directionDate')) self.edtDirectionDate.setDate(directionDateTime.date()) self.edtDirectionTime.setTime(directionDateTime.time()) self.cmbSetPerson.setValue(forceRef(record.value('setPerson_id'))) self.isEditor = False if forceDateTime(record.value('endDate')) else True self.specifiedName = forceString(record.value('specifiedName')) self.actionTypeId = forceRef(record.value('actionType_id')) begDateTime = forceDateTime(record.value('begDate')) begDate = begDateTime.date() self.edtBegDate.setDate(begDate) duration = forceInt(record.value('duration')) plannedEndDateTime = forceDateTime(record.value('plannedEndDate')) if not plannedEndDateTime: plannedEndDateTime = begDateTime.addDays(duration-1) plannedEndDate = plannedEndDateTime.date() self.edtEndDate.setDate(plannedEndDate) self.edtDuration.setValue(duration) self.actionId = forceRef(record.value('id')) begDateNext = begDate while begDateNext <= plannedEndDate: if begDateNext not in self.executionPlan.keys(): self.executionPlan[pyDate(begDateNext)] = {} begDateNext = begDateNext.addDays(1) self.model.loadData(self.executionPlan) self.label.setText(u'всего: %d' % len(self.model.items)) QtCore.QObject.connect( self.tblExecutionPlan.horizontalHeader(), QtCore.SIGNAL('sectionClicked(int)'), self.setSort)
def saveData(self): if len(self.items) < 1: return self.executionPlan self.executionPlan = {} db = QtGui.qApp.db table = db.table('Action_ExecutionPlan') for item in self.items: execTime = item[0] if execTime: execDate = pyDate(item[1]) record = item[2] execTimeDict = self.executionPlan.get(execDate, {}) if execTime in execTimeDict.keys(): record = execTimeDict.get(execTime, None) if not record: record = table.newRecord() else: record = table.newRecord() record.setValue('execDate', toVariant(QtCore.QDateTime(QtCore.QDate(execDate), execTime))) execTimeDict[execTime] = record self.executionPlan[execDate] = execTimeDict return self.executionPlan
def build(self, params): begDate = params.get('begDate', None) endDate = params.get('endDate', None) personId = params.get('personId', None) rowGrouping = params.get('rowGrouping', 0) query = selectData(begDate, endDate, personId, rowGrouping) if rowGrouping == 1: # by personId forceKeyVal = forceRef keyValToString = lambda personId: forceString( QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id', personId, 'name')) keyName = u'Врач' else: forceKeyVal = lambda x: pyDate(forceDate(x)) keyValToString = lambda x: forceString(QtCore.QDate(x)) keyName = u'Дата' doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [('%20', [keyName], CReportBase.AlignLeft), ('%5', [u'консультация'], CReportBase.AlignLeft), ('%5', [u'ЭЭГ'], CReportBase.AlignLeft), ('%5', [u'УЗДГ'], CReportBase.AlignLeft), ('%5', [u'УЕТ'], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) boldChars = QtGui.QTextCharFormat() boldChars.setFontWeight(QtGui.QFont.Bold) boldItalicChars = QtGui.QTextCharFormat() boldItalicChars.setFontWeight(QtGui.QFont.Bold) boldItalicChars.setFontItalic(True) total = [0] * 4 self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() row = table.addRow() fields = (forceKeyVal(record.value('rowKey')), forceInt(record.value('cons')), forceInt(record.value('eed')), forceInt(record.value('uzdg')), forceDouble(record.value('Summary'))) for col, val in enumerate(fields): if col == 0: table.setText(row, 0, keyValToString(val)) else: table.setText(row, col, val, CReportBase.TableTotal) total[col - 1] += val row = table.addRow() table.setText(row, 0, u'Всего', CReportBase.TableTotal) for j in xrange(4): table.setText(row, j + 1, total[j], CReportBase.TableTotal) return doc
def on_btnNextAction_clicked(self): if self.cmbStatus.currentIndex() == 3: currentDateTime = QtCore.QDateTime.currentDateTime() db = QtGui.qApp.db table = db.table('vrbPersonWithSpeciality') personId = QtGui.qApp.userId if ( QtGui.qApp.userId and QtGui.qApp.userSpecialityId) else self.cmbSetPerson.value() record = db.getRecordEx(table, [table['name']], [table['id'].eq(personId)]) if personId else None personName = forceString(record.value('name')) if record else '' self.edtNote.setText('Отменить: %s %s' % (currentDateTime.toString('dd-MM-yyyy hh:mm'), personName)) else: self.newActionId = None prevRecord = self.getRecord() if prevRecord: actionTypeId = forceRef(prevRecord.value('actionType_id')) if prevRecord else None duration = self.edtDuration.value() aliquoticity = self.edtAliquoticity.value() if duration >= 1 or aliquoticity > 1: recordList = {} periodicity = self.edtPeriodicity.value() if aliquoticity and actionTypeId: db = QtGui.qApp.db tableAction = db.table('Action') eventId = forceRef(prevRecord.value('event_id')) actionId = forceRef(prevRecord.value('id')) directionDate = forceDateTime(prevRecord.value('directionDate')) setPersonId = forceRef(prevRecord.value('setPerson_id')) if eventId: cond = [ tableAction['deleted'].eq(0), tableAction['actionType_id'].eq(actionTypeId), tableAction['event_id'].eq(eventId), tableAction['directionDate'].eq(directionDate), tableAction['setPerson_id'].eq(setPersonId) ] for recordOld in db.iterRecordList( tableAction, tableAction['*'], cond, tableAction['begDate'] ): id = forceRef(recordOld.value('id')) begDateOld = forceDateTime(recordOld.value('begDate')) recordList[(id, begDateOld)] = recordOld keysList = recordList.keys() keysList.sort() keyList = keysList[-1] quoticity = 0 if aliquoticity > 1: for key in recordList.keys(): if key[1].date() == keyList[1].date(): quoticity += 1 if duration >= 1 or (aliquoticity > 1 and aliquoticity > quoticity): lastRecord = recordList.get(keyList, None) newRecordAction = False if lastRecord: prevActionId = forceRef(lastRecord.value('id')) if actionId == prevActionId: begDate = forceDateTime(prevRecord.value('begDate')) if QtGui.qApp.userId and QtGui.qApp.userSpecialityId: execPersonId = QtGui.qApp.userId else: execPersonId = self.cmbSetPerson.value() dialog = CExecTimeNextActionDialog(self, begDate, execPersonId) if dialog.exec_(): execTime = dialog.getExecTime() execPersonId = dialog.getExecPersonId() specifiedName = forceString(prevRecord.value('specifiedName')) prevRecord.setValue('person_id', toVariant(execPersonId)) executionPlan = self.action.getExecutionPlan() executionPlanKeys = executionPlan.keys() executionPlanKeys.sort() executionPlanBegDate = executionPlan.get(pyDate(begDate.date()), {}) if not executionPlanBegDate: for keyDate in executionPlanKeys: executionPlanTimes = executionPlan.get(keyDate, {}) aliquoticityNew = len(executionPlanTimes) if aliquoticityNew: executionPlanTimeKeys = executionPlanTimes.keys() executionPlanTimeKeys.sort() aliquoticity = aliquoticityNew begDateDate = begDate.date() durationNew = duration - begDateDate.daysTo( QtCore.QDate(keyDate)) duration = durationNew begDate = QtCore.QDateTime(QtCore.QDate(keyDate), executionPlanTimeKeys[0]) break else: executionPlanBegDateKeys = executionPlanBegDate.keys() executionPlanBegDateKeys.sort() begTime = executionPlanBegDateKeys[0] executionPlanKeys = executionPlan.keys() executionPlanKeys.sort() if QtCore.QDate(executionPlanKeys[0]) == begDate.date(): aliquoticity = len(executionPlanBegDateKeys) newBegDate = begDate.date().addDays(1) maxBegDate = executionPlanKeys[len(executionPlanKeys) - 1] while newBegDate <= maxBegDate: periodicityPlanTimes = executionPlan.get(pyDate(newBegDate), {}) if len(periodicityPlanTimes): periodicity = begDate.date().daysTo(newBegDate) - 1 break else: newBegDate = newBegDate.addDays(1) if periodicity < 0: periodicity = 0 begDate = QtCore.QDateTime(begDate.date(), begTime) prevRecord.setValue('aliquoticity', toVariant(aliquoticity)) prevRecord.setValue('begDate', toVariant(begDate)) prevRecord.setValue('endDate', toVariant(QtCore.QDateTime(begDate.date(), execTime))) prevRecord.setValue('status', toVariant(2)) prevRecord.setValue('plannedEndDate', toVariant(begDate.addDays(duration - 1))) prevRecord.setValue('duration', toVariant(duration)) endDate = forceDateTime(prevRecord.value('endDate')) newExecutionPlan = {} tableActionExecutionPlan = db.table('Action_ExecutionPlan') for execDate, timeList in executionPlan.items(): timeListDict = {} for execTime, record in timeList.items(): if QtCore.QDateTime(QtCore.QDate(execDate), execTime) > begDate: newExecPlanRecord = tableActionExecutionPlan.newRecord() newExecPlanRecord.setValue('execDate', toVariant(record.value('execDate'))) newExecPlanRecord.setValue('master_id', toVariant(None)) newExecPlanRecord.setValue('id', toVariant(None)) timeListDict[execTime] = newExecPlanRecord if timeListDict or QtCore.QDate(execDate) > begDate.date(): newExecutionPlan[execDate] = timeListDict begDateNew = None periodicityNew = -1 if newExecutionPlan: newExecutionPlanKeys = newExecutionPlan.keys() newExecutionPlanKeys.sort() newExecTimeList = {} newExecDate = None for planKey in newExecutionPlanKeys: newExecTimeList = newExecutionPlan.get(planKey, {}) if newExecTimeList: newExecDate = planKey break if newExecTimeList and newExecDate: newExecTimeListKeys = newExecTimeList.keys() if len(newExecTimeListKeys) > 0: newExecTimeListKeys.sort() newExecTime = newExecTimeListKeys[0] begDateNew = QtCore.QDateTime(QtCore.QDate(newExecDate), newExecTime) aliquoticity = len(newExecTimeListKeys) begDateDate = begDate.date() periodicity = begDateDate.daysTo(begDateNew.date()) - 1 if periodicity < 0: periodicity = 0 if begDateDate == begDateNew.date(): durationNew = duration else: durationNew = duration - 1 - periodicity periodicityNew = 0 begDateNewDate = begDateNew.date() for newExecutionKey in newExecutionPlanKeys: newExecutionDate = QtCore.QDate(newExecutionKey) if newExecutionDate > begDateNewDate: periodicityNew = begDateNewDate.daysTo( newExecutionDate) - 1 if periodicityNew < 0: periodicityNew = 0 break elif aliquoticity > 1 and aliquoticity > quoticity: begDateNew = QtCore.QDateTime(endDate.date(), execTime if execTime else self.getCurrentTimeAction( endDate)) durationNew = duration else: endDateNew = endDate.addDays(periodicity + 1) begDateNew = QtCore.QDateTime(endDateNew.date(), execTime if execTime else self.getCurrentTimeAction( endDate)) durationNew = duration - 1 - periodicity prevRecord.setValue('periodicity', toVariant(periodicity)) if begDateNew and durationNew: if periodicityNew > -1: periodicity = periodicityNew newRecord = tableAction.newRecord() newRecord.setValue('event_id', toVariant(prevRecord.value('event_id'))) newRecord.setValue('begDate', toVariant(begDateNew)) newRecord.setValue('status', toVariant(0)) newRecord.setValue('idx', toVariant(9999)) newRecord.setValue('specifiedName', toVariant(specifiedName)) newRecord.setValue('duration', toVariant(durationNew)) newRecord.setValue('periodicity', toVariant(periodicity)) newRecord.setValue('aliquoticity', toVariant(aliquoticity)) newRecord.setValue('plannedEndDate', toVariant(begDateNew.addDays(durationNew - 1))) newRecord.setValue('actionType_id', toVariant(actionTypeId)) newRecord.setValue('directionDate', toVariant(prevRecord.value('directionDate'))) newRecord.setValue('setPerson_id', toVariant(prevRecord.value('setPerson_id'))) newRecord.setValue('person_id', toVariant(QtGui.qApp.userId if ( QtGui.qApp.userId and QtGui.qApp.userSpecialityId) else self.cmbSetPerson.value())) newRecord.setValue('org_id', toVariant(prevRecord.value('org_id'))) newRecord.setValue('amount', toVariant(prevRecord.value('amount'))) newAction = CAction(record=newRecord) if newExecutionPlan: newAction.setExecutionPlan(newExecutionPlan) if newAction: for properties in self.action._properties: type = properties._type name = type.name if (type.canChangeOnlyOwner > 0 or type.inActionsSelectionTable == 1 or type.isActionNameSpecifier ) and name: newAction[name] = self.action[name] self.newActionId = newAction.save(idx=9999) newRecordAction = True self.setRecordByNext(prevRecord) self.saveData() self.close() if duration == 1 and not newRecordAction: begDate = forceDateTime(prevRecord.value('begDate')) prevRecord.setValue('status', toVariant(2)) endDate = forceDateTime(prevRecord.value('endDate')) if not endDate: prevRecord.setValue('endDate', toVariant(begDate)) prevRecord.setValue('person_id', toVariant(QtGui.qApp.userId if ( QtGui.qApp.userId and QtGui.qApp.userSpecialityId) else self.cmbSetPerson.value())) prevRecord.setValue('plannedEndDate', toVariant(begDate.addDays(duration - 1))) self.setRecordByNext(prevRecord) self.saveData() self.close()
def build(self, params): begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) orgStructureId = params.get('orgStructureId', None) personId = params.get('personId', None) rowGrouping = params.get('rowGrouping', 0) sex = params.get('sex', 0) socStatusClassId = params.get('socStatusClassId', None) socStatusTypeId = params.get('socStatusTypeId', None) group = params.get('group', False) address = params.get('address', False) regAddress = params.get('regAddress', False) query = select(begDate, endDate, orgStructureId, personId, rowGrouping, sex, socStatusClassId, socStatusTypeId, group) self.setQueryText(forceString(query.lastQuery())) if rowGrouping == 5: forceKeyVal = forceRef keyValToString = lambda clientId: forceString(QtGui.qApp.db.translate('vrbClientInfo', 'id', clientId, 'clientName')) keyName = u'Пациент' elif rowGrouping == 4: # by post_id forceKeyVal = forceRef keyValToString = lambda postId: forceString(QtGui.qApp.db.translate('rbPost', 'id', postId, 'name')) keyName = u'Должность' elif rowGrouping == 3: # by speciality_id forceKeyVal = forceRef keyValToString = lambda specialityId: forceString(QtGui.qApp.db.translate('rbSpeciality', 'id', specialityId, 'name')) keyName = u'Специальность' elif rowGrouping == 2: # by orgStructureId forceKeyVal = forceRef keyValToString = lambda orgStructureId: forceString(QtGui.qApp.db.translate('OrgStructure', 'id', orgStructureId, 'name')) keyName = u'Подразделение' elif rowGrouping == 1: # by personId forceKeyVal = forceRef keyValToString = lambda personId: forceString(QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id', personId, 'name')) keyName = u'Врач' else: forceKeyVal = lambda x: pyDate(forceDate(x)) keyValToString = lambda x: forceString(QtCore.QDate(x)) keyName = u'Дата' forceKey = forceRef keyToString = lambda orgStructureId: forceString(QtGui.qApp.db.translate('OrgStructure', 'id', orgStructureId, 'name')) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() additional = 0 tableColumns = [('5%', u'№п/п', CReportBase.AlignLeft), ( '20%', [keyName], CReportBase.AlignLeft)] if regAddress: tableColumns.append(('10%', [u'Адрес регистрации'], CReportBase.AlignCenter)) additional += 1 if address: tableColumns.append(('10%', [u'Адрес проживания'], CReportBase.AlignCenter)) additional += 1 tableColumns.append(( '10%', [u'Всего'], CReportBase.AlignCenter)) tableColumns.append(( '10%', [u'Амбулаторно'], CReportBase.AlignCenter)) tableColumns.append(( '10%', [u'На дому'], CReportBase.AlignCenter)) table = createTable(cursor, tableColumns) total = [0, 0, 0] totalOrg = [0]*3 prevOrgGroup = None orderNumber = 0 while query.next(): record = query.record() orderNumber += 1 rowKey = forceKeyVal(record.value('rowKey')) cnt = forceInt(record.value('cnt')) atHome = forceInt(record.value('atHome')) orgGroup = keyToString(forceKey(record.value('orgGroup'))) clientInfo = CClientInfo(CInfoContext(), rowKey) regAddr = clientInfo.regAddress addr = clientInfo.locAddress if not orgGroup: orgGroup = '-' if group: if prevOrgGroup and prevOrgGroup != orgGroup: i = table.addRow() table.setText(i, 1, u'Всего', CReportBase.TableTotal) for j in xrange(3): table.setText(i, j+2, totalOrg[j], CReportBase.TableTotal) total[j] += totalOrg[j] totalOrg = [0]*3 if prevOrgGroup != orgGroup: i = table.addRow() table.setText(i, 1, orgGroup, CReportBase.TableTotal) table.mergeCells(i, 0, 1, 4) prevOrgGroup = orgGroup i = table.addRow() table.setText(i, 0, forceString(orderNumber)) table.setText(i, 1, keyValToString(rowKey)) if regAddress: table.setText(i, 2, regAddr) if address: table.setText(i, 1 + additional, addr) table.setText(i, 2 + additional, cnt) totalOrg[0] += cnt table.setText(i, 3 + additional, cnt-atHome) totalOrg[1] += cnt - atHome table.setText(i, 4 + additional, atHome) totalOrg[2] += atHome if group: i = table.addRow() table.setText(i, 1, u'Всего', CReportBase.TableTotal) for j in xrange(3): table.setText(i, j+2 + additional, totalOrg[j], CReportBase.TableTotal) total[j] += totalOrg[j] else: total = totalOrg i = table.addRow() table.setText(i, 0, u'Итого', CReportBase.TableTotal) for j in xrange(3): table.setText(i, j+2 + additional, total[j], CReportBase.TableTotal) return doc
def build(self, params): begDate = params.get('begDate', None) endDate = params.get('endDate', None) personId = params.get('personId', None) rowGrouping = params.get('rowGrouping', 0) query = selectData(begDate, endDate, personId, rowGrouping) if rowGrouping == 1: # by personId forceKeyVal = forceRef keyValToString = lambda personId: forceString( QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id', personId, 'name')) keyName = u'Врач' else: forceKeyVal = lambda x: pyDate(forceDate(x)) keyValToString = lambda x: forceString(QtCore.QDate(x)) keyName = u'Дата' doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [('%20', [keyName], CReportBase.AlignLeft), ('%5', [u'в/венно'], CReportBase.AlignLeft), ('%5', [u'в/в капельно'], CReportBase.AlignLeft), ('%5', [u'в/мышечно'], CReportBase.AlignLeft), ('%5', [u'АД'], CReportBase.AlignLeft), ('%5', [u'АТМ'], CReportBase.AlignLeft), ('%5', [u'Сумма'], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) boldChars = QtGui.QTextCharFormat() boldChars.setFontWeight(QtGui.QFont.Bold) boldItalicChars = QtGui.QTextCharFormat() boldItalicChars.setFontWeight(QtGui.QFont.Bold) boldItalicChars.setFontItalic(True) total = [0] * 6 self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() rowKey = forceKeyVal(record.value('rowKey')) vena = forceInt(record.value('vena')) drop = forceInt(record.value('drip')) muscle = forceInt(record.value('muscle')) ad = forceInt(record.value('AD')) atm = forceInt(record.value('ATM')) sum = forceInt(record.value('Summary')) i = table.addRow() table.setText(i, 0, keyValToString(rowKey)) table.setText(i, 1, vena) total[0] = total[0] + vena table.setText(i, 2, drop) total[1] = total[1] + drop table.setText(i, 3, muscle) total[2] = total[2] + muscle table.setText(i, 4, ad) total[3] = total[3] + ad table.setText(i, 5, atm) total[4] = total[4] + atm table.setText(i, 6, sum) total[5] = total[5] + sum i = table.addRow() table.setText(i, 0, u'Всего', CReportBase.TableTotal) for j in xrange(6): table.setText(i, j + 1, total[j], CReportBase.TableTotal) return doc
def process(self, dbfP, record, codeLPU): db = QtGui.qApp.db birthDate = forceDate(record.value('clientBirthDate')) # Номер стат.талона clientId = forceRef(record.value('clientId')) eventId = forceRef(record.value('eventId')) insurerArea = forceString(record.value('insurerArea')) isAlien = insurerArea[:2] != QtGui.qApp.defaultKLADR()[:2] if not ((clientId, eventId) in self.exportedClients): dbfRecord = dbfP.newRecord() # номер реестра счетов (п. 1 примечаний) обязательное # dbfRecord['NS'] = 123 #self.edtRegistryNumber.value() # тип реестра счетов (п. 2;4 примечаний) обязательное SPR21 # dbfRecord['VS'] = accType # дата формирования реестра счетов (п. 3 примечаний) обязательное dbfRecord['DATS'] = pyDate(QtCore.QDate()) # номер персонального счета обязательное dbfRecord[ 'SN'] = eventId # В импорте ФЛК в этом поле ожидается Event.id # дата формирования персонального счета обязательное dbfRecord['DATPS'] = pyDate(QtCore.QDate()) # код медицинской организации в системе ОМС, # предоставившей медицинскую помощь обязательное SPR01 dbfRecord['CODE_MO'] = codeLPU # ОГРН плательщика dbfRecord['PL_OGRN'] = forceString( record.value('insurerOGRN')) or (self.TF_OGRN if isAlien else '') # фамилия (п. 5 примечаний) обязательное dbfRecord['FIO'] = nameCase( forceString(record.value('clientLastName'))) # имя (п. 5 примечаний) обязательное dbfRecord['IMA'] = nameCase( forceString(record.value('clientFirstName'))) # отчество (п. 5 примечаний) patrName = forceString(record.value('clientPatrName')) dbfRecord['OTCH'] = nameCase(patrName) # пол (М/Ж) (п. 6 примечаний) обязательное dbfRecord['POL'] = formatSex(record.value('clientSex')).upper() # дата рождения (п. 7 примечаний) обязательное dbfRecord['DATR'] = pyDate(birthDate) # СНИЛС dbfRecord['SNILS'] = formatSNILS( forceString(record.value('clientSNILS'))) # статус пациента обязательное SPR40 age = calcAgeInYears(birthDate, QtCore.QDate.currentDate()) # код ОКАТО территории страхования по ОМС обязательное для инокраевых SPR39 dbfRecord['OKATO_OMS'] = forceStringEx( record.value('insurerOKATO')) if not dbfRecord['OKATO_OMS']: insurerName = forceString(record.value('insurerName')) self.log(u'<b><font color=orange>Внимание</font></b>:' \ u' ОКАТО для ОМС "%s" не задан, пытаюсь определить по области страхования!' % insurerName) dbfRecord['OKATO_OMS'] = forceString( db.translate('kladr.KLADR', 'CODE', insurerArea, 'OCATD', idFieldName='CODE')) if not dbfRecord['OKATO_OMS']: self.log(u'<b><font color=red>Внимание</font></b>:' \ u' ОКАТО для ОМС "%s" не задан!' % forceString(record.value('insurerName'))) policyInsuranceArea = forceString( record.value('policyInsuranceArea')) if policyInsuranceArea: dbfRecord['OKATO_OMS'] = forceString( db.translate('kladr.KLADR', 'CODE', policyInsuranceArea, 'OCATD', idFieldName='CODE')) # серия полиса ОМС обязательное dbfRecord['SPS'] = forceString(record.value('policySerial')) # номер полиса ОМС обязательное dbfRecord['SPN'] = forceString(record.value('policyNumber')) # дата начала действия полиса ОМС (п. 8 примечаний) обязательное для инокраевых # серия документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) documentSerial = forceString(record.value('documentSerial')) if documentSerial: dbfRecord['S_DOC'] = documentSerial # номер документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) documentNumber = forceString(record.value('documentNumber')) if documentNumber: dbfRecord['N_DOC'] = documentNumber # Признак новорожденого isLittleStrangerAge = calcAgeInDays( birthDate, forceDate(record.value('eventSetDate'))) < 90 exportAsLittleStranger = isLittleStrangerAge and ( dbfRecord['S_DOC'] == '' and dbfRecord['N_DOC'] == '') # (dbfRecord['SPS'] == '' and dbfRecord['SPN'] == '') and \ # признак "Особый случай" при регистрации обращения # за медицинской помощью (п. 9 примечаний) SPR42 flags = '' if dbfRecord['SPS'] == '' and dbfRecord['SPN'] == '' and forceDate( record.value('eventExecDate')) <= QtCore.QDate( 2016, 9, 30): # нет данных по полису: flags += ' 1' if exportAsLittleStranger: # новорождённый: flags += ' 2' if patrName == '': flags += ' 4' flags += ' ' + self.getSocStatusFederalCode(clientId) dbfRecord['Q_G'] = trim(flags) representativeInfo = self.getClientRepresentativeInfo(clientId) if exportAsLittleStranger and representativeInfo: # статус представителя пациента обязательное для инокраевых SPR41 # dbfRecord['STAT_P'] = representativeInfo.get('relationTypeCode', '0')[:1] # 'C', 1), # фамилия родителя (представителя) пациента (п. 5 примечаний) обязательное для инокраевых dbfRecord['FAMP'] = representativeInfo.get('lastName', '') # имя родителя (представителя) пациента (п. 5 примечаний) обязательное для инокраевых dbfRecord['IMP'] = representativeInfo.get('firstName', '') # отчество родителя (представителя) пациента (п. 5 примечаний) dbfRecord['OTP'] = representativeInfo.get('patrName', '') s = representativeInfo.get('serial', '') n = representativeInfo.get('number', '') # код типа документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) SPR43 dbfRecord['C_DOC'] = representativeInfo.get( 'documentTypeRegionalCode', 18 if s or n else 0) % 100 # серия документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) dbfRecord['S_DOC'] = s # номер документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) dbfRecord['N_DOC'] = n sexp = representativeInfo.get('sex', 0) dbfRecord[ 'POLP'] = u'М' if sexp == 1 else u'Ж' if sexp == 2 else u'0' dbfRecord['DATRP'] = pyDate( representativeInfo.get('birthDate', None)) dbfRecord['FIO'] = dbfRecord['FAMP'] dbfRecord['IMA'] = dbfRecord['IMP'] dbfRecord['OTCH'] = dbfRecord['OTP'] dbfRecord['POL'] = dbfRecord['POLP'] dbfRecord['DATR'] = dbfRecord['DATRP'] dbfRecord['SNILS'] = formatSNILS( representativeInfo.get('SNILS', '')) dbfRecord['SPS'] = representativeInfo.get('policySerial', '') dbfRecord['SPN'] = representativeInfo.get('policyNumber', '') # код типа документа, удостоверяющего личность пациента (представителя) # (п. 10 примечаний) SPR43 documentRegionalCode = forceInt( record.value('documentTypeRegionalCode')) % 100 if documentRegionalCode and (documentSerial or documentNumber): dbfRecord['C_DOC'] = documentRegionalCode dbfRecord['SPV'] = forceInt(record.value('policyKindCode')) % 10 setDate = forceDate(record.value('eventSetDate')).toPyDate() execDate = forceDate(record.value('eventExecDate')).toPyDate() dbfRecord['DATN'] = setDate dbfRecord['DATO'] = execDate dbfRecord.store() self.exportedClients.add((clientId, eventId))
def build(self, params): begDate = params.get('begDate', None) endDate = params.get('endDate', None) personId = params.get('personId', None) rowGrouping = params.get('rowGrouping', 0) query = selectData(begDate, endDate, personId, rowGrouping) self.setQueryText(forceString(query.lastQuery())) if rowGrouping == 1: # by personId forceKeyVal = forceRef keyValToString = lambda personId: forceString( QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id', personId, 'name')) keyName = u'Психолог' else: forceKeyVal = lambda x: pyDate(forceDate(x)) keyValToString = lambda x: forceString(QtCore.QDate(x)) keyName = u'Дата' doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [('%20', [keyName], CReportBase.AlignLeft), ('%5', [u'Взрослые'], CReportBase.AlignLeft), ('%5', [u'Дети'], CReportBase.AlignLeft), ('%5', [u'Подростки'], CReportBase.AlignLeft), ('%5', [u'АДН/АПЛ'], CReportBase.AlignLeft), ('%5', [u'Босс'], CReportBase.AlignLeft), ('%5', [u'Итого'], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) total = [0] * 6 while query.next(): record = query.record() rowKey = forceKeyVal(record.value('rowKey')) adults = forceInt(record.value('adults')) children = forceInt(record.value('children')) teens = forceInt(record.value('teens')) adn_apl = forceInt(record.value('adn_apl')) boss = forceInt(record.value('boss')) summary = forceInt(record.value('summary')) i = table.addRow() table.setText(i, 0, keyValToString(rowKey)) table.setText(i, 1, adults) table.setText(i, 2, children) table.setText(i, 3, teens) table.setText(i, 4, adn_apl) table.setText(i, 5, boss) table.setText(i, 6, summary) total[0] += adults total[1] += children total[2] += teens total[3] += adn_apl total[4] += boss total[5] += summary i = table.addRow() table.setText(i, 0, u'Всего', CReportBase.TableTotal) for j in xrange(len(total)): table.setText(i, j + 1, total[j], CReportBase.TableTotal) return doc
def build(self, params): begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) isEventTime = params.get('isEventCreateParams', False) eventDate = (( params.get('eventBegDatetime', QtCore.QDate.currentDate()), params.get('eventEndDatetime', QtCore.QDate.currentDate())) if isEventTime else None) eventPurposeId = params.get('eventPurposeId', None) eventTypesDict = params.get('eventTypes', {}) eventTypes = eventTypesDict.keys() orgStructureId = params.get('orgStructureId', None) personId = params.get('personId', None) rowGrouping = params.get('advancedRowGrouping', 0) visitPayStatus = params.get('visitPayStatus', 0) detailChildren = params.get('detailChildren', False) visitHospital = params.get('visitHospital', False) visitDisp = params.get('visitDisp', False) sex = params.get('sex', 0) ageFrom = params.get('ageFrom', 0) ageTo = params.get('ageTo', 150) self.countCall = params.get('countCall', False) visitPayStatus -= 1 if rowGrouping == 4: # by post_id postId = None forceKeyVal = forceRef keyValToString = lambda postId: forceString( QtGui.qApp.db.translate('rbPost', 'id', postId, 'name')) keyValToSort = keyValToString keyName = u'Должность' elif rowGrouping == 3: # by speciality_id specialityId = None forceKeyVal = forceRef keyValToString = lambda specialityId: forceString( QtGui.qApp.db.translate('rbSpeciality', 'id', specialityId, 'name')) keyValToSort = keyValToString keyName = u'Специальность' elif rowGrouping == 2: # by orgStructureId forceKeyVal = forceRef keyValToString = None keyValToSort = None keyName = u'Подразделение' elif rowGrouping == 1: # by personId forceKeyVal = forceRef keyValToString = lambda personId: forceString( QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id', personId, 'name')) # keyValToString = lambda personId: getPersonString(personId) keyValToSort = keyValToString keyName = u'Врач' else: forceKeyVal = lambda x: pyDate(forceDate(x)) keyValToSort = None keyValToString = lambda x: forceString(QtCore.QDate(x)) keyName = u'Дата' doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(QtGui.QTextCharFormat()) self.createHeader(cursor, params) # i3149: Форма 39 для Краснодарского края1987 if QtGui.qApp.region().startswith('23'): query = selectDataForKK(begDate, endDate, eventPurposeId, eventTypes, orgStructureId, personId, rowGrouping, visitPayStatus, visitHospital, sex, ageFrom, ageTo, visitDisp, eventDate) self.setQueryText(forceString(query.lastQuery())) rowSize = 19 reportData = self.processQueryForKK(query, forceKeyVal, rowSize) else: query = selectData(begDate, endDate, eventPurposeId, eventTypes, orgStructureId, personId, rowGrouping, visitPayStatus, visitHospital, sex, ageFrom, ageTo, visitDisp, eventDate) self.setQueryText(forceString(query.lastQuery())) rowSize = 19 reportData = self.processQuery(query, forceKeyVal, rowSize) table = self.createTable(cursor, keyName) if rowGrouping == 2: # by orgStructureId self.genOrgStructureReport(table, reportData, rowSize, orgStructureId) else: keys = reportData.keys() if not keyValToSort is None: keys.sort(key=keyValToSort) else: keys.sort() total = [0] * rowSize for key in keys: i = table.addRow() table.setText(i, 0, keyValToString(key)) row = reportData[key] for j in xrange(rowSize): table.setText(i, j + 1, row[j]) total[j] += row[j] i = table.addRow() table.setText(i, 0, u'Всего', CReportBase.TableTotal) for j in xrange(rowSize): table.setText(i, j + 1, total[j], CReportBase.TableTotal) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock() cursor.insertBlock() doctorSignColumns = [ ('60%', [], CReportBase.AlignLeft), ('40%', [u'Подпись врача ______________________________________________' ], CReportBase.AlignLeft) ] doctorSign = createTable(cursor, doctorSignColumns, border=0, cellPadding=2, cellSpacing=0) return doc
def getExecutionPlan(self): currentRow = self.currentIndex().row() model = self.model() items = model.items() if 0 <= currentRow < len(items): actionTypeId = forceRef(items[currentRow].value('actionType_id')) action = model._idToAction[actionTypeId] if actionTypeId else None record = action.getRecord() if action else None if record and action: dialog = CGetExecutionPlan(self, record, action.getExecutionPlan()) dialog.exec_() begDate = forceDateTime(record.value('begDate')) duration = forceInt(record.value('duration')) aliquoticity = forceInt(record.value('aliquoticity')) periodicity = forceInt(record.value('periodicity')) plannedEndDate = forceDateTime(record.value('plannedEndDate')) executionPlan = dialog.model.executionPlan executionPlanKeys = executionPlan.keys() executionPlanKeys.sort() executionPlanBegDate = executionPlan.get( pyDate(begDate.date()), {}) if not executionPlanBegDate: iKey = 0 periodicity = 0 aliquoticity = 0 for keyDate in executionPlanKeys: iKey += 1 executionPlanTimes = executionPlan.get(keyDate, {}) aliquoticityNew = len(executionPlanTimes) if aliquoticityNew: executionPlanTimeKeys = executionPlanTimes.keys() executionPlanTimeKeys.sort() aliquoticity = aliquoticityNew begDateDate = begDate.date() durationNew = duration - begDateDate.daysTo( QtCore.QDate(keyDate)) duration = durationNew iKeys = iKey while len(executionPlanKeys) > iKeys: periodicityDate = executionPlanKeys[iKeys] periodicityPlanTimes = executionPlan.get( periodicityDate, {}) if len(periodicityPlanTimes): periodicity = QtCore.QDate(keyDate).daysTo( QtCore.QDate(periodicityDate)) - 1 break else: iKeys += 1 if periodicity < 0: periodicity = 0 begDate = QtCore.QDateTime( QtCore.QDate(keyDate), executionPlanTimeKeys[0]) break else: executionPlanBegDateKeys = executionPlanBegDate.keys() executionPlanBegDateKeys.sort() begTime = executionPlanBegDateKeys[0] aliquoticity = len(executionPlanBegDateKeys) begDate = QtCore.QDateTime(begDate.date(), begTime) executionPlanKeys = executionPlan.keys() executionPlanKeys.sort() newBegDate = begDate.date().addDays(1) maxBegDate = executionPlanKeys[len(executionPlanKeys) - 1] while newBegDate <= maxBegDate: periodicityPlanTimes = executionPlan.get( pyDate(newBegDate), {}) if len(periodicityPlanTimes): periodicity = begDate.date().daysTo(newBegDate) - 1 break else: newBegDate = newBegDate.addDays(1) if periodicity < 0: periodicity = 0 record.setValue('aliquoticity', toVariant(aliquoticity)) record.setValue('begDate', toVariant(begDate)) record.setValue('duration', toVariant(duration)) record.setValue('periodicity', toVariant(periodicity)) record.setValue('plannedEndDate', toVariant(begDate.addDays(duration - 1))) action.setExecutionPlan(dialog.model.executionPlan)
def getInfo(self): if self.eventId and self.params: APMaxList = {} APMinList = {} temperatureList = {} pulseList = {} chkTemperature = self.params.get('chkTemperature', 0) chkPulse = self.params.get('chkPulse', 0) chkAPMax = self.params.get('chkAPMax', 0) chkAPMin = self.params.get('chkAPMin', 0) self.multipleDimension = self.params.get('multipleDimension', 0) begDate = self.params.get('begDate', None) endDate = self.params.get('endDate', None) if begDate and endDate and (begDate <= endDate): self.multipleDays = 2 if begDate == endDate else ( begDate.daysTo(endDate) + 2) if (begDate and endDate and chkTemperature or chkPulse or chkAPMax or chkAPMin ) and self.multipleDimension and self.multipleDays: actionTypeIdList = self.getTemperatureSheetActionTypes() diseaseDayList = {} actionIdList = [] for recordDiseaseDay in self.getDeseaseDayRecords( begDate, endDate, actionTypeIdList): actionId = forceRef( recordDiseaseDay.value('action_id')) actionIdList.append(actionId) diseaseDay = forceInt( recordDiseaseDay.value('value')) - 1 endDate = forceDate(recordDiseaseDay.value('endDate')) endDateStr = pyDate(endDate) endTime = forceTime(recordDiseaseDay.value('endDate')) endTimeStr = pyTime(endTime) if (diseaseDay, endTimeStr, endDateStr) not in diseaseDayList.keys(): diseaseDayList[(diseaseDay, endTimeStr, endDateStr)] = actionId self.modelTemperatureSheet.loadHeader( diseaseDayList, self.multipleDimension) self.modelTemperatureSheet.loadData( self.eventId, diseaseDayList, actionIdList, begDate, endDate, actionTypeIdList) if chkTemperature: for recordTemperature in self.getTemperatureRecords( begDate, endDate, actionIdList, actionTypeIdList): actionId = forceRef( recordTemperature.value('action_id')) temperature = forceDouble( recordTemperature.value('value')) for key, value in diseaseDayList.items(): if actionId == value: temperatureList[key] = temperature break if chkAPMax: for recordAPMax in self.getArterialPressureMaxRecords( begDate, endDate, actionIdList, actionTypeIdList): actionId = forceRef(recordAPMax.value('action_id')) APMax = forceInt(recordAPMax.value('value')) for key, value in diseaseDayList.items(): if actionId == value: APMaxList[key] = APMax break if chkAPMin: for recordAPMin in self.getArterialPressureMinRecords( begDate, endDate, actionIdList, actionTypeIdList): actionId = forceRef(recordAPMin.value('action_id')) APMin = forceInt(recordAPMin.value('value')) for key, value in diseaseDayList.items(): if actionId == value: APMinList[key] = APMin break if chkPulse: for recordPulse in self.getPulseRecords( begDate, endDate, actionIdList, actionTypeIdList): actionId = forceRef(recordPulse.value('action_id')) pulse = forceInt(recordPulse.value('value')) for key, value in diseaseDayList.items(): if actionId == value: pulseList[key] = pulse break cnt = 0 self.dimension = round(1 / float(self.multipleDimension), 2) self.countGraphic = 0 if chkTemperature: self.countGraphic += 1 if chkAPMax: self.countGraphic += 1 if chkAPMin: self.countGraphic += 1 if chkPulse: self.countGraphic += 1 self.qwtPlotList = [] self.scrollArea.viewport().setAutoFillBackground(True) plotLayout = QtGui.QVBoxLayout( QtGui.QFrame(self.scrollArea.widget())) if chkTemperature: xa, ya, minValue1, maxValue1, titleList = self.getXY( temperatureList) obj = CCreateGraph(self, xa, ya, minValue1 if minValue1 < 35 else 35, maxValue1 if maxValue1 > 40 else 40, 1, cnt, QtCore.Qt.red, u'Температура', titleList) plotLayout.addWidget(obj.qwtPlot) cnt += 1 if chkAPMax: xa2, ya2, minValue2, maxValue2, titleList = self.getXY( APMaxList) obj2 = CCreateGraph(self, xa2, ya2, minValue2 if minValue2 < 50 else 50, maxValue2 if maxValue2 > 175 else 175, 25, cnt, QtCore.Qt.blue, u'Давление максимальное', titleList) plotLayout.addWidget(obj2.qwtPlot) cnt += 1 if chkAPMin: xa3, ya3, minValue3, maxValue3, titleList = self.getXY( APMinList) obj3 = CCreateGraph(self, xa3, ya3, minValue3 if minValue3 < 50 else 50, maxValue3 if maxValue3 > 175 else 175, 25, cnt, QtCore.Qt.blue, u'Давление минимальное', titleList) plotLayout.addWidget(obj3.qwtPlot) cnt += 1 if chkPulse: xa4, ya4, minValue4, maxValue4, titleList = self.getXY( pulseList) obj4 = CCreateGraph(self, xa4, ya4, minValue4 if minValue4 < 60 else 60, maxValue4 if maxValue4 > 120 else 120, 10, cnt, QtCore.Qt.darkGreen, u'Пульс', titleList) plotLayout.addWidget(obj4.qwtPlot) cnt += 1 widgetLayout = QtGui.QWidget() widgetLayout.setLayout(plotLayout) self.scrollArea.setWidget(widgetLayout)
def build(self, params): begDate = params.get('begDate', None) endDate = params.get('endDate', None) personId = params.get('personId', None) rowGrouping = params.get('rowGrouping', 0) query = selectData(begDate, endDate, personId, rowGrouping) if rowGrouping == 1: # by personId forceKeyVal = forceRef keyValToString = lambda personId: forceString( QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id', personId, 'name')) keyName = u'Логопед' else: forceKeyVal = lambda x: pyDate(forceDate(x)) keyValToString = lambda x: forceString(QtCore.QDate(x)) keyName = u'Дата' doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [('%20', [keyName], CReportBase.AlignLeft), ('%5', [u'от 0 до 14 лет'], CReportBase.AlignLeft), ('%5', [u'от 14 до 18 лет'], CReportBase.AlignLeft), ('%5', [u'старше 18 лет'], CReportBase.AlignLeft), ('%5', [u'из низ законченных случаев'], CReportBase.AlignLeft), ('%5', [u'Итого'], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) total = [0] * 5 self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() rowKey = forceKeyVal(record.value('rowKey')) children = forceInt(record.value('children')) teens = forceInt(record.value('teens')) adults = forceInt(record.value('adults')) finished = forceInt(record.value('finished')) summary = forceInt(record.value('summary')) i = table.addRow() table.setText(i, 0, keyValToString(rowKey)) table.setText(i, 1, children) table.setText(i, 2, teens) table.setText(i, 3, adults) table.setText(i, 4, finished) table.setText(i, 5, summary) total[0] += children total[1] += teens total[2] += adults total[3] += finished total[4] += summary i = table.addRow() table.setText(i, 0, u'Всего', CReportBase.TableTotal) for j in xrange(len(total)): table.setText(i, j + 1, total[j], CReportBase.TableTotal) return doc
def build(self, params): begDate = params.get('begDate', None) endDate = params.get('endDate', None) personId = params.get('personId', None) rowGrouping = params.get('rowGrouping', 0) query = selectData(begDate, endDate, personId, rowGrouping) self.setQueryText(forceString(query.lastQuery())) if rowGrouping == 1: # by personId forceKeyVal = forceRef keyValToString = lambda personId: forceString( QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id', personId, 'name')) keyName = u'Врач' else: forceKeyVal = lambda x: pyDate(forceDate(x)) keyValToString = lambda x: forceString(QtCore.QDate(x)) keyName = u'Дата' doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [('%20', [keyName], CReportBase.AlignLeft), ('%5', [u'ПНД'], CReportBase.AlignLeft), ('%5', [u'СМП'], CReportBase.AlignLeft), ('%5', [u'Др.учреждения'], CReportBase.AlignLeft), ('%5', [u'Первично'], CReportBase.AlignLeft), ('%5', [u'Повторно'], CReportBase.AlignLeft), ('%5', [u'из них: повторно в течение года'], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) boldChars = QtGui.QTextCharFormat() boldChars.setFontWeight(QtGui.QFont.Bold) boldItalicChars = QtGui.QTextCharFormat() boldItalicChars.setFontWeight(QtGui.QFont.Bold) boldItalicChars.setFontItalic(True) total = [0] * (len(tableColumns) - 1) while query.next(): record = query.record() i = table.addRow() table.setText(i, 0, keyValToString(forceKeyVal(record.value('rowKey')))) row = [ forceInt(record.value('pnd')), forceInt(record.value('cmp')), forceInt(record.value('other')), forceInt(record.value('primaryCount')), forceInt(record.value('secondaryCount')), forceInt(record.value('repeatedCount')) ] for n, x in enumerate(row): table.setText(i, n + 1, x) total[n] = total[n] + x i = table.addRow() table.setText(i, 0, u'Всего', CReportBase.TableTotal) for n, x in enumerate(total): table.setText(i, n + 1, x, CReportBase.TableTotal) return doc