def loadItems(self): items = [] if self._orgStructure: items.append((None, u'<все>')) osList = getOrgStructureDescendants(self._orgStructure) for item in self._db.getRecordList( self._tbl, (self._tbl_ah['KLADRStreetCode'], ), self._tbl_osa['master_id'].inlist(osList), self._tbl_ah['KLADRStreetCode'], True): items.append( (forceString(item.value('KLADRStreetCode')), getStreetName(forceString(item.value('KLADRStreetCode'))) or u'<пусто>')) return items
def data(self, index, role=QtCore.Qt.DisplayRole): column = index.column() row = index.row() if row < len(self.items): if role == QtCore.Qt.EditRole: return toVariant(self.items[row][column]) if role == QtCore.Qt.DisplayRole: if column == 0: code = self.items[row][column] return toVariant(getCityName(code) if code else None) if column == 1: code = self.items[row][column] return toVariant(getStreetName(code) if code else None) else: return toVariant(self.items[row][column]) elif row == len(self.items): if role == QtCore.Qt.EditRole: if column == 0: return toVariant('7800000000000') return QtCore.QVariant()
def loadChildren(self): if not self._orgStructureId: return [] items = [ CStreetItem(self, u'<все>', (None, None), self._orgStructureId) ] db = QtGui.qApp.db # type: library.database.CMySqlDatabase tbl_osa = db.table('OrgStructure_Address') tbl_ah = db.table('AddressHouse') tbl = tbl_osa.innerJoin(tbl_ah, tbl_osa['house_id'].eq(tbl_ah['id'])) for item in db.getRecordList( tbl, (tbl_ah['KLADRStreetCode'], ), tbl_osa['master_id'].inlist( getOrgStructureDescendants(self._orgStructureId)), tbl_ah['KLADRStreetCode'], True): items.append( CStreetItem( self, getStreetName(forceString(item.value('KLADRStreetCode'))) or u'<пусто>', (forceString(item.value('KLADRStreetCode')), None), self._orgStructureId)) return items
def formatAddressHL7(clientId): if forceRef(clientId): # <улица> ^ <другое указание> ^ <город> ^ <штат, провинция или другая административная единица> ^ # <почтовый индекс> ^ <страна> ^ <тип> ^ <другие географические указания> parts = [] freeInput, KLADRCode, KLADRStreetCode, number, corpus, flat = \ getClientAddressEx(clientId) other = [] if KLADRStreetCode: parts.append(getStreetName(KLADRStreetCode)) if number: other.append(u'д. ' + number) if corpus: other.append(u'к. ' + corpus) if flat: other.append(u'кв. ' + flat) if other != []: parts.append(' ,'.join(other)) if KLADRCode: parts.append(getCityName(KLADRCode)) return '^'.join(parts) return ''
def genDetalizationByHouses(self, itemID, table, params, parentRow=-1): endDate = params.get('endDate', QtCore.QDate()) ageFrom = params.get('ageFrom', 0) ageTo = params.get('ageTo', 150) socStatusClassId = params.get('socStatusClassId', None) socStatusTypeId = params.get('socStatusTypeId', None) query = selectDataByHouses(endDate, ageFrom, ageTo, itemID, socStatusTypeId, socStatusClassId) reportData = {} mapAreaIdToNetId = {} mapNetIdToNet = {} while query.next(): record = query.record() age = forceInt(record.value('clientAge')) sex = forceInt(record.value('clientSex')) netId = getOrgStructureNetId(itemID) net = CNet(netId) if net.applicable(sex, fakeAgeTuple(age)): reportRow = { 'street': '', 'num': '', 'total': 0, 'mp': 0, 'mnp': 0, 'wp': 0, 'wnp': 0, 'attached': 0, 'confirmed': 0 } houseID = forceInt(record.value('HouseID')) street = forceString(record.value('street')) num = forceString(record.value('num')) build = forceString(record.value('build')) mp = forceBool(record.value('MenPensioner')) wp = forceBool(record.value('WomPensioner')) mnp = forceBool(record.value('MenNonPensioner')) wnp = forceBool(record.value('WomNonPensioner')) cnt = forceInt(record.value('cnt')) attached = forceBool(record.value('Attached')) confirmed = forceBool(record.value('confirmed')) if not houseID in reportData.keys(): reportRow['street'] = getStreetName(street) reportRow['num'] = num if build: reportRow['num'] = reportRow['num'] + u' к.' + build reportData[houseID] = reportRow if mp: reportData[houseID]['mp'] += cnt if mnp: reportData[houseID]['mnp'] += cnt if wp: reportData[houseID]['wp'] += cnt if wnp: reportData[houseID]['wnp'] += cnt if attached: reportData[houseID]['attached'] += cnt if confirmed: reportData[houseID]['confirmed'] += cnt reportData[houseID]['total'] += cnt cnt = 0 for house in reportData.keys(): #распихаем всё по столбикам таблицы и дело с концом i = table.addRow() table.setText(i, 0, reportData[house]['street']) table.setText(i, 1, reportData[house]['num']) table.setText(i, 2, reportData[house]['total']) table.setText(i, 3, reportData[house]['mnp']) table.setText(i, 4, reportData[house]['mp']) table.setText(i, 5, reportData[house]['wnp']) table.setText(i, 6, reportData[house]['wp']) table.setText(i, 7, reportData[house]['attached']) table.setText(i, 8, reportData[house]['confirmed']) cnt += reportData[house]['confirmed'] if parentRow >= 0: table.setText(parentRow, 8, cnt, CReportBase.TableTotal, clearBefore=True)
def writeStaffId(self, record, eventType): isRetired = forceBool(record.value('retired')) id = forceInt(record.value('id')) INN = forceString(record.value('INN')) SNILS = forceString(record.value('SNILS')) document = getPersonDocument(id) regAddress = getPersonAddress(id, 0) localAddress = getPersonAddress(id, 1) self.writeStartElement('n:STF') sex = forceString(record.value('sex')) if INN: self.writeStartElement('n:STF.2') self.writeTextElement('n:CX.1', INN) self.writeTextElement('n:CX.5', 'TAX') self.writeEndElement() # stf.2 if SNILS: self.writeStartElement('n:STF.2') self.writeTextElement('n:CX.1', SNILS) self.writeTextElement('n:CX.5', 'PEN') self.writeEndElement() # stf.2 if forceString(record.value('federalCode')): self.writeStartElement('n:STF.2') self.writeTextElement('n:CX.1', forceString(record.value('federalCode'))) self.writeTextElement('n:CX.5', 'SR') self.writeEndElement() # stf.2 if forceString(record.value('regionalCode')): self.writeStartElement('n:STF.2') self.writeTextElement('n:CX.1', forceString(record.value('regionalCode'))) self.writeTextElement('n:CX.5', 'RRI') self.writeEndElement() # stf.2 if document: docNumber = u'%s %s' % (forceString(document.value('serial')),\ forceString(document.value('number'))) docDate = forceDate(document.value('date')) self.writeStartElement('n:STF.2') self.writeTextElement('n:CX.1', docNumber) self.writeTextElement('n:CX.5', 'PPN') if document.value('origin'): self.writeStartElement('n:CX.6') self.writeTextElement('n:HD.1', forceString(document.value('origin'))) self.writeEndElement() #cx.6 dateStr = forceDate(document.value('date')).toString('yyyyMMdd') if dateStr: self.writeStartElement('n:CX.7') self.writeTextElement('n:TS.1', dateStr) self.writeEndElement() # cx.7 self.writeTextElement('n:CX.7', 'PPN') self.writeEndElement() # stf.2 if sex: self.writeTextElement('n:STF.5', sex) self.writeStartElement('n:STF.3') self.writeStartElement('n:XPN.1') self.writeTextElement('n:FN.1', forceString(record.value('lastName'))) self.writeEndElement() # xpn.1 self.writeTextElement('n:XPN.2', forceString(record.value('firstName'))) self.writeTextElement('n:XPN.3', forceString(record.value('patrName'))) self.writeTextElement('n:XPN.7', 'L') self.writeEndElement() # stf.3 dateStr = forceDate(record.value('birthDate')).toString('yyyyMMdd') if dateStr: self.writeStartElement('n:STF.6') self.writeTextElement('n:TS.1', dateStr) self.writeEndElement() # stf.6 self.writeTextElement('n:STF.7', 'I' if isRetired else 'A') if regAddress: regAddressId = forceRef(regAddress.value('address_id')) if regAddressId: address = getAddress(regAddressId) self.writeStartElement('n:STF.11') #self.writeTextElement('n:XAD.5', ) # zip code (index) self.writeTextElement('n:XAD.7', 'L') if address.freeInput: self.writeTextElement('n:XAD.8', u'%s' % (address.freeInput)) else: self.writeTextElement('n:XAD.8', u'%s, %s, д.%s, корпус. %s, кв. %s' % ( getCityName(address.KLADRCode), getStreetName(address.KLADRStreetCode), address.number, address.corpus, address.flat)) self.writeEndElement() # stf.11 if localAddress: localAddressId = forceRef(localAddress.value('address_id')) if localAddressId: address = getAddress(localAddressId) self.writeStartElement('n:STF.11') #self.writeTextElement('n:XAD.5', ) # zip code (index) self.writeTextElement('n:XAD.7', 'H') if address.freeInput: self.writeTextElement('n:XAD.8', u'%s' % (address.freeInput)) else: self.writeTextElement('n:XAD.8', u'%s, %s, д.%s, корпус. %s, кв. %s' % ( getCityName(address.KLADRCode), getStreetName(address.KLADRStreetCode), address.number, address.corpus, address.flat)) self.writeEndElement() # stf.11 if forceString(record.value('birthPlace')): self.writeStartElement('n:STF.11') #self.writeTextElement('n:XAD.5', ) # zip code (index) self.writeTextElement('n:XAD.3', forceString(record.value('birthPlace'))) self.writeTextElement('n:XAD.6', 'RUS') self.writeTextElement('n:XAD.7', 'N') self.writeEndElement() # stf.11 if eventType == 1: # прием на работу if forceString(record.value('org_name')): hireDate = getPersonHireDate(id) if hireDate: self.writeStartElement('n:STF.12') self.writeStartElement('n:DIN.1') self.writeTextElement('n:TS.1', hireDate.toString('yyyyMMdd')) self.writeEndElement() # din.1 self.writeStartElement('n:DIN.2') self.writeTextElement('n:CE.1', forceString(record.value('org_OKPO'))) self.writeTextElement('n:CE.2', forceString(record.value('org_name'))) self.writeTextElement('n:CE.3', '1.2.643.2.40.5.0.7') self.writeTextElement('n:CE.4', forceString(record.value('org_OGRN'))) self.writeTextElement('n:CE.6', '1.2.643.2.40.3.1') self.writeEndElement() # din.2 self.writeEndElement() # stf.12 else: raise CException(u'Отсутствует приказ о приеме на работу.') if eventType == 6: # увольнение с работы if forceString(record.value('org_name')): fireDate = getPersonFireDate(id) if fireDate: self.writeStartElement('n:STF.12') self.writeStartElement('n:DIN.1') self.writeTextElement('n:TS.1', fireDate.toString('yyyyMMdd')) self.writeEndElement() # din.1 self.writeStartElement('n:STF.13') self.writeStartElement('n:DIN.2') self.writeTextElement('n:CE.1', forceString(record.value('org_OKPO'))) self.writeTextElement('n:CE.2', forceString(record.value('org_name'))) self.writeTextElement('n:CE.3', '1.2.643.2.40.5.0.7') self.writeTextElement('n:CE.4', forceString(record.value('org_OGRN'))) self.writeTextElement('n:CE.6', '1.2.643.2.40.3.1') self.writeEndElement() # din.2 self.writeEndElement() # stf.13 else: raise CException(u'Отсутствует приказ об увольнении с работы.') self.writeTextElement('n:STF.18', forceString(record.value('post_name'))) self.writeStartElement('n:STF.19') self.writeTextElement('n:JCC.1', forceString(record.value('post_code'))) self.writeTextElement('n:JCC.3', forceString(record.value('post_name'))) self.writeEndElement() #stf.19 self.writeEndElement()
def writePatientPerson(self, record): self.writeStartElement('patientPerson') self.writeStartElement('name') self.writeTextElement('family', forceString(record.value('lastName'))) self.writeTextElement('given', forceString(record.value('firstName'))) if forceString(record.value('patrName')): self.writeTextElement('given', forceString(record.value('patrName'))) self.writeEndElement() if forceString(record.value('clientContact')) and forceString( record.value('contactTypeCode')): contactType = forceInt(record.value('contactTypeCode')) if contactType == 4: type = u'mailto:' else: type = u'tel:' self.writeStartElement('telecom') self.writeAttribute( 'value', type + forceString(record.value('clientContact'))) self.writeEndElement() self.writeStartElement('administrativeGenderCode') self.writeAttribute('code', forceString(record.value('sex'))) self.writeAttribute('codeSystem', u'1.2.643.5.1.13.2.1.1.156') self.writeEndElement() self.writeStartElement('birthTime') if forceTime(record.value('birthTime')).toString('hhmmss') != '000000': self.writeAttribute( 'value', forceDate(record.value('birthDate')).toString('yyyyMMdd') + forceTime(record.value('birthTime')).toString('hhmmss')) else: self.writeAttribute( 'value', forceDate(record.value('birthDate')).toString('yyyyMMdd')) self.writeEndElement() KLADRCode = forceString(record.value('KLADRCode')) KLADRStreetCode = forceString(record.value('KLADRStreetCode')) freeInput = forceString(record.value('freeInput')) if freeInput or KLADRCode: self.writeStartElement('addr') if forceInt(record.value('KLADRCode')) and forceInt( record.value('KLADRStreetCode')): houseNumber = forceString(record.value('houseNumber')) houseCorpus = forceString(record.value('corpus')) flat = forceString(record.value('flat')) if KLADRCode: self.writeTextElement('country', u'Российская Федерация') region = getMainRegionName(KLADRCode) city = getCityName(KLADRCode) # FIXME: лучше, наверное, определять города федерального подчинения по полю STATUS в кладре. if region != city: self.writeTextElement('state', region) self.writeTextElement('city', city) self.writeTextElement('unitID', KLADRCode) #FIXME: если выгрузка будет медленно работать, возможно стоит заменить getStreetName на обработку полей из уже имеющегося запроса if KLADRStreetCode: self.writeTextElement('streetName', getStreetName(KLADRStreetCode)) if houseNumber: self.writeTextElement('houseNumber', houseNumber) # FIXME: что делать с корпусом??? if flat: self.writeTextElement('additionalLocator', flat) if freeInput: self.writeTextElement('streetAddressLine', freeInput) self.writeEndElement() self.writeComment(u'социальный статус') #self.writeAsMemberSoc(record) self.writeComment(u'льготная категория населения') #self.writeAsMemberFacilities(record) self.writeComment(u'СНИЛС') if forceString(record.value('SNILS')): self.writeAsOtherDsSNILS(record) self.writeComment(u'ОМС') if forceString(record.value('policyNumber')) and forceString(record.value('policySerial')) and forceString(record.value('insurerName'))\ or forceString(record.value('policyNumber')) and forceString(record.value('policySerial')): self.writeAsOtherDsOMS(record) self.writeComment(u'паспорт') if forceString(record.value('documentNumber')) and forceString(record.value('documentSerial')) and forceString(record.value('documentOrg'))\ or forceString(record.value('documentNumber')) and forceString(record.value('documentSerial')): self.writeAsOtherDsPass(record) self.writeComment(u'место рождения') #self.writeBirthPlace(record) self.writeEndElement()
def build(self, params): date = params['date'] age_start = params['ageFrom'] age_end = params['ageTo'] soc_class = params['socStatusClassId'] soc_type = params['socStatusTypeId'] org_structure = params['orgStructureId'] address_street = params['addressStreet'] address_house = params['addressHouse'] query = select_data(date, age_start, age_end, soc_class, soc_type, org_structure, address_street, address_house) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) columns = ( ('%30', [u'Улица'], CReportBase.AlignLeft), ('%30', [u'Дом'], CReportBase.AlignLeft), ('%30', [u'Квартира'], CReportBase.AlignLeft), ('%30', [u'Ф.И.О.'], CReportBase.AlignLeft), ('%30', [u'Год рождения'], CReportBase.AlignLeft), ('%30', [u'Дата постановки на учет'], CReportBase.AlignLeft), ('%30', [u'Диагноз'], CReportBase.AlignLeft), ) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() table = createTable(cursor, columns) last = { 'street': '', 'street_row': 1, 'house': '', 'house_row': 1, 'flat': '', 'flat_row': 1, } def merge_flat(row): table.mergeCells(last['flat_row'], 2, (row - last['flat_row']), 1) def merge_house(row): table.mergeCells(last['house_row'], 1, (row - last['house_row']), 1) merge_flat(row) last['flat'] = '' last['flat_row'] = row def merge_street(row): table.mergeCells(last['street_row'], 0, (row - last['street_row']), 1) merge_house(row) last['house'] = '' last['house_row'] = row while query.next(): rec = query.record() i = table.addRow() street = forceString(rec.value('street')) if street != last['street']: merge_street(i) table.setText(i, 0, getStreetName(street)) last['street'] = street last['street_row'] = i house = forceString(rec.value('house')) if house != last['house']: merge_house(i) table.setText(i, 1, house) last['house'] = house last['house_row'] = i flat = forceString(rec.value('flat')) if flat != last['flat']: merge_flat(i) table.setText(i, 2, flat) last['flat'] = flat last['flat_row'] = i table.setText(i, 3, forceString(rec.value('name'))) table.setText(i, 4, forceString(rec.value('birthYear'))) table.setText(i, 5, forceString(rec.value('monitoringStart'))) table.setText(i, 6, forceString(rec.value('diagnosis'))) merge_street(table.rows()) return doc