def structActionsInfo(self, query): while query.next(): record = query.record() orgStructureId = forceRef(record.value('orgStructureId')) personCode = forceString(record.value('personCode')) personName = forceString(record.value('personName')) clientId = forceRef(record.value('clientId')) personId = forceRef(record.value('personId')) eventId = forceRef(record.value('eventId')) actionClass = forceInt(record.value('actionClass')) if not orgStructureId in self._mapFullOrgStructureNameToId.values( ): orgStructureFullName = getOrgStructureFullName(orgStructureId) self._mapFullOrgStructureNameToId[ orgStructureFullName] = orgStructureId personInfoDict = self._mapOrgStructureToInfo.setdefault( orgStructureId, {}) personInfoList = personInfoDict.get(personId, None) if personInfoList is None: personInfoHelper = {'clientIdList': [], 'eventIdList': []} personInfoList = [personCode, personName ] + [0] * 10 + [personInfoHelper] personInfoDict[personId] = personInfoList personInfoHelper = personInfoList[-1] personInfoList[8 + actionClass] += 1 if not clientId in personInfoHelper['clientIdList']: personInfoList[2] += 1 personInfoHelper['clientIdList'].append(clientId) if not eventId in personInfoHelper['eventIdList']: personInfoList[3] += 1 personInfoHelper['eventIdList'].append(eventId)
def getDescription(self, params): def dateRangeAsStr(begDate, endDate): result = '' if begDate: result += u' с ' + forceString(begDate) if endDate: result += u' по ' + forceString(endDate) return result begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) financeId = params.get('financeId', None) orgStructureId = params.get('orgStructureId', None) reportDate = params.get('reportDate') rows = [] if begDate or endDate: rows.append(u'за период' + dateRangeAsStr(begDate, endDate)) if financeId: rows.append(u'Тип финансирования: ' + forceString( QtGui.qApp.db.translate('rbFinance', 'id', financeId, 'name'))) if orgStructureId: rows.append(u'Подразделение: ' + getOrgStructureFullName(orgStructureId)) if reportDate: rows.append(u'отчёт составлен: ' + forceString(reportDate)) else: rows.append(u'отчёт составлен: ' + forceString(QtCore.QDateTime.currentDateTime())) return rows
def getOrgStructureFullName(self, orgStructureId): orgStructureFullName = self._mapOrgStructureToFullName.get( orgStructureId, None) if not orgStructureFullName: orgStructureFullName = getOrgStructureFullName(orgStructureId) self._mapOrgStructureToFullName[ orgStructureId] = orgStructureFullName return orgStructureFullName
def produceReportDataDivided(self, query, reportRowSize, detailChildren, sceneIndexes, params): columnShift = 0 if detailChildren else 1 reportData = {} personInfoList = [] while query.next(): record = query.record() personId = forceRef(record.value('person_id')) cnt = forceInt(record.value('cnt')) sceneId = forceInt(record.value('scene_id')) illness = forceBool(record.value('illness')) ageGroup = forceInt(record.value('ageGroup')) isWeekend = forceInt(record.value('weekend')) reportRow = reportData.get(personId, []) if not reportRow: reportRow = [0] * reportRowSize reportData[personId] = reportRow groupingRows = params.get('groupingRows', 0) specName = forceString(record.value('specName')) if groupingRows != 2 \ else getOrgStructureFullName(forceRef(record.value('whereId'))) lastName = forceString(record.value('lastName')) firstName = forceString(record.value('firstName')) patrName = forceString(record.value('patrName')) personName = formatShortName(lastName, firstName, patrName) personInfoList.append((personId, specName, personName)) if isWeekend: reportRow[1] += cnt if illness: reportRow[3] += cnt if not detailChildren: if ageGroup in [0, 1]: ageGroup = 0 else: ageGroup = 1 reportRow[5 + ageGroup * 2] += cnt sceneIndex = sceneIndexes.get(sceneId, 0) reportRow[11 + sceneIndex * 4 - columnShift * 2] += cnt if illness: reportRow[13 + sceneIndex * 4 - columnShift * 2] += cnt else: reportRow[0] += cnt if illness: reportRow[2] += cnt if not detailChildren: if ageGroup in [0, 1]: ageGroup = 0 else: ageGroup = 1 reportRow[4 + ageGroup * 2] += cnt sceneIndex = sceneIndexes.get(sceneId, 0) reportRow[10 + sceneIndex * 4 - columnShift * 2] += cnt if illness: reportRow[12 + sceneIndex * 4 - columnShift * 2] += cnt return reportData, personInfoList
def dumpParams(self, cursor, params): description = [] db = QtGui.qApp.db def dateRangeAsStr(begDate, endDate): result = '' if begDate: result += u' с ' + forceString(begDate) if endDate: result += u' по ' + forceString(endDate) return result begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) begDateBeforeRecord = params.get('begDateBeforeRecord', QtCore.QDate()) endDateBeforeRecord = params.get('endDateBeforeRecord', QtCore.QDate()) orgStructureId = params.get('orgStructureId', None) specialityId = params.get('specialityId', None) personId = params.get('personId', None) chkPeriodRecord = params.get('chkPeriodRecord', None) chkPeriodBeforeRecord = params.get('chkPeriodBeforeRecord', None) if chkPeriodRecord: if begDate or endDate: description.append(u'за период' + dateRangeAsStr(begDate, endDate)) if chkPeriodBeforeRecord: if begDateBeforeRecord or endDateBeforeRecord: description.append( u'период предварительной записи' + dateRangeAsStr(begDateBeforeRecord, endDateBeforeRecord)) if orgStructureId: description.append(u'подразделение: ' + getOrgStructureFullName(orgStructureId)) else: description.append(u'подразделение: ЛПУ') if specialityId: description.append(u'специальность: ' + forceString( db.translate('rbSpeciality', 'id', specialityId, 'name'))) if personId: personInfo = getPersonInfo(personId) description.append(u'врач: ' + personInfo['shortName'] + ', ' + personInfo['specialityName']) description.append(u'отчёт составлен: ' + forceString(QtCore.QDateTime.currentDateTime())) columns = [('100?', [], CReportBase.AlignLeft)] table = createTable(cursor, columns, headerRowCount=len(description), border=0, cellPadding=2, cellSpacing=0) for i, row in enumerate(description): table.setText(i, 0, row) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock()
def structVisitsInfo(self, query, params): begDate = params.get('begDate', None) endDate = params.get('endDate', None) AMB_SCENE_CODE_LIST = ['1'] HOME_SCENE_CODE_LIST = ['2', '3'] while query.next(): record = query.record() orgStructureId = forceRef(record.value('orgStructureId')) personCode = forceString(record.value('personCode')) personName = forceString(record.value('personName')) clientId = forceRef(record.value('clientId')) personId = forceRef(record.value('personId')) eventId = forceRef(record.value('eventId')) sceneCode = forceString(record.value('sceneCode')) if not (sceneCode in AMB_SCENE_CODE_LIST or sceneCode in HOME_SCENE_CODE_LIST): continue if not orgStructureId in self._mapFullOrgStructureNameToId.values( ): if orgStructureId: orgStructureFullName = getOrgStructureFullName( orgStructureId) else: orgStructureFullName = u' Не определено' self._mapFullOrgStructureNameToId[ orgStructureFullName] = orgStructureId personInfoDict = self._mapOrgStructureToInfo.setdefault( orgStructureId, {}) personInfoList = personInfoDict.get(personId, None) if personInfoList is None: personInfoHelper = {'clientIdList': [], 'eventIdList': []} personInfoList = [personCode, personName ] + [0] * 10 + [personInfoHelper] personInfoList[4] = self._getPersonPlan( personId, atcAmbulance, begDate, endDate) personInfoList[5] = self._getPersonPlan( personId, atcHome, begDate, endDate) personInfoDict[personId] = personInfoList personInfoHelper = personInfoList[-1] if not clientId in personInfoHelper['clientIdList']: personInfoList[2] += 1 personInfoHelper['clientIdList'].append(clientId) if not eventId in personInfoHelper['eventIdList']: personInfoList[3] += 1 personInfoHelper['eventIdList'].append(eventId) if sceneCode in AMB_SCENE_CODE_LIST: personInfoList[6] += 1 elif sceneCode in HOME_SCENE_CODE_LIST: personInfoList[7] += 1
def build(self, params): query = selectData(params) self.setQueryText(forceString(query.lastQuery())) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() u'''№ п/п - порядковый номер записи в таблице Код пациента - client.id ФИО пациента - Фамилия имя отчество полностью Дата рождения - дата рождения пациента Период лечения - event.setDate-event.execDate Врач — Код, имя полностью Подразделение -(отображается полное наименование от головного до конечного) Контроль - отображается наименование сработавшего контроля.''' tableColumns = [ (' 2%', [u'№'], CReportBase.AlignLeft), (' 8%', [u'Код пациента'], CReportBase.AlignLeft), ('15%', [u'ФИО'], CReportBase.AlignLeft), (' 10%', [u'Д/р'], CReportBase.AlignLeft), (' 2%', [u'Пол'], CReportBase.AlignLeft), ('10%', [u'Период лечения'], CReportBase.AlignLeft), ('15%', [u'Врач'], CReportBase.AlignLeft), ('20%', [u'Подразделение'], CReportBase.AlignLeft), ('20%', [u'Код и наименование услуги'], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) while query.next(): record = query.record() row = table.addRow() fields = (row, forceInt(record.value('clientId')), forceString(record.value('name')), forceString(record.value('birthDate')), forceString(record.value('sex')), forceString( forceDate(record.value('startDate')).toString( 'dd.MM.yyyy') + ' - ' + forceDate(record.value('finishDate')).toString( 'dd.MM.yyyy')), forceString(record.value('personName')), getOrgStructureFullName(record.value('orgId')), forceString(record.value('service'))) for col, val in enumerate(fields): table.setText(row, col, val) return doc
def build(self, params): query = selectData(params) self.setQueryText(forceString(query.lastQuery())) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() u'''№ п/п - порядковый номер записи в таблице Код - client.id Внешний идентификатор - внешний идентификатор истории болезни, при его отсутствии поле остается пустым ФИО пациента - Фамилия имя отчество полностью Дата рождения - дата рождения пациента Период лечения - event.setDate-event.execDate Подразделение - для ActionPoretyType.Name = 'Отделение пребывания' Врач - Event.execPerson_id - лечащий врач''' tableColumns = [ ('4%', [u'№ п/п'], CReportBase.AlignLeft), ('4%', [u'Код'], CReportBase.AlignLeft), ('8%', [u'Внешний идентификатор'], CReportBase.AlignLeft), ('15%', [u'ФИО пациента'], CReportBase.AlignLeft), ('8%', [u'Д/р'], CReportBase.AlignLeft), ('10%', [u'Период лечения'], CReportBase.AlignLeft), ('20%', [u'Подразделение'], CReportBase.AlignLeft), ('20%', [u'Врач'], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) while query.next(): record = query.record() row = table.addRow() fields = ( row, forceInt(record.value('clientId')), forceString(record.value('externalId')), forceString(record.value('clientName')), forceString(forceDate(record.value('birthDate')).toString('dd.MM.yyyy')), forceString(forceDate(record.value('setDate')).toString('dd.MM.yyyy') + ' - ' + forceDate(record.value('execDate')).toString('dd.MM.yyyy')), forceString(getOrgStructureFullName(record.value('orgStructureId'))), forceString((record.value('execPersonCode')).toString() + u' ' + (record.value('execPersonName')).toString()) ) for col, val in enumerate(fields): table.setText(row, col, val) return doc
def getFilterAsText(self): db = QtGui.qApp.db return convertFilterToString(self.filter, [ ('begDate', u'Дата оплаты с', forceString), ('endDate', u'Дата оплаты по', forceString), ('cashBox', u'Касса', forceString), ('cashKeeperId', u'Кассир', lambda id: forceString( db.translate('vrbPerson', 'id', id, 'name'))), ('cashOperationId', u'Кассовая операция', lambda id: forceString( db.translate('rbCashOperation', 'id', id, 'name'))), ('eventPurposeId', u'Назначение обращения', lambda id: forceString( db.translate('rbEventTypePurpose', 'id', id, 'name'))), ('eventTypeId', u'Тип обращения', lambda id: getEventName(id)), ('orgStructureId', u'Подразделение врача', lambda id: getOrgStructureFullName(id)), ('personId', u'Врач', lambda id: forceString( db.translate('vrbPersonWithSpeciality', 'id', id, 'name'))), ])
def detailByDepartment(reportTable, areaId, endDate, addressType, isDetailByAge, progressDialog=None): subAreaIdList = [] db = QtGui.qApp.db tableOrgStructure = db.table('OrgStructure') whereCond = [] if areaId: #Если указан отдельный участок или группа участков whereCond.append(tableOrgStructure['parent_id'].eq(areaId)) else: #Если в качестве участка указан весь ЛПУ whereCond.append(tableOrgStructure['parent_id'].isNull()) whereCond.append(tableOrgStructure['organisation_id'].eq( QtGui.qApp.currentOrgId())) subAreaIdList = db.getIdList(table=tableOrgStructure, where=whereCond) if subAreaIdList: for subAreaId in subAreaIdList: row = reportTable.addRow() reportTable.mergeCells(row, 0, 1, reportRowSize[0] + 3) charFormat = QtGui.QTextCharFormat() charFormat.setFontWeight(QtGui.QFont.Bold) subAreaName = getOrgStructureFullName(subAreaId) reportTable.setText(row, 0, subAreaName, charFormat=charFormat, blockFormat=CReportBase.AlignLeft) if progressDialog: progressDialog.setWindowTitle(u'Обработка %s' % subAreaName) progressDialog.step() QtGui.qApp.processEvents( QtCore.QEventLoop.ExcludeUserInputEvents) detailByDepartment(reportTable, subAreaId, endDate, addressType, isDetailByAge, progressDialog) else: insertDataInTable( reportTable, getData(areaId, endDate, addressType, isDetailByAge))
def getDescription(self, params): def dateRangeAsStr(begDate, endDate): result = '' if begDate: result += u' с ' + forceString(begDate) if endDate: result += u' по ' + forceString(endDate) return result begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) personId = params.get('personId', None) if params.get('cmbOrgStructure', False): lstOrgStructure = params.get('lstOrgStructure', None) orgStructureId = None else: lstOrgStructure = None orgStructureId = params.get('orgStructureId', None) rowGrouping = params.get('rowGrouping', None) reportDate = params.get('reportDate', None) rows = [] if begDate or endDate: rows.append(u'за период' + dateRangeAsStr(begDate, endDate)) if personId: personInfo = getPersonInfo(personId) rows.append(u'врач: ' + personInfo['shortName'] + ', ' + personInfo['specialityName']) if orgStructureId: rows.append(u'подразделение: ' + getOrgStructureFullName(orgStructureId)) if rowGrouping != None: rows.append( u'группировка: ' + [u'по подразделениям', u'по специальности', u'по врачам' ][rowGrouping]) if reportDate: rows.append(u'отчёт составлен: ' + forceString(reportDate)) else: rows.append(u'отчёт составлен: ' + forceString(QtCore.QDateTime.currentDateTime())) return rows
def build(self, params): query = selectData(params) self.setQueryText(forceString(query.lastQuery())) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [(' 2%', [u'№ п/п'], CReportBase.AlignLeft), (' 8%', [u'Код пациента'], CReportBase.AlignLeft), ('15%', [u'ФИО пациента'], CReportBase.AlignLeft), ('10%', [u'Д/р'], CReportBase.AlignLeft), ('10%', [u'Период лечения'], CReportBase.AlignLeft), ('15%', [u'Врач'], CReportBase.AlignLeft), ('20%', [u'Подразделение'], CReportBase.AlignLeft), ('10%', [u'Договор'], CReportBase.AlignLeft), ('10%', [u'Номер реестра'], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) while query.next(): record = query.record() row = table.addRow() fields = ( row, forceInt(record.value('clientId')), forceString(record.value('name')), forceString(record.value('birthDate')), forceString( forceDate(record.value('start')).toString('dd.MM.yyyy') + ' - ' + forceDate(record.value('finish')).toString('dd.MM.yyyy')), forceString(record.value('doctor')), getOrgStructureFullName(record.value('orgStructure')), forceString(record.value('contract')), forceString(record.value('accountNumber'))) for col, val in enumerate(fields): table.setText(row, col, val) return doc
def structInfo(self, query, params): while query.next(): record = query.record() actionId = forceRef(record.value('actionId')) orgStructureId = forceRef(record.value('orgStructureId')) amount = forceDouble(record.value('amount')) serviceType = forceInt(record.value('serviceType')) personId = forceRef(record.value('personId')) personCode = forceString(record.value('personCode')) personName = forceString(record.value('personName')) if personId else u' Врач не известен' office = forceString(record.value('office')) clientId = forceRef(record.value('clientId')) eventId = forceRef(record.value('eventId')) personDict = self._mapOrgStructure2PersonDict.setdefault(orgStructureId, {}) if not bool(personDict): orgStructureName = getOrgStructureFullName(orgStructureId) if orgStructureId else u' Не определено' self._mapOrgStructureName2Id[orgStructureName] = orgStructureId personLine = personDict.setdefault(personId, [personCode, personName]+[0]*16+[u'', 0]) dataPoint = 3 for c in [u'д', u'Д']: if c in office: dataPoint = 10 personLine[dataPoint+serviceType] += amount if serviceType in [CActionType.serviceTypeInitialInspection, CActionType.serviceTypeReinspection]: result = self._mapPersonId2InspectionCount.get(personId, 0) self._mapPersonId2InspectionCount[personId] = result+1 self._setPersonPlan(personId, params, personLine) self._setEventId(eventId, personId) result = self._mapOrgStructure2Norm.setdefault(orgStructureId, [0, []]) if not personId in result[1]: result[1].append(personId) result[0] += personLine[17] self._totalNorm += personLine[17]
def printOrgStructures(reportData): total = [0, 0] orgStructures = reportData.keys() orgStructures.sort() for orgStructure in orgStructures: i = table.addRow() table.setText(i, 0, getOrgStructureFullName(orgStructure) if orgStructure else u'Подразделение не определено', charFormat=boldChars, blockFormat=CReportBase.AlignLeft) table.mergeCells(i, 0, 1, 4) i = table.addRow() table.setText( i, 0, u'Номера реестров: ' + u', '.join(sorted(orgStructureAccounts[orgStructure]))) table.mergeCells(i, 0, 1, 4) totalByOrgStructure = printServices(reportData[orgStructure]) total = map(add, total, totalByOrgStructure) i = table.addRow() table.setText(i, 0, u'Итого по отделению:', charFormat=boldChars, blockFormat=CReportBase.AlignRight) table.mergeCells(i, 0, 1, 2) table.setText(i, 2, totalByOrgStructure[0], blockFormat=CReportBase.AlignRight) table.setText(i, 3, "%.2f" % (totalByOrgStructure[1]), blockFormat=CReportBase.AlignRight) return total
def getDescription(self, params): date = params.get('begDate', QtCore.QDate()) mode = params.get('mode', 0) orgStructureId = params.get('orgStructureId', None) times = u'' if mode == 0: times = u'00.00 - 23.59' elif mode == 1: times = u'07.00 - 15.00' elif mode == 2: times = u'15.00 - 07.00' elif mode == 3: times = u'07.00 - 07.00' rows = [] if date: rows.append(u'дата: ' + forceString(date)) if times: rows.append(u'временной отрезок: ' + times) if orgStructureId: rows.append(u'подразделение: ' + getOrgStructureFullName(orgStructureId)) return rows
def dumpParams(self, cursor, params, charFormat=QtGui.QTextCharFormat()): description = self.getDescription(params) query = self.getServiceParams(params) while query.next(): record = query.record() description.append( u'Подразделение: ' + getOrgStructureFullName(record.value('orgStructId'))) description.append(u'Услуга: ' + forceString(record.value('serviceName'))) columns = [('100%', [], CReportBase.AlignLeft)] table = createTable(cursor, columns, headerRowCount=len(description), border=0, cellPadding=2, cellSpacing=0) for i, row in enumerate(description): table.setText(i, 0, row, charFormat=charFormat) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock()
def build(self, params): group = params.get('groupOrgStructure') query = selectData(params) outputColumns = params.get('outputColumns') groupOrgStructure = params.get('chkGroupOrgStructure') query = selectData(params) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) self.setQueryText(forceString(query.lastQuery())) if groupOrgStructure: cursor.insertText(u'Группировка: по отделениям') cursor.insertBlock() tableColumns = [ (' 4%', [u'№ п/п'], CReportBase.AlignLeft), ('20%', [u'ФИО'], CReportBase.AlignLeft), ('10%', [u'Номер амб.карты'], CReportBase.AlignLeft), (' 8%', [u'Дата рождения'], CReportBase.AlignLeft), ('20%', [u'Врач'], CReportBase.AlignLeft), (' 8%', [u'МКБ'], CReportBase.AlignLeft), (' 8%', [u'Дата выполнения'], CReportBase.AlignLeft), ('10%', [u'Тип обращения'], CReportBase.AlignLeft), ('10%', [u'Район'], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) currentOrgStructureId = 0 orgStructureRow = 0 totalOrgStructure = 0 total = 0 count = 1 while query.next(): record = query.record() if currentOrgStructureId != record.value( 'orgStructureId') and group: row = table.addRow() currentOrgStructureId = record.value('orgStructureId') table.setText(row, 1, getOrgStructureFullName(currentOrgStructureId), CReportBase.TableTotal, CReportBase.AlignLeft) if orgStructureRow: table.setText( orgStructureRow, 5, u'Итого поподразделению: %s' % forceString(totalOrgStructure), CReportBase.TableTotal, CReportBase.AlignLeft) totalOrgStructure = 0 orgStructureRow = row table.mergeCells(row, 0, 1, 5) table.mergeCells(row, 5, 1, 4) row = table.addRow() fields = ( count, forceString(record.value('fullName')), forceString(record.value('clientId')), forceString( forceDate( record.value('birthDate')).toString('dd.MM.yyyy')), forceString(record.value('execPersonName')), forceString(record.value('MKB')), forceString( forceDate( record.value('execDate')).toString('dd.MM.yyyy')), forceString(record.value('eventType')), forceString(record.value('district')) if forceString( record.value('district')) else u'не указано', ) count += 1 totalOrgStructure += 1 total += 1 for col, val in enumerate(fields): table.setText(row, col, val) if orgStructureRow and group: table.setText( orgStructureRow, 5, u'Итого поподразделению: %s' % forceString(totalOrgStructure), CReportBase.TableTotal, CReportBase.AlignLeft) row = table.addRow() table.setText(row, 1, u'Итого: %s' % forceString(total), CReportBase.TableTotal, CReportBase.AlignLeft) table.mergeCells(row, 1, 1, 9) return doc
def getDescription(self, params): db = QtGui.qApp.db def dateRangeAsStr(begDate, endDate): result = '' if begDate: result += u' с ' + forceString(begDate) if endDate: result += u' по ' + forceString(endDate) return result def dateTimeRangeAsStr(begDate, begTime, endDate, endTime): result = '' if begDate: result += u' с ' if begTime: result += forceString(begTime) + u' ' result += forceString(begDate) if endDate: result += u' по ' if endTime: result += forceString(endTime) + u' ' result += forceString(endDate) return result begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) begTime = params.get('begTime', QtCore.QTime()) endTime = params.get('endTime', QtCore.QTime()) byPeriod = params.get('byPeriod', None) begDateReestr = params.get('begDateReestr', QtCore.QDate()) endDateReestr = params.get('endDateReestr', QtCore.QDate()) accountNumbersList = params.get('accountNumbersList', []) useInputDate = bool(params.get('useInputDate', False)) begInputDate = params.get('begInputDate', QtCore.QDate()) endInputDate = params.get('endInputDate', QtCore.QDate()) begDateBeforeRecord = params.get('begDateBeforeRecord', QtCore.QDate()) endDateBeforeRecord = params.get('endDateBeforeRecord', QtCore.QDate()) doctype = params.get('doctype', None) tempInvalidReason = params.get('tempInvalidReason', None) durationFrom = params.get('durationFrom', 0) durationTo = params.get('durationTo', 0) insuranceOfficeMark = params.get('insuranceOfficeMark', 0) sex = params.get('sex', 0) ageFrom = params.get('ageFrom', None) ageTo = params.get('ageTo', None) birthYearParam = params.get('birthYearParam', None) birthYearFrom = params.get('birthYearFrom', None) birthYearTo = params.get('birthYearTo', None) socStatusClassId = params.get('socStatusClassId', None) socStatusTypeId = params.get('socStatusTypeId', None) locationCardTypeId = params.get('locationCardTypeId', None) areaIdEnabled = params.get('areaIdEnabled', False) areaId = params.get('areaId', None) areaAddressType = getVal(params, 'areaAddressType', None) locality = params.get('locality', 0) onlyClosed = params.get('onlyClosed', None) MKBFilter = params.get('MKBFilter', 0) MKBFrom = params.get('MKBFrom', '') MKBTo = params.get('MKBTo', '') MKBExFilter = params.get('MKBExFilter', 0) MKBExFrom = params.get('MKBExFrom', '') MKBExTo = params.get('MKBExTo', '') stageId = params.get('stageId', None) eventPurposeId = params.get('eventPurposeId', None) eventTypeId = params.get('eventTypeId', None) eventTypes = params.get('eventTypes', None) if params.get('cmbOrgStructure', False): lstOrgStructure = params.get('lstOrgStructure', None) orgStructureId = None else: lstOrgStructure = None orgStructureId = params.get('orgStructureId', None) sceneId = params.get('sceneId', None) specialityId = params.get('specialityId', None) personId = params.get('personId', None) assistantId = params.get('assistantId', None) userProfileId = params.get('userProfileId', None) beforeRecordUserId = params.get('beforeRecordUserId', None) onlyPermanentAttach = params.get('onlyPermanentAttach', False) onlyPayedEvents = params.get('onlyPayedEvents', None) characterClass = params.get('characterClass', 0) onlyFirstTime = params.get('onlyFirstTime', None) registeredInPeriod = params.get('registeredInPeriod', None) notNullTraumaType = params.get('notNullTraumaType', None) accountAccomp = params.get('accountAccomp', None) busyness = params.get('busyness', 0) workOrgId = params.get('workOrgId', None) typeFinanceId = params.get('typeFinanceId', None) tariff = params.get('tariff', None) visitPayStatus = params.get('visitPayStatus', None) groupingRows = params.get('groupingRows', None) rowGrouping = params.get('rowGrouping', None) advancedRowGrouping = params.get('advancedRowGrouping', None) insurerId = params.get('insurerId', None) contractIdList = params.get('contractIdList', None) accountIdList = params.get('accountIdList', None) actionTypeClass = params.get('actionTypeClass', None) actionTypeId = params.get('actionTypeId', None) actionTypeCode = params.get('queueType', None) permanentAttach = params.get('PermanentAttach', None) deathPlace = params.get('deathPlace', '') deathCause = params.get('deathCause', '') deathFoundBy = params.get('deathFoundBy', '') deathFoundation = params.get('deathFoundation', '') reportDate = params.get('reportDate') confirmEISDate = params.get('confirmEISDate') detailServiceTypes = params.get('detailServiceTypes', None) serviceTypes = params.get('serviceTypes', None) profileBedId = params.get('profileBedId', None) rows = [] if begDate or endDate: rows.append(u'за период' + dateTimeRangeAsStr(begDate, begTime, endDate, endTime)) if begDateReestr or endDateReestr: rows.append(u'По реестрам персональных счетов с расчетной датой:' + dateRangeAsStr(begDateReestr, endDateReestr)) if begDateBeforeRecord or endDateBeforeRecord: rows.append( u'период предварительной записи' + dateRangeAsStr(begDateBeforeRecord, endDateBeforeRecord)) if useInputDate and (begInputDate or endInputDate): rows.append(u'дата ввода в период' + dateRangeAsStr(begInputDate, endInputDate)) if byPeriod is not None: if byPeriod: rows.append(u'отчёт по периоду случая') else: rows.append(u'отчёт по окончанию случая') if eventPurposeId: rows.append(u'Цель обращения: ' + forceString( db.translate('rbEventTypePurpose', 'id', eventPurposeId, 'name'))) if eventTypeId: rows.append(u'тип обращения: ' + getEventTypeName(eventTypeId)) if eventTypes: rows.append(u'тип обращения: ' + ', '.join([getEventTypeName(x) for x in eventTypes])) if sceneId: rows.append( u'Место: ' + forceString(db.translate('rbScene', 'id', sceneId, 'name'))) if orgStructureId: if isinstance(orgStructureId, list): rows.append(u'подразделение: ' + getOrgStructureFullName(orgStructureId[0])) else: rows.append(u'подразделение: ' + getOrgStructureFullName(orgStructureId)) elif lstOrgStructure: rows.append(u'подразделения: ' + ', '.join([ forceString(orgStructure) for orgStructure in lstOrgStructure.itervalues() ])) if specialityId: rows.append(u'специальность: ' + forceString( db.translate('rbSpeciality', 'id', specialityId, 'name'))) if personId: personInfo = getPersonInfo(personId) rows.append(u'врач: ' + personInfo['shortName'] + ', ' + personInfo['specialityName']) if assistantId: personInfo = getPersonInfo(assistantId) rows.append(u'ассистент: ' + personInfo['shortName'] + ', ' + personInfo['specialityName']) if userProfileId: rows.append(u'профиль прав пользователя: ' + forceString( db.translate('rbUserProfile', 'id', userProfileId, 'name'))) if beforeRecordUserId: personInfo = getPersonInfo(beforeRecordUserId) rows.append(u'пользователь: ' + personInfo['shortName'] + ', ' + personInfo['specialityName']) if doctype != None: rows.append(u'тип документа: ' + forceString( db.translate('rbTempInvalidDocument', 'id', doctype, 'name'))) if tempInvalidReason != None: rows.append(u'причина нетрудоспособности: ' + forceString( db.translate('rbTempInvalidReason', 'id', tempInvalidReason, 'name'))) if durationTo: rows.append(u'длительность нетрудоспособности: c %d по %d дней' % (durationFrom, durationTo)) if insuranceOfficeMark in (1, 2): rows.append([ u'без отметки страхового стола', u'с отметкой страхового стола' ][insuranceOfficeMark - 1]) if sex: rows.append(u'пол: ' + formatSex(sex)) if not birthYearParam and ageFrom != None and ageTo != None and ageFrom <= ageTo: rows.append(u'возраст: c %d по %d %s' % (ageFrom, ageTo, agreeNumberAndWord(ageTo, (u'год', u'года', u'лет')))) if birthYearParam and birthYearFrom != None and birthYearTo != None and birthYearFrom <= birthYearTo: rows.append(u'год рождения: c %d по %d ' % (birthYearFrom, birthYearTo)) if socStatusTypeId: rows.append(u'Тип соц.статуса:' + forceString( db.translate('vrbSocStatusType', 'id', socStatusTypeId, 'name'))) elif socStatusClassId: rows.append(u'Класс соц.статуса:' + forceString( db.translate('rbSocStatusClass', 'id', socStatusClassId, 'name'))) if locationCardTypeId: rows.append(u'Место нахождение амбулаторной карты: ' + forceString( db.translate('rbLocationCardType', 'id', locationCardTypeId, 'name'))) if areaIdEnabled: rows.append(u'проживает на территории: ' + ( getOrgStructureFullName(areaId) if areaId else u'ЛПУ')) if areaAddressType != None: rows.append(u'адрес ' + (u'проживания', u'регистрации')[areaAddressType]) if locality: rows.append(u'%s жители' % ((u'городские', u'сельские')[locality - 1])) if insurerId: rows.append(u'СМО: ' + forceString( db.translate('Organisation', 'id', insurerId, 'shortName'))) if onlyClosed: rows.append(u'только закрытые') if MKBFilter == 1: rows.append(u'код МКБ с "%s" по "%s"' % (MKBFrom, MKBTo)) elif MKBFilter == 2: rows.append(u'код МКБ пуст') if MKBExFilter == 1: rows.append(u'доп.код МКБ с "%s" по "%s"' % (MKBExFrom, MKBExTo)) elif MKBExFilter == 2: rows.append(u'доп.код МКБ пуст') if characterClass: rows.append(u'характер заболевания:' + [ u'Любой', u'Острый', u'Хронический', u'Острый или хронический', u'Фактор', u'исправь меня' ][characterClass if 0 <= characterClass < 5 else -1]) if stageId: rows.append(u'стадия заболевания:' + forceString( db.translate('rbDiseaseStage', 'id', stageId, 'name'))) if onlyFirstTime: rows.append(u'зарегистрированные в период впервые') if registeredInPeriod: rows.append(u'зарегистрированные в период') if notNullTraumaType: rows.append(u'тип травмы указан') if accountAccomp: rows.append(u'учитывать сопутствующие') if onlyPermanentAttach: rows.append(u'имеющие постоянное прикрепление') if contractIdList: if len(contractIdList) == 1: rows.append(u'по договору № ' + getContractName(contractIdList[0])) else: contractPath = params.get('contractPath', None) if contractPath: rows.append(u'По договорам: %s' % contractPath) else: rows.append(u'по договорам №№ ' + formatList([ getContractName(contractId) for contractId in contractIdList ])) if accountIdList: if len(accountIdList) == 1: rows.append(u'по счёту № ' + getAccountName(accountIdList[0])) else: rows.append(u'по счетам №№ ' + formatList( [getAccountName(accountId) for accountId in accountIdList])) if accountNumbersList: rows.append(u'Номера реестров счетов: ' + formatList(accountNumbersList)) if onlyPayedEvents: rows.append(u'только оплаченные обращения') if self.payPeriodVisible: begPayDate = getVal(params, 'begPayDate', None) endPayDate = getVal(params, 'endPayDate', None) row = '' if begPayDate and not begPayDate.isNull(): row = row + u' с ' + forceString(begPayDate) if endPayDate and not endPayDate.isNull(): row = row + u' по ' + forceString(endPayDate) if row: rows.append(u'в период' + row) if self.workTypeVisible: workType = getVal(params, 'workType', 0) if 0 < workType < len(OKVEDList.rows): descr = OKVEDList.rows[workType] name = descr[0] code = descr[2] else: name = u'Любой' code = '' row = u'Вид деятельности: ' + name if code: row = row + u', код по ОКВЭД: ' + code rows.append(row) if self.ownershipVisible: ownership = getVal(params, 'ownership', 0) row = u'Собственность: ' + [ u'Любая', u'Бюджетная', u'Частная', u'Cмешанная' ][min(ownership, 3)] rows.append(row) if busyness == 1: rows.append(u'занятость указана') elif busyness == 2: rows.append(u'занятость не указана') if workOrgId: rows.append(u'занятость: ' + getOrganisationShortName(workOrgId)) if actionTypeClass is not None: actionTypeClassName = { 0: u'статус', 1: u'диагностика', 2: u'лечение', 3: u'прочие мероприятия' }.get(actionTypeClass, u'') rows.append(u'класс мероприятий: ' + actionTypeClassName) if actionTypeId: actionTypeName = forceString( db.translate('ActionType', 'id', actionTypeId, 'name')) rows.append(u'мероприятие: ' + actionTypeName) if actionTypeCode == 0: rows.append(u'мероприятие: Прием') elif actionTypeCode == 1: rows.append(u'мероприятие: Вызовы') if permanentAttach and permanentAttach > 0: lpu = forceString( db.translate('Organisation', 'id', permanentAttach, 'shortName')) rows.append(u'прикрепление: ' + lpu) if deathPlace: rows.append(u'смерть последовала: ' + deathPlace) if deathCause: rows.append(u'смерть произошла: ' + deathCause) if deathFoundBy: rows.append(u'причина смерти установлена: ' + deathFoundBy) if deathFoundation: rows.append(u'основание установления причины смерти: ' + deathFoundation) if typeFinanceId != None: rows.append(u'тип финансирования: ' + forceString( db.translate('rbFinance', 'id', typeFinanceId, 'name'))) if tariff != None: rows.append( u'тарификация: ' + [u'не учитывать', u'тарифицированные', u'не тарифицированные' ][tariff]) if visitPayStatus != None: rows.append(u'флаг финансирования: ' + [ u'не задано', u'не выставлено', u'выставлено', u'отказано', u'оплачено' ][visitPayStatus]) if groupingRows != None: rows.append( u'группировка: ' + [u'по специальности', u'по должности', u'по отделению' ][groupingRows]) if rowGrouping != None: rows.append(u'группировка: ' + [ u'по датам', u'по врачам', u'по подразделениям', u'по специальности', u'по должности', u'по пациентам' ][rowGrouping]) if advancedRowGrouping != None: rows.append(u'группировка: ' + [ u'по датам', u'по персоналу', u'по подразделениям', u'по специальности', u'по должности', u'по врачам', u'по мед.сестрам' ][advancedRowGrouping]) if confirmEISDate: rows.append(u'дата подтверждения ЕИС: ' + forceString(confirmEISDate)) if self.additionalDescription: rows.append(self.additionalDescription) if reportDate: rows.append(u'отчёт составлен: ' + forceString(reportDate)) else: rows.append(u'отчёт составлен: ' + forceString(QtCore.QDateTime.currentDateTime())) if detailServiceTypes and serviceTypes: rows.append(u'Типы услуг: ' + u', '.join( map(lambda x: serviceTypeNames[x + 1], serviceTypes))) if profileBedId: rows.append(u'профиль койки: %s' % (forceString( QtGui.qApp.db.translate('rbHospitalBedProfile', 'id', profileBedId, 'name')))) """ if profileDayStatId: #rows.append(u'профиль ДС: %s' % ( #forceString(QtGui.qApp.db.translate('rbEventProfile', 'id', profileDayStatId, 'name')))) rows.append( u'Профиль ДС: ' + forceString( [u'Дневной стационар', u'Стационар дневного пребывание'][profileDayStatId])) """ return rows
def build(self, params): areaId = params.get('areaId', None) endDate = params.get('endDate', QtCore.QDate()) addressType = params.get('addressType', 0) isDetailByDepartment = params.get('detailByDepartment', False) isDetailByAge = params.get('detailByAge', False) rowNumber = [1] employableColBases = { 19: 10, 24: 12, 29: 14, 34: 16, 39: 18, 44: 20, 49: 22, 54: 24, 59: 26, 64: 28, 69: 30, 74: 32, 79: 34 } #Количество столбцов с данными (за исключением столбцов "Категория населения", "№": 10 на детские возраста, 28 или 4 на взрослые и 1 на поле "Всего") reportRowSize = [39 if isDetailByAge else 15] def insertDataInTable(reportTable, reportData, charFormat=None): for rowIndex, rowName in enumerate( [u'ИТОГО', u'работающие', u'неработающие']): i = reportTable.addRow() reportTable.setText(i, 0, rowName, charFormat=charFormat) reportTable.setText(i, 1, rowNumber[0], charFormat=charFormat) rowNumber[0] += 1 for j in xrange(len(reportData[rowIndex])): reportTable.setText(i, 2 + j, reportData[rowIndex][j], charFormat=charFormat) #end insertDataInTable def getData(areaId, endDate, addressType, isDetailByAge=False): if areaId: areaIdList = getOrgStructureDescendants(areaId) else: areaIdList = getOrgStructures(QtGui.qApp.currentOrgId()) query = selectData(endDate, areaIdList, addressType) reportData = [[0] * reportRowSize[0] for row in xrange(3)] self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() cnt = forceInt(record.value('cnt')) age = forceInt(record.value('clientAge')) sex = forceInt(record.value('clientSex')) busy = forceBool(record.value('busy')) if age < 1: colBase = 0 elif age == 1: colBase = 2 elif age <= 6: colBase = 4 elif age <= 14: colBase = 6 elif age <= 17: colBase = 8 else: if isDetailByAge: minAgeHigh = 150 colBase = 36 for ageHigh in employableColBases.keys(): if age <= ageHigh and ageHigh < minAgeHigh: minAgeHigh = ageHigh colBase = employableColBases[ageHigh] else: if (sex == 1 and age < 60) or (sex != 1 and age < 55): colBase = 10 else: colBase = 12 cols = [colBase + (0 if sex == 1 else 1), reportRowSize[0] - 1] rows = [0, 1 if busy else 2] if cols[0] < 0 or cols[0] > reportRowSize[0] - 1: print cols[0] for row in rows: for col in cols: reportData[row][col] += cnt return reportData #end getData def detailByDepartment(reportTable, areaId, endDate, addressType, isDetailByAge, progressDialog=None): subAreaIdList = [] db = QtGui.qApp.db tableOrgStructure = db.table('OrgStructure') whereCond = [] if areaId: #Если указан отдельный участок или группа участков whereCond.append(tableOrgStructure['parent_id'].eq(areaId)) else: #Если в качестве участка указан весь ЛПУ whereCond.append(tableOrgStructure['parent_id'].isNull()) whereCond.append(tableOrgStructure['organisation_id'].eq( QtGui.qApp.currentOrgId())) subAreaIdList = db.getIdList(table=tableOrgStructure, where=whereCond) if subAreaIdList: for subAreaId in subAreaIdList: row = reportTable.addRow() reportTable.mergeCells(row, 0, 1, reportRowSize[0] + 3) charFormat = QtGui.QTextCharFormat() charFormat.setFontWeight(QtGui.QFont.Bold) subAreaName = getOrgStructureFullName(subAreaId) reportTable.setText(row, 0, subAreaName, charFormat=charFormat, blockFormat=CReportBase.AlignLeft) if progressDialog: progressDialog.setWindowTitle(u'Обработка %s' % subAreaName) progressDialog.step() QtGui.qApp.processEvents( QtCore.QEventLoop.ExcludeUserInputEvents) detailByDepartment(reportTable, subAreaId, endDate, addressType, isDetailByAge, progressDialog) else: insertDataInTable( reportTable, getData(areaId, endDate, addressType, isDetailByAge)) #end detailByDepartment # now text doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [ ('15?', [u'Категории населения', u''], CReportBase.AlignLeft), ('5?', [u'№ стр.', u''], CReportBase.AlignRight), ('5?', [ u'Численность прикреплённого населения по возрастному составу', u'дети', u'', u'до 1 года', u'М' ], CReportBase.AlignRight), ('5?', [u'', u'', u'', u'', u'Ж'], CReportBase.AlignRight), ('5?', [u'', u'', u'', u'1 год', u'М'], CReportBase.AlignRight), ('5?', [u'', u'', u'', u'', u'Ж'], CReportBase.AlignRight), ('5?', [u'', u'', u'', u'2-6 лет', u'М'], CReportBase.AlignRight), ('5?', [u'', u'', u'', u'', u'Ж'], CReportBase.AlignRight), ('5?', [u'', u'', u'', u'7-14 лет', u'М'], CReportBase.AlignRight), ('5?', [u'', u'', u'', u'', u'Ж'], CReportBase.AlignRight), ('5?', [u'', u'', u'', u'15-17 лет', u'М'], CReportBase.AlignRight), ('5?', [u'', u'', u'', u'', u'Ж'], CReportBase.AlignRight) ] if isDetailByAge: ageHighKeys = employableColBases.keys() ageHighKeys.sort() for ageHigh in ageHighKeys: index = ageHighKeys.index(ageHigh) if index <= 0: startAge = '18' else: startAge = '%d' % (ageHighKeys[index - 1] + 1) ageRangeText = u'%s - %d лет' % (startAge, ageHigh) ageState = u'взрослые' if ageHigh == 19 else u'' employableState = u'трудосп. возраста' if ageHigh == 59 else u'' tableColumns.append( ('5?', [u'', ageState, employableState, ageRangeText, u'М'], CReportBase.AlignRight)) employableState = u'нетрудосп. возраста' if ageHigh == 59 else u'' tableColumns.append( ('5?', [u'', u'', employableState, u'', u'Ж'], CReportBase.AlignRight)) tableColumns.append(('5?', [u'', u'', u'', u'80 и ст.', u'М'], CReportBase.AlignRight)) tableColumns.append(('5?', [u'', u'', u'', u'', u'Ж'], CReportBase.AlignRight)) else: tableColumns.append( ('5?', [u'', u'взрослые', u'трудосп. возраста', u'18-59 лет', u'М'], CReportBase.AlignRight)) tableColumns.append(('5?', [u'', u'', u'', u'18-54 лет', u'Ж'], CReportBase.AlignRight)) tableColumns.append( ('5?', [u'', u'', u'нетрудосп. возраста', u'60 и ст.', u'М'], CReportBase.AlignRight)) tableColumns.append(('5?', [u'', u'', u'', u'55 и ст.', u'Ж'], CReportBase.AlignRight)) tableColumns.append(('5?', [ u'Всего', ], CReportBase.AlignRight)) table = createTable(cursor, tableColumns) table.mergeCells(0, 0, 4, 1) # Категории населения table.mergeCells(0, 1, 4, 1) # № стр. table.mergeCells(0, 2, 1, reportRowSize[0] - 1) # Численность... table.mergeCells(1, 2, 2, 10) # дети table.mergeCells(3, 2, 1, 2) # <1 table.mergeCells(3, 4, 1, 2) # 1 table.mergeCells(3, 6, 1, 2) # 2-6 table.mergeCells(3, 8, 1, 2) # 7-14 table.mergeCells(3, 10, 1, 2) # 15-17 if isDetailByAge: for i in xrange(27): table.mergeCells(3, 12 + i * 2, 1, 2) table.mergeCells(3, 12 + i * 2 + 1, 1, 2) table.mergeCells(1, 12, 1, 28) # взрослые table.mergeCells(2, 12, 1, 17) # тр. table.mergeCells(2, 29, 1, 11) # нетр. table.mergeCells(0, 40, 4, 1) # всего else: table.mergeCells(1, 12, 1, 4) # взрослые table.mergeCells(2, 12, 1, 2) # тр. table.mergeCells(2, 14, 1, 2) # нетр. table.mergeCells(0, 16, 4, 1) # всего reportData = getData(areaId, endDate, addressType, isDetailByAge) charFormat = None if isDetailByDepartment: if areaId: areaIdList = getOrgStructureDescendants(areaId) else: areaIdList = getOrgStructures(QtGui.qApp.currentOrgId()) progressBar = CProgressBar( ) #QtGui.QProgressDialog(u'Обработка данных по участкам', 'Отмена', 0, len(areaIdList)) progressBar.setMinimum(0) progressBar.setMaximum(len(areaIdList)) parentCenter = QtGui.QDesktopWidget().availableGeometry().center() progressBar.setWindowFlags(progressBar.windowFlags() | QtCore.Qt.WindowCloseButtonHint) progressBar.setGeometry(parentCenter.x() - 250, parentCenter.y() - 40, 500, 80) progressBar.setText('%v/%m') progressBar.show() QtGui.qApp.processEvents(QtCore.QEventLoop.ExcludeUserInputEvents) detailByDepartment(table, areaId, endDate, addressType, isDetailByAge, progressBar) progressBar.hide() charFormat = QtGui.QTextCharFormat() charFormat.setFontWeight(QtGui.QFont.Bold) row = table.addRow() table.mergeCells(row, 0, 1, reportRowSize[0] + 3) table.setText(row, 0, getOrgStructureFullName(areaId), charFormat=charFormat, blockFormat=CReportBase.AlignLeft) insertDataInTable(table, reportData, charFormat=charFormat) return doc
def makeStruct(self, query): # print query.size() while query.next(): record = query.record() clientId = forceRef(record.value('clientId')) fio = formatName(record.value('lastName'), record.value('firstName'), record.value('patrName')) eventId = forceRef(record.value('eventId')) clientAddress = forceString(record.value('clientAddress')) KLADRCode = forceString(record.value('KLADRCode')) mkb = forceString(record.value('MKB')) financeType = forceString(record.value('financeType')) orgStructureId = forceRef(record.value('orgStructureId')) medicalHistory = forceString(record.value('medicalHistory')) ambCard = forceString(record.value('ambCard')) medicalAidTypeCode = forceString( record.value('medicalAidTypeCode')) eventSetDate = forceDate(record.value('eventSetDate')) eventExecDate = forceDate(record.value('eventExecDate')) quotaTypeCode = forceString(record.value('quotaTypeCode')) needDateForReport = forceString(record.value('needDateForReport')) if eventExecDate.isValid(): if eventExecDate > QtCore.QDate.currentDate(): topDate = QtCore.QDate.currentDate() else: topDate = eventExecDate else: topDate = QtCore.QDate.currentDate() dCount = eventSetDate.daysTo(topDate) if medicalAidTypeCode in ['1', '2', '3']: if dCount == 0: dCount = 1 else: dCount += 1 if (clientId, eventId) in self._existEventClients: continue self._existEventClients.append((clientId, eventId)) fullOrgStructureName = self._orgStructureIdToFullName.get( orgStructureId, None) if not fullOrgStructureName: if not orgStructureId: fullOrgStructureName = u'Подразделение не определено' else: fullOrgStructureName = getOrgStructureFullName( orgStructureId) self._orgStructureIdToFullName[ orgStructureId] = fullOrgStructureName key = (orgStructureId, fullOrgStructureName) orgStructureValueList = self._mapOrgStructureToClientValues.setdefault( key, []) orgStructureValue = [ clientId, ambCard, fio, medicalHistory, KLADRCode + ', ' + clientAddress, mkb, quotaTypeCode, financeType, needDateForReport, dCount ] orgStructureValueList.append(orgStructureValue)
def build(self, params): begDate = getVal(params, 'begDate', QtCore.QDate()) endDate = getVal(params, 'endDate', QtCore.QDate()) eventTypeId = getVal(params, 'eventTypeId', None) sex = params.get('sex', 0) ageFrom = params.get('ageFrom', 0) ageTo = params.get('ageTo', 150) actionTypeClass = params.get('actionTypeClass', None) actionTypeId = params.get('actionTypeId', None) onlyPermanentAttach = params.get('onlyPermanentAttach', None) MKBFilter = params.get('MKBFilter', 0) MKBFrom = params.get('MKBFrom', '') MKBTo = params.get('MKBTo', '') onlyPayedEvents = params.get('onlyPayedEvents', False) begPayDate = params.get('begPayDate', QtCore.QDate()) endPayDate = params.get('endPayDate', QtCore.QDate()) detailPerson = params.get('detailPerson', False) personId = params.get('personId', None) specialityId = params.get('specialityId', None) orgStructureId = params.get('orgStructureId', None) insurerId = params.get('insurerId', None) condFinanceId = params.get('financeId', None) condFinanceCode = params.get('financeCode', '0') query = selectData(begDate, endDate, eventTypeId, sex, ageFrom, ageTo, actionTypeClass, actionTypeId, onlyPermanentAttach, MKBFilter, MKBFrom, MKBTo, onlyPayedEvents, begPayDate, endPayDate, detailPerson, personId, specialityId, orgStructureId, insurerId) reportData = {} mapOrgStructureToFullName = {} origActionIdList = [] self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() actionId = forceRef(record.value('actionId')) if actionId in origActionIdList: continue origActionIdList.append(actionId) orgStructureId = forceString(record.value('orgStructureId')) financeId = forceRef(record.value('finance_id')) actionPayStatus = forceInt(record.value('actionPayStatus')) eventPayStatus = forceInt(record.value('eventPayStatus')) actionTypeCode = forceString(record.value('actionTypeCode')) actionTypeName = forceString(record.value('actionTypeName')) serviceCode = forceString(record.value('serviceCode')) amount = forceInt(record.value('actionAmount')) uetDoctor = forceDouble(record.value('uetDoctor')) uetAverageMedWorker = forceDouble(record.value('uetAverageMedWorker')) personName = formatName(record.value('personLastName'), record.value('personFirstName'), record.value('personPatrName')) specialityName = forceString(record.value('specialityName')) if condFinanceId: if financeId: if condFinanceId != financeId: continue else: payStatus = actionPayStatus if actionPayStatus else eventPayStatus if not payStatusCheck(payStatus, forceInt(condFinanceCode)): continue if specialityName: personName = personName + ' | ' + specialityName orgStructureName = mapOrgStructureToFullName.get(orgStructureId, None) if not orgStructureName: orgStructureName = getOrgStructureFullName(orgStructureId) mapOrgStructureToFullName[orgStructureId] = orgStructureName if not orgStructureName: continue existsData = reportData.get(orgStructureName, None) if detailPerson: if not existsData: existsData = {} personData = {} actionAmount = 1 personData[(actionTypeName, actionTypeCode, serviceCode)] = [actionAmount, amount, amount*uetDoctor, uetAverageMedWorker*amount] existsData[personName] = personData reportData[orgStructureName] = existsData else: personData = existsData.get(personName, None) if not personData: personData = {} actionAmount = 1 personData[(actionTypeName, actionTypeCode, serviceCode)] = [actionAmount, amount, amount*uetDoctor, uetAverageMedWorker*amount] existsData[personName] = personData else: existsValue = personData.get((actionTypeName, actionTypeCode, serviceCode), None) if not existsValue: actionAmount = 1 personData[(actionTypeName, actionTypeCode, serviceCode)] = [actionAmount, amount, amount*uetDoctor, uetAverageMedWorker*amount] existsData[personName] = personData else: existsValue[0] += 1 existsValue[1] += amount existsValue[2] += uetDoctor*amount existsValue[3] += uetAverageMedWorker*amount personData[(actionTypeName, actionTypeCode, serviceCode)] = existsValue existsData[personName] = personData reportData[orgStructureName] = existsData else: if not existsData: existsData = {} actionAmount = 1 existsData[(actionTypeName, actionTypeCode, serviceCode)] = [actionAmount, amount, amount*uetDoctor, uetAverageMedWorker*amount] reportData[orgStructureName] = existsData else: existsValue = existsData.get((actionTypeName, actionTypeCode, serviceCode), None) if not existsValue: actionAmount = 1 existsData[(actionTypeName, actionTypeCode, serviceCode)] = [actionAmount, amount, amount*uetDoctor, amount*uetAverageMedWorker] else: existsValue[0] += 1 existsValue[1] += amount existsValue[2] += uetDoctor*amount existsValue[3] += uetAverageMedWorker*amount existsData[(actionTypeName, actionTypeCode, serviceCode)] = existsValue reportData[orgStructureName] = existsData doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [ ( '6%', [u'№ п/п'], CReportBase.AlignRight), ( '25%', [u'Наименование типа действия'], CReportBase.AlignLeft), ( '13%', [u'Код типа действия'], CReportBase.AlignLeft), ( '13%', [u'Код профиля'], CReportBase.AlignLeft), ( '10%', [u'Количество действий'], CReportBase.AlignRight), ( '10%', [u'Количество'], CReportBase.AlignRight), ( '10%', [u'УЕТ врача'], CReportBase.AlignRight), ( '13%', [u'УЕТ ср.мед.персонала'], CReportBase.AlignRight) ] table = createTable(cursor, tableColumns) headerCount = 0 headerList = [] if detailPerson: orgStructureList = reportData.keys() orgStructureList.sort() resume = [0, 0, 0, 0] for orgStructure in orgStructureList: orgStructureResult = [0, 0, 0, 0] i = table.addRow() currentOrgStructureRow = i table.setText(i, 1, orgStructure) headerList.append(i) headerCount += 1 persons = reportData.get(orgStructure, {}) personsKeys = persons.keys() personsKeys.sort() for personKey in personsKeys: personResult = [0, 0, 0, 0] i = table.addRow() currentPersonRow = i table.setText(i, 1, personKey) headerList.append(i) headerCount += 1 existsData = persons.get(personKey, {}) existsDataKeys = existsData.keys() existsDataKeys.sort() for existsDataKey in existsDataKeys: i = table.addRow() table.setText(i, 0, i-headerCount) column = 1 for key in existsDataKey: table.setText(i, column, key) column += 1 values = existsData.get(existsDataKey) for value in values: orgStructureResult[column-4] += value personResult[column-4] += value resume[column-4] += value table.setText(i, column, value) column += 1 for column, val in enumerate(personResult): table.setText(currentPersonRow, column+4, val) for column, val in enumerate(orgStructureResult): table.setText(currentOrgStructureRow, column+4, val) for headerRow in headerList: table.mergeCells(headerRow, 0, 1, 3) else: orgStructureList = reportData.keys() orgStructureList.sort() resume = [0, 0, 0, 0] for orgStructure in orgStructureList: orgStructureResult = [0, 0, 0, 0] i = table.addRow() currentOrgStructureRow = i table.setText(i, 1, orgStructure) headerList.append(i) headerCount += 1 existsData = reportData.get(orgStructure, {}) existsDataKeys = existsData.keys() existsDataKeys.sort() for existsDataKey in existsDataKeys: i = table.addRow() table.setText(i, 0, i-headerCount) column = 1 for key in existsDataKey: table.setText(i, column, key) column += 1 values = existsData.get(existsDataKey) for value in values: orgStructureResult[column-4] += value resume[column-4] += value table.setText(i, column, value) column += 1 for column, val in enumerate(orgStructureResult): table.setText(currentOrgStructureRow, column+4, val) for headerRow in headerList: table.mergeCells(headerRow, 0, 1, 3) i = table.addRow() table.setText(i, 1, u'Итого') for column, val in enumerate(resume): table.setText(i, column+4, val) return doc
def makeStructAction(self, query, params): # chkAllOrgStructure:: если True - при структурировании по подразделениям к которым относится действие, # действие может относится ко многим подразделениям, а если False мы учитываем только первое. chkAllOrgStructure = params.get('chkAllOrgStructure', False) chkPatientInfo = params.get('chkPatientInfo', False) chkOrgStructure = params.get('chkOrgStructure', False) chkPerson = params.get('chkPerson', False) detailServiceTypes = params.get('detailServiceTypes', False) strongOrgStructureId = params.get('orgStructureId', None) enterPost = params.get('enterPost', False) existsOrgStructureActions = [] while query.next(): record = query.record() modifyDatetime = forceDate(record.value('modifyDatetime')) endDate = forceDate(record.value('endDate')) actionId = forceRef(record.value('id')) actionTypeCode = forceString(record.value('code')) actionTypeName = forceString(record.value('name')) amount = forceInt(record.value('amount')) orgStructureId = forceRef(record.value('orgStructureId')) # orgStructureName = forceString(record.value('orgStructureName')) price = forceDouble(record.value('price')) if chkAllOrgStructure: if (orgStructureId, actionId) in existsOrgStructureActions: continue existsOrgStructureActions.append((orgStructureId, actionId)) else: if actionId in existsOrgStructureActions: continue existsOrgStructureActions.append(actionId) result, orgStructureId = self.orgStructureFilterByParams( chkOrgStructure, strongOrgStructureId, orgStructureId) if not result: continue fullOrgStructureName = self._mapOrgStructureIdToFullName.get( orgStructureId, None) if not fullOrgStructureName: if not orgStructureId: if chkOrgStructure: fullOrgStructureName = u'Головное подразделение' else: fullOrgStructureName = u'Подразделение не определено' else: fullOrgStructureName = getOrgStructureFullName( orgStructureId) self._mapOrgStructureIdToFullName[ orgStructureId] = fullOrgStructureName actionValues = smartDict() actionValues.actionId = actionId actionValues.orgStructureId = orgStructureId actionValues.number = 0 values = [actionTypeCode, actionTypeName, amount, price * amount] if chkPatientInfo: clientName = formatName(record.value('lastName'), record.value('firstName'), record.value('patrName')) clientId = forceRef(record.value('clientId')) actionMKB = forceString(record.value('actionMKB')) endDate = endDate if endDate.isValid() else modifyDatetime values.insert(2, actionMKB) values.insert(2, clientName) values.insert(0, forceString(endDate)) if chkPerson: personName = forceString(record.value('personName')) personId = forceString(record.value('personId')) self._mapPersonIdToName[personId] = personName if enterPost: personPost = forceString(record.value('personPost')) self._mapPersonIdToName[personId] = {} self._mapPersonIdToName[personId]['name'] = personName self._mapPersonIdToName[personId]['post'] = personPost if detailServiceTypes: serviceType = forceInt(record.value('serviceType')) actionValues.values = values orgStructureDict = self._mapRowValues.setdefault( orgStructureId, {}) personDict = orgStructureDict.setdefault( personId if chkPerson else None, {}) serviceTypeDict = personDict.setdefault( serviceType if detailServiceTypes else None, {}) clientDict = serviceTypeDict.setdefault( clientId if chkPatientInfo else None, {}) existActionValues = clientDict.setdefault( (actionTypeCode, actionTypeName), actionValues) if existActionValues != actionValues: existActionValues.values[-2] += actionValues.values[-2] existActionValues.values[-1] += actionValues.values[-1] # set numbers within each orgStructure unit self.fillOrgStructureRows()
def build(self, params): doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText( u'Проверка результатов лечения и обращения в событии') cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [ ('3%', [u'№ п/п'], CReportBase.AlignLeft), ('5%', [u'Код пациента'], CReportBase.AlignLeft), ('20%', [u'ФИО пациента'], CReportBase.AlignLeft), ('10%', [u'Дата рождения'], CReportBase.AlignLeft), ('10%', [u'Период лечения'], CReportBase.AlignLeft), ('20%', [u'Врач'], CReportBase.AlignLeft), ('10%', [u'Подразделение'], CReportBase.AlignLeft), ('10%', [u'Контроль'], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) query = selectData(params) self.setQueryText(forceString(query.lastQuery())) # ep - eventProfileCode, r - resultCode, dr - diagnosticResultCode checks = [ (u'Результат лечения не соответствует условию оказания мед помощи', lambda ep, r, dr: ep in ['11', '12', '301', '302', '401', '402'] and dr not in [str(x) for x in range(101, 106)] or ep in [ '41', '42', '43', '51', '52', '71', '72', '90' ] and dr not in [str(x) for x in range(201, 206)] or ep in [ '01', '02', '21', '22', '31', '32', '60', '111', '112', '201', '202', '211', '232', '241', '242', '252', '261', '262' ] and dr not in [str(x) for x in range(301, 308)] or ep in ['801', '802'] and dr not in [str(x) for x in range(401, 405)]), (u'Результат обращения не соответствует условию оказания мед помощи', lambda ep, r, dr: ep in ['11', '12', '301', '302', '401', '402'] and r not in [str(x) for x in range(101, 111)] or ep in [ '41', '42', '43', '51', '52', '71', '72', '90' ] and r not in [str(x) for x in range(201, 209)] or ep in [ '01', '02', '21', '22', '31', '32', '60', '111', '112', '201', '202', '211', '232', '241', '242', '252', '261', '262' ] and r not in [str(x) for x in range(301, 317)] or ep in ['801', '802'] and dr not in [str(x) for x in range(401, 417)]), (u'Результат лечения не применяется для диспансеризации', lambda ep, r, dr: ep in ['211', '232', '252', '261', '262' ] and dr not in ['304', '306']), (u'Результат обращения не применяется для диспансеризации взрослого населения', lambda ep, r, dr: ep in ['211', '261'] and r not in ['317', '318', '355', '356']), (u'Результат обращения не применяется для диспансеризации детского населения', lambda ep, r, dr: ep in ['232', '252', '262'] and r not in ['317', '318', '319', '320', '321']) ] while query.next(): record = query.record() eventProfileCode = forceString(record.value('eventProfileCode')) resultCode = forceString(record.value('resultCode')) diagnosticResultCode = forceString( record.value('diagnosticResultCode')) if any([ check[1](eventProfileCode, resultCode, diagnosticResultCode) for check in checks ]): i = table.addRow() table.setText(i, 0, i) table.setText(i, 1, forceString(record.value('clientId'))) table.setText(i, 2, forceString(record.value('clientName'))) table.setText(i, 3, forceString(record.value('birthDate'))) table.setText( i, 4, forceDate(record.value('setDate')).toString('dd.MM.yyyy') + '-' + forceDate(record.value('execDate')).toString('dd.MM.yyyy')) table.setText(i, 5, forceString(record.value('person'))) table.setText( i, 6, getOrgStructureFullName( forceInt(record.value('orgStructure_id')))) table.setText( i, 7, u'\n'.join([ check[0] for check in checks if check[1]( eventProfileCode, resultCode, diagnosticResultCode) ])) return doc
def build(self, params): db = QtGui.qApp.db doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(QtGui.QTextCharFormat()) columns = [('50%', [], CReportBase.AlignLeft), ('50%', [], CReportBase.AlignRight)] table = createTable(cursor, columns, border=0, cellPadding=2, cellSpacing=0) i = table.addRow() currentOrgInfo = getOrganisationInfo(QtGui.qApp.currentOrgId()) headerLeft = u''' Министерство здравоохранения и социального развития Российской Федерации %s %s Код ОГРН: %s ''' % (currentOrgInfo['fullName'], forceString( db.translate('Organisation', 'id', currentOrgInfo['id'], 'Address')), currentOrgInfo['OGRN']) headerRight = u''' Медицинская документация Форма № 030-Р/у утв. приказом Министерства здравоохранения и социального развития РФ № 255 от 22.11.2004 г. ''' table.setText(i, 0, headerLeft) table.setText(i, 1, headerRight) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock() cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText( u'Сведения о лекарственных средствах, выписанных и отпущенных гражданам,\n' ) cursor.insertText( u'имеющим право на получение набора социальных услуг') cursor.insertBlock() cursor.insertBlock() begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) orgStructureId = params.get('orgStructureId', None) financeId = params.get('typeFinanceId', None) recipeStatus = params.get('recipeStatus', 0) cursor.setCharFormat(QtGui.QTextCharFormat()) cursor.insertText(u'За период с ' + forceString(begDate.toString('dd.MM.yyyy')) + u' по ' + forceString(endDate.toString('dd.MM.yyyy'))) cursor.insertBlock() cursor.insertText(u'Источник финансирования: ' + ( forceString(db.translate('rbFinance', 'id', financeId, 'name') ) if financeId else u'не задано')) cursor.insertBlock() cursor.insertText(u'Подразделение: ' + (getOrgStructureFullName( orgStructureId) if orgStructureId else u'ЛПУ')) cursor.insertBlock() cursor.insertText(u'Статус рецепта: ' + recipeStatusNames[recipeStatus]) cursor.insertBlock() cursor.insertBlock() tableColumns = [ ('3%', [u'Заполняется специалистом ОМК', u'№ п/п'], CReportBase.AlignLeft), ('5%', [u'', u'Дата выписки рецепта'], CReportBase.AlignLeft), ('20%', [u'', u'Ф.И.О. врача (таб №)'], CReportBase.AlignLeft), ('10%', [u'', u'Ф.И.О. пациента'], CReportBase.AlignLeft), ('7%', [u'', u'Серия и номер страхового медицинского полиса'], CReportBase.AlignLeft), ('10%', [u'', u'СНИЛС'], CReportBase.AlignLeft), ('10%', [u'', u'Серия и номер выписанного рецепта'], CReportBase.AlignLeft), ('5%', [ u'Заполняется на основании сведений аптечных учреждений', u'Дата отпуска лекарственного средства' ], CReportBase.AlignLeft), ('5%', [u'', u'Наименование отпущенного лекарственного средства'], CReportBase.AlignLeft), ('5%', [u'', u'Стоимость упаковки лекарственного средства'], CReportBase.AlignLeft), ('5%', [u'', u'Отпущено упаковок'], CReportBase.AlignLeft), ('5%', [u'', u'Общая стоимость отпущенного лекарственного средства' ], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) table.mergeCells(0, 0, 1, 7) table.mergeCells(0, 7, 1, 5) rowSize = len(tableColumns) i = table.addRow() for j in range(rowSize): table.setText(i, j, (j + 1)) query = selectData(params) self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() i = table.addRow() table.setText(i, 0, i - 2) table.setText(i, 1, forceString(record.value('recipeDate'))) table.setText(i, 2, forceString(record.value('person'))) table.setText(i, 3, forceString(record.value('clientName'))) policySerial = forceString(record.value('policySerial')) policyNumber = forceString(record.value('policyNumber')) table.setText( i, 4, policyNumber if policySerial == u'' else policySerial + u' ' + policyNumber) table.setText(i, 5, forceString(record.value('SNILS'))) table.setText( i, 6, forceString(record.value('recipeNumber')).replace(u'#', u' ')) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock() cursor.insertBlock() cursor.insertBlock() cursor.insertText(u'Итого общая стоимость ' + u'_' * 96) cursor.insertBlock() cursor.insertBlock() cursor.insertBlock() footerColumns = [(percent, [], CReportBase.AlignLeft) for percent in ['25%', '35%', '25%', '15%']] table = createTable(cursor, footerColumns, border=0, cellPadding=2, cellSpacing=0) i = table.addRow() table.setText(i, 0, u'Зав. ОМК') table.setText(i, 1, u'_' * 60, blockFormat=CReportBase.AlignCenter) table.setText(i, 3, u'_' * 30, blockFormat=CReportBase.AlignCenter) i = table.addRow() table.setText(i, 1, u'(Ф.И.О.)', blockFormat=CReportBase.AlignCenter) table.setText(i, 3, u'(подпись)', blockFormat=CReportBase.AlignCenter) i = table.addRow() table.setText(i, 0, u'Работник аптечного учреждения') table.setText(i, 1, u'_' * 60, blockFormat=CReportBase.AlignCenter) table.setText(i, 3, u'_' * 30, blockFormat=CReportBase.AlignCenter) i = table.addRow() table.setText(i, 1, u'(Ф.И.О.)', blockFormat=CReportBase.AlignCenter) table.setText(i, 3, u'(подпись)', blockFormat=CReportBase.AlignCenter) return doc
def build(self, params): begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) eventTypeId = params.get('eventTypeId', None) onlyPermanentAttach = params.get('onlyPermanentAttach', False) onlyPayedEvents = params.get('onlyPayedEvents', False) begPayDate = params.get('begPayDate', QtCore.QDate()) endPayDate = params.get('endPayDate', QtCore.QDate()) diagnosisType = params.get('diagnosisType', False) orgStructureAttachTypeId = params.get('orgStructureAttachTypeId', None) db = QtGui.qApp.db mapRows = createMapCodeToRowIdx( [row[2] for row in Rows] ) reportRowSize = 4 reportData = [ [0] * reportRowSize for row in Rows ] query = selectDiagnostics(begDate, endDate, eventTypeId, onlyPermanentAttach, onlyPayedEvents, begPayDate, endPayDate, diagnosisType, orgStructureAttachTypeId) self.setQueryText(forceString(query.lastQuery())) eventClosed = 0 eventClosedTeenager = 0 eventClosedPayed = 0 eventClosedPayedTeenager = 0 eventIdList = [] while query.next(): record = query.record() eventId = forceRef(record.value('eventId')) clientId = forceRef(record.value('client_id')) isPrimary = forceInt(record.value('isPrimary')) MKBRec = normalizeMKB(forceString(record.value('MKB'))) ageTeenager = forceInt(record.value('ageTeenager')) sex = forceInt(record.value('sex')) payedEvent = forceInt(record.value('payedEvent')) eventClosedPayedRec = forceInt(record.value('eventClosedPayed')) for row in mapRows.get(MKBRec, []): reportLine = reportData[row] reportLine[0] += 1 if sex == 1: reportLine[1] += 1 if isPrimary: reportLine[3] += 1 reportLine[2] += isPrimary if eventId and eventId not in eventIdList: eventIdList.append(eventId) eventClosed += 1 eventClosedTeenager += ageTeenager if eventClosedPayedRec: eventClosedPayed += 1 eventClosedPayedTeenager += ageTeenager doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertText(u'подразделение: ' + getOrgStructureFullName(orgStructureAttachTypeId)) cursor.insertBlock() cursor.insertBlock() cursor.insertText(u'''1. Число детей подлежащих диспансеризации: %s (человек), из них: 14-ти летних: %s (человек),'''%(str(eventClosed), str(eventClosedTeenager))) cursor.insertBlock() cursor.insertBlock() cursor.insertText(u'''2. Число детей прошедших диспансеризацию: %s (человек), из них: 14-ти летних: %s (человек)'''%(str(eventClosedPayed), str(eventClosedPayedTeenager))) cursor.insertBlock() cursor.insertBlock() cursor.insertText(u'''3. Структура выявленной патологии у подростков:''') cursor.insertBlock() tableColumns = [ ('18%', [u'Наименование заболевания (по классам и отдельным нозологиям)', u'1'], CReportBase.AlignLeft), ('2%', [u'№ строки', u'2'], CReportBase.AlignCenter), ('16%', [u'Код по МКБ-10', u'3'], CReportBase.AlignCenter), ('16%', [u'Всего зарегистрировано заболеваний', u'4'], CReportBase.AlignRight), ('16%', [u'в том числе у юношей (из графы 4)', u'5'], CReportBase.AlignRight), ('16%', [u'Из числа зарегистрированных заболеваний выявлено впервые (из графы 4)', u'6'], CReportBase.AlignRight), ('16%', [u'в том числе у юношей (из графы 6)', u'7'], CReportBase.AlignRight) ] table = createTable(cursor, tableColumns) for iRow, row in enumerate(Rows): i = table.addRow() for j in xrange(3): table.setText(i, j, row[j]) for j in xrange(reportRowSize): table.setText(i, 3+j, reportData[iRow][j]) return doc
def build(self, params): begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) eventTypeId = params.get('eventTypeId', None) onlyPermanentAttach = params.get('onlyPermanentAttach', False) onlyPayedEvents = params.get('onlyPayedEvents', False) begPayDate = params.get('begPayDate', QtCore.QDate()) endPayDate = params.get('endPayDate', QtCore.QDate()) orgStructureAttachTypeId = params.get('orgStructureAttachTypeId', None) reportRowSize = 6 reportData = [0] * reportRowSize reportRowSize2 = 6 reportData2 = [0] * reportRowSize2 reportRowSize3 = 5 reportData3 = [0] * reportRowSize3 query = selectDiagnostics(begDate, endDate, eventTypeId, onlyPermanentAttach, onlyPayedEvents, begPayDate, endPayDate, orgStructureAttachTypeId) self.setQueryText(forceString(query.lastQuery())) eventClosed = 0 eventClosedPayed = 0 eventIdList = [] clientIdList = [] specialityIdCount = {} actionTypeIdCount = {} while query.next(): record = query.record() isSanatorium = forceInt(record.value('isSanatorium')) isHospital = forceInt(record.value('isHospital')) eventId = forceRef(record.value('eventId')) clientId = forceRef(record.value('client_id')) isPrimary = forceInt(record.value('isPrimary')) isDiagnosisType = forceInt(record.value('isDiagnosisType')) isHealthGroup = forceString(record.value('isHealthGroup')) payedEvent = forceInt(record.value('payedEvent')) eventClosedPayedRec = forceInt(record.value('eventClosedPayed')) if eventId and eventId not in eventIdList: eventIdList.append(eventId) if isHealthGroup: if isHealthGroup == '3': reportData[0] += 1 if eventClosedPayedRec: reportData[1] += 1 #reportData[2] += 1 #reportData[3] += 1 #reportData[4] += 1 #reportData[5] += 1 if isHealthGroup == '3' or isHealthGroup == '4' or isHealthGroup == '5': reportData2[0] += 1 if isHealthGroup == '3': reportData2[1] += 1 if isHospital: reportData2[2] += 1 if isHealthGroup == '4': reportData2[3] += 1 if isHealthGroup == '5': reportData2[4] += 1 if isSanatorium and isHealthGroup: reportData2[5] += 1 if isDiagnosisType: reportData3[0] += 1 if isPrimary: reportData3[1] += 1 if isHealthGroup and clientId and clientId not in clientIdList: clientIdList.append(clientId) if isHealthGroup == '1': reportData3[2] += 1 if isHealthGroup == '2': reportData3[3] += 1 if isHealthGroup == '3' or isHealthGroup == '4' or isHealthGroup == '5': reportData3[4] += 1 eventClosed += 1 if eventClosedPayedRec: eventClosedPayed += 1 if eventIdList: db = QtGui.qApp.db tableETA = db.table('EventType_Action') tableETD = db.table('EventType_Diagnostic') tableActionType = db.table('ActionType') tableRBSpeciality = db.table('rbSpeciality') tableAction = db.table('Action') tableVisit = db.table('Visit') tablePerson = db.table('Person') recordsETA = db.getRecordList( tableETA.innerJoin( tableActionType, tableActionType['id'].eq(tableETA['actionType_id'])), [tableActionType['id'], tableActionType['name']], [ tableETA['eventType_id'].eq(eventTypeId), tableActionType['deleted'].eq(0) ]) actionTypeIdList = [] specialityIdList = [] actionIdList = [] visitIdList = [] for record in recordsETA: name = forceString(record.value('name')) actionTypeId = forceRef(record.value('id')) if actionTypeId and actionTypeId not in actionTypeIdCount.keys( ): actionTypeIdCount[actionTypeId] = (name, 0) if actionTypeId and actionTypeId not in actionTypeIdList: actionTypeIdList.append(actionTypeId) if actionTypeIdList and actionTypeIdCount: recordActions = db.getRecordListGroupBy( tableAction, [tableAction['id'], tableAction['actionType_id']], [ tableAction['actionType_id'].inlist(actionTypeIdList), tableAction['event_id'].inlist(eventIdList), tableAction['deleted'].eq(0) ], 'Action.id') for record in recordActions: actionId = forceRef(record.value('id')) if actionId and actionId not in actionIdList: actionIdList.append(actionId) actionTypeId = forceRef(record.value('actionType_id')) result = actionTypeIdCount.get(actionTypeId, ()) if result: nameAction = result[0] actionTypeCount = result[1] actionTypeCount += 1 actionTypeIdCount[actionTypeId] = (nameAction, actionTypeCount) recordsETD = db.getRecordList( tableETD.innerJoin( tableRBSpeciality, tableRBSpeciality['id'].eq(tableETD['speciality_id'])), [tableETD['speciality_id'], tableRBSpeciality['name']], [tableETD['eventType_id'].eq(eventTypeId)]) for record in recordsETD: name = forceString(record.value('name')) specialityId = forceRef(record.value('speciality_id')) if specialityId and specialityId not in specialityIdCount.keys( ): specialityIdCount[specialityId] = (name, 0) if specialityId and specialityId not in specialityIdList: specialityIdList.append(specialityId) if specialityIdList and specialityIdCount: recordVisits = db.getRecordListGroupBy( tableVisit.innerJoin( tablePerson, tablePerson['id'].eq(tableVisit['person_id'])), [tableVisit['id'], tablePerson['speciality_id']], [ tablePerson['speciality_id'].inlist(specialityIdList), tableVisit['event_id'].inlist(eventIdList), tableVisit['deleted'].eq(0), tablePerson['deleted'].eq(0) ], 'Visit.id') for record in recordVisits: visitId = forceRef(record.value('id')) if visitId and visitId not in visitIdList: visitIdList.append(visitId) specialityId = forceRef(record.value('speciality_id')) result = specialityIdCount.get(specialityId, ()) if result: visitAction = result[0] visitIdCount = result[1] visitIdCount += 1 specialityIdCount[specialityId] = (visitAction, visitIdCount) # now text doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertText(u'подразделение: ' + getOrgStructureFullName(orgStructureAttachTypeId)) cursor.insertBlock() cursor.insertBlock() cursor.insertText( u'''1. Число детей подлежащих диспансеризации: %s (человек),''' % (str(eventClosed))) cursor.insertBlock() cursor.insertBlock() cursor.insertText( u'''2. Число детей прошедших диспансеризацию: %s (человек)''' % (str(eventClosedPayed))) cursor.insertBlock() if specialityIdCount: cursor.insertText(u'''Осмотры:''') cursor.insertBlock() for value in specialityIdCount.values(): if value: cursor.insertText(value[0] + ' - ' + forceString(value[1])) cursor.insertBlock() if actionTypeIdCount: cursor.insertText(u'''Мероприятия:''') cursor.insertBlock() for value in actionTypeIdCount.values(): if value: cursor.insertText(' - ' + value[0] + ' - ' + forceString(value[1])) cursor.insertBlock() cursor.insertBlock() cursor.insertText(u'''3. Из числа прошедших диспансеризацию детей:''') cursor.insertBlock() cursor.insertBlock() cursor.insertText( u'''3.1. Дополнительное обследование детей по результатам диспансеризации (человек)''' ) cursor.insertBlock() tableColumns = [ ('18%', [u'Нуждались(человек)', u'', u'1'], CReportBase.AlignLeft), ('16.5%', [u'Прошли (человек)', u'', u'2'], CReportBase.AlignCenter), ('16.5%', [ u'на уровне субъекта Российской Федерации', u'Нуждались(человек)', u'3' ], CReportBase.AlignRight), ('16.5%', [u'', u'Прошли (человек)', u'4'], CReportBase.AlignRight), ('16.5%', [u'на федеральном уровне', u'Нуждались(человек)', u'5'], CReportBase.AlignRight), ('16.5%', [u'', u'Прошли (человек)', u'6'], CReportBase.AlignRight), ] table = createTable(cursor, tableColumns) table.mergeCells(0, 0, 2, 1) table.mergeCells(0, 1, 2, 1) table.mergeCells(0, 2, 1, 2) table.mergeCells(0, 4, 1, 2) i = table.addRow() for j in xrange(reportRowSize): table.setText(i, j, reportData[j]) cursor.insertBlock() cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock() cursor.insertBlock() cursor.insertText( u'3.2. Рекомендовано лечение по результатам диспансеризации (человек)' ) cursor.insertBlock() cursor.insertBlock() tableColumns = [ ('10%', [u'Всего (человек)'], CReportBase.AlignLeft), ('18%', [u'в амбулаторно-поликлинической сети'], CReportBase.AlignLeft), ('18%', [u'в стационаре муниципального уровня'], CReportBase.AlignLeft), ('18%', [u'в стационаре субъекта Российской Федерации'], CReportBase.AlignRight), ('18%', [u'в стационаре федерального уровня'], CReportBase.AlignRight), ('18%', [u'в санатории'], CReportBase.AlignRight), ] table = createTable(cursor, tableColumns) i = table.addRow() for j in xrange(reportRowSize2): table.setText(i, j, reportData2[j]) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock() cursor.insertBlock() cursor.insertText(u'4. Результаты:') cursor.insertBlock() cursor.insertBlock() tableColumns = [('20%', [u'Всего выявлено заболеваний', u''], CReportBase.AlignLeft), ('20%', [u'Из них выявлено впервые', u''], CReportBase.AlignLeft), ('20%', [u'Имеют группу здоровья', u'I'], CReportBase.AlignLeft), ('20%', [u'', u'II'], CReportBase.AlignRight), ('20%', [u'', u'III'], CReportBase.AlignRight)] table = createTable(cursor, tableColumns) table.mergeCells(0, 0, 2, 1) table.mergeCells(0, 1, 2, 1) table.mergeCells(0, 2, 1, 3) i = table.addRow() for j in xrange(reportRowSize3): table.setText(i, j, reportData3[j]) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock() return doc
def build(self, params): db = QtGui.qApp.db doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText( u'Список выписанных рецептов для льготных категорий граждан') cursor.insertBlock() cursor.insertBlock() begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) orgStructureId = params.get('orgStructureId', None) financeId = params.get('typeFinanceId', None) recipeStatus = params.get('recipeStatus', 0) cursor.setCharFormat(QtGui.QTextCharFormat()) cursor.insertText(u'За период с ' + forceString(begDate.toString('dd.MM.yyyy')) + u' по ' + forceString(endDate.toString('dd.MM.yyyy'))) cursor.insertBlock() cursor.insertText(u'Источник финансирования: ' + ( forceString(db.translate('rbFinance', 'id', financeId, 'name') ) if financeId else u'все')) cursor.insertBlock() cursor.insertText(u'Код льготной категории граждан: ') socStatusId = params.get('socStatusType', None) if socStatusId: socStatusCode = forceString( db.translate('rbSocStatusType', 'id', socStatusId, 'code')) socStatusName = forceString( db.translate('rbSocStatusType', 'id', socStatusId, 'name')) cursor.insertText(socStatusCode + u' ' + socStatusName) else: cursor.insertText(u'все') cursor.insertBlock() cursor.insertText(u'Подразделение: ' + (getOrgStructureFullName( orgStructureId) if orgStructureId else u'ЛПУ')) cursor.insertBlock() cursor.insertText(u'Врач: ') personId = params.get('personId', None) if personId: personInfo = getPersonInfo(personId) cursor.insertText(personInfo['fullName'] + u', ' + personInfo['specialityName'] + u', ' + personInfo['code']) else: cursor.insertText(u'все') cursor.insertBlock() cursor.insertText(u'Статус рецепта: ' + recipeStatusNames[recipeStatus]) cursor.insertBlock() cursor.insertBlock() tableColumns = [ ('5%', [u'Код пациента', u''], CReportBase.AlignLeft), ('13%', [u'Ф.И.О. пациента', u''], CReportBase.AlignLeft), ('7%', [u'Дата рождения', u''], CReportBase.AlignLeft), ('11%', [u'СНИЛС', u''], CReportBase.AlignLeft), ('5%', [u'Код льготной категории', u''], CReportBase.AlignLeft), ('7%', [u'№ карты беременной', u''], CReportBase.AlignLeft), ('11%', [u'Серия и номер рецепта', u''], CReportBase.AlignLeft), ('7%', [u'Дата выписки', u''], CReportBase.AlignLeft), ('5%', [u'Код МКБ', u''], CReportBase.AlignLeft), ('7%', [u'Лекарственное средство', u'МНН'], CReportBase.AlignLeft), ('8%', [u'', u'Торговое наименование'], CReportBase.AlignLeft), ('7%', [u'', u'Количество единиц'], CReportBase.AlignLeft), ('13%', [u'Ф.И.О., спец-ть врача, таб. №'], CReportBase.AlignLeft), ('3%', [u'ВК'], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) table.mergeCells(0, 9, 1, 2) table.mergeCells(0, 0, 2, 1) table.mergeCells(0, 1, 2, 1) table.mergeCells(0, 2, 2, 1) table.mergeCells(0, 3, 2, 1) table.mergeCells(0, 4, 2, 1) table.mergeCells(0, 5, 2, 1) table.mergeCells(0, 6, 2, 1) table.mergeCells(0, 7, 2, 1) table.mergeCells(0, 8, 2, 1) table.mergeCells(0, 9, 1, 3) # table.mergeCells(0, 11, 1, 2) table.mergeCells(0, 12, 2, 1) table.mergeCells(0, 13, 2, 1) rowSize = len(tableColumns) clientIdSet = set() query = selectData(params) self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() clientId = forceInt(record.value('clientId')) clientIdSet.add(clientId) i = table.addRow() table.setText(i, 0, clientId) table.setText(i, 1, forceString(record.value('clientName'))) table.setText(i, 2, forceString(record.value('birthDate'))) table.setText(i, 3, forceString(record.value('SNILS'))) table.setText(i, 4, forceString(record.value('socCode'))) table.setText(i, 5, forceString(record.value('pregCard'))) table.setText(i, 6, forceString(record.value('recipeNumber'))) table.setText(i, 7, forceString(record.value('recipeDate'))) table.setText(i, 8, forceString(record.value('mkb'))) table.setText(i, 9, forceString(record.value('drugMNN'))) table.setText(i, 10, forceString(record.value('drugTrade'))) table.setText(i, 11, forceString(record.value('drugCount'))) table.setText(i, 12, forceString(record.value('person'))) table.setText(i, 13, forceString(record.value('isVk'))) i = table.addRow() table.mergeCells(i, 0, 1, rowSize) table.setText(i, 0, u'Количество пациентов: ' + str(len(clientIdSet)), charFormat=CReportBase.TableTotal) i = table.addRow() table.mergeCells(i, 0, 1, rowSize) table.setText(i, 0, u'Количество рецептов: ' + str((i - 3)), charFormat=CReportBase.TableTotal) return doc
def dumpParams(self, cursor, params): def dateRangeAsStr(begDate, endDate): result = '' if begDate: result += u' с ' + forceString(begDate) if endDate: result += u' по ' + forceString(endDate) return result description = [] begDate = params.get('begDateVisitBeforeRecord', QtCore.QDate()) endDate = params.get('endDateVisitBeforeRecord', QtCore.QDate()) orgStructureId = params.get('orgStructureId', None) specialityId = params.get('specialityId', None) personId = params.get('personId', None) nextVisit = params.get('nextVisit', False) noVisit = params.get('noVisit', False) visitOtherSpeciality = params.get('visitOtherSpeciality', False) visitSorting = params.get('visitSorting', 0) if begDate or endDate: description.append(u'за период' + dateRangeAsStr(begDate, endDate)) if orgStructureId: description.append(u'подразделение: ' + getOrgStructureFullName(orgStructureId)) else: description.append(u'подразделение: ЛПУ') if specialityId: specialityName = forceString( QtGui.qApp.db.translate('rbSpeciality', 'id', specialityId, 'name')) description.append(u'Специальность ' + specialityName) if personId: personName = forceString( QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id', personId, 'name')) description.append(u'Врач ' + personName) if nextVisit: description.append(u'Учитывать назначение следующей явки') if noVisit: description.append(u'Учитывать только не явившихся на прием') if visitOtherSpeciality: description.append( u'Не учитывать явившихся к другому врачу данной специальности') description.append( u'Сортировка ' + [u'по дате', u'по ФИО пациента', u'по идентификатору пациента' ][visitSorting]) description.append(u'отчёт составлен: ' + forceString(QtCore.QDateTime.currentDateTime())) columns = [('100%', [], CReportBase.AlignLeft)] table = createTable(cursor, columns, headerRowCount=len(description), border=0, cellPadding=2, cellSpacing=0) for i, row in enumerate(description): table.setText(i, 0, row) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock()
def __init__(self, parent): CDialogBase.__init__(self, parent) self.addModels('Motions', CMyMotionsModel(self)) self.mnuMotions = QtGui.QMenu(self) self.mnuMotions.setObjectName('mnuMotions') self.actAddInvoice = QtGui.QAction(u'Создать накладную', self) self.actAddInvoice.setObjectName('actAddInvoice') self.actAddInventory = QtGui.QAction(u'Создать инвентаризацию', self) self.actAddInventory.setObjectName('actAddInventory') self.actAddFinTransfer = QtGui.QAction(u'Создать фин.перенос', self) self.actAddFinTransfer.setObjectName('actAddFinTransfer') self.actAddProduction = QtGui.QAction(u'Создать производство', self) self.actAddProduction.setObjectName('actAddProduction') self.actEditMotion = QtGui.QAction(u'Редактировать движение', self) self.actEditMotion.setObjectName('actEditMotion') self.mnuMotions.addAction(self.actAddInvoice) self.mnuMotions.addAction(self.actAddInventory) self.mnuMotions.addAction(self.actAddFinTransfer) self.mnuMotions.addAction(self.actAddProduction) self.mnuMotions.addSeparator() self.mnuMotions.addAction(self.actEditMotion) self.addModels('Remainings', CRemainingsModel(self)) self.addModels('MRs', CMyRequisitionsModel(self)) self.mnuMRs = QtGui.QMenu(self) self.mnuMRs.setObjectName('mnuMRs') self.actAddRequisition = QtGui.QAction(u'Создать требование', self) self.actAddRequisition.setObjectName('actAddRequisition') self.actEditRequisition = QtGui.QAction(u'Редактировать требование', self) self.actEditRequisition.setObjectName('actEditRequisition') self.actRevokeRequisition = QtGui.QAction(u'Отменить требование', self) self.actRevokeRequisition.setObjectName('actRevokeRequisition') self.mnuMRs.addAction(self.actAddRequisition) self.mnuMRs.addAction(self.actEditRequisition) self.mnuMRs.addAction(self.actRevokeRequisition) self.addModels('MRContent', CRequisitionContentModel(self)) self.addModels('RTMs', CRequisitionsToMeModel(self)) self.mnuRTMs = QtGui.QMenu(self) self.mnuRTMs.setObjectName('mnuRTMs') # self.addObject('actOpenClient', QtGui.QAction(u'Открыть регистрационную карточку', self)) self.actCreateMotionByRequisition = QtGui.QAction( u'Создать движение по требованию', self) self.actCreateMotionByRequisition.setObjectName( 'actCreateMotionByRequisition') # self.addObject('actRejectRequisition', QtGui.QAction(u'Отказать в требование', self)) self.mnuRTMs.addAction(self.actCreateMotionByRequisition) # self.mnuRTMs.addAction(self.actRejectRequisition) self.addModels('RTMContent', CRequisitionContentModel(self)) self.btnPrint = QtGui.QPushButton(u'Печать', self) self.btnPrint.setObjectName('btnPrint') self.btnPrint.setShortcut('F6') self.setupUi(self) self.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.WindowMaximizeButtonHint | QtCore.Qt.WindowCloseButtonHint) if QtGui.qApp.currentOrgStructureId(): self.setWindowTitle( u'Склад ЛСиИМН: %s' % getOrgStructureFullName(QtGui.qApp.currentOrgStructureId())) self.bbxMotionsFilter.button( QtGui.QDialogButtonBox.Apply).setDefault(True) self.bbxRemainingsFilter.button( QtGui.QDialogButtonBox.Apply).setDefault(True) self.bbxMRsFilter.button(QtGui.QDialogButtonBox.Apply).setDefault(True) self.bbxRTMsFilter.button( QtGui.QDialogButtonBox.Apply).setDefault(True) self.cmbMotionsFilterNomenclature.setTable('rbNomenclature', order='name') self.cmbMotionsFilterFinance.setTable('rbFinance', True) self.cmbRemainingsFilterNomenclature.setTable('rbNomenclature', order='name') self.cmbRemainingsFilterFinance.setTable('rbFinance', True) self.cmbMRsFilterNomenclature.setTable('rbNomenclature', order='name') self.cmbRTMsFilterNomenclature.setTable('rbNomenclature', order='name') self.tblMotions.setModel(self.modelMotions) self.tblMotions.setSelectionModel(self.selectionModelMotions) self.tblMotions.setPopupMenu(self.mnuMotions) self.tblRemainings.setModel(self.modelRemainings) self.tblRemainings.setSelectionModel(self.selectionModelRemainings) self.tblMRs.setModel(self.modelMRs) self.tblMRs.setSelectionModel(self.selectionModelMRs) self.tblMRs.setPopupMenu(self.mnuMRs) self.tblMRContent.setModel(self.modelMRContent) self.tblMRContent.setSelectionModel(self.selectionModelMRContent) self.tblRTMs.setModel(self.modelRTMs) self.tblRTMs.setSelectionModel(self.selectionModelRTMs) self.tblRTMs.setPopupMenu(self.mnuRTMs) self.tblRTMContent.setModel(self.modelRTMContent) self.tblRTMContent.setSelectionModel(self.selectionModelRTMContent) self.buttonBox.addButton(self.btnPrint, QtGui.QDialogButtonBox.ActionRole) self.motionsFilter = smartDict() self.remainingsFilter = smartDict() self.MRsFilter = smartDict() self.RTMsFilter = smartDict() self.controlSplitter = None # self.visitedMotions = False self.visitedMRs = False self.visitedRTMs = False
def dumpParams(self, cursor, params): description = [] db = QtGui.qApp.db def dateRangeAsStr(begDate, endDate): result = '' if begDate: result += u' с ' + forceString(begDate) if endDate: result += u' по ' + forceString(endDate) return result begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) begDateBeforeRecord = params.get('begDateBeforeRecord', QtCore.QDate()) endDateBeforeRecord = params.get('endDateBeforeRecord', QtCore.QDate()) orgStructureId = params.get('orgStructureId', None) specialityId = params.get('specialityId', None) personId = params.get('personId', None) userProfileId = params.get('userProfileId', None) beforeRecordUserId = params.get('beforeRecordUserId', None) actionTypeCode = params.get('queueType', None) chkPeriodRecord = params.get('chkPeriodRecord', None) chkPeriodBeforeRecord = params.get('chkPeriodBeforeRecord', None) chkOrgStructure = params.get('chkOrgStructure', None) chkDetailCallCentr = params.get('detailCallCentr', None) chkDetailExternalIS = params.get('detailExternalIS', None) chkShowNote = params.get('chkShowNote', False) if chkPeriodRecord: if begDate or endDate: description.append(u'за период' + dateRangeAsStr(begDate, endDate)) if chkPeriodBeforeRecord: if begDateBeforeRecord or endDateBeforeRecord: description.append( u'период предварительной записи' + dateRangeAsStr(begDateBeforeRecord, endDateBeforeRecord)) if beforeRecordUserId: personInfo = getPersonInfo(beforeRecordUserId) description.append(u'пользователь: ' + personInfo['shortName'] + ', ' + personInfo['specialityName']) if userProfileId: description.append(u'профиль прав пользователя: ' + forceString( db.translate('rbUserProfile', 'id', userProfileId, 'name'))) if chkOrgStructure: if orgStructureId: description.append(u'подразделение: ' + getOrgStructureFullName(orgStructureId)) else: description.append(u'подразделение: ЛПУ') if specialityId: description.append(u'специальность: ' + forceString( db.translate('rbSpeciality', 'id', specialityId, 'name'))) if personId: personInfo = getPersonInfo(personId) description.append(u'врач: ' + personInfo['shortName'] + ', ' + personInfo['specialityName']) if actionTypeCode == 0: description.append(u'мероприятие: Прием') elif actionTypeCode == 1: description.append(u'мероприятие: Вызовы') if chkDetailCallCentr: description.append(u'Детализировать Call-центр') if chkDetailExternalIS: description.append(u'Детализировать запись через внешние ИС') if chkShowNote: description.append(u'Выводить жалобы') description.append(u'отчёт составлен: ' + forceString(QtCore.QDateTime.currentDateTime())) columns = [('100%', [], CReportBase.AlignLeft)] table = createTable(cursor, columns, headerRowCount=len(description), border=0, cellPadding=2, cellSpacing=0) for i, row in enumerate(description): table.setText(i, 0, row) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock()