示例#1
0
    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
示例#2
0
 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)
示例#3
0
 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
示例#4
0
 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
示例#5
0
 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
示例#6
0
 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)
示例#7
0
    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
示例#8
0
文件: Utils.py 项目: dio4/vista_1
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)
示例#9
0
文件: Types.py 项目: dio4/vista_1
 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
示例#10
0
 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)
示例#11
0
    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
示例#12
0
    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
示例#13
0
    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
示例#14
0
    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))
示例#15
0
    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
示例#16
0
    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
示例#17
0
    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)
示例#18
0
 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
示例#19
0
    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
示例#20
0
    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
示例#21
0
    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