def getPersonFullNameStr(self, personId): if self.mapPersonFullName.has_key(personId): return self.mapPersonFullName[personId] else: personInfo = getPersonInfo(personId) str = formatFullPersonNameHL7(personInfo, self.personCode) self.mapPersonFullName[personId] = str return str
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 getEventInfo(self): result = {} result['person'] = getPersonInfo(self.personId) result['cardNo'] = forceString(self.edtCardNo.text()) result['order'] = EventOrder.getName(self.cmbOrder.currentIndex()) result['traumaType'] = forceString(self.cmbTraumaType.currentText()) result['MKB'] = forceString(self.edtMKB.text()) result['MKBName'] = getMKBName(result['MKB']) result['MKBEx'] = forceString(self.edtMKBEx.text()) result['MKBExName'] = getMKBName(result['MKBEx']) result['date'] = forceString(self.eventDate) result['client'] = getClientInfoEx(self.clientId, self.eventDate) return result
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 writeTXA(self, record): personId = forceRef(record.value('person_id')) personInfo = getPersonInfo(personId) if personInfo: self.writeStartElement('n:TXA') self.writeTextElement('n:TXA.2', u'Жалобы') date = forceDateTime(record.value('Date')) self.writeStartElement('n:TXA.3') self.writeTextElement(u'n:TS.1', date.toString('yyyyMMddhhmmss')) self.writeEndElement() self.writeTextElement('n:TXA.4', u'BJ0001 %s' % personInfo['fullName']) self.writeEndElement() self.writeStartElement('n:OBX') self.writeTextElement('n:OBX.2', 'FT') self.writeTextElement('n:OBX.3', 'Rec111') self.writeTextElement('n:OBX.5', '') self.writeTextElement('n:OBX.11', 'R')
def writePV1(self, record): personId = forceRef(record.value('visitPersonId')) personInfo = getPersonInfo(personId) if personInfo: self.writeStartElement('n:PV1') self.writeTextElement('n:PV1.2', 'I') self.writeTextElement('n:PV1.7', u'BJ0001 %s' % personInfo['fullName']) self.writeTextElement('n:PV1.14', 'SM') self.writeTextElement( 'n:PV1.19', u'SVST_%d' % forceInt(record.value('visit_id'))) date = forceDate(record.value('Date')) self.writeStartElement('n:PV1.44') self.writeTextElement(u'n:TS.1', date.toString('yyyyMMdd')) self.writeEndElement() self.writeStartElement('n:PV1.45') self.writeTextElement(u'n:TS.1', date.toString('yyyyMMdd')) self.writeEndElement() self.writeEndElement()
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 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 createTableForPerson(self, cursor, personId, timeRange, office, times, queue, params): begDate = getVal(params, 'begDateDailyJournal', QtCore.QDate()) orderSorting = getVal(params, 'orderSorting', None) isPrimary = getVal(params, 'isPrimary', None) accountingSystem = getVal(params, 'accountingSystemId', None) isFreeTimes = forceBool(getVal(params, 'isFreeTimes', 0)) isViewBirthDate = forceBool(getVal(params, 'isViewBirthDate', 0)) isViewRegAdress = forceBool(getVal(params, 'isViewRegAdress', 0)) isPrimaryList = [u'Нет', u'Да'] orderSortingList = [ u'clientIdentifier' if accountingSystem else u'Client.id', u'ActionProperty_Time.value', u'Client.lastName, Client.firstName, Client.patrName' ] db = QtGui.qApp.db tableAction = db.table('Action') cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertBlock() cursor.setCharFormat(CReportBase.ReportBody) personInfo = getPersonInfo(personId) orgStructureId = forceInt( db.translate('Person', 'id', personId, 'orgStructure_id')) if times: lenQueue = len(queue) if queue else 0 diff = len(times) - lenQueue if diff < 0: times.extend([None] * (-diff)) elif diff > 0: queue.extend([None] * diff) orgStructureName = forceString( db.translate('OrgStructure', 'id', orgStructureId, 'name')) boldChars = QtGui.QTextCharFormat() boldChars.setFontWeight(QtGui.QFont.Bold) columns = [('25%', [], CReportBase.AlignLeft), ('50%', [], CReportBase.AlignLeft), ('25%', [], CReportBase.AlignLeft)] table = createTable(cursor, columns, headerRowCount=1, border=0, cellPadding=2, cellSpacing=0) table.setText(0, 0, forceString(begDate), charFormat=boldChars) table.setText(0, 1, forceString(begDate.longMonthName(begDate.month())), charFormat=boldChars) table.setText(0, 2, forceString(begDate.longDayName(begDate.dayOfWeek())), charFormat=boldChars) row = table.addRow() table.setText(row, 0, u'') table.setText(row, 1, u'Карточка предварительной записи больных', charFormat=boldChars) table.setText(row, 2, u'') row = table.addRow() table.setText(row, 0, u'к врачу:') table.setText( row, 1, u'%s(%s)' % (orgStructureName, personInfo['specialityName'])) table.setText(row, 2, u'кабинет %s' % (office)) row = table.addRow() table.setText(row, 0, u'') table.setText(row, 1, personInfo['fullName']) table.setText(row, 2, u'') row = table.addRow() table.setText(row, 0, u'часы приема:') table.setText(row, 1, timeRange) table.setText(row, 2, u'') cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock() cursor.insertText(u'\nпервичные: %s\n' % (forceString(isPrimaryList[isPrimary]))) cursor.insertText( u'идентификатор: %s\n' % (forceString( db.translate('rbAccountingSystem', 'id', accountingSystem, 'name')) if accountingSystem else u'идентификатор пациента в лечебном учреждении')) cursor.setCharFormat(CReportBase.ReportBody) cursor.insertBlock() cols = [ ('3%', [u'№'], CReportBase.AlignRight), ('2%', [u'П'], CReportBase.AlignLeft), ('15%', [u'Идентификатор'], CReportBase.AlignLeft), ('5%', [u'Время'], CReportBase.AlignLeft), ('20%', [u'ФИО'], CReportBase.AlignLeft), ('5%', [u'Дата рождения' if isViewBirthDate else u'Возраст'], CReportBase.AlignLeft), ('25%', [u'Адрес регистрации' if isViewRegAdress else u'Прикрепление' ], CReportBase.AlignLeft), ('25%', [u'Примечание'], CReportBase.AlignLeft), ] table = createTable(cursor, cols) cnt = 1 clientIdList = [] actionIdList = [] colsStmt = u'' if accountingSystem: colsStmt = u''', ( SELECT ClientIdentification.identifier FROM ClientIdentification WHERE ClientIdentification.client_id = Client.id AND ClientIdentification.accountingSystem_id = %d AND ClientIdentification.deleted = 0 ORDER BY ClientIdentification.id DESC LIMIT 1 ) AS clientIdentifier ''' % (accountingSystem) stmt = u''' SELECT QueueEvent.client_id AS clientId, DATE(QueueEvent.setDate) AS date, ActionProperty_Time.value AS time, ActionProperty_Action.index AS indexAPA, QueueAction.person_id AS personId, QueueAction.note AS note, Action.note AS noteAction, QueueAction.id AS queueActionId, ActionProperty.action_id AS ambActionId, Client.lastName, Client.firstName, Client.patrName, Client.birthDate AS birthDate, age(Client.birthDate, %s) AS clientAge, getClientLocAddress(Client.id) AS locAddress, ( SELECT CONCAT(rbAttachType.name COLLATE utf8_general_ci, ', прикреплен с: ', ClientAttach.begDate) FROM ClientAttach INNER JOIN rbAttachType ON ClientAttach.attachType_id = rbAttachType.id WHERE ClientAttach.client_id = Client.id AND ClientAttach.deleted = 0 AND ClientAttach.endDate IS NULL ORDER BY ClientAttach.id DESC LIMIT 1 ) AS clientAttachInfo %s FROM Action AS QueueAction LEFT JOIN ActionType AS QueueActionType ON QueueActionType.id = QueueAction.actionType_id LEFT JOIN Event AS QueueEvent ON QueueEvent.id = QueueAction.event_id INNER JOIN Client ON Client.id = QueueEvent.client_id LEFT JOIN EventType AS QueueEventType ON QueueEventType.id = QueueEvent.eventType_id LEFT JOIN ActionProperty_Action ON ActionProperty_Action.value = QueueAction.id LEFT JOIN ActionProperty ON ActionProperty.id = ActionProperty_Action.id LEFT JOIN Action ON Action.id = ActionProperty.action_id LEFT JOIN ActionType ON ActionType.id = Action.actionType_id LEFT JOIN ActionPropertyType AS APTTime ON APTTime.actionType_id = ActionType.id AND APTTime.name='times' LEFT JOIN ActionProperty AS APTime ON APTime.type_id = APTTime.id AND APTime.action_id = Action.id LEFT JOIN ActionProperty_Time ON ActionProperty_Time.id = APTime.id AND ActionProperty_Time.index = ActionProperty_Action.index LEFT JOIN Event ON Event.id = Action.event_id LEFT JOIN EventType ON EventType.id = Event.eventType_id WHERE QueueAction.deleted = 0 AND QueueActionType.code = 'queue' AND QueueEvent.deleted = 0 AND QueueEventType.code = 'queue' AND Action.deleted = 0 AND ActionType.code = 'amb' AND Event.deleted = 0 AND EventType.code = '0' AND QueueAction.person_id = %d AND DATE(QueueEvent.setDate) = DATE(%s) ORDER BY %s ''' % (tableAction['begDate'].formatValue(begDate), colsStmt, personId, tableAction['begDate'].formatValue(begDate), orderSortingList[orderSorting]) query = QtGui.qApp.db.query(stmt) recordInfo = {} while query.next(): record = query.record() if record: clientId = forceRef(record.value('clientId')) if clientId and (clientId not in clientIdList): stmt = u''' SELECT QueueAction.person_id AS personId, QueueAction.id AS queueActionId FROM Action AS QueueAction LEFT JOIN ActionType AS QueueActionType ON QueueActionType.id = QueueAction.actionType_id LEFT JOIN Event AS QueueEvent ON QueueEvent.id = QueueAction.event_id LEFT JOIN EventType AS QueueEventType ON QueueEventType.id = QueueEvent.eventType_id LEFT JOIN ActionProperty_Action ON ActionProperty_Action.value = QueueAction.id LEFT JOIN ActionProperty ON ActionProperty.id = ActionProperty_Action.id LEFT JOIN Action ON Action.id = ActionProperty.action_id LEFT JOIN ActionType ON ActionType.id = Action.actionType_id LEFT JOIN ActionPropertyType AS APTTime ON APTTime.actionType_id = ActionType.id AND APTTime.name='times' LEFT JOIN ActionProperty AS APTime ON APTime.type_id = APTTime.id AND APTime.action_id = Action.id LEFT JOIN ActionProperty_Time ON ActionProperty_Time.id = APTime.id AND ActionProperty_Time.index = ActionProperty_Action.index LEFT JOIN Event ON Event.id = Action.event_id LEFT JOIN EventType ON EventType.id = Event.eventType_id WHERE QueueAction.deleted = 0 AND QueueActionType.code = 'queue' AND QueueEvent.deleted = 0 AND QueueEventType.code = 'queue' AND Action.deleted = 0 AND ActionType.code = 'amb' AND Event.deleted = 0 AND EventType.code = '0' AND DATE(QueueEvent.setDate) = DATE(%s) AND QueueEvent.client_id = %d ORDER BY ActionProperty_Time.value LIMIT 1 ''' % (tableAction['begDate'].formatValue(begDate), clientId) queryIsPrimary = QtGui.qApp.db.query(stmt) while queryIsPrimary.next(): recordClient = queryIsPrimary.record() queueActionId = forceRef( recordClient.value('queueActionId')) personClientId = forceRef( recordClient.value('personId')) if personClientId and (personClientId == personId ) and (clientId not in clientIdList): clientIdList.append(clientId) actionIdList.append(queueActionId) if not isFreeTimes: actionId = forceRef(record.value('queueActionId')) if isPrimary and (actionId in actionIdList): cnt = self.printDailyJournal(cnt, table, record, u'П', accountingSystem, clientId, isViewBirthDate, isViewRegAdress) elif not isPrimary: cnt = self.printDailyJournal( cnt, table, record, u'П' if actionId in actionIdList else u'', accountingSystem, clientId, isViewBirthDate, isViewRegAdress) else: indexAPA = forceInt(record.value('indexAPA')) if not recordInfo.get(indexAPA, None): recordInfo[indexAPA] = record if isFreeTimes: for i, time in enumerate(times): if recordInfo.get(i, None): recordFreeTime = recordInfo[i] cnt = self.printDailyJournal( cnt, table, recordFreeTime, u'П' if forceRef(recordFreeTime.value('queueActionId')) in actionIdList else u'', accountingSystem, forceRef(recordFreeTime.value('clientId')), isViewBirthDate, isViewRegAdress) else: row = table.addRow() table.setText(row, 0, cnt) table.setText(row, 1, u'') table.setText(row, 2, u'') table.setText(row, 3, time.toString('hh:mm') if time else u'--:--') table.setText(row, 4, u'') table.setText(row, 5, u'') table.setText(row, 6, u'') table.setText(row, 7, u'') cnt += 1 cursor.movePosition(QtGui.QTextCursor.End) return cursor
def writeRecord(self, record): self.writeStartElement('ActionTemplate') # все свойства экспортируем как атрибуты for x in actionTemplateFields: self.writeAttribute(x, forceString(record.value(x))) # все, что определяется ссылками на другие таблицы - как элементы # группа экспортируемого элемента: groupId = forceRef(record.value('group_id')) ownerId = forceRef(record.value('owner_id')) specialityId = forceRef(record.value('speciality_id')) actionId = forceRef(record.value('action_id')) id = forceRef(record.value('id')) if id == groupId: QtGui.QMessageBox.critical (self.parent, u'Ошибка в логической структуре данных', u'Элемент id=%d: (%s) "%s", group_id=%d является сам себе группой' % \ (id, forceString(record.value('code')), forceString(record.value('name')), groupId), QtGui.QMessageBox.Close) elif groupId in self.nestedGroups: QtGui.QMessageBox.critical (self.parent, u'Ошибка в логической структуре данных', u'Элемент id=%d: group_id=%d обнаружен в списке родительских групп "%s"' % \ (id, groupId, u'(' + '-> '.join([str(et) for et in self.nestedGroups])+ ')'), QtGui.QMessageBox.Close) elif groupId: # все в порядке self.writeStartElement('Group') query = self.createQuery([groupId]) while (query.next()): self.nestedGroups.append(groupId) self.writeRecord(query.record()) # рекурсия self.nestedGroups.remove(groupId) self.writeEndElement() if ownerId: if self.ownerMap.has_key(ownerId): ownerInfo = self.ownerMap[ownerId] else: ownerInfo = getPersonInfo(ownerId) self.ownerMap[ownerId] = ownerInfo if ownerInfo: self.writeStartElement('Owner') for x in ownerFields: if ownerInfo.has_key(x): self.writeAttribute(x, ownerInfo[x]) self.writeEndElement() if specialityId: specialityInfo = self.getSpecialityInfo(specialityId) self.writeStartElement('Speciality') for x in specialityFields: if specialityInfo.has_key(x): self.writeAttribute(x, specialityInfo[x]) self.writeEndElement() if actionId: self.writeAction(actionId) self.writeEndElement()
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()