def getDescription(self, params): db = QtGui.qApp.db begDate = params.get('begDate', None) endDate = params.get('endDate', None) eventTypeIdList = params.get('eventTypeIdList', []) orgStructureId = params.get('orgStructureId', None) ageFrom = params.get('ageFrom', None) ageTo = params.get('ageTo', 150) sex = params.get('sex', 0) rows = [] if begDate and endDate: rows.append(u'за период с {0} по {1}'.format( forceString(begDate), forceString(endDate))) if eventTypeIdList: rows.append(u'типы обращений: {0}'.format(u', '.join([ forceString(db.translate('EventType', 'id', id, 'code')) for id in eventTypeIdList ]))) if orgStructureId: rows.append(u'подразделение: {0}'.format( getOrgStructureName(orgStructureId))) if (not ageFrom is None) and (not ageTo is None): rows.append(u'возраст: с {0} по {1}'.format( ageFrom, formatNum(ageTo, [u'год', u'года', u'лет']))) if sex: rows.append(u'пол: {0}'.format(formatSex(sex))) return rows
def initByRecord(self, record): self._type = forceInt(record.value('type')) self._doctype = self.getInstance(CTempInvalidDocTypeInfo, forceRef(record.value('doctype_id'))) self._reason = self.getInstance( CTempInvalidReasonInfo, forceRef(record.value('tempInvalidReason_id'))) self._extraReason = self.getInstance( CTempInvalidExtraReasonInfo, forceRef(record.value('tempInvalidExtraReason_id'))) self._busyness = forceInt(record.value('busyness')) self._placeWork = forceString(record.value('placeWork')) self._serial = forceString(record.value('serial')) self._number = forceString(record.value('number')) self._sex = formatSex(forceInt(record.value('sex'))) self._age = forceInt(record.value('age')) self._employmentService = forceBool(record.value('employmentService')) self._duration = forceInt(record.value('duration')) self._externalDuration = 0 self._begDate = CDateInfo(forceDate(record.value('begDate'))) self._endDate = CDateInfo(forceDate(record.value('endDate'))) self._person = self.getInstance(CPersonInfo, forceRef(record.value('person_id'))) self._closed = forceInt(record.value('closed')) self._MKB = self.getInstance(CMKBInfo, forceString(record.value('MKB'))) self._MKBEx = self.getInstance(CMKBInfo, forceString(record.value('MKBEx'))) prev_id = forceRef(record.value('prev_id')) if prev_id: self._prev = self.getInstance(CTempInvalidInfo, prev_id) self._periods = self.getInstance(CTempInvalidPeriodInfoList, self.id)
def getTempInvalidInfo(self, context): result = context.getInstance(CTempInvalidInfo, None) result._doctype = context.getInstance(CTempInvalidDocTypeInfo, self.cmbDoctype.value()) result._reason = context.getInstance(CTempInvalidReasonInfo, self.cmbReason.value()) result._extraReason = context.getInstance( CTempInvalidExtraReasonInfo, forceRef(self.cmbExtraReason.value())) result._busyness = forceInt(self.cmbBusyness.value()) result._placeWork = forceString(self.edtPlaceWork.text()) result._number = forceStringEx(self.edtNumber.text()) result._sex = formatSex(self.cmbOtherSex.currentIndex()) result._age = self.edtOtherAge.value() result._duration, result._externalDuration = self.modelPeriods.calcLengths( ) result._begDate = CDateInfo(self.modelPeriods.begDate()) result._endDate = CDateInfo(self.modelPeriods.endDate()) MKB, MKBEx = self.getMKBs() result._MKB = context.getInstance(CMKBInfo, MKB) result._MKBEx = context.getInstance(CMKBInfo, MKBEx) closed = self.modelPeriods.getTempInvalidClosedStatus() result._closed = closed result._periods = self.modelPeriods.getPeriodsInfo(context) if self.prevId: result._prev = context.getInstance(CTempInvalidInfo, self.prevId) else: result._prev = None result._ok = True return result
def format(self, values): val = values[0] clientId = forceRef(val) clientRecord = QtGui.qApp.db.getRecord('Client', '*', clientId) if clientRecord: return toVariant(formatSex(clientRecord.value('sex'))) return CCol.invalid
def getPatientDesc(record): desc = '' desc += u'ИБ №' + (forceString(record.value('externalId')) + '\n') desc += (forceString(record.value('lastName')) + '\n') desc += (forceString(record.value('firstName')) + '\n') desc += (forceString(record.value('patrName')) + '\n') desc += u'Пол: ' + (formatSex(record.value('sex')) + '\n') date = forceDate(record.value('birthDate')) desc += u'Дата рождения: ' + (date.toString('dd.MM.yyyy') + u'(' + repr(calcAgeInYears(date, QtCore.QDate.currentDate())) + u' лет)\n') return desc
def fillTable(self, query, table): try: while query.next(): self.valueProgressBar += 1 self.progressBar.setValue(self.valueProgressBar) record = query.record() clientId = forceRef(record.value('clientId')) lastName = forceString(record.value('lastName')) firstName = forceString(record.value('firstName')) patrName = forceString(record.value('patrName')) sex = formatSex(forceString(record.value('sex'))) birthDate = forceDate( record.value('birthDate')).toString('dd.MM.yyyy') notes = forceString(record.value('notes')) post = forceString(record.value('post')) hurtId = forceRef(record.value('workHurtId')) workId = forceRef(record.value('workId')) error = hurtId if self.error['ClientWork_Hurt_Factor'].has_key( hurtId ) else workId if self.error['ClientWork_Hurt_Factor'].has_key( workId) else None if error: tuple = self.error['ClientWork_Hurt_Factor'][error] self.listFactorError.append([ clientId, lastName, firstName, patrName, sex, birthDate, notes, post, tuple[0], tuple[1] ]) if self.error['ClientWork_Hurt'].has_key(workId): tuple = self.error['ClientWork_Hurt'][workId] self.listFactorError.append([ clientId, lastName, firstName, patrName, sex, birthDate, notes, post, tuple[0], tuple[1] ]) i = table.addRow() table.setText(i, 0, clientId) table.setText(i, 1, lastName) table.setText(i, 2, firstName) table.setText(i, 3, patrName) table.setText(i, 4, sex) table.setText(i, 5, birthDate) table.setText(i, 6, notes) table.setText(i, 7, post) table.setText(i, 8, forceString(record.value('hurtFactorType'))) table.setText(i, 9, forceString(record.value('hurtType'))) except AttributeError: pass i = table.addRow() table.mergeCells(i, 1, 1, 9) table.setText(i, 0, u'Всего', CReport.TableTotal) table.setText(i, 1, i - 1, CReport.TableTotal)
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 = [ (' 9%', [u'Код пациента'], CReportBase.AlignLeft), (' 9%', [u'Внешний идентификатор'], CReportBase.AlignLeft), ('20%', [u'ФИО пациента'], CReportBase.AlignLeft), (' 5%', [u'Пол'], CReportBase.AlignLeft), ('10%', [u'Дата рождения'], CReportBase.AlignLeft), ('10%', [u'Период лечения'], CReportBase.AlignLeft), (' 9%', [u'Код МКБ'], CReportBase.AlignLeft), (' 9%', [u'Стандарт/КСГ'], CReportBase.AlignLeft), ('10%', [u'Отделение пребывания'], CReportBase.AlignLeft), (' 9%', [u'Сумма ДМС-ОМС'], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) masterRecord = MasterRecord() while query.next(): record = query.record() masterRecord.addElement( PatientRecord( forceString(record.value('clientId')), forceString(record.value('externalId')), forceString(record.value('clientName')), formatSex(record.value('sex')), forceDate( record.value('birthDate')).toString('dd.MM.yyyy'), forceDate(record.value('setDate')).toString('dd.MM.yyyy') + '/' + forceDate(record.value('execDate')).toString('dd.MM.yyyy'), forceString(record.value('MKB')), forceString(record.value('KSG')), forceString(record.value('orgStructName')), forceInt(record.value('sum')))) buildTable(table, masterRecord) return doc
class CNetInfo(CRBInfo): tableName = 'rbNet' def __init__(self, context, id): CRBInfo.__init__(self, context, id) def _initByRecord(self, record): self._sexCode = forceInt(record.value('sex')) self._age = forceString(record.value('age')) def _initByNull(self): self._sexCode = 0 self._age = '' sexCode = property(lambda self: self.load()._sexCode) sex = property(lambda self: formatSex(self.load()._sexCode)) age = property(lambda self: self.load()._age)
def toSOAP(self, p, factory): p.a10_dct = self.policyType p.a11_dcs = self.policySerial p.a12_dcn = self.policyNumber p.a13_smcd = self.insurerCode p.a14_trcd = self.insuranceArea p.a15_pfio = self.lastName p.a16_pnm = self.firstName p.a17_pln = self.patrName p.a18_ps = formatSex(self.sex) p.a19_pbd = self.toPyDateTime(self.birthDate) p.a20_pph = self.contacts p.a21_ps = self.docSerial p.a22_pn = self.docNumber p.a23_dt = self.docType p.a24_sl = self.SNILS p.a25_enp = self.ENP
def setEventTypeId(self, eventTypeId, specialityId, flagHospitalization, addActionTypeId, recommendationList, useDiagnosticsAndActionsPresets=True): self.eventTypeId = eventTypeId eventTypeName = getEventName(eventTypeId) showFlags = getEventShowActionsInPlanner(eventTypeId) title = u' Планирование: %s, Пациент: %s, Пол: %s, ДР.: %s ' % ( eventTypeName, self.clientName, formatSex( self.clientSex), forceString(self.clientBirthDate)) QtGui.QDialog.setWindowTitle(self, title) if useDiagnosticsAndActionsPresets: self.prepareDiagnositics(eventTypeId, specialityId) self.prepareActions(eventTypeId, specialityId, showFlags, flagHospitalization, addActionTypeId, recommendationList)
def build(self, params): begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) byPeriod = params.get('byPeriod', False) doctype = params.get('doctype', 0) tempInvalidReason = params.get('tempInvalidReason', None) onlyClosed = params.get('onlyClosed', True) orgStructureId = params.get('orgStructureId', None) personId = params.get('personId', None) durationFrom = params.get('durationFrom', 0) durationTo = params.get('durationTo', 0) sex = params.get('sex', 0) ageFrom = params.get('ageFrom', 0) ageTo = params.get('ageTo', 150) socStatusClassId = params.get('socStatusClassId', None) socStatusTypeId = params.get('socStatusTypeId', None) MKBFilter = params.get('MKBFilter', 0) MKBFrom = params.get('MKBFrom', '') MKBTo = params.get('MKBTo', '') insuranceOfficeMark = params.get('insuranceOfficeMark', 0) db = QtGui.qApp.db tbl = db.table('TempInvalid') tblDiag = db.table('Diagnosis') tblReas = db.table('rbTempInvalidReason') doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.name) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [ ('5%', [u'№'], CReportBase.AlignRight), ('5%', [u'код'], CReportBase.AlignLeft), ('20%', [u'ФИО,\nдата рождения (возраст),\nпол'], CReportBase.AlignLeft), ('25%', [u'Адрес,\nтелефон'], CReportBase.AlignLeft), ('10%', [u'Паспортные данные,\nсерия - номер'], CReportBase.AlignLeft), ('10%', [u'СНИЛС,\nполис'], CReportBase.AlignLeft), ('5%', [u'Шифр МКБ\nТип'], CReportBase.AlignLeft), ('5%', [u'Период'], CReportBase.AlignLeft), ('5%', [u'Дней'], CReportBase.AlignRight), ('5%', [u'Серия\nНомер'], CReportBase.AlignLeft), ('5%', [u'Место работы'], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) n = 0 query = selectData( begDate, endDate, byPeriod, doctype, tempInvalidReason, onlyClosed, orgStructureId, personId, durationFrom, durationTo, sex, ageFrom, ageTo, socStatusClassId, socStatusTypeId, MKBFilter, MKBFrom, MKBTo, insuranceOfficeMark ) self.setQueryText(forceString(query.lastQuery())) while query.next(): n += 1 sumDuration = 0 record = query.record() clientId = forceRef(record.value('client_id')) serial = forceString(record.value('serial')) number = forceString(record.value('number')) caseBegDate = forceDate(record.value('caseBegDate')) # begDate = forceDate(record.value('begDate')) endDate = forceDate(record.value('endDate')) duration = forceInt(record.value('duration')) MKB = forceString(record.value('MKB')) work = forceString(record.value('work')) document = forceString(record.value('doc')) reasonCode = forceString(record.value('code')) prev_id = forceInt(record.value('prev_id')) info = getClientInfo(clientId) name = formatName(info['lastName'], info['firstName'], info['patrName']) nameBDateAndSex = '\n'.join([ name, '%s (%s)' % (formatDate(info['birthDate']), calcAge(info['birthDate'], begDate)), formatSex(info['sexCode']) ]) regAddress = getVal(info, 'regAddress', u'не указан') locAddress = getVal(info, 'locAddress', u'не указан') phones = getClientPhonesEx(clientId) addressAndPhone = regAddress if regAddress else '' addressAndPhone += '\n' + locAddress if locAddress else '' addressAndPhone += '\n' + phones if phones else '' SNILSAndPolicy = '\n'.join([formatSNILS(info['SNILS']), getVal(info, 'policy', u'нет')]) MKBandType = '\n'.join([MKB, reasonCode]) period = '\n'.join([forceString(caseBegDate), forceString(endDate)]) serialAndNumber = '\n'.join([serial, number]) i = table.addRow() table.setText(i, 0, n) table.setText(i, 1, clientId) table.setText(i, 2, nameBDateAndSex) table.setText(i, 3, addressAndPhone) table.setText(i, 4, document) table.setText(i, 5, SNILSAndPolicy) table.setText(i, 6, MKBandType) table.setText(i, 7, period) table.setText(i, 8, duration) table.setText(i, 9, serialAndNumber) table.setText(i, 10, work) if prev_id and onlyClosed: sumDuration += duration extraRows = 0 while prev_id: prev_record = db.getRecordEx( tbl, [ tbl['begDate'], tbl['endDate'], tbl['duration'], tbl['serial'], tbl['number'], tbl['prev_id'], tbl['diagnosis_id'], tbl['tempInvalidReason_id'] ], [tbl['id'].eq(prev_id), tbl['deleted'].eq(0)] ) if prev_record: i = table.addRow() extraRows += 1 begDate = forceDate(prev_record.value('begDate')) endDate = forceDate(prev_record.value('endDate')) duration = forceInt(prev_record.value('duration')) serial = forceString(prev_record.value('serial')) number = forceString(prev_record.value('number')) prev_id = forceInt(prev_record.value('prev_id')) diagnosis_id = forceInt(prev_record.value('diagnosis_id')) reason_id = forceInt(prev_record.value('tempInvalidReason_id')) MKB = forceString(db.translate(tblDiag, tblDiag['id'], diagnosis_id, tblDiag['MKB'])) reason = forceString(db.translate(tblReas, tblReas['id'], reason_id, tblReas['code'])) period = '\n'.join([forceString(begDate), forceString(endDate)]) serialAndNumber = '\n'.join([serial, number]) table.setText(i, 6, MKB + '\n' + reason) table.setText(i, 7, period) table.setText(i, 8, duration) table.setText(i, 9, serialAndNumber) sumDuration += duration i = table.addRow() extraRows += 1 table.setText(i, 7, u'') table.setText(i, 8, u'Всего дней: ' + unicode(sumDuration)) table.mergeCells(i - extraRows, 0, extraRows + 1, 1) table.mergeCells(i - extraRows, 1, extraRows + 1, 1) table.mergeCells(i - extraRows, 2, extraRows + 1, 1) table.mergeCells(i - extraRows, 3, extraRows + 1, 1) table.mergeCells(i - extraRows, 4, extraRows + 1, 1) table.mergeCells(i - extraRows, 5, extraRows + 1, 1) table.mergeCells(i, 6, 1, 2) return doc
def build(self, description, params): def getAddressRecord(record, type=0): if type == 0: prefix = 'reg' else: prefix = 'loc' address = smartDict() address.KLADRCode = forceString(record.value(prefix + 'KLADRCode')) address.KLADRStreetCode = forceString( record.value(prefix + 'KLADRStreetCode')) address.number = forceString(record.value(prefix + 'Number')) address.corpus = forceString(record.value(prefix + 'Corpus')) address.flat = forceString(record.value(prefix + 'Flat')) address.freeInput = forceString(record.value(prefix + 'FreeInput')) return address accountItemIdList = params.get('accountItemIdList', None) currentFinanceId = params.get('currentFinanceId', None) showLocAddr = params.get('showLocAddr', False) query = selectData(accountItemIdList, currentFinanceId, showLocAddr) # now text doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() cursor.setCharFormat(CReportBase.ReportBody) cursor.insertText(description) cursor.insertBlock() if showLocAddr: tableColumns = [ ('3%', [u'№'], CReportBase.AlignRight), ('5%', [u'Номер карты'], CReportBase.AlignCenter), ('10%', [u'СНИЛС'], CReportBase.AlignLeft), ('20%', [u'ФИО'], CReportBase.AlignLeft), ('8%', [u'Дата рождения'], CReportBase.AlignLeft), ('3%', [u'Пол'], CReportBase.AlignCenter), ('12%', [u'Полис'], CReportBase.AlignCenter), ('10%', [u'Документ'], CReportBase.AlignCenter), ('15%', [u'Адрес регистрации'], CReportBase.AlignLeft), ('15%', [u'Адрес проживания'], CReportBase.AlignLeft), ] else: tableColumns = [('3%', [u'№'], CReportBase.AlignRight), ('10%', [u'СНИЛС'], CReportBase.AlignLeft), ('20%', [u'ФИО'], CReportBase.AlignLeft), ('10%', [u'Дата рождения'], CReportBase.AlignLeft), ('3%', [u'Пол'], CReportBase.AlignCenter), ('15%', [u'Полис'], CReportBase.AlignCenter), ('15%', [u'Документ'], CReportBase.AlignCenter), ('20%', [u'Адрес'], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) n = 0 offset = 1 if showLocAddr else 0 self.setQueryText(forceString(query.lastQuery())) while query.next(): n += 1 record = query.record() externalId = forceString(record.value('numberCardCall')) if not externalId: externalId = forceString(record.value('externalId')) name = formatName(record.value('lastName'), record.value('firstName'), record.value('patrName')) birthDate = forceString(record.value('birthDate')) sex = formatSex(forceInt(record.value('sex'))) SNILS = formatSNILS(record.value('SNILS')) policyInfoList = [ forceString(record.value('policySerial')), forceString(record.value('policyNumber')), forceString(record.value('policyInsurer')) ] if showLocAddr: policyInfoList.append( forceString(record.value('policyInsurerName'))) policy = ' '.join(policyInfoList) policyName = forceString(record.value('policyName')) if policyName: policy += '\n' + policyName document = ' '.join([ forceString(record.value('documentSerial')), forceString(record.value('documentNumber')) ]) i = table.addRow() table.setText(i, 0, n) if showLocAddr: table.setText(i, 1, externalId) table.setText(i, 1 + offset, SNILS) table.setText(i, 2 + offset, name) table.setText(i, 3 + offset, birthDate) table.setText(i, 4 + offset, sex) table.setText(i, 5 + offset, policy) table.setText(i, 6 + offset, document) if showLocAddr: from Registry.Utils import formatAddressInt regAddress = formatAddressInt(getAddressRecord(record)) locAddress = formatAddressInt(getAddressRecord(record, 1)) table.setText(i, 7 + offset, regAddress) table.setText(i, 8 + offset, locAddress) else: table.setText(i, 7 + offset, forceString(record.value('address'))) 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 process(self, dbfP, record, codeLPU): db = QtGui.qApp.db birthDate = forceDate(record.value('clientBirthDate')) # Номер стат.талона clientId = forceRef(record.value('clientId')) eventId = forceRef(record.value('eventId')) insurerArea = forceString(record.value('insurerArea')) isAlien = insurerArea[:2] != QtGui.qApp.defaultKLADR()[:2] if not ((clientId, eventId) in self.exportedClients): dbfRecord = dbfP.newRecord() # номер реестра счетов (п. 1 примечаний) обязательное # dbfRecord['NS'] = 123 #self.edtRegistryNumber.value() # тип реестра счетов (п. 2;4 примечаний) обязательное SPR21 # dbfRecord['VS'] = accType # дата формирования реестра счетов (п. 3 примечаний) обязательное dbfRecord['DATS'] = pyDate(QtCore.QDate()) # номер персонального счета обязательное dbfRecord[ 'SN'] = eventId # В импорте ФЛК в этом поле ожидается Event.id # дата формирования персонального счета обязательное dbfRecord['DATPS'] = pyDate(QtCore.QDate()) # код медицинской организации в системе ОМС, # предоставившей медицинскую помощь обязательное SPR01 dbfRecord['CODE_MO'] = codeLPU # ОГРН плательщика dbfRecord['PL_OGRN'] = forceString( record.value('insurerOGRN')) or (self.TF_OGRN if isAlien else '') # фамилия (п. 5 примечаний) обязательное dbfRecord['FIO'] = nameCase( forceString(record.value('clientLastName'))) # имя (п. 5 примечаний) обязательное dbfRecord['IMA'] = nameCase( forceString(record.value('clientFirstName'))) # отчество (п. 5 примечаний) patrName = forceString(record.value('clientPatrName')) dbfRecord['OTCH'] = nameCase(patrName) # пол (М/Ж) (п. 6 примечаний) обязательное dbfRecord['POL'] = formatSex(record.value('clientSex')).upper() # дата рождения (п. 7 примечаний) обязательное dbfRecord['DATR'] = pyDate(birthDate) # СНИЛС dbfRecord['SNILS'] = formatSNILS( forceString(record.value('clientSNILS'))) # статус пациента обязательное SPR40 age = calcAgeInYears(birthDate, QtCore.QDate.currentDate()) # код ОКАТО территории страхования по ОМС обязательное для инокраевых SPR39 dbfRecord['OKATO_OMS'] = forceStringEx( record.value('insurerOKATO')) if not dbfRecord['OKATO_OMS']: insurerName = forceString(record.value('insurerName')) self.log(u'<b><font color=orange>Внимание</font></b>:' \ u' ОКАТО для ОМС "%s" не задан, пытаюсь определить по области страхования!' % insurerName) dbfRecord['OKATO_OMS'] = forceString( db.translate('kladr.KLADR', 'CODE', insurerArea, 'OCATD', idFieldName='CODE')) if not dbfRecord['OKATO_OMS']: self.log(u'<b><font color=red>Внимание</font></b>:' \ u' ОКАТО для ОМС "%s" не задан!' % forceString(record.value('insurerName'))) policyInsuranceArea = forceString( record.value('policyInsuranceArea')) if policyInsuranceArea: dbfRecord['OKATO_OMS'] = forceString( db.translate('kladr.KLADR', 'CODE', policyInsuranceArea, 'OCATD', idFieldName='CODE')) # серия полиса ОМС обязательное dbfRecord['SPS'] = forceString(record.value('policySerial')) # номер полиса ОМС обязательное dbfRecord['SPN'] = forceString(record.value('policyNumber')) # дата начала действия полиса ОМС (п. 8 примечаний) обязательное для инокраевых # серия документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) documentSerial = forceString(record.value('documentSerial')) if documentSerial: dbfRecord['S_DOC'] = documentSerial # номер документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) documentNumber = forceString(record.value('documentNumber')) if documentNumber: dbfRecord['N_DOC'] = documentNumber # Признак новорожденого isLittleStrangerAge = calcAgeInDays( birthDate, forceDate(record.value('eventSetDate'))) < 90 exportAsLittleStranger = isLittleStrangerAge and ( dbfRecord['S_DOC'] == '' and dbfRecord['N_DOC'] == '') # (dbfRecord['SPS'] == '' and dbfRecord['SPN'] == '') and \ # признак "Особый случай" при регистрации обращения # за медицинской помощью (п. 9 примечаний) SPR42 flags = '' if dbfRecord['SPS'] == '' and dbfRecord['SPN'] == '' and forceDate( record.value('eventExecDate')) <= QtCore.QDate( 2016, 9, 30): # нет данных по полису: flags += ' 1' if exportAsLittleStranger: # новорождённый: flags += ' 2' if patrName == '': flags += ' 4' flags += ' ' + self.getSocStatusFederalCode(clientId) dbfRecord['Q_G'] = trim(flags) representativeInfo = self.getClientRepresentativeInfo(clientId) if exportAsLittleStranger and representativeInfo: # статус представителя пациента обязательное для инокраевых SPR41 # dbfRecord['STAT_P'] = representativeInfo.get('relationTypeCode', '0')[:1] # 'C', 1), # фамилия родителя (представителя) пациента (п. 5 примечаний) обязательное для инокраевых dbfRecord['FAMP'] = representativeInfo.get('lastName', '') # имя родителя (представителя) пациента (п. 5 примечаний) обязательное для инокраевых dbfRecord['IMP'] = representativeInfo.get('firstName', '') # отчество родителя (представителя) пациента (п. 5 примечаний) dbfRecord['OTP'] = representativeInfo.get('patrName', '') s = representativeInfo.get('serial', '') n = representativeInfo.get('number', '') # код типа документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) SPR43 dbfRecord['C_DOC'] = representativeInfo.get( 'documentTypeRegionalCode', 18 if s or n else 0) % 100 # серия документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) dbfRecord['S_DOC'] = s # номер документа, удостоверяющего личность пациента (представителя) (п. 10 примечаний) dbfRecord['N_DOC'] = n sexp = representativeInfo.get('sex', 0) dbfRecord[ 'POLP'] = u'М' if sexp == 1 else u'Ж' if sexp == 2 else u'0' dbfRecord['DATRP'] = pyDate( representativeInfo.get('birthDate', None)) dbfRecord['FIO'] = dbfRecord['FAMP'] dbfRecord['IMA'] = dbfRecord['IMP'] dbfRecord['OTCH'] = dbfRecord['OTP'] dbfRecord['POL'] = dbfRecord['POLP'] dbfRecord['DATR'] = dbfRecord['DATRP'] dbfRecord['SNILS'] = formatSNILS( representativeInfo.get('SNILS', '')) dbfRecord['SPS'] = representativeInfo.get('policySerial', '') dbfRecord['SPN'] = representativeInfo.get('policyNumber', '') # код типа документа, удостоверяющего личность пациента (представителя) # (п. 10 примечаний) SPR43 documentRegionalCode = forceInt( record.value('documentTypeRegionalCode')) % 100 if documentRegionalCode and (documentSerial or documentNumber): dbfRecord['C_DOC'] = documentRegionalCode dbfRecord['SPV'] = forceInt(record.value('policyKindCode')) % 10 setDate = forceDate(record.value('eventSetDate')).toPyDate() execDate = forceDate(record.value('eventExecDate')).toPyDate() dbfRecord['DATN'] = setDate dbfRecord['DATO'] = execDate dbfRecord.store() self.exportedClients.add((clientId, eventId))
def build(self, params): db = QtGui.qApp.db accountId = params.get('accountId', None) accountName = getAccountName(accountId) query = selectData(params) isLocRegistry = params.get('isLocRegistry', True) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) format = QtGui.QTextCharFormat() cursor.insertBlock(CReportBase.AlignCenter) format.setFontPointSize(14) if isLocRegistry: cursor.insertText(u'РЕЕСТР СЧЕТОВ', format) else: cursor.insertText(u'РЕЕСТР СЧЕТА № %s' % accountName, format) cursor.insertBlock(CReportBase.AlignCenter) format.setFontPointSize(10) currentOrgInfo = getOrganisationInfo(QtGui.qApp.currentOrgId()) cursor.insertText(u'%(fullName)s; ОГРН: %(OGRN)s' % currentOrgInfo, format) cursor.insertBlock(CReportBase.AlignCenter) dateInterval = { 'begDate': forceString(params.get('begDate', QtCore.QDate())), 'endDate': forceString(params.get('endDate', QtCore.QDate())) } cursor.insertText( u'за период с %(begDate)s по %(endDate)s' % dateInterval, format) cursor.insertBlock(CReportBase.AlignCenter) if isLocRegistry: orgInsurerId = params.get('orgInsurerId', None) if orgInsurerId: insurerOrgInfo = getOrganisationInfo(orgInsurerId) else: insurerOrgInfo = { 'fullName': '______________________________________' } cursor.insertText( u'на оплату медицинской помощи, оказанной застрахованным лицам, в %(fullName)s' % insurerOrgInfo, format) format.setFontPointSize(7) else: cursor.insertText( u'на оплату медицинской помощи, оказанной застрахованным лицам за пределами субъекта Российской Федерации, на территории которого выдан полис обязательного медицинского страхования', format) format.setFontPointSize(8) cursor.insertBlock() cursor.insertBlock() tableColumns = [] tableColumns.append(('10?', [u'№ позиции реестра', str(1)], CReportBase.AlignCenter)) tableColumns.append( ('26?', [u'Фамилия,\nимя,\nотчество\n(при\nналичии)', str(2)], CReportBase.AlignCenter)) tableColumns.append(('6?', [u'Пол', str(3)], CReportBase.AlignCenter)) tableColumns.append(('7?', [u'Дата\nрождения', str(4)], CReportBase.AlignCenter)) tableColumns.append(('7?', [u'Место\nрождения', str(5)], CReportBase.AlignCenter)) tableColumns.append(('7?', [ u'Данные\nдоку-\nмента,\nудосто-\nверяю-\nщего\nличность', str(6) ], CReportBase.AlignCenter)) colOffset = 0 if isLocRegistry: tableColumns.append(('7?', [u'Место\nжитель-\nства', str(7)], CReportBase.AlignCenter)) tableColumns.append(('7?', [u'Место\nрегист-\nрации', str(8)], CReportBase.AlignCenter)) colOffset = 2 tableColumns.append( ('7?', [u'СНИЛС\n(при\nналичии)', str(7 + colOffset)], CReportBase.AlignCenter)) tableColumns.append(('7?', [ u'№ полиса\nобяза-\nтельного\nмеди-\nцинского\nстрахо-\nвания', str(8 + colOffset) ], CReportBase.AlignCenter)) tableColumns.append(('7?', [ u'Вид\nоказан-\nной\nмедицин-\nской\nпомощи\n(код)', str(9 + colOffset) ], CReportBase.AlignCenter)) tableColumns.append( ('7?', [u'Диагноз\nв соот-\nветствии\nс МКБ-10', str(10 + colOffset)], CReportBase.AlignCenter)) if isLocRegistry: tableColumns.append(('7?', [ u'Дата\nначала\nи дата\nокон-\nчания\nлечения', str(11 + colOffset) ], CReportBase.AlignCenter)) colOffset -= 1 else: tableColumns.append( ('7?', [u'Дата\nначала\nлечения', str(11 + colOffset)], CReportBase.AlignCenter)) tableColumns.append( ('7?', [u'Дата\nоконча-\nния\nлечения', str(12 + colOffset)], CReportBase.AlignCenter)) tableColumns.append(('7?', [ u'Объемы\nоказанной\nмедицин-\nской\nпомощи', str(13 + colOffset) ], CReportBase.AlignCenter)) tableColumns.append(('7?', [ u'Профиль\nоказанной\nмедицин-\nской\nпомощи\n(код)', str(14 + colOffset) ], CReportBase.AlignCenter)) tableColumns.append(('7?', [ u'Специ-\nальность\nмедицин-\nского\nработника,\nоказав-\nшего\nмедицин-\nскую\nпомощь\n(код)', str(15 + colOffset) ], CReportBase.AlignCenter)) tableColumns.append(('7?', [ u'Тариф\nна оплату\nмедицин-\nской\nпомощи,\nоказанной\nзастрахо-\nванному\nлицу', str(16 + colOffset) ], CReportBase.AlignCenter)) tableColumns.append(('7?', [ u'Стоимость\nоказанной\nмедицин-\nской\nпомощи', str(17 + colOffset) ], CReportBase.AlignCenter)) tableColumns.append(('7?', [ u'Результат\nобращения\nза меди-\nцинской\nпомощью\n(код)', str(18 + colOffset) ], CReportBase.AlignCenter)) table = createTable(cursor, tableColumns, charFormat=format) count = 0 self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() row = table.addRow() count += 1 sum = forceDouble(record.value('sum')) federalSum = forceDouble(record.value('federalSum')) price = forceDouble(record.value('price')) federalPrice = forceDouble(record.value('federalPrice')) table.setText(row, 0, forceString(count), charFormat=format) table.setText(row, 1, formatName(record.value('lastName'), record.value('firstName'), record.value('patrName')), charFormat=format) table.setText(row, 2, formatSex(record.value('sex')).upper(), charFormat=format) table.setText(row, 3, forceString(record.value('birthDate')), charFormat=format) table.setText(row, 4, forceString(record.value('birthPlace')), charFormat=format) table.setText(row, 5, forceString(record.value('document')), charFormat=format) colOffset = 0 if isLocRegistry: table.setText(row, 6, forceString(record.value('residentAddress')), charFormat=format) table.setText(row, 7, forceString(record.value('registerAddress')), charFormat=format) colOffset = 2 table.setText(row, 6 + colOffset, forceString(record.value('SNILS')), charFormat=format) table.setText(row, 7 + colOffset, forceString(record.value('policy')), charFormat=format) table.setText(row, 8 + colOffset, forceString(record.value('medicalKindCode')), charFormat=format) table.setText(row, 9 + colOffset, forceString(record.value('MKB')), charFormat=format) if isLocRegistry: date = '%s - %s' % (forceString(record.value('begDate')), forceString(record.value('endDate'))) table.setText(row, 10 + colOffset, date, charFormat=format) colOffset -= 1 else: table.setText(row, 10 + colOffset, forceString(record.value('begDate')), charFormat=format) table.setText(row, 11 + colOffset, forceString(record.value('endDate')), charFormat=format) table.setText(row, 12 + colOffset, forceString(record.value('amount')), charFormat=format) table.setText(row, 13 + colOffset, forceString(record.value('medicalProfile')), charFormat=format) table.setText(row, 14 + colOffset, forceString(record.value('specialityCode')), charFormat=format) table.setText(row, 15 + colOffset, QtCore.QString.number(price - federalPrice, 'g', 9), charFormat=format) table.setText(row, 16 + colOffset, QtCore.QString.number(sum - federalSum, 'g', 9), charFormat=format) table.setText(row, 17 + colOffset, forceString(record.value('resultCode')), charFormat=format) cursor.movePosition(cursor.End) cursor.insertBlock(CReportBase.AlignLeft) titles = [] names = [] orgMainStaff = getOrganisationMainStaff(QtGui.qApp.currentOrgId()) colCount = 1 sealOverTitle = 1 if not isLocRegistry: titles = [u'Руководитель медицинской\nорганизации'] names = [orgMainStaff[0]] colCount = 2 sealOverTitle = 2 titles.append(u'Главный бухгалтер') names.append(orgMainStaff[1]) titles.append(u'Исполнитель') names.append(None) cursor.movePosition(cursor.End) cursor.insertBlock(CReportBase.AlignLeft) createAutographField(cursor, titles, names, sealOverTitle=sealOverTitle, colCount=colCount, signLabel=u'(подпись)', transcriptLabel=u'(расшифровка подписи)', charFormat=format) cursor.movePosition(cursor.End) cursor.insertBlock(CReportBase.AlignLeft) cursor.insertText(u'Дата ______________________', format) return doc
def build(self, params): doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() cursor.setCharFormat(QtGui.QTextCharFormat()) columnNames = [ 'showExternalId', 'showName', 'showBirthDate', 'showSex', 'showSocStatus', 'showBenefits', 'showRegAddress', 'showDeliveredBy', 'showDeliveredTime', 'showEventOrder', 'showBegDate', 'showPrimary', 'showOrgStructure', 'showResult', 'showStatus', 'showDiagnosis', 'showAutopsyDiagnosis', 'showTrauma', 'showLeavedDate', 'showBedDays' ] operationColumn = 'showOperations' showColumn = dict([(showColumn, params.get(showColumn, False)) for showColumn in columnNames + [operationColumn]]) baseColumnsDescription = [ ('5?', [u'№ ИБ'], CReportBase.AlignLeft), ('5?', [u'Фамилия И.О.'], CReportBase.AlignLeft), ('5?', [u'Дата рождения'], CReportBase.AlignLeft), ('5?', [u'Пол'], CReportBase.AlignCenter), ('5?', [u'Социальный статус'], CReportBase.AlignLeft), ('5?', [u'Категория'], CReportBase.AlignLeft), ('5?', [u'Постоянная регистрация'], CReportBase.AlignLeft), ('5?', [u'Направлен (канал госпитализации)'], CReportBase.AlignLeft), ('5?', [u'Срок'], CReportBase.AlignLeft), ('5?', [u'Вид поступления'], CReportBase.AlignLeft), ('5?', [u'Дата, время поступления'], CReportBase.AlignLeft), ('5?', [u'Повторно'], CReportBase.AlignLeft), ('5?', [u'Отделение поступления'], CReportBase.AlignLeft), ('5?', [u'Исход'], CReportBase.AlignLeft), ('5?', [u'Состояние'], CReportBase.AlignLeft), ('5?', [u'Диагноз клинический'], CReportBase.AlignLeft), ('5?', [u'Диагноз патологоанатомический'], CReportBase.AlignLeft), ('5?', [u'Травма\nОбстоятельства'], CReportBase.AlignLeft), ('5?', [u'Дата выписки'], CReportBase.AlignLeft), ('5?', [u'Койко-дней'], CReportBase.AlignLeft) ] operationColumnsDescription = [ ('5?', [u'Дата операции'], CReportBase.AlignLeft), ('5?', [u'Отделение'], CReportBase.AlignLeft), ('5?', [u'Операция'], CReportBase.AlignLeft), ('5?', [u'Количество'], CReportBase.AlignLeft), ('5?', [u'Экстренно'], CReportBase.AlignLeft) ] tableColumns = [ baseColumnsDescription[i] for i, colName in enumerate(columnNames) if showColumn[colName] ] if showColumn[operationColumn]: tableColumns.extend(operationColumnsDescription) table = createTable(cursor, tableColumns) columnIndex = {} for col in columnNames + [operationColumn]: columnIndex[col] = len(columnIndex) byPeriod = params.get('byPeriod', False) leavedDate = params.get('leavedDate', QtCore.QDate()) byReceivedDate = params.get('byReceivedDate', False) receivedBegDate = params.get('receivedBegDate', QtCore.QDate()) receivedEndDate = params.get('receivedEndDate', QtCore.QDate()) byLeavedDate = params.get('byLeavedDate', True) leavedBegDate = params.get('leavedBegDate', QtCore.QDate()) leavedEndDate = params.get('leavedEndDate', QtCore.QDate()) orgStructureId = params.get('orgStructureId', None) # detailByOrgStructure = orgStructureId is None eventOrderMap = { 1: u'плановый', 2: u'экстренный', 3: u'самотеком', 4: u'принудительный', 5: u'неотложный' } eventIsPrimaryMap = { 1: u'первичный', 2: u'повторный', 3: u'активное посещение', 4: u'перевозка' } query = selectDataByEvents(byPeriod, leavedDate, byReceivedDate, receivedBegDate, receivedEndDate, byLeavedDate, leavedBegDate, leavedEndDate, orgStructureId) self.setQueryText(forceString(query.lastQuery())) reportData = [] while query.next(): record = query.record() # orgStructureId = forceRef(record.value('orgStructureId')) # leavedActionId = forceRef(record.value('leavedActionId')) clientId = forceRef(record.value('clientId')) eventId = forceRef(record.value('eventId')) eventExternalId = forceString(record.value('eventExternalId')) order = forceInt(record.value('eventOrder')) isPrimary = forceInt(record.value('eventIsPrimary')) # result = forceString(record.value('result')) # receivedOrgStructure = forceString(record.value('receivedOrgStructure')) begDate = forceDateTime(record.value('begDate')) leavedDate = forceDate(record.value('leavedDate')) bedDays = forceInt(record.value('bedDays')) receivedActionId = forceRef(record.value('receivedActionId')) statCardActionId = forceRef(record.value('statCardActionId')) firstExaminationActionId = forceRef( record.value('firstExaminationActionId')) traumatologistActionId = forceRef( record.value('traumatologistActionId')) epicrisisId = forceRef(record.value('epicrisisActionId')) autopsyActionId = forceRef(record.value('autopsyActionId')) clientRecord = getClientRecord(clientId) lastName = forceString(clientRecord.value('lastName')) firstName = forceString(clientRecord.value('firstName')) patrName = forceString(clientRecord.value('patrName')) birthDate = forceDate(clientRecord.value('birthDate')) sex = clientRecord.value('sex') regAddress = forceString(clientRecord.value('regAddress')) rowData = [ eventExternalId if showColumn['showExternalId'] else None, formatShortName(lastName, firstName, patrName) if showColumn['showName'] else None, birthDate.toString('dd/MM/yyyy') if showColumn['showBirthDate'] else None, formatSex(sex) if showColumn['showSex'] else None, getActionPropertyString(statCardActionId, u'Социальный статус:') if showColumn['showSocStatus'] else None, getActionPropertyString(statCardActionId, u'Категория льготности:') if showColumn['showBenefits'] else None, regAddress if showColumn['showRegAddress'] else None, getActionPropertyOrganisation(receivedActionId, u'Кем доставлен') if showColumn['showDeliveredBy'] else None, getActionPropertyString(receivedActionId, u'Доставлен') if showColumn['showDeliveredTime'] else None, eventOrderMap.get(order, u'') if showColumn['showEventOrder'] else None, begDate.toString('dd/MM/yyyy hh:mm') if showColumn['showBegDate'] else None, eventIsPrimaryMap.get(isPrimary, u'') if showColumn['showPrimary'] else None, getActionPropertyOrgStructure(receivedActionId, u'Направлен в отделение') if showColumn['showOrgStructure'] else None, getActionPropertyString(statCardActionId, u'Исход госпитализации:') if showColumn['showResult'] else None, getActionPropertyString(firstExaminationActionId, u'Status praesens:%Общее состояние:') if showColumn['showStatus'] else None, getActionPropertyString(epicrisisId, u'Основное заболевание:') if showColumn['showDiagnosis'] else None, getActionPropertyString(autopsyActionId, u'Патолого-Анатомический диагноз%') if showColumn['showAutopsyDiagnosis'] else None, getActionPropertyString(traumatologistActionId, u'Травма:') if showColumn['showTrauma'] else None, leavedDate.toString('dd/MM/yyyy') if showColumn['showLeavedDate'] else None, bedDays if showColumn['showBedDays'] else None ] eventRow = [ data for colName, data in zip(columnNames, rowData) if showColumn[colName] ] operations = [] if showColumn[operationColumn]: operationsQuery = getOperationsInfo(eventId) while operationsQuery.next(): operation = operationsQuery.record() operationRow = [ forceDate( operation.value('date')).toString('dd/MM/yyyy'), forceString(operation.value('orgStructure')), forceString(operation.value('operationName')), forceInt(operation.value('amount')), u'экстренно' if forceBool(operation.value('isUrgent')) else u'' ] operations.append(operationRow) reportData.append({'row': eventRow, 'operations': operations}) for event in reportData: eventRow = event['row'] eventOperations = event['operations'] row = table.addRow() for col, text in enumerate(eventRow): table.setText(row, col, text) for i, operationRow in enumerate(eventOperations): if i != 0: row = table.addRow() for col, text in enumerate(operationRow): table.setText(row, len(eventRow) + col, text) operationsCount = len(eventOperations) for col in xrange(len(eventRow)): table.mergeCells(row - operationsCount + 1, col, operationsCount, 1) return doc
def setEventTypeId(self, eventTypeId, recommendationList, useDiagnosticsAndActionsPresets=True): eventTypeRecord = QtGui.qApp.db.getRecord('EventType', ['name'], eventTypeId) eventTypeName = forceString(eventTypeRecord.value('name')) title = u'Планирование: %s, Пациент: %s, Пол: %s, ДР.: %s '% (eventTypeName, self.__clientName, formatSex(self.__clientSex), forceString(self.__clientBirthDate)) QtGui.QDialog.setWindowTitle(self, title) self.prepareDiagnostics(eventTypeId) if useDiagnosticsAndActionsPresets: # self.prepareDiagnostics(eventTypeId) self.prepareActions(eventTypeId, recommendationList)
def build(self, params): doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) format = QtGui.QTextCharFormat() cursor.insertBlock() format.setFontPointSize(14) format.setFontWeight(QtGui.QFont.Bold) accountDate, sender, recipient = self.getAccountInfo(params.get('accountId', None)) cursor.insertText(u'РЕЕСТР счетов за %s на %s.' % (forceString(accountDate), u'оплату расходов по проведенной диспансеризации подростков')) cursor.insertBlock() cursor.insertBlock() format.setFontPointSize(8) format.setFontWeight(QtGui.QFont.Normal) cursor.insertText(u'Учреждение-отправитель: %s' % sender) cursor.insertBlock() cursor.insertBlock() cursor.insertText(u'Учреждение-получатель: %s' % recipient) format.setFontPointSize(8) tableColumns = [ ('?', [u'№ п/п', u'', u'1'], CReportBase.AlignLeft), ('?', [u'Фамилия', u'', u'2'], CReportBase.AlignCenter), ('?', [u'Имя', u'', u'3'], CReportBase.AlignCenter), ('?', [u'Отчество', u'', u'4'], CReportBase.AlignCenter), ('?', [u'Пол', u'', u'5'], CReportBase.AlignCenter), ('?', [u'Дата рождения', u'', u'6'], CReportBase.AlignCenter), ('?', [u'Адрес по месту регистрации', u'', u'7'], CReportBase.AlignCenter), ('?', [u'Серия и номер полиса', u'', u'8'], CReportBase.AlignCenter), ('?', [u'СМО', u'', u'9'], CReportBase.AlignCenter), ('?', [u'Диагноз по МКБ 10 (основной)', u'', u'10'], CReportBase.AlignCenter), ('?', [u'Даты осмотров врачами-специалистами, проведения лабораторных и функциональных исследований', u'педиатр', u'11'], CReportBase.AlignCenter), ('?', [u'', u'невролог', u'12'], CReportBase.AlignCenter), ('?', [u'', u'офтальмолог', u'13'], CReportBase.AlignCenter), ('?', [u'', u'детский хирург', u'14'], CReportBase.AlignCenter), ('?', [u'', u'оториноларинголог', u'15'], CReportBase.AlignCenter), ('?', [u'', u'акушер-гинеколог', u'16'], CReportBase.AlignCenter), ('?', [u'', u'травматолог-ортопед', u'17'], CReportBase.AlignCenter), ('?', [u'', u'детский стоматолог', u'18'], CReportBase.AlignCenter), ('?', [u'', u'детский уролог-андролог', u'19'], CReportBase.AlignCenter), ('?', [u'', u'детский эндокринолог', u'20'], CReportBase.AlignCenter), ('?', [u'', u'клин. анализ крови', u'21'], CReportBase.AlignCenter), ('?', [u'', u'клин. анализ мочи', u'22'], CReportBase.AlignCenter), ('?', [u'', u'анализ кала', u'23'], CReportBase.AlignCenter), ('?', [u'', u'осмотр глазного дна', u'24'], CReportBase.AlignCenter), ('?', [u'УЗИ', u'щитовидной железы', u'25'], CReportBase.AlignCenter), ('?', [u'', u'молочных желез', u'26'], CReportBase.AlignCenter), ('?', [u'', u'органов малого таза', u'27'], CReportBase.AlignCenter), ('?', [u'', u'яичек', u'28'], CReportBase.AlignCenter), ('?', [u'Цена', u'', u'29'], CReportBase.AlignCenter), ('?', [u'Федеральная цена', u'', u'30'], CReportBase.AlignCenter), ('?', [u'Норматив затрат на проведение диспансеризации', u'', u'31'], CReportBase.AlignCenter), ] table = createTable(cursor, tableColumns, 3) for i in xrange(0, 10): #Объединение (вертикальное) для первых 10 полей table.mergeCells(0, i, 2, 1) table.mergeCells(0, 10, 1, 14) #Объединение ячеек для поля "Даты осмотров врачами..." table.mergeCells(0, 24, 1, 4) #Объединение для поля "УЗИ" table.mergeCells(0, 29, 1, 1) #Объединение (вертикальное) для поля "Норматив затрат на проведение диспансеризации" self.prepareActionTypeGroups() query = selectData(params) n = 0 fullSum = 0.0 fullFederalSum = 0.0 self.setQueryText(forceString(query.lastQuery())) while query.next(): n += 1 record = query.record() i = table.addRow() sex = formatSex(record.value('sex')).upper() price = forceDouble(record.value('price')) federalPrice = forceDouble(record.value('federalPrice')) sum = forceDouble(record.value('sum')) federalSum = forceDouble(record.value('federalSum')) table.setText(i, 0, n, format) table.setText(i, 1, forceString(record.value('lastName')), format) table.setText(i, 2, forceString(record.value('firstName')), format) table.setText(i, 3, forceString(record.value('patrName')), format) table.setText(i, 4, sex, format) table.setText(i, 5, forceString(forceDate(record.value('birthDate'))), format) table.setText(i, 6, formatAddress(forceRef(record.value('addressId'))), format) table.setText(i, 7, forceString(record.value('policySN')), format) table.setText(i, 8, forceString(record.value('policyInsurer')), format) table.setText(i, 9, forceString(record.value('MKB')), format) eventId = forceString(record.value('event_id')) diagDates = getDiagDates(eventId, self.dpSpecialityMap) table.setText(i, 10, forceString(diagDates.get('PEDIATR', '-')), format) table.setText(i, 11, forceString(diagDates.get('NEVROL', '-')), format) table.setText(i, 12, forceString(diagDates.get('OFTAL', '-')), format) table.setText(i, 13, forceString(diagDates.get('HIRURG', '-')), format) table.setText(i, 14, forceString(diagDates.get('OTOLAR', '-')), format) table.setText(i, 15, forceString(diagDates.get('GINEKOL', '-')), format) table.setText(i, 16, forceString(diagDates.get('ORTOPED', '-')), format) table.setText(i, 17, forceString(diagDates.get('STOMAT', '-')), format) table.setText(i, 18, forceString(diagDates.get('ANDROL', '-')), format) table.setText(i, 19, forceString(diagDates.get('ENDOKR', '-')), format) analysisDates = getAnalysisDates(eventId, self.dpAnalysisMap) table.setText(i, 20, forceString(analysisDates.get('AN_KROV', '-')), format) table.setText(i, 21, forceString(analysisDates.get('AN_MOCH', '-')), format) table.setText(i, 22, forceString(analysisDates.get('AN_KAL', '-')), format) table.setText(i, 23, forceString(analysisDates.get('GLAZ_DNO', '-')), format) table.setText(i, 24, forceString(analysisDates.get('USI_SHC', '-')), format) table.setText(i, 25, forceString(analysisDates.get('USI_MJ', '-')), format) table.setText(i, 26, forceString(analysisDates.get('USI_MT', '-')), format) table.setText(i, 27, forceString(analysisDates.get('USI_YI', '-')), format) table.setText(i, 28, QtCore.QString.number(price, 'g', 9), format) table.setText(i, 29, QtCore.QString.number(federalPrice, 'g', 9), format) table.setText(i, 30, QtCore.QString.number(sum, 'g', 9), format) fullSum += sum fullFederalSum += federalSum cursor.movePosition(cursor.End) cursor.insertBlock() cursor.insertBlock() cursor.insertText(u'ВСЕГО ПРЕДСТАВЛЕНО К ОПЛАТЕ:') cursor.insertBlock() cursor.insertText(u'По территориальному тарифу на сумму: %s' % QtCore.QString.number(fullSum - fullFederalSum, 'f', 2)) cursor.insertBlock() cursor.insertText(u'По дополнительному тарифу на сумму: %s' % QtCore.QString.number(fullFederalSum, 'f', 2)) cursor.insertBlock() createAutographField(cursor, [u'Гл. врач', u'Гл. бухгалтер'], getOrganisationMainStaff(QtGui.qApp.currentOrgId()), format) return doc
def build(self, params): begDate = getVal(params, 'begDate', QtCore.QDate()) endDate = getVal(params, 'endDate', QtCore.QDate()) eventTypeId = getVal(params, 'eventTypeId', None) onlyPayedEvents = getVal(params, 'onlyPayedEvents', False) begPayDate = getVal(params, 'begPayDate', QtCore.QDate()) endPayDate = getVal(params, 'endPayDate', QtCore.QDate()) workOrgId = getVal(params, 'workOrgId', None) onlyPermanentAttach = getVal(params, 'onlyPermanentAttach', None) db = QtGui.qApp.db reportData = [] query = selectData(begDate, endDate, eventTypeId, onlyPayedEvents, begPayDate, endPayDate, workOrgId, onlyPermanentAttach) while query.next(): record = query.record() clientId = forceInt(record.value('clientId')) Client = getClientInfo(clientId) lastName = Client['lastName'] firstName = Client['firstName'] patrName = Client['patrName'] sex = formatSex(Client['sexCode']) birthDate = Client['birthDate'].toString('dd.MM.yyyy') policy = '' policyRecord = getClientPolicy(clientId) if policyRecord: serial = forceString(policyRecord.value('serial')) number = forceString(policyRecord.value('number')) policy = serial + ' ' + number document = '' documentRecord = getClientDocument(clientId) if documentRecord: documentType_id = forceInt( documentRecord.value('documentType_id')) documentTypeTable = db.table('rbDocumentType') documentTypeRecord = db.getRecord(documentTypeTable, 'name', documentType_id) if documentTypeRecord: document = forceString(documentTypeRecord.value(0)) + ' ' serial = forceString(documentRecord.value('serial')) number = forceString(documentRecord.value('number')) document += (serial + ' ' + number) address = '' ClientAddress = getClientAddress(clientId, 0) if ClientAddress: address_id = ClientAddress.value('address_id') address = formatAddress(address_id) eventTypeName = forceString(record.value('eventTypeName')) execDate = forceDate( record.value('execDate')).toString('dd.MM.yyyy') healthGroup = forceInt(record.value('healthGroup_id')) MKB = forceString(record.value('MKB')) reportData.append([ clientId, lastName, firstName, patrName, sex, birthDate, policy, document, address, eventTypeName, execDate, healthGroup, MKB ]) 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.AlignLeft), ('6%', [u'идентификатор клиента'], CReportBase.AlignLeft), ('10%', [u'Фамилия'], CReportBase.AlignLeft), ('10%', [u'Имя'], CReportBase.AlignLeft), ('10%', [u'Отчество'], CReportBase.AlignLeft), ('2%', [u'Пол'], CReportBase.AlignLeft), ('8%', [u'д/рождения'], CReportBase.AlignLeft), ('8%', [u'Полис'], CReportBase.AlignLeft), ('18%', [u'документ'], CReportBase.AlignLeft), ('50%', [u'Адрес'], CReportBase.AlignLeft), ('15%', [u'Тип события'], CReportBase.AlignLeft), ('8%', [u'дата окончания'], CReportBase.AlignLeft), ('2%', [u'группа'], CReportBase.AlignLeft), ('4%', [u'Закл.МКБ'], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) for row in reportData: i = table.addRow() table.setText(i, 0, i) for j in xrange(len(row)): table.setText(i, j + 1, row[j]) return doc
def build(self, params): begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) workOrgId = params.get('workOrgId', None) sex = params.get('sex', 0) ageFrom = params.get('ageFrom', 0) ageTo = params.get('ageTo', 150) areaIdEnabled = params.get('areaIdEnabled', False) areaId = params.get('areaId', None) MKBFilter = params.get('MKBFilter', 0) MKBFrom = params.get('MKBFrom', 'A00') MKBTo = params.get('MKBTo', 'Z99.9') MKBExFilter = params.get('MKBExFilter', 0) MKBExFrom = params.get('MKBExFrom', 'A00') MKBExTo = params.get('MKBExTo', 'Z99.9') personId = params.get('personId', None) specialityId = params.get('specialityId', None) rowGrouping = params.get('rowGrouping', 0) orgStructureAttachTypeId = params.get('orgStructureAttachTypeId', None) 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), ('11%', [u'ФИО'], CReportBase.AlignLeft), ('2%', [u'пол'], CReportBase.AlignCenter), ('6%', [u'д.р.'], CReportBase.AlignLeft), ('5%', [u'СНИЛС'], CReportBase.AlignLeft), ('8%', [u'Полис'], CReportBase.AlignLeft), ('8%', [u'Документ'], CReportBase.AlignLeft), ('17%', [u'Адрес'], CReportBase.AlignLeft), ('7%', [u'Контакты'], CReportBase.AlignLeft), ('9%', [u'Занятость'], CReportBase.AlignLeft), ('8%', [u'Льгота'], CReportBase.AlignLeft), ('5%', [u'Дата взятия на учет'], CReportBase.AlignLeft), ('5%', [u'Дата последнего Д - осмотра'], CReportBase.AlignLeft), ('8%', [u'Врач'], CReportBase.AlignLeft), ('7%', [u'МКБ'], CReportBase.AlignRight), ('10%', [u'Примечание'], CReportBase.AlignLeft) ] table = createTable(cursor, tableColumns) query = selectData(begDate, endDate, workOrgId, sex, ageFrom, ageTo, areaIdEnabled, areaId, MKBFilter, MKBFrom, MKBTo, MKBExFilter, MKBExFrom, MKBExTo, personId, specialityId, rowGrouping, self.forChildren, orgStructureAttachTypeId) if rowGrouping == 3: # by personId forceKeyVal = forceRef keyValToString = lambda personId: forceString( QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id', personId, 'name')) elif rowGrouping == 2: # by speciality_id forceKeyVal = forceRef keyValToString = lambda specialityId: forceString( QtGui.qApp.db.translate('rbSpeciality', 'id', specialityId, 'name')) elif rowGrouping == 1: # by orgStructureId forceKeyVal = forceRef keyValToString = lambda orgStructureId: forceString( QtGui.qApp.db.translate('OrgStructure', 'id', orgStructureId, 'name')) prevRowKey = '' count = 0 n = 0 countViewClient = 1 self.setQueryText(forceString(query.lastQuery())) currentClient = None while query.next(): record = query.record() clientId = forceInt(record.value('id')) name = formatName(record.value('lastName'), record.value('firstName'), record.value('patrName')) birthDate = forceString(record.value('birthDate')) sex = formatSex(forceInt(record.value('sex'))) SNILS = formatSNILS(record.value('SNILS')) policy = ' '.join([ forceString(record.value('policySerial')), forceString(record.value('policyNumber')), forceString(record.value('insurer')) ]) document = ' '.join([ forceString(record.value('documentSerial')), forceString(record.value('documentNumber')) ]) regAddress = forceString(record.value('regAddress')) locAddress = forceString(record.value('locAddress')) MKB = forceString(record.value('MKB')) # endDate = forceDate(record.value('endDate')) contacts = forceString(record.value('contact')) socStatus = forceString(record.value('socStatus')) dateAccount = forceDate( record.value('dateAccount')).toString('dd.MM.yyyy') dateView = forceDate( record.value('dateView')).toString('dd.MM.yyyy') person = forceString(record.value('person')) work = ' '.join([ forceString(record.value('workName')), forceString(record.value('workPost')) ]) firstInPeriod = forceString(record.value('firstInPeriod')) if rowGrouping: rowKey = forceKeyVal(record.value('rowKey')) if prevRowKey and rowKey != prevRowKey: i = table.addRow() if not rowKey: table.setText(i, 1, u'всего по ' + '-', CReportBase.TableTotal) else: table.setText( i, 1, u'всего по ' + keyValToString(prevRowKey), CReportBase.TableTotal) table.setText(i, 2, n, CReportBase.TableTotal) table.mergeCells(i, 2, 1, 15) n = 0 if rowKey != prevRowKey: i = table.addRow() table.mergeCells(i, 0, 1, 15) i = table.addRow() if not rowKey: table.setText(i, 0, '-', CReportBase.TableTotal) else: table.setText(i, 0, keyValToString(rowKey), CReportBase.TableTotal) table.mergeCells(i, 0, 1, 15) prevRowKey = rowKey i = table.addRow() if not self.forChildren: currentClient = None if currentClient != clientId: currentDateAccount = None if self.forChildren: for column in xrange(15): if column not in (14, 13, 12, 11): table.mergeCells(i - countViewClient, column, countViewClient, 1) n += 1 table.setText(i, 0, n) table.setText(i, 1, name) table.setText(i, 2, sex) table.setText(i, 3, birthDate) table.setText(i, 4, SNILS) table.setText(i, 5, policy) table.setText(i, 6, document) table.setText(i, 7, regAddress + '\n' + locAddress) table.setText(i, 8, contacts) table.setText(i, 9, work) table.setText(i, 10, socStatus) table.setText(i, 11, dateAccount) table.setText(i, 12, dateView) table.setText(i, 13, person) table.setText(i, 14, MKB) if self.forChildren: table.setText(i, 15, firstInPeriod) count += 1 countViewClient = 1 currentClient = clientId countDateAccount = 1 else: countViewClient += 1 if dateAccount != currentDateAccount: table.mergeCells(i - countDateAccount, 11, countDateAccount, 1) table.setText(i, 11, dateAccount) currentDateAccount = dateAccount countDateAccount = 0 table.setText(i, 12, dateView) table.setText(i, 13, person) table.setText(i, 14, MKB) if self.forChildren: table.setText(i, 15, firstInPeriod) countDateAccount += 1 if rowGrouping: i = table.addRow() table.setText(i, 1, u'всего по ' + keyValToString(rowKey), CReportBase.TableTotal) table.setText(i, 2, n) table.mergeCells(i, 2, 1, 15) i = table.addRow() table.setText(i, 1, u'ВСЕГО', CReportBase.TableTotal) table.setText(i, 2, count, CReportBase.TableTotal) table.mergeCells(i, 2, 1, 15) if self.forChildren: sex = params.get('sex', 0) query = selectResultData(begDate, endDate, workOrgId, sex, ageFrom, ageTo, areaIdEnabled, areaId, MKBFilter, MKBFrom, MKBTo, MKBExFilter, MKBExFrom, MKBExTo, personId, self.forChildren, orgStructureAttachTypeId) self.setQueryText(forceString(query.lastQuery())) if query.first(): record = query.record() count = forceInt(record.value('count')) countInFirst = forceInt(record.value('countInFirst')) i = table.addRow() table.mergeCells(i, 0, 1, 2) table.mergeCells(i, 2, 1, 14) table.setText(i, 0, u'Всего состоит: ') table.setText(i, 2, count) i = table.addRow() table.mergeCells(i, 0, 1, 2) table.mergeCells(i, 2, 1, 14) table.setText(i, 0, u'Всего взято впервые: ') table.setText(i, 2, countInFirst) return doc
def _load(self): db = QtGui.qApp.db tablePerson = db.table('Person') record = db.getRecord(tablePerson, '*', self.personId) if record: self._code = forceString(record.value('code')) self._federalCode = forceString(record.value('federalCode')) self._regionalCode = forceString(record.value('regionalCode')) self._lastName = forceString(record.value('lastName')) self._firstName = forceString(record.value('firstName')) self._patrName = forceString(record.value('patrName')) self._sexCode = forceInt(record.value('sex')) self._sex = formatSex(self._sexCode) self._birthDate = CDateInfo(record.value('birthDate')) self._birthPlace = forceString(record.value('birthPlace')) self._ageTuple = calcAgeTuple(self._birthDate.date, QtCore.QDate.currentDate()) self._age = formatAgeTuple(self._ageTuple, self._birthDate.date, QtCore.QDate.currentDate()) self._SNILS = formatSNILS(forceString(record.value('SNILS'))) self._office = forceString(record.value('office')) self._office2 = forceString(record.value('office2')) self._post = self.getInstance(CPostInfo, forceRef(record.value('post_id'))) self._speciality = self.getInstance( CSpecialityInfo, forceRef(record.value('speciality_id'))) self._organisation = self.getInstance( COrgInfo, forceRef(record.value('org_id'))) self._orgStructure = self.getInstance( COrgStructureInfo, forceRef(record.value('orgStructure_id'))) self._academicDegree = forceInt(record.value('academicDegree')) self._tariffCategory = self.getInstance( CTariffCategoryInfo, forceRef(record.value('tariffCategory_id'))) self._login = forceString(record.value('login')) self._maritalStatus = forceInt(record.value('maritalStatus')) self._contactNumber = forceString(record.value('contactNumber')) self._regType = forceInt(record.value('regType')) self._regBegDate = forceDate(record.value('regBegDate')) self._regEndDate = forceDate(record.value('regEndDate')) self._isReservist = forceInt(record.value('isReservist')) self._employmentType = forceInt(record.value('employmentType')) self._occupationType = forceInt(record.value('occupationType')) self._citizenship_id = forceInt(record.value('citizenship_id')) self._education = self.getInstance(CPersonEducationItemInfoList, self.personId) self._INN = forceString(record.value('INN')) self._document = self.getInstance(CPersonDocumentInfo, self.personId) self._addressRegistry = self.getInstance( CPersonAddressRegistryInfoList, self.personId) self._addressResidentional = self.getInstance( CPersonAddressResidentionalInfoList, self.personId) self._finance_id = forceInt(record.value('finance_id')) self._awards = self.getInstance(CPersonAwardsInfoList, self.personId) return True else: return False