コード例 #1
0
 def getPersonFullNameStr(self, personId):
     if self.mapPersonFullName.has_key(personId):
         return self.mapPersonFullName[personId]
     else:
         personInfo = getPersonInfo(personId)
         str = formatFullPersonNameHL7(personInfo, self.personCode)
         self.mapPersonFullName[personId] = str
         return str
コード例 #2
0
    def dumpParams(self, cursor, params):
        description = []
        db = QtGui.qApp.db

        def dateRangeAsStr(begDate, endDate):
            result = ''
            if begDate:
                result += u' с ' + forceString(begDate)
            if endDate:
                result += u' по ' + forceString(endDate)
            return result

        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        begDateBeforeRecord = params.get('begDateBeforeRecord', QtCore.QDate())
        endDateBeforeRecord = params.get('endDateBeforeRecord', QtCore.QDate())
        orgStructureId = params.get('orgStructureId', None)
        specialityId = params.get('specialityId', None)
        personId = params.get('personId', None)
        chkPeriodRecord = params.get('chkPeriodRecord', None)
        chkPeriodBeforeRecord = params.get('chkPeriodBeforeRecord', None)
        if chkPeriodRecord:
            if begDate or endDate:
                description.append(u'за период' +
                                   dateRangeAsStr(begDate, endDate))
        if chkPeriodBeforeRecord:
            if begDateBeforeRecord or endDateBeforeRecord:
                description.append(
                    u'период предварительной записи' +
                    dateRangeAsStr(begDateBeforeRecord, endDateBeforeRecord))
        if orgStructureId:
            description.append(u'подразделение: ' +
                               getOrgStructureFullName(orgStructureId))
        else:
            description.append(u'подразделение: ЛПУ')
        if specialityId:
            description.append(u'специальность: ' + forceString(
                db.translate('rbSpeciality', 'id', specialityId, 'name')))
        if personId:
            personInfo = getPersonInfo(personId)
            description.append(u'врач: ' + personInfo['shortName'] + ', ' +
                               personInfo['specialityName'])
        description.append(u'отчёт составлен: ' +
                           forceString(QtCore.QDateTime.currentDateTime()))
        columns = [('100?', [], CReportBase.AlignLeft)]
        table = createTable(cursor,
                            columns,
                            headerRowCount=len(description),
                            border=0,
                            cellPadding=2,
                            cellSpacing=0)
        for i, row in enumerate(description):
            table.setText(i, 0, row)
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()
コード例 #3
0
ファイル: F025TrDialog.py プロジェクト: dio4/vista_1
 def getEventInfo(self):
     result = {}
     result['person'] = getPersonInfo(self.personId)
     result['cardNo'] = forceString(self.edtCardNo.text())
     result['order'] = EventOrder.getName(self.cmbOrder.currentIndex())
     result['traumaType'] = forceString(self.cmbTraumaType.currentText())
     result['MKB'] = forceString(self.edtMKB.text())
     result['MKBName'] = getMKBName(result['MKB'])
     result['MKBEx'] = forceString(self.edtMKBEx.text())
     result['MKBExName'] = getMKBName(result['MKBEx'])
     result['date'] = forceString(self.eventDate)
     result['client'] = getClientInfoEx(self.clientId, self.eventDate)
     return result
コード例 #4
0
    def getDescription(self, params):
        def dateRangeAsStr(begDate, endDate):
            result = ''
            if begDate:
                result += u' с ' + forceString(begDate)
            if endDate:
                result += u' по ' + forceString(endDate)
            return result

        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        personId = params.get('personId', None)
        if params.get('cmbOrgStructure', False):
            lstOrgStructure = params.get('lstOrgStructure', None)
            orgStructureId = None
        else:
            lstOrgStructure = None
            orgStructureId = params.get('orgStructureId', None)
        rowGrouping = params.get('rowGrouping', None)
        reportDate = params.get('reportDate', None)

        rows = []
        if begDate or endDate:
            rows.append(u'за период' + dateRangeAsStr(begDate, endDate))
        if personId:
            personInfo = getPersonInfo(personId)
            rows.append(u'врач: ' + personInfo['shortName'] + ', ' +
                        personInfo['specialityName'])
        if orgStructureId:
            rows.append(u'подразделение: ' +
                        getOrgStructureFullName(orgStructureId))
        if rowGrouping != None:
            rows.append(
                u'группировка: ' +
                [u'по подразделениям', u'по специальности', u'по врачам'
                 ][rowGrouping])
        if reportDate:
            rows.append(u'отчёт составлен: ' + forceString(reportDate))
        else:
            rows.append(u'отчёт составлен: ' +
                        forceString(QtCore.QDateTime.currentDateTime()))

        return rows
コード例 #5
0
    def writeTXA(self, record):
        personId = forceRef(record.value('person_id'))
        personInfo = getPersonInfo(personId)

        if personInfo:
            self.writeStartElement('n:TXA')
            self.writeTextElement('n:TXA.2', u'Жалобы')
            date = forceDateTime(record.value('Date'))
            self.writeStartElement('n:TXA.3')
            self.writeTextElement(u'n:TS.1', date.toString('yyyyMMddhhmmss'))
            self.writeEndElement()
            self.writeTextElement('n:TXA.4',
                                  u'BJ0001 %s' % personInfo['fullName'])
            self.writeEndElement()
            self.writeStartElement('n:OBX')
            self.writeTextElement('n:OBX.2', 'FT')
            self.writeTextElement('n:OBX.3', 'Rec111')
            self.writeTextElement('n:OBX.5', '')
            self.writeTextElement('n:OBX.11', 'R')
コード例 #6
0
    def writePV1(self, record):
        personId = forceRef(record.value('visitPersonId'))
        personInfo = getPersonInfo(personId)

        if personInfo:
            self.writeStartElement('n:PV1')
            self.writeTextElement('n:PV1.2', 'I')
            self.writeTextElement('n:PV1.7',
                                  u'BJ0001 %s' % personInfo['fullName'])
            self.writeTextElement('n:PV1.14', 'SM')
            self.writeTextElement(
                'n:PV1.19', u'SVST_%d' % forceInt(record.value('visit_id')))
            date = forceDate(record.value('Date'))
            self.writeStartElement('n:PV1.44')
            self.writeTextElement(u'n:TS.1', date.toString('yyyyMMdd'))
            self.writeEndElement()
            self.writeStartElement('n:PV1.45')
            self.writeTextElement(u'n:TS.1', date.toString('yyyyMMdd'))
            self.writeEndElement()
            self.writeEndElement()
コード例 #7
0
    def build(self, params):
        db = QtGui.qApp.db
        doc = QtGui.QTextDocument()

        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(
            u'Список выписанных рецептов для льготных категорий граждан')
        cursor.insertBlock()
        cursor.insertBlock()

        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        orgStructureId = params.get('orgStructureId', None)
        financeId = params.get('typeFinanceId', None)
        recipeStatus = params.get('recipeStatus', 0)
        cursor.setCharFormat(QtGui.QTextCharFormat())
        cursor.insertText(u'За период с ' +
                          forceString(begDate.toString('dd.MM.yyyy')) +
                          u' по ' +
                          forceString(endDate.toString('dd.MM.yyyy')))
        cursor.insertBlock()
        cursor.insertText(u'Источник финансирования: ' + (
            forceString(db.translate('rbFinance', 'id', financeId, 'name')
                        ) if financeId else u'все'))
        cursor.insertBlock()
        cursor.insertText(u'Код льготной категории граждан: ')
        socStatusId = params.get('socStatusType', None)
        if socStatusId:
            socStatusCode = forceString(
                db.translate('rbSocStatusType', 'id', socStatusId, 'code'))
            socStatusName = forceString(
                db.translate('rbSocStatusType', 'id', socStatusId, 'name'))
            cursor.insertText(socStatusCode + u' ' + socStatusName)
        else:
            cursor.insertText(u'все')
        cursor.insertBlock()
        cursor.insertText(u'Подразделение: ' + (getOrgStructureFullName(
            orgStructureId) if orgStructureId else u'ЛПУ'))
        cursor.insertBlock()
        cursor.insertText(u'Врач: ')
        personId = params.get('personId', None)
        if personId:
            personInfo = getPersonInfo(personId)
            cursor.insertText(personInfo['fullName'] + u', ' +
                              personInfo['specialityName'] + u', ' +
                              personInfo['code'])
        else:
            cursor.insertText(u'все')
        cursor.insertBlock()
        cursor.insertText(u'Статус рецепта: ' +
                          recipeStatusNames[recipeStatus])
        cursor.insertBlock()
        cursor.insertBlock()

        tableColumns = [
            ('5%', [u'Код пациента', u''], CReportBase.AlignLeft),
            ('13%', [u'Ф.И.О. пациента', u''], CReportBase.AlignLeft),
            ('7%', [u'Дата рождения', u''], CReportBase.AlignLeft),
            ('11%', [u'СНИЛС', u''], CReportBase.AlignLeft),
            ('5%', [u'Код льготной категории', u''], CReportBase.AlignLeft),
            ('7%', [u'№ карты беременной', u''], CReportBase.AlignLeft),
            ('11%', [u'Серия и номер рецепта', u''], CReportBase.AlignLeft),
            ('7%', [u'Дата выписки', u''], CReportBase.AlignLeft),
            ('5%', [u'Код МКБ', u''], CReportBase.AlignLeft),
            ('7%', [u'Лекарственное средство', u'МНН'], CReportBase.AlignLeft),
            ('8%', [u'', u'Торговое наименование'], CReportBase.AlignLeft),
            ('7%', [u'', u'Количество единиц'], CReportBase.AlignLeft),
            ('13%', [u'Ф.И.О., спец-ть врача, таб. №'], CReportBase.AlignLeft),
            ('3%', [u'ВК'], CReportBase.AlignLeft),
        ]
        table = createTable(cursor, tableColumns)
        table.mergeCells(0, 9, 1, 2)
        table.mergeCells(0, 0, 2, 1)
        table.mergeCells(0, 1, 2, 1)
        table.mergeCells(0, 2, 2, 1)
        table.mergeCells(0, 3, 2, 1)
        table.mergeCells(0, 4, 2, 1)
        table.mergeCells(0, 5, 2, 1)
        table.mergeCells(0, 6, 2, 1)
        table.mergeCells(0, 7, 2, 1)
        table.mergeCells(0, 8, 2, 1)
        table.mergeCells(0, 9, 1, 3)
        # table.mergeCells(0, 11, 1, 2)
        table.mergeCells(0, 12, 2, 1)
        table.mergeCells(0, 13, 2, 1)
        rowSize = len(tableColumns)

        clientIdSet = set()
        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            clientId = forceInt(record.value('clientId'))
            clientIdSet.add(clientId)
            i = table.addRow()
            table.setText(i, 0, clientId)
            table.setText(i, 1, forceString(record.value('clientName')))
            table.setText(i, 2, forceString(record.value('birthDate')))
            table.setText(i, 3, forceString(record.value('SNILS')))
            table.setText(i, 4, forceString(record.value('socCode')))
            table.setText(i, 5, forceString(record.value('pregCard')))
            table.setText(i, 6, forceString(record.value('recipeNumber')))
            table.setText(i, 7, forceString(record.value('recipeDate')))
            table.setText(i, 8, forceString(record.value('mkb')))
            table.setText(i, 9, forceString(record.value('drugMNN')))
            table.setText(i, 10, forceString(record.value('drugTrade')))
            table.setText(i, 11, forceString(record.value('drugCount')))
            table.setText(i, 12, forceString(record.value('person')))
            table.setText(i, 13, forceString(record.value('isVk')))

        i = table.addRow()
        table.mergeCells(i, 0, 1, rowSize)
        table.setText(i,
                      0,
                      u'Количество пациентов: ' + str(len(clientIdSet)),
                      charFormat=CReportBase.TableTotal)
        i = table.addRow()
        table.mergeCells(i, 0, 1, rowSize)
        table.setText(i,
                      0,
                      u'Количество рецептов: ' + str((i - 3)),
                      charFormat=CReportBase.TableTotal)
        return doc
コード例 #8
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
コード例 #9
0
    def createTableForPerson(self, cursor, personId, timeRange, office, times,
                             queue, params):
        begDate = getVal(params, 'begDateDailyJournal', QtCore.QDate())
        orderSorting = getVal(params, 'orderSorting', None)
        isPrimary = getVal(params, 'isPrimary', None)
        accountingSystem = getVal(params, 'accountingSystemId', None)
        isFreeTimes = forceBool(getVal(params, 'isFreeTimes', 0))
        isViewBirthDate = forceBool(getVal(params, 'isViewBirthDate', 0))
        isViewRegAdress = forceBool(getVal(params, 'isViewRegAdress', 0))

        isPrimaryList = [u'Нет', u'Да']
        orderSortingList = [
            u'clientIdentifier' if accountingSystem else u'Client.id',
            u'ActionProperty_Time.value',
            u'Client.lastName, Client.firstName, Client.patrName'
        ]

        db = QtGui.qApp.db
        tableAction = db.table('Action')
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertBlock()
        cursor.setCharFormat(CReportBase.ReportBody)
        personInfo = getPersonInfo(personId)

        orgStructureId = forceInt(
            db.translate('Person', 'id', personId, 'orgStructure_id'))
        if times:
            lenQueue = len(queue) if queue else 0
            diff = len(times) - lenQueue
            if diff < 0:
                times.extend([None] * (-diff))
            elif diff > 0:
                queue.extend([None] * diff)
        orgStructureName = forceString(
            db.translate('OrgStructure', 'id', orgStructureId, 'name'))

        boldChars = QtGui.QTextCharFormat()
        boldChars.setFontWeight(QtGui.QFont.Bold)
        columns = [('25%', [], CReportBase.AlignLeft),
                   ('50%', [], CReportBase.AlignLeft),
                   ('25%', [], CReportBase.AlignLeft)]
        table = createTable(cursor,
                            columns,
                            headerRowCount=1,
                            border=0,
                            cellPadding=2,
                            cellSpacing=0)

        table.setText(0, 0, forceString(begDate), charFormat=boldChars)
        table.setText(0,
                      1,
                      forceString(begDate.longMonthName(begDate.month())),
                      charFormat=boldChars)
        table.setText(0,
                      2,
                      forceString(begDate.longDayName(begDate.dayOfWeek())),
                      charFormat=boldChars)
        row = table.addRow()
        table.setText(row, 0, u'')
        table.setText(row,
                      1,
                      u'Карточка предварительной записи больных',
                      charFormat=boldChars)
        table.setText(row, 2, u'')
        row = table.addRow()
        table.setText(row, 0, u'к врачу:')
        table.setText(
            row, 1,
            u'%s(%s)' % (orgStructureName, personInfo['specialityName']))
        table.setText(row, 2, u'кабинет %s' % (office))
        row = table.addRow()
        table.setText(row, 0, u'')
        table.setText(row, 1, personInfo['fullName'])
        table.setText(row, 2, u'')
        row = table.addRow()
        table.setText(row, 0, u'часы приема:')
        table.setText(row, 1, timeRange)
        table.setText(row, 2, u'')
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()

        cursor.insertText(u'\nпервичные: %s\n' %
                          (forceString(isPrimaryList[isPrimary])))
        cursor.insertText(
            u'идентификатор: %s\n' %
            (forceString(
                db.translate('rbAccountingSystem', 'id', accountingSystem,
                             'name')) if accountingSystem else
             u'идентификатор пациента в лечебном учреждении'))
        cursor.setCharFormat(CReportBase.ReportBody)
        cursor.insertBlock()
        cols = [
            ('3%', [u'№'], CReportBase.AlignRight),
            ('2%', [u'П'], CReportBase.AlignLeft),
            ('15%', [u'Идентификатор'], CReportBase.AlignLeft),
            ('5%', [u'Время'], CReportBase.AlignLeft),
            ('20%', [u'ФИО'], CReportBase.AlignLeft),
            ('5%', [u'Дата рождения' if isViewBirthDate else u'Возраст'],
             CReportBase.AlignLeft),
            ('25%',
             [u'Адрес регистрации' if isViewRegAdress else u'Прикрепление'
              ], CReportBase.AlignLeft),
            ('25%', [u'Примечание'], CReportBase.AlignLeft),
        ]
        table = createTable(cursor, cols)
        cnt = 1
        clientIdList = []
        actionIdList = []
        colsStmt = u''
        if accountingSystem:
            colsStmt = u''', 
            (   
                SELECT ClientIdentification.identifier
                FROM ClientIdentification
                WHERE ClientIdentification.client_id = Client.id 
                    AND ClientIdentification.accountingSystem_id = %d 
                    AND ClientIdentification.deleted = 0
                ORDER BY ClientIdentification.id DESC
                LIMIT 1
            ) AS clientIdentifier
            ''' % (accountingSystem)

        stmt = u'''
        SELECT
            QueueEvent.client_id AS clientId,
            DATE(QueueEvent.setDate) AS date,
            ActionProperty_Time.value AS time,
            ActionProperty_Action.index AS indexAPA,
            QueueAction.person_id AS personId,
            QueueAction.note AS note,
            Action.note AS noteAction,
            QueueAction.id AS queueActionId,
            ActionProperty.action_id AS ambActionId,
            Client.lastName, Client.firstName, Client.patrName,
            Client.birthDate AS birthDate,
            age(Client.birthDate, %s) AS clientAge,
            getClientLocAddress(Client.id) AS locAddress,
            (
                SELECT CONCAT(rbAttachType.name COLLATE utf8_general_ci, ', прикреплен с: ', ClientAttach.begDate)
                FROM ClientAttach INNER JOIN rbAttachType ON ClientAttach.attachType_id = rbAttachType.id
                WHERE ClientAttach.client_id = Client.id AND ClientAttach.deleted = 0 AND ClientAttach.endDate IS NULL
                ORDER BY ClientAttach.id DESC
                LIMIT 1
            ) AS clientAttachInfo %s
        FROM Action AS QueueAction
            LEFT JOIN ActionType AS QueueActionType ON QueueActionType.id = QueueAction.actionType_id
            LEFT JOIN Event AS QueueEvent ON QueueEvent.id = QueueAction.event_id
            INNER JOIN Client ON Client.id = QueueEvent.client_id
            LEFT JOIN EventType AS QueueEventType ON QueueEventType.id = QueueEvent.eventType_id
            LEFT JOIN ActionProperty_Action ON ActionProperty_Action.value = QueueAction.id
            LEFT JOIN ActionProperty ON ActionProperty.id = ActionProperty_Action.id
            LEFT JOIN Action ON Action.id = ActionProperty.action_id
            LEFT JOIN ActionType ON ActionType.id = Action.actionType_id
            LEFT JOIN ActionPropertyType AS APTTime ON APTTime.actionType_id = ActionType.id AND APTTime.name='times'
            LEFT JOIN ActionProperty AS APTime ON APTime.type_id = APTTime.id AND APTime.action_id = Action.id
            LEFT JOIN ActionProperty_Time ON ActionProperty_Time.id = APTime.id AND ActionProperty_Time.index = ActionProperty_Action.index
            LEFT JOIN Event ON Event.id = Action.event_id
            LEFT JOIN EventType ON EventType.id = Event.eventType_id
        WHERE QueueAction.deleted = 0
            AND QueueActionType.code = 'queue'
            AND QueueEvent.deleted = 0
            AND QueueEventType.code = 'queue'
            AND Action.deleted = 0
            AND ActionType.code = 'amb'
            AND Event.deleted = 0
            AND EventType.code = '0'
            AND QueueAction.person_id = %d
            AND DATE(QueueEvent.setDate) = DATE(%s)
        ORDER BY %s
        ''' % (tableAction['begDate'].formatValue(begDate), colsStmt, personId,
               tableAction['begDate'].formatValue(begDate),
               orderSortingList[orderSorting])

        query = QtGui.qApp.db.query(stmt)
        recordInfo = {}
        while query.next():
            record = query.record()
            if record:
                clientId = forceRef(record.value('clientId'))
                if clientId and (clientId not in clientIdList):
                    stmt = u'''
                    SELECT
                        QueueAction.person_id AS personId,
                        QueueAction.id AS queueActionId
                    FROM Action AS QueueAction
                        LEFT JOIN ActionType AS QueueActionType ON QueueActionType.id = QueueAction.actionType_id
                        LEFT JOIN Event AS QueueEvent ON QueueEvent.id = QueueAction.event_id
                        LEFT JOIN EventType AS QueueEventType ON QueueEventType.id = QueueEvent.eventType_id
                        LEFT JOIN ActionProperty_Action ON ActionProperty_Action.value = QueueAction.id
                        LEFT JOIN ActionProperty ON ActionProperty.id = ActionProperty_Action.id
                        LEFT JOIN Action ON Action.id = ActionProperty.action_id
                        LEFT JOIN ActionType ON ActionType.id = Action.actionType_id
                        LEFT JOIN ActionPropertyType AS APTTime ON APTTime.actionType_id = ActionType.id AND APTTime.name='times'
                        LEFT JOIN ActionProperty AS APTime ON APTime.type_id = APTTime.id AND APTime.action_id = Action.id
                        LEFT JOIN ActionProperty_Time ON ActionProperty_Time.id = APTime.id AND ActionProperty_Time.index = ActionProperty_Action.index
                        LEFT JOIN Event ON Event.id = Action.event_id
                        LEFT JOIN EventType ON EventType.id = Event.eventType_id
                    WHERE QueueAction.deleted = 0
                        AND QueueActionType.code = 'queue'
                        AND QueueEvent.deleted = 0
                        AND QueueEventType.code = 'queue'
                        AND Action.deleted = 0
                        AND ActionType.code = 'amb'
                        AND Event.deleted = 0
                        AND EventType.code = '0'
                        AND DATE(QueueEvent.setDate) = DATE(%s)
                        AND QueueEvent.client_id = %d
                    ORDER BY ActionProperty_Time.value
                    LIMIT 1
                    ''' % (tableAction['begDate'].formatValue(begDate),
                           clientId)
                    queryIsPrimary = QtGui.qApp.db.query(stmt)
                    while queryIsPrimary.next():
                        recordClient = queryIsPrimary.record()
                        queueActionId = forceRef(
                            recordClient.value('queueActionId'))
                        personClientId = forceRef(
                            recordClient.value('personId'))
                        if personClientId and (personClientId == personId
                                               ) and (clientId
                                                      not in clientIdList):
                            clientIdList.append(clientId)
                            actionIdList.append(queueActionId)
                if not isFreeTimes:
                    actionId = forceRef(record.value('queueActionId'))
                    if isPrimary and (actionId in actionIdList):
                        cnt = self.printDailyJournal(cnt, table, record, u'П',
                                                     accountingSystem,
                                                     clientId, isViewBirthDate,
                                                     isViewRegAdress)
                    elif not isPrimary:
                        cnt = self.printDailyJournal(
                            cnt, table, record,
                            u'П' if actionId in actionIdList else u'',
                            accountingSystem, clientId, isViewBirthDate,
                            isViewRegAdress)
                else:
                    indexAPA = forceInt(record.value('indexAPA'))
                    if not recordInfo.get(indexAPA, None):
                        recordInfo[indexAPA] = record
        if isFreeTimes:
            for i, time in enumerate(times):
                if recordInfo.get(i, None):
                    recordFreeTime = recordInfo[i]
                    cnt = self.printDailyJournal(
                        cnt, table, recordFreeTime,
                        u'П' if forceRef(recordFreeTime.value('queueActionId'))
                        in actionIdList else u'', accountingSystem,
                        forceRef(recordFreeTime.value('clientId')),
                        isViewBirthDate, isViewRegAdress)
                else:
                    row = table.addRow()
                    table.setText(row, 0, cnt)
                    table.setText(row, 1, u'')
                    table.setText(row, 2, u'')
                    table.setText(row, 3,
                                  time.toString('hh:mm') if time else u'--:--')
                    table.setText(row, 4, u'')
                    table.setText(row, 5, u'')
                    table.setText(row, 6, u'')
                    table.setText(row, 7, u'')
                    cnt += 1
        cursor.movePosition(QtGui.QTextCursor.End)
        return cursor
コード例 #10
0
ファイル: ExportActionTemplate.py プロジェクト: dio4/vista_1
    def writeRecord(self, record):
        self.writeStartElement('ActionTemplate')

        # все свойства экспортируем как атрибуты
        for x in actionTemplateFields:
            self.writeAttribute(x, forceString(record.value(x)))

        # все, что определяется ссылками на другие таблицы - как элементы
        # группа экспортируемого элемента:
        groupId = forceRef(record.value('group_id'))
        ownerId = forceRef(record.value('owner_id'))
        specialityId = forceRef(record.value('speciality_id'))
        actionId = forceRef(record.value('action_id'))
        id = forceRef(record.value('id'))

        if id == groupId:
            QtGui.QMessageBox.critical (self.parent,
                u'Ошибка в логической структуре данных',
                u'Элемент id=%d: (%s) "%s", group_id=%d является сам себе группой' % \
                (id, forceString(record.value('code')),
                      forceString(record.value('name')), groupId),
                QtGui.QMessageBox.Close)
        elif groupId in self.nestedGroups:
            QtGui.QMessageBox.critical (self.parent,
                u'Ошибка в логической структуре данных',
                u'Элемент id=%d: group_id=%d обнаружен в списке родительских групп "%s"' % \
                (id,  groupId,  u'(' + '-> '.join([str(et) for et in self.nestedGroups])+ ')'),
                QtGui.QMessageBox.Close)
        elif groupId:  # все в порядке
            self.writeStartElement('Group')
            query = self.createQuery([groupId])
            while (query.next()):
                self.nestedGroups.append(groupId)
                self.writeRecord(query.record())  # рекурсия
                self.nestedGroups.remove(groupId)
            self.writeEndElement()

        if ownerId:
            if self.ownerMap.has_key(ownerId):
                ownerInfo = self.ownerMap[ownerId]
            else:
                ownerInfo = getPersonInfo(ownerId)
                self.ownerMap[ownerId] = ownerInfo

            if ownerInfo:
                self.writeStartElement('Owner')

                for x in ownerFields:
                    if ownerInfo.has_key(x):
                        self.writeAttribute(x, ownerInfo[x])

                self.writeEndElement()

        if specialityId:
            specialityInfo = self.getSpecialityInfo(specialityId)
            self.writeStartElement('Speciality')

            for x in specialityFields:
                if specialityInfo.has_key(x):
                    self.writeAttribute(x, specialityInfo[x])

            self.writeEndElement()

        if actionId:
            self.writeAction(actionId)

        self.writeEndElement()
コード例 #11
0
    def dumpParams(self, cursor, params):
        description = []
        db = QtGui.qApp.db

        def dateRangeAsStr(begDate, endDate):
            result = ''
            if begDate:
                result += u' с ' + forceString(begDate)
            if endDate:
                result += u' по ' + forceString(endDate)
            return result

        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        begDateBeforeRecord = params.get('begDateBeforeRecord', QtCore.QDate())
        endDateBeforeRecord = params.get('endDateBeforeRecord', QtCore.QDate())
        orgStructureId = params.get('orgStructureId', None)
        specialityId = params.get('specialityId', None)
        personId = params.get('personId', None)
        userProfileId = params.get('userProfileId', None)
        beforeRecordUserId = params.get('beforeRecordUserId', None)
        actionTypeCode = params.get('queueType', None)
        chkPeriodRecord = params.get('chkPeriodRecord', None)
        chkPeriodBeforeRecord = params.get('chkPeriodBeforeRecord', None)
        chkOrgStructure = params.get('chkOrgStructure', None)
        chkDetailCallCentr = params.get('detailCallCentr', None)
        chkDetailExternalIS = params.get('detailExternalIS', None)
        chkShowNote = params.get('chkShowNote', False)

        if chkPeriodRecord:
            if begDate or endDate:
                description.append(u'за период' +
                                   dateRangeAsStr(begDate, endDate))
        if chkPeriodBeforeRecord:
            if begDateBeforeRecord or endDateBeforeRecord:
                description.append(
                    u'период предварительной записи' +
                    dateRangeAsStr(begDateBeforeRecord, endDateBeforeRecord))
        if beforeRecordUserId:
            personInfo = getPersonInfo(beforeRecordUserId)
            description.append(u'пользователь: ' + personInfo['shortName'] +
                               ', ' + personInfo['specialityName'])
        if userProfileId:
            description.append(u'профиль прав пользователя: ' + forceString(
                db.translate('rbUserProfile', 'id', userProfileId, 'name')))
        if chkOrgStructure:
            if orgStructureId:
                description.append(u'подразделение: ' +
                                   getOrgStructureFullName(orgStructureId))
            else:
                description.append(u'подразделение: ЛПУ')
            if specialityId:
                description.append(u'специальность: ' + forceString(
                    db.translate('rbSpeciality', 'id', specialityId, 'name')))
            if personId:
                personInfo = getPersonInfo(personId)
                description.append(u'врач: ' + personInfo['shortName'] + ', ' +
                                   personInfo['specialityName'])
        if actionTypeCode == 0:
            description.append(u'мероприятие: Прием')
        elif actionTypeCode == 1:
            description.append(u'мероприятие: Вызовы')
        if chkDetailCallCentr:
            description.append(u'Детализировать Call-центр')
        if chkDetailExternalIS:
            description.append(u'Детализировать запись через внешние ИС')
        if chkShowNote:
            description.append(u'Выводить жалобы')
        description.append(u'отчёт составлен: ' +
                           forceString(QtCore.QDateTime.currentDateTime()))
        columns = [('100%', [], CReportBase.AlignLeft)]
        table = createTable(cursor,
                            columns,
                            headerRowCount=len(description),
                            border=0,
                            cellPadding=2,
                            cellSpacing=0)
        for i, row in enumerate(description):
            table.setText(i, 0, row)
        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()