Ejemplo n.º 1
0
 def setRecord(self, record):
     CItemEditorBaseDialog.setRecord(self, record)
     self.edtCode.setText(forceString(record.value(rbCode)))
     self.edtName.setText(forceString(record.value(rbName)))
     timeRange = forceTime(record.value('begTime')), forceTime(
         record.value('endTime'))
     self.edtRangeTime.setTimeRange(timeRange)
Ejemplo n.º 2
0
    def getEQTicketIndexRange(date, eQueueTypeId, exceptJobTypeId,
                              currentBegTime, currentEndTime):
        minAvailableEQIndex = 0
        maxAvailableEQIndex = None
        errorMessage = u''

        recordList = CJobPlanModel.getEQTicketOnDayRecordList(
            date, eQueueTypeId, exceptJobTypeId)
        for record in recordList:
            begTime = forceTime(record.value('begTime'))
            endTime = forceTime(record.value('endTime'))
            if currentBegTime >= endTime:
                minAvailableEQIndex = forceInt(record.value('maxEQIndex')) + 1
            else:
                if currentEndTime > begTime:
                    errorMessage = u'\n'.join([
                        u'Обнаружено недопустимо пересечение периода',
                        u'текущей работы (%s) с работой "%s" (%s)' %
                        (formatTimeRange((currentBegTime, currentEndTime)),
                         forceString(record.value('jobName')),
                         formatTimeRange((begTime, endTime))),
                        u'на %s' % formatDate(date)
                    ])
                    break
                maxAvailableEQIndex = forceInt(record.value('minEQIndex')) - 1
                break
        return minAvailableEQIndex, maxAvailableEQIndex, errorMessage
Ejemplo n.º 3
0
 def addGap(gapList, record):
     bTime = forceTime(record.value('begTime'))
     eTime = forceTime(record.value('endTime'))
     if bTime < eTime:
         gapList.append((bTime, eTime))
     elif bTime > eTime:
         gapList.append((bTime, QtCore.QTime(23, 59, 59, 999)))
         gapList.append((QtCore.QTime(0, 0), eTime))
Ejemplo n.º 4
0
 def getRecord(self):
     record = CItemEditorBaseDialog.getRecord(self)
     record.setValue(rbCode, toVariant(forceStringEx(self.edtCode.text())))
     record.setValue(rbName, toVariant(forceStringEx(self.edtName.text())))
     begTime, endTime = self.edtRangeTime.timeRange(
     ) if self.edtRangeTime else (None, None)
     record.setValue('begTime', toVariant(forceTime(begTime)))
     record.setValue('endTime', toVariant(forceTime(endTime)))
     return record
Ejemplo n.º 5
0
 def getJobs(self):
     jobs = {}
     records = self.getJobInfo(self.copeidDate,
                               countDays=self.countDaysForCopy)
     for record in records:
         jobs[forceDate(record.value('date')).toString('dd.MM.yyyy')] = (
             forceRef(record.value('id')),
             forceTime(record.value('begTime')),
             forceTime(record.value('endTime')),
             forceInt(record.value('quantity')),
             forceInt(record.value('isOvertime')),
             forceDouble(record.value('limitSuperviseUnit')),
             forceInt(record.value('personQuota')))
     return jobs
Ejemplo n.º 6
0
def selectData(params):
    result = []
    query = selectRawData(params)
    prevDate = None
    prevPersonId = None
    bulk = {}
    while query.next():
        record = query.record()
        date = forceDate(record.value(
            'date')).toPyDate()  # because QDate cannot work as key in dict
        personId = forceRef(record.value('person_id'))
        if prevDate != date or prevPersonId != personId:
            if prevDate:
                for office, begTime, endTime in bulkToRanges(bulk):
                    result.append(
                        (prevDate, prevPersonId, office, begTime, endTime))
                bulk = {}
            prevDate = date
            prevPersonId = personId

        paramName = forceString(record.value('paramName'))
        if paramName.startswith('office'):
            paramValue = forceString(record.value('office'))
        else:
            paramValue = forceTime(record.value('time'))
        bulk[paramName] = paramValue
    for office, begTime, endTime in bulkToRanges(bulk):
        result.append((prevDate, prevPersonId, office, begTime, endTime))
    return result
Ejemplo n.º 7
0
    def printDailyJournal(self, cnt, table, record, primaryInfo,
                          accountingSystem, clientId, isViewBirthDate,
                          isViewRegAdress):
        row = table.addRow()
        table.setText(row, 0, cnt)
        table.setText(row, 1, primaryInfo)
        table.setText(
            row, 2,
            forceString(record.value('clientIdentifier'))
            if accountingSystem else forceString(clientId))
        time = forceTime(record.value('time'))
        table.setText(row, 3, time.toString('hh:mm') if time else u'--:--')
        table.setText(
            row, 4,
            forceString(record.value('lastName')) + u' ' +
            forceString(record.value('firstName')) + u' ' +
            forceString(record.value('patrName')))

        if isViewBirthDate:
            table.setText(
                row, 5,
                forceDate(record.value('birthDate')).toString('yyyy-MM-dd'))
        else:
            table.setText(row, 5, forceString(record.value('clientAge')))

        table.setText(
            row, 6,
            forceString(
                record.value(
                    'locAddress' if isViewRegAdress else 'clientAttachInfo')))
        table.setText(row, 7, forceString(record.value('note')))
        cnt += 1
        return cnt
Ejemplo n.º 8
0
 def saveData(self):
     if self.action and self.eventId:
         times = self.action['times']
         lenItems = len(self.items)
         diff = lenItems - len(times)
         if diff < 0:
             self.items.extend([None] * (-diff))
         elif diff > 0:
             times.extend([None] * diff)
         for row in xrange(lenItems):
             itemTime = self.items[row][0]
             times[row] = forceTime(itemTime)
         self.action['times'] = times
         db = QtGui.qApp.db
         db.transaction()
         try:
             self.saveDataNumbers(self.date.day() - 1)
             db.commit()
             if self.actionTypeCode == constants.atcAmbulance:
                 self.tableItems[CTimeTableModel.ciAmbChange] = False
             elif self.actionTypeCode == constants.atcHome:
                 self.tableItems[CTimeTableModel.ciHomeChange] = False
             self.action = CAction.getAction(self.eventId,
                                             self.actionTypeCode)
         except:
             db.rollback()
             QtGui.qApp.logCurrentException()
             raise
Ejemplo n.º 9
0
 def saveRecord(self, date, jobsInfo):
     db = QtGui.qApp.db
     tableJob = db.table('Job')
     tableTicket = db.table('Job_Ticket')
     record = tableJob.newRecord()
     record.setValue('orgStructure_id',
                     toVariant(forceRef(self.record.value('master_id'))))
     record.setValue('orgStructureJob_id',
                     toVariant(self.orgStructureJobId))
     record.setValue('jobType_id', toVariant(self.jobTypeId))
     record.setValue('date', toVariant(date))
     record.setValue('begTime', toVariant(jobsInfo[1]))
     record.setValue('endTime', toVariant(jobsInfo[2]))
     record.setValue('quantity', toVariant(jobsInfo[3]))
     record.setValue('isOvertime', toVariant(jobsInfo[4]))
     record.setValue('limitSuperviseUnit', toVariant(jobsInfo[5]))
     record.setValue('personQuota', toVariant(jobsInfo[6]))
     id = db.insertRecord(tableJob, record)
     assert id is not None
     for ticket in self.getTickets(jobsInfo[0]):
         record = tableTicket.newRecord(['master_id', 'datetime', 'idx'])
         record.setValue('master_id', toVariant(id))
         record.setValue(
             'datetime',
             toVariant(
                 QtCore.QDateTime(date,
                                  forceTime(ticket.value('datetime')))))
         record.setValue('idx', toVariant(ticket.value('idx')))
         db.insertRecord(tableTicket, record)
Ejemplo n.º 10
0
    def printOrderQueueItem(self):
        def getTimeRange(actionTypeCode, date, personId):
            timeRange = ('--:--', '--:--')
            db = QtGui.qApp.db
            eventTypeId = getEventType(etcTimeTable).eventTypeId
            eventTable = db.table('Event')
            cond = [
                eventTable['deleted'].eq(0),
                eventTable['eventType_id'].eq(eventTypeId),
                eventTable['execDate'].eq(date),
                eventTable['execPerson_id'].eq(personId)
            ]
            event = db.getRecordEx(eventTable, '*', cond)
            if event:
                eventId = forceRef(event.value('id'))
                action = CAction.getAction(eventId, actionTypeCode)
                begTime = action['begTime']
                endTime = action['endTime']
                if begTime and endTime:
                    timeRange = begTime.toString(
                        'H:mm') + ' - ' + endTime.toString('H:mm')
            return timeRange

        actionId = self.tblActions.currentItemId()
        record = self.tblActions.currentItem()
        db = QtGui.qApp.db
        tableActionProperty_Action = db.table('ActionProperty_Action')
        tableActionProperty = db.table('ActionProperty')
        tableAction = db.table('Action')
        tableActionType = db.table('ActionType')
        table = tableActionProperty_Action.leftJoin(
            tableActionProperty,
            tableActionProperty['id'].eq(tableActionProperty_Action['id']))
        table = table.leftJoin(
            tableAction,
            tableAction['id'].eq(tableActionProperty['action_id']))
        table = table.leftJoin(
            tableActionType,
            tableActionType['id'].eq(tableAction['actionType_id']))
        cond = [
            tableAction['deleted'].eq(0), tableActionProperty['deleted'].eq(0),
            tableActionType['deleted'].eq(0),
            tableActionProperty_Action['value'].eq(actionId)
        ]
        date = forceDate(record.value('directionDate'))
        time = forceTime(record.value('directionDate'))
        office = forceString(record.value('office'))
        personId = forceString(record.value('person_id'))
        record = db.getRecordEx(
            table,
            [tableActionType['code'], tableActionProperty_Action['index']],
            cond)
        if record:
            code = forceString(record.value('code'))
            index = forceInt(record.value('index'))
            if self.clientId:
                printOrder(self.clientId, code == atcHome, date, office,
                           personId, index + 1, time,
                           getTimeRange(code, date, personId))
Ejemplo n.º 11
0
    def processRecord(self, record):
        externalId = forceString(record.value('externalId'))
        lastName = forceString(record.value('lastName'))
        firstName = forceString(record.value('firstName'))
        patrName = forceString(record.value('patrName'))
        eventSetDate = forceDate(record.value('eventSetDate'))
        clientBirthDate = forceDate(record.value('clientBirthDate'))
        age = calcAge(clientBirthDate, eventSetDate)
        eventTypeId = forceInt(record.value('eventType_id'))

        eventEntry = self.data.setdefault(
            externalId,
            smartDict(externalId=externalId,
                      name=formatName(lastName, firstName, patrName),
                      age=age))
        actionId = forceRef(record.value('actionId'))
        actionBegDate = forceDate(record.value('actionBegDate'))
        actionBegTime = forceTime(record.value('actionBegDate'))
        actionEndDate = forceDate(record.value('actionEndDate'))
        actionEndTime = forceTime(record.value('actionEndDate'))
        fromId = forceRef(record.value('FromId'))
        toId = forceRef(record.value('ToId'))
        currId = forceRef(record.value('CurrId'))

        fromName = forceString(record.value('FromName'))
        toName = forceString(record.value('ToName'))
        currName = forceString(record.value('CurrName'))
        actionTypeId = forceRef(record.value('actionTypeId'))
        isMoving = self.actionTypesMap[actionTypeId] == u'moving'
        HBProfile = forceString(record.value('HBProfileName'))
        patronage = forceString(record.value('patronage'))
        actionsEntry = eventEntry.setdefault('actions', {})
        actionsEntry[(actionId, isMoving)] = smartDict(fromName=fromName,
                                                       toName=toName,
                                                       currName=currName,
                                                       fromId=fromId,
                                                       toId=toId,
                                                       currId=currId,
                                                       HBProfile=HBProfile,
                                                       patronage=patronage,
                                                       begDate=actionBegDate,
                                                       begTime=actionBegTime,
                                                       endDate=actionEndDate,
                                                       endTime=actionEndTime,
                                                       eventTypeId=eventTypeId)
Ejemplo n.º 12
0
 def fillByTemplate(self):
     orgStructureJobRecord = self.tblJobs.currentItem()
     orgStructureId = forceRef(orgStructureJobRecord.value(
         'master_id')) if orgStructureJobRecord else None
     currentJobTypeId = forceRef(orgStructureJobRecord.value('jobType_id'))
     dialog = CTemplateDialog(self,
                              orgStructureId=orgStructureId,
                              currentJobTypeId=currentJobTypeId)
     begDate = self.modelJobPlan.begDate
     endDate = begDate.addDays(self.modelJobPlan.daysInMonth - 1)
     record = self.tblJobs.currentItem()
     dialog.setDefaults(forceTime(record.value('begTime')),
                        forceTime(record.value('endTime')),
                        forceInt(record.value('quantity')),
                        forceRef(record.value('eQueueType_id')))
     dialog.setDateRange(begDate, endDate)
     if dialog.exec_():
         self.modelJobPlan.setWorkPlan(dialog.getWorkPlan(),
                                       dialog.getDateRange(),
                                       dialog.eQueueTypeId())
Ejemplo n.º 13
0
    def checkServiceUnitLimits(jobTicketId, action, usedBySiblingsItems=None):
        if not usedBySiblingsItems:
            usedBySiblingsItems = []
        currentSuperviseUnit = 0.0
        if jobTicketId:
            db = QtGui.qApp.db
            tableJobTicket = db.table('Job_Ticket')
            tableJob = db.table('Job')
            tableService = db.table('rbService')
            tableActionPropertyJobTicket = db.table('ActionProperty_Job_Ticket')
            tableActionProperty = db.table('ActionProperty')
            tableActionType = db.table('ActionType')
            tableAction = db.table('Action')

            jobTicketTime = forceTime(db.translate(tableJobTicket, tableJobTicket['id'], jobTicketId, tableJobTicket['datetime']))
            jobId = db.translate(tableJobTicket, tableJobTicket['id'], jobTicketId, tableJobTicket['master_id'])

            if jobTicketTime != QtCore.QTime(0, 0, 0):
                jobLimit = forceDouble(db.translate(tableJob, tableJob['id'], jobId, tableJob['limitSuperviseUnit']))
                if jobLimit > CJobTicketChooserComboBox.superviseUnitLimitPrecision:
                    if action:
                        serviceCode = action.getType().code
                        currentSuperviseUnit = forceDouble(db.translate(tableService, tableService['code'], serviceCode, tableService['superviseComplexityFactor']))
                    else:
                        currentSuperviseUnit = 0.0

                    tableEx = tableJobTicket.leftJoin(tableJob, tableJob['id'].eq(tableJobTicket['master_id']))
                    tableEx = tableEx.leftJoin(tableActionPropertyJobTicket, tableActionPropertyJobTicket['value'].eq(tableJobTicket['id']))
                    tableEx = tableEx.leftJoin(tableActionProperty, tableActionProperty['id'].eq(tableActionPropertyJobTicket['id']))
                    tableEx = tableEx.leftJoin(tableAction, tableAction['id'].eq(tableActionProperty['action_id']))
                    tableEx = tableEx.leftJoin(tableActionType, tableActionType['id'].eq(tableAction['actionType_id']))
                    tableEx = tableEx.leftJoin(tableService, tableService['code'].eq(tableActionType['code']))
                    cols = [
                        tableService['superviseComplexityFactor']
                    ]
                    cond = [
                        tableJob['deleted'].eq(0),
                        tableJob['id'].eq(jobId),
                        tableAction['deleted'].eq(0)
                    ]
                    used = 0.0
                    for record in db.getRecordListGroupBy(tableEx, cols, cond, group=tableJobTicket['id']):
                        used += forceDouble(record.value('superviseComplexityFactor'))
                    if (currentSuperviseUnit + used + sum(usedBySiblingsItems) - jobLimit) > CJobTicketChooserComboBox.superviseUnitLimitPrecision:
                        return False, currentSuperviseUnit

            else:
                jobIsOvertime = forceBool(db.translate(tableJob, tableJob['id'], jobId, tableJob['isOvertime']))
                if not jobIsOvertime:
                    return False, currentSuperviseUnit
        return True, currentSuperviseUnit
Ejemplo n.º 14
0
 def checkData(self, model, changed, widget):
     if model.tableItems:
         if changed:
             timeRange = model.tableItems.timeRange
             begTime, endTime = timeRange if timeRange else (None, None)
         else:
             if model.tableItems.record:
                 begTime = forceTime(model.tableItems.record.value('begTime'))
                 endTime = forceTime(model.tableItems.record.value('endTime'))
             else:
                 begTime, endTime = None, None
         lenItems = len(model.items)
         for row in xrange(lenItems):
             itemTime = model.items[row][0]
             if row > 0 and (row + 1) < lenItems:
                 firstTime = model.items[row - 1][0]
                 nextTime = model.items[row + 1][0]
             else:
                 firstTime = None
                 nextTime = None
             if not self.checkDataNumbers(begTime, endTime, itemTime, firstTime, nextTime, widget, row):
                 return False
     return True
Ejemplo n.º 15
0
    def copyDayFromDate(self, day, sourceDate):
        db = QtGui.qApp.db
        tableJob = db.table('Job')

        record = db.getRecordEx(
            tableJob, ('begTime', 'endTime', 'quantity', 'isOvertime',
                       'limitSuperviseUnit', 'personQuota', 'eQueueType_id'),
            [
                tableJob['orgStructureJob_id'].eq(self.orgStructureJobId),
                tableJob['jobType_id'].eq(self.jobTypeId),
                tableJob['deleted'].eq(0),
                tableJob['date'].eq(sourceDate),
            ])
        if record:
            timeRange = forceTime(record.value('begTime')), forceTime(
                record.value('endTime'))
            quantity = forceInt(record.value('quantity'))
            isOvertime = forceBool(record.value('isOvertime'))
            limitSuperviseUnit = forceDouble(
                record.value('limitSuperviseUnit'))
            personQuota = forceInt(record.value('personQuota'))
            eQueueTypeId = forceRef(record.value('eQueueType_id'))
        else:
            timeRange = None
            quantity = 0
            isOvertime = False
            limitSuperviseUnit = 0.0
            personQuota = 100
            eQueueTypeId = None
        if not self.checkEQRangeIntersection(day, eQueueTypeId, timeRange,
                                             quantity):
            return
        self.setDayPlan(
            day,
            (timeRange, quantity, isOvertime, limitSuperviseUnit, personQuota),
            eQueueTypeId)
Ejemplo n.º 16
0
 def on_selectionModelEvents_currentChanged(self):
     self.clearData()
     item = self.tblEvents.model().items()[
         self.tblEvents.currentIndex().row()]
     if item:
         if forceInt(item.value('sex')):
             sex = u'Женский'
         else:
             sex = u'Мужской'
         self.edtCallNumber.setText(forceString(item.value('callNumberId')))
         self.dtCallDate.setDate(forceDate(item.value('callDate')))
         self.tmEventTime.setTime(forceTime(item.value('eventTime')))
         self.edtReceiver.setText(forceString(item.value('receiver')))
         self.edtClientFIO.setText(forceString(item.value('fio')))
         self.edtAge.setText(forceString(item.value('age')))
         self.edtSex.setText(sex)
         self.edtContact.setText(forceString(item.value('contact')))
         self.edtAddress.setText(forceString(item.value('address')))
         self.edtCallerName.setText(forceString(item.value('callerName')))
         self.edtUrgency.setText(forceString(item.value('urgencyCategory')))
         self.edtCallType.setText(forceString(item.value('callKind')))
Ejemplo n.º 17
0
    def build(self, params):
        date = params.get('begDate', QtCore.QDate())
        personId = params.get('personId', None)
        specialityId = params.get('specialityId', None)
        locationCardTypeId = params.get('locationCardTypeId', None)
        query = selectData(date, personId, specialityId, locationCardTypeId)
        self.setQueryText(forceString(query.lastQuery()))

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.TableTotal)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [('2%', [u'№'], CReportBase.AlignLeft),
                        ('5%', [u'Время'], CReportBase.AlignRight),
                        ('75%', [u'Пациент'], CReportBase.AlignLeft),
                        ('8%', [u'Номер амб.карты'], CReportBase.AlignLeft),
                        ('25%', [u'Примечания/Жалобы'], CReportBase.AlignLeft)]

        table = createTable(cursor, tableColumns)

        currentPerson = None

        while query.next():
            record = query.record()
            person = forceString(record.value('person'))
            directionTime = forceTime(record.value('directionTime'))
            client = forceString(record.value('lastName')) + ' ' + forceString(
                record.value('firstName')) + ' ' + forceString(
                    record.value('patrName'))
            birthDate = forceDate(record.value('birthDate'))
            ageClient = forceString(record.value('clientAge'))
            policyDMS = forceString(
                record.value('policyDMS')) + u' по ' + forceString(
                    forceDate(record.value('endDatePolicyDMS')).toString(
                        'dd.MM.yyyy')) if forceString(
                            record.value('policyDMS')) else ''
            contacts = forceString(record.value('contacts'))
            note = forceString(record.value('note'))
            clientId = forceString(record.value('clientId'))

            clientInfo = [
                u'пациент: ' + client + u' Д.р. (возраст): ' +
                forceString(birthDate.toString('dd.MM.yyyy')) + ' (' +
                ageClient + ')'
            ]
            if forceBool(policyDMS):
                clientInfo.append(u'ДМС: №' + policyDMS)
            if forceBool(contacts):
                clientInfo.append(contacts)

            if not currentPerson or currentPerson != person:
                count = 0
                i = table.addRow()
                table.setText(i, 0, person, CReportBase.TableTotal)
                table.mergeCells(i, 0, 1, 4)
                currentPerson = person
            count += 1
            i = table.addRow()
            table.setText(i, 0, count)
            table.setText(i, 1, directionTime.toString('hh:mm'))
            table.setText(i, 2, '\n'.join(clientInfo))
            table.setText(i, 3, clientId)
            table.setText(i, 4, note)
        return doc
Ejemplo n.º 18
0
    def setRecord(self, record):
        self.record = record
        self.timeRange = forceTime(record.value('begTime')), forceTime(
            record.value('endTime'))
        self.oldTimeRange = self.timeRange
        self.quantity = forceInt(record.value('quantity'))
        self.oldQuantity = self.quantity
        self.isOvertime = forceBool(record.value('isOvertime'))
        self.oldIsOvertime = self.isOvertime
        self.limitSuperviseUnit = forceDouble(
            record.value('limitSuperviseUnit'))
        self.oldLimitSuperviseUnit = self.limitSuperviseUnit
        self.personQuota = forceDouble(record.value('personQuota'))
        self.oldPersonQuota = self.personQuota
        self.eQueueTypeId = forceRef(record.value('eQueueType_id'))
        self.oldEQueueTypeId = self.eQueueTypeId
        self.reserved = 0
        self.busy = 0
        self.executed = 0
        db = QtGui.qApp.db
        tableTicket = db.table('Job_Ticket')
        cols = [
            tableTicket['id'], tableTicket['master_id'], tableTicket['idx'],
            tableTicket['datetime'], tableTicket['resTimestamp'],
            tableTicket['resConnectionId'], tableTicket['status'],
            tableTicket['begDateTime'], tableTicket['endDateTime'],
            tableTicket['label'], tableTicket['note'], '''
            EXISTS
            (
                SELECT ActionProperty_Job_Ticket.value
                FROM Job_Ticket AS JT
                LEFT JOIN ActionProperty_Job_Ticket ON ActionProperty_Job_Ticket.value = JT.id
                LEFT JOIN ActionProperty ON ActionProperty.id = ActionProperty_Job_Ticket.id
                LEFT JOIN Action ON Action.id = ActionProperty.action_id
                LEFT JOIN ActionType ON ActionType.id = Action.actionType_id
                WHERE
					JT.id=Job_Ticket.id
                    AND Action.deleted = 0
                    AND ActionType.deleted = 0
                    AND ActionProperty.deleted = 0
                ORDER BY JT.id
            ) AS usedInActionProperty
            '''
        ]
        self.tickets = db.getRecordList(
            tableTicket, cols, tableTicket['master_id'].eq(record.value('id')),
            'Job_Ticket.id')
        for ticket in self.tickets:
            status = forceInt(ticket.value('status'))
            usedInActionProperty = forceBool(
                ticket.value('usedInActionProperty'))
            if usedInActionProperty:
                if status == 0:
                    self.reserved += 1
                elif status == 1:
                    self.busy += 1
                elif status == 2:
                    self.executed += 1
        self.ticketIsDirty = [False] * len(self.tickets)

        self._eQueueRecord = CEQTicketModel.getEQueueRecord(
            db.db, self.eQueueTypeId, forceDate(record.value('date')))
Ejemplo n.º 19
0
    def getInfo(self):
        if self.eventId and self.params:
            APMaxList = {}
            APMinList = {}
            temperatureList = {}
            pulseList = {}
            chkTemperature = self.params.get('chkTemperature', 0)
            chkPulse = self.params.get('chkPulse', 0)
            chkAPMax = self.params.get('chkAPMax', 0)
            chkAPMin = self.params.get('chkAPMin', 0)
            self.multipleDimension = self.params.get('multipleDimension', 0)
            begDate = self.params.get('begDate', None)
            endDate = self.params.get('endDate', None)
            if begDate and endDate and (begDate <= endDate):
                self.multipleDays = 2 if begDate == endDate else (
                    begDate.daysTo(endDate) + 2)
                if (begDate and endDate and chkTemperature or chkPulse
                        or chkAPMax or chkAPMin
                    ) and self.multipleDimension and self.multipleDays:
                    actionTypeIdList = self.getTemperatureSheetActionTypes()
                    diseaseDayList = {}
                    actionIdList = []

                    for recordDiseaseDay in self.getDeseaseDayRecords(
                            begDate, endDate, actionTypeIdList):
                        actionId = forceRef(
                            recordDiseaseDay.value('action_id'))
                        actionIdList.append(actionId)
                        diseaseDay = forceInt(
                            recordDiseaseDay.value('value')) - 1
                        endDate = forceDate(recordDiseaseDay.value('endDate'))
                        endDateStr = pyDate(endDate)
                        endTime = forceTime(recordDiseaseDay.value('endDate'))
                        endTimeStr = pyTime(endTime)
                        if (diseaseDay, endTimeStr,
                                endDateStr) not in diseaseDayList.keys():
                            diseaseDayList[(diseaseDay, endTimeStr,
                                            endDateStr)] = actionId

                    self.modelTemperatureSheet.loadHeader(
                        diseaseDayList, self.multipleDimension)
                    self.modelTemperatureSheet.loadData(
                        self.eventId, diseaseDayList, actionIdList, begDate,
                        endDate, actionTypeIdList)

                    if chkTemperature:
                        for recordTemperature in self.getTemperatureRecords(
                                begDate, endDate, actionIdList,
                                actionTypeIdList):
                            actionId = forceRef(
                                recordTemperature.value('action_id'))
                            temperature = forceDouble(
                                recordTemperature.value('value'))
                            for key, value in diseaseDayList.items():
                                if actionId == value:
                                    temperatureList[key] = temperature
                                    break
                    if chkAPMax:
                        for recordAPMax in self.getArterialPressureMaxRecords(
                                begDate, endDate, actionIdList,
                                actionTypeIdList):
                            actionId = forceRef(recordAPMax.value('action_id'))
                            APMax = forceInt(recordAPMax.value('value'))
                            for key, value in diseaseDayList.items():
                                if actionId == value:
                                    APMaxList[key] = APMax
                                    break
                    if chkAPMin:
                        for recordAPMin in self.getArterialPressureMinRecords(
                                begDate, endDate, actionIdList,
                                actionTypeIdList):
                            actionId = forceRef(recordAPMin.value('action_id'))
                            APMin = forceInt(recordAPMin.value('value'))
                            for key, value in diseaseDayList.items():
                                if actionId == value:
                                    APMinList[key] = APMin
                                    break
                    if chkPulse:
                        for recordPulse in self.getPulseRecords(
                                begDate, endDate, actionIdList,
                                actionTypeIdList):
                            actionId = forceRef(recordPulse.value('action_id'))
                            pulse = forceInt(recordPulse.value('value'))
                            for key, value in diseaseDayList.items():
                                if actionId == value:
                                    pulseList[key] = pulse
                                    break
                cnt = 0
                self.dimension = round(1 / float(self.multipleDimension), 2)
                self.countGraphic = 0
                if chkTemperature:
                    self.countGraphic += 1
                if chkAPMax:
                    self.countGraphic += 1
                if chkAPMin:
                    self.countGraphic += 1
                if chkPulse:
                    self.countGraphic += 1

                self.qwtPlotList = []
                self.scrollArea.viewport().setAutoFillBackground(True)
                plotLayout = QtGui.QVBoxLayout(
                    QtGui.QFrame(self.scrollArea.widget()))
                if chkTemperature:
                    xa, ya, minValue1, maxValue1, titleList = self.getXY(
                        temperatureList)
                    obj = CCreateGraph(self, xa, ya,
                                       minValue1 if minValue1 < 35 else 35,
                                       maxValue1 if maxValue1 > 40 else 40, 1,
                                       cnt, QtCore.Qt.red, u'Температура',
                                       titleList)
                    plotLayout.addWidget(obj.qwtPlot)
                    cnt += 1
                if chkAPMax:
                    xa2, ya2, minValue2, maxValue2, titleList = self.getXY(
                        APMaxList)
                    obj2 = CCreateGraph(self, xa2, ya2,
                                        minValue2 if minValue2 < 50 else 50,
                                        maxValue2 if maxValue2 > 175 else 175,
                                        25, cnt, QtCore.Qt.blue,
                                        u'Давление максимальное', titleList)
                    plotLayout.addWidget(obj2.qwtPlot)
                    cnt += 1
                if chkAPMin:
                    xa3, ya3, minValue3, maxValue3, titleList = self.getXY(
                        APMinList)
                    obj3 = CCreateGraph(self, xa3, ya3,
                                        minValue3 if minValue3 < 50 else 50,
                                        maxValue3 if maxValue3 > 175 else 175,
                                        25, cnt, QtCore.Qt.blue,
                                        u'Давление минимальное', titleList)
                    plotLayout.addWidget(obj3.qwtPlot)
                    cnt += 1
                if chkPulse:
                    xa4, ya4, minValue4, maxValue4, titleList = self.getXY(
                        pulseList)
                    obj4 = CCreateGraph(self, xa4, ya4,
                                        minValue4 if minValue4 < 60 else 60,
                                        maxValue4 if maxValue4 > 120 else 120,
                                        10, cnt, QtCore.Qt.darkGreen, u'Пульс',
                                        titleList)
                    plotLayout.addWidget(obj4.qwtPlot)
                    cnt += 1
                widgetLayout = QtGui.QWidget()
                widgetLayout.setLayout(plotLayout)
                self.scrollArea.setWidget(widgetLayout)
Ejemplo n.º 20
0
 def writePatientPerson(self, record):
     self.writeStartElement('patientPerson')
     self.writeStartElement('name')
     self.writeTextElement('family', forceString(record.value('lastName')))
     self.writeTextElement('given', forceString(record.value('firstName')))
     if forceString(record.value('patrName')):
         self.writeTextElement('given',
                               forceString(record.value('patrName')))
     self.writeEndElement()
     if forceString(record.value('clientContact')) and forceString(
             record.value('contactTypeCode')):
         contactType = forceInt(record.value('contactTypeCode'))
         if contactType == 4:
             type = u'mailto:'
         else:
             type = u'tel:'
         self.writeStartElement('telecom')
         self.writeAttribute(
             'value', type + forceString(record.value('clientContact')))
         self.writeEndElement()
     self.writeStartElement('administrativeGenderCode')
     self.writeAttribute('code', forceString(record.value('sex')))
     self.writeAttribute('codeSystem', u'1.2.643.5.1.13.2.1.1.156')
     self.writeEndElement()
     self.writeStartElement('birthTime')
     if forceTime(record.value('birthTime')).toString('hhmmss') != '000000':
         self.writeAttribute(
             'value',
             forceDate(record.value('birthDate')).toString('yyyyMMdd') +
             forceTime(record.value('birthTime')).toString('hhmmss'))
     else:
         self.writeAttribute(
             'value',
             forceDate(record.value('birthDate')).toString('yyyyMMdd'))
     self.writeEndElement()
     KLADRCode = forceString(record.value('KLADRCode'))
     KLADRStreetCode = forceString(record.value('KLADRStreetCode'))
     freeInput = forceString(record.value('freeInput'))
     if freeInput or KLADRCode:
         self.writeStartElement('addr')
         if forceInt(record.value('KLADRCode')) and forceInt(
                 record.value('KLADRStreetCode')):
             houseNumber = forceString(record.value('houseNumber'))
             houseCorpus = forceString(record.value('corpus'))
             flat = forceString(record.value('flat'))
             if KLADRCode:
                 self.writeTextElement('country', u'Российская Федерация')
                 region = getMainRegionName(KLADRCode)
                 city = getCityName(KLADRCode)
                 # FIXME: лучше, наверное, определять города федерального подчинения по полю STATUS в кладре.
                 if region != city:
                     self.writeTextElement('state', region)
                 self.writeTextElement('city', city)
                 self.writeTextElement('unitID', KLADRCode)
             #FIXME: если выгрузка будет медленно работать, возможно стоит заменить getStreetName на обработку полей из уже имеющегося запроса
             if KLADRStreetCode:
                 self.writeTextElement('streetName',
                                       getStreetName(KLADRStreetCode))
             if houseNumber:
                 self.writeTextElement('houseNumber', houseNumber)
             # FIXME: что делать с корпусом???
             if flat:
                 self.writeTextElement('additionalLocator', flat)
         if freeInput:
             self.writeTextElement('streetAddressLine', freeInput)
         self.writeEndElement()
     self.writeComment(u'социальный статус')
     #self.writeAsMemberSoc(record)
     self.writeComment(u'льготная категория населения')
     #self.writeAsMemberFacilities(record)
     self.writeComment(u'СНИЛС')
     if forceString(record.value('SNILS')):
         self.writeAsOtherDsSNILS(record)
     self.writeComment(u'ОМС')
     if forceString(record.value('policyNumber')) and forceString(record.value('policySerial')) and forceString(record.value('insurerName'))\
             or forceString(record.value('policyNumber')) and forceString(record.value('policySerial')):
         self.writeAsOtherDsOMS(record)
     self.writeComment(u'паспорт')
     if forceString(record.value('documentNumber')) and forceString(record.value('documentSerial')) and forceString(record.value('documentOrg'))\
             or forceString(record.value('documentNumber')) and forceString(record.value('documentSerial')):
         self.writeAsOtherDsPass(record)
     self.writeComment(u'место рождения')
     #self.writeBirthPlace(record)
     self.writeEndElement()