コード例 #1
0
ファイル: AddDosesDialog.py プロジェクト: dio4/vista_1
    def update(self, dates, times):
        oldValues = {}
        oldComments = {}
        for i in xrange(self._count):
            date = self._dates[i]
            time = self._times[i]
            dose = self._items[i]
            comment = self._comments[i]
            oldValues[(date, time)] = dose
            oldComments[(date, time)] = comment

        self._datesCount = len(dates)
        self._timesCount = len(times)
        self._count = self._datesCount*self._timesCount
        self._dates = sorted([pyDate(date) for date in dates]*self._timesCount)
        self._times = list(times)*self._datesCount
        self._items = [0.0]*(self._count)
        self._comments = [''] * (self._count)

        for i in xrange(self._count):
            date = self._dates[i]
            time = self._times[i]
            oldValue = oldValues.get((date, time), None)
            if oldValue:
                self._items[i] = oldValue
            oldComment = oldComments.get((date, time), None)
            if oldComment:
                self._comments[i] = oldComment
コード例 #2
0
ファイル: TempInvalidInfo.py プロジェクト: dio4/vista_1
 def _get(context, clientId, begDate, endDate, types=None):
     if isinstance(endDate, CDateInfo):
         endDate = endDate.date
     if isinstance(begDate, CDateInfo):
         begDate = begDate.date
     if isinstance(types, (set, frozenset, list, tuple)):
         types = tuple(types)
     elif isinstance(types, (int, long, basestring)):
         types = (types, )
     elif types is None:
         types = (0, )
     else:
         raise ValueError(
             'parameter "types" must be list, tuple, set or int')
     # потребность в pyDate обусловлена использованием дат в ключе кеша объектов.
     return context.getInstance(CTempInvalidInfoList, clientId,
                                pyDate(begDate), pyDate(endDate), types)
コード例 #3
0
ファイル: AddDosesDialog.py プロジェクト: dio4/vista_1
 def __init__(self, dates=None, times=None):
     if not dates:
         dates = []
     if not times:
         times = []
     self._datesCount = len(dates)
     self._timesCount = len(times)
     self._count = self._datesCount*self._timesCount
     self._dates = sorted([pyDate(date) for date in dates]*self._timesCount)
     self._times = list(times)*self._datesCount
     self._items = [0.0]*(self._count)
     self._comments = [''] * (self._count)
コード例 #4
0
ファイル: ExportAttachClient.py プロジェクト: dio4/vista_1
 def process(self, dbf, record, insurerCode):
     row = dbf.newRecord()
     row['SMO_CODE'] = insurerCode
     row['CODE_MO'] = forceString(record.value('bookkeeperCode'))
     row['SPV'] = forceInt(record.value('policyKindCode'))
     row['SPS'] = forceString(record.value('serial'))
     row['SPN'] = forceString(record.value('number'))
     row['FIO'] = forceString(record.value('lastName'))
     row['IMA'] = forceString(record.value('firstName'))
     row['OTCH'] = forceString(record.value('patrName'))
     row['DATR'] = pyDate(forceDate(record.value('birthDate')))
     row.store()
コード例 #5
0
ファイル: ExecutionPlanDialog.py プロジェクト: dio4/vista_1
    def setup(self, cols, tableName, order, record, executionPlan, forSelect=False, filterClass=None):
        self.setWindowFlags(QtCore.Qt.Dialog | QtCore.Qt.WindowMaximizeButtonHint | QtCore.Qt.WindowCloseButtonHint)
        self.forSelect = forSelect
        self.executionPlan = executionPlan
        self.record = record
        self.filterClass = filterClass
        self.props = {}
        self.order = order
        self.model = CExecutionPlanModel(self)
        self.tblExecutionPlan.setModel(self.model)
        self.btnEdit.setDefault(not self.forSelect)
        self.tblExecutionPlan.setFocus(QtCore.Qt.OtherFocusReason)

        directionDateTime = forceDateTime(record.value('directionDate'))
        self.edtDirectionDate.setDate(directionDateTime.date())
        self.edtDirectionTime.setTime(directionDateTime.time())
        self.cmbSetPerson.setValue(forceRef(record.value('setPerson_id')))
        self.isEditor = False if forceDateTime(record.value('endDate')) else True
        self.specifiedName = forceString(record.value('specifiedName'))
        self.actionTypeId = forceRef(record.value('actionType_id'))
        begDateTime = forceDateTime(record.value('begDate'))
        begDate = begDateTime.date()
        self.edtBegDate.setDate(begDate)
        duration = forceInt(record.value('duration'))
        plannedEndDateTime = forceDateTime(record.value('plannedEndDate'))
        if not plannedEndDateTime:
            plannedEndDateTime = begDateTime.addDays(duration-1)
        plannedEndDate = plannedEndDateTime.date()
        self.edtEndDate.setDate(plannedEndDate)
        self.edtDuration.setValue(duration)
        self.actionId = forceRef(record.value('id'))
        begDateNext = begDate
        while begDateNext <= plannedEndDate:
            if begDateNext not in self.executionPlan.keys():
                self.executionPlan[pyDate(begDateNext)] = {}
            begDateNext = begDateNext.addDays(1)
        self.model.loadData(self.executionPlan)
        self.label.setText(u'всего: %d' % len(self.model.items))

        QtCore.QObject.connect(
            self.tblExecutionPlan.horizontalHeader(), QtCore.SIGNAL('sectionClicked(int)'), self.setSort)
コード例 #6
0
ファイル: ExecutionPlanDialog.py プロジェクト: dio4/vista_1
 def saveData(self):
     if len(self.items) < 1:
         return self.executionPlan
     self.executionPlan = {}
     db = QtGui.qApp.db
     table = db.table('Action_ExecutionPlan')
     for item in self.items:
         execTime = item[0]
         if execTime:
             execDate = pyDate(item[1])
             record = item[2]
             execTimeDict = self.executionPlan.get(execDate, {})
             if execTime in execTimeDict.keys():
                 record = execTimeDict.get(execTime, None)
                 if not record:
                     record = table.newRecord()
             else:
                 record = table.newRecord()
             record.setValue('execDate', toVariant(QtCore.QDateTime(QtCore.QDate(execDate), execTime)))
             execTimeDict[execTime] = record
             self.executionPlan[execDate] = execTimeDict
     return self.executionPlan
コード例 #7
0
    def build(self, params):
        begDate = params.get('begDate', None)
        endDate = params.get('endDate', None)
        personId = params.get('personId', None)
        rowGrouping = params.get('rowGrouping', 0)
        query = selectData(begDate, endDate, personId, rowGrouping)

        if rowGrouping == 1:  # by personId
            forceKeyVal = forceRef
            keyValToString = lambda personId: forceString(
                QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id',
                                        personId, 'name'))
            keyName = u'Врач'
        else:
            forceKeyVal = lambda x: pyDate(forceDate(x))
            keyValToString = lambda x: forceString(QtCore.QDate(x))
            keyName = u'Дата'

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        tableColumns = [('%20', [keyName], CReportBase.AlignLeft),
                        ('%5', [u'консультация'], CReportBase.AlignLeft),
                        ('%5', [u'ЭЭГ'], CReportBase.AlignLeft),
                        ('%5', [u'УЗДГ'], CReportBase.AlignLeft),
                        ('%5', [u'УЕТ'], CReportBase.AlignLeft)]
        table = createTable(cursor, tableColumns)

        boldChars = QtGui.QTextCharFormat()
        boldChars.setFontWeight(QtGui.QFont.Bold)

        boldItalicChars = QtGui.QTextCharFormat()
        boldItalicChars.setFontWeight(QtGui.QFont.Bold)
        boldItalicChars.setFontItalic(True)

        total = [0] * 4
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            row = table.addRow()
            fields = (forceKeyVal(record.value('rowKey')),
                      forceInt(record.value('cons')),
                      forceInt(record.value('eed')),
                      forceInt(record.value('uzdg')),
                      forceDouble(record.value('Summary')))

            for col, val in enumerate(fields):
                if col == 0:
                    table.setText(row, 0, keyValToString(val))
                else:
                    table.setText(row, col, val, CReportBase.TableTotal)
                    total[col - 1] += val

        row = table.addRow()
        table.setText(row, 0, u'Всего', CReportBase.TableTotal)
        for j in xrange(4):
            table.setText(row, j + 1, total[j], CReportBase.TableTotal)

        return doc
コード例 #8
0
 def on_btnNextAction_clicked(self):
     if self.cmbStatus.currentIndex() == 3:
         currentDateTime = QtCore.QDateTime.currentDateTime()
         db = QtGui.qApp.db
         table = db.table('vrbPersonWithSpeciality')
         personId = QtGui.qApp.userId if (
         QtGui.qApp.userId and QtGui.qApp.userSpecialityId) else self.cmbSetPerson.value()
         record = db.getRecordEx(table, [table['name']], [table['id'].eq(personId)]) if personId else None
         personName = forceString(record.value('name')) if record else ''
         self.edtNote.setText('Отменить: %s %s' % (currentDateTime.toString('dd-MM-yyyy hh:mm'), personName))
     else:
         self.newActionId = None
         prevRecord = self.getRecord()
         if prevRecord:
             actionTypeId = forceRef(prevRecord.value('actionType_id')) if prevRecord else None
             duration = self.edtDuration.value()
             aliquoticity = self.edtAliquoticity.value()
             if duration >= 1 or aliquoticity > 1:
                 recordList = {}
                 periodicity = self.edtPeriodicity.value()
                 if aliquoticity and actionTypeId:
                     db = QtGui.qApp.db
                     tableAction = db.table('Action')
                     eventId = forceRef(prevRecord.value('event_id'))
                     actionId = forceRef(prevRecord.value('id'))
                     directionDate = forceDateTime(prevRecord.value('directionDate'))
                     setPersonId = forceRef(prevRecord.value('setPerson_id'))
                     if eventId:
                         cond = [
                             tableAction['deleted'].eq(0),
                             tableAction['actionType_id'].eq(actionTypeId),
                             tableAction['event_id'].eq(eventId),
                             tableAction['directionDate'].eq(directionDate),
                             tableAction['setPerson_id'].eq(setPersonId)
                         ]
                         for recordOld in db.iterRecordList(
                                 tableAction, tableAction['*'], cond, tableAction['begDate']
                         ):
                             id = forceRef(recordOld.value('id'))
                             begDateOld = forceDateTime(recordOld.value('begDate'))
                             recordList[(id, begDateOld)] = recordOld
                         keysList = recordList.keys()
                         keysList.sort()
                         keyList = keysList[-1]
                         quoticity = 0
                         if aliquoticity > 1:
                             for key in recordList.keys():
                                 if key[1].date() == keyList[1].date():
                                     quoticity += 1
                         if duration >= 1 or (aliquoticity > 1 and aliquoticity > quoticity):
                             lastRecord = recordList.get(keyList, None)
                             newRecordAction = False
                             if lastRecord:
                                 prevActionId = forceRef(lastRecord.value('id'))
                                 if actionId == prevActionId:
                                     begDate = forceDateTime(prevRecord.value('begDate'))
                                     if QtGui.qApp.userId and QtGui.qApp.userSpecialityId:
                                         execPersonId = QtGui.qApp.userId
                                     else:
                                         execPersonId = self.cmbSetPerson.value()
                                     dialog = CExecTimeNextActionDialog(self, begDate, execPersonId)
                                     if dialog.exec_():
                                         execTime = dialog.getExecTime()
                                         execPersonId = dialog.getExecPersonId()
                                         specifiedName = forceString(prevRecord.value('specifiedName'))
                                         prevRecord.setValue('person_id', toVariant(execPersonId))
                                         executionPlan = self.action.getExecutionPlan()
                                         executionPlanKeys = executionPlan.keys()
                                         executionPlanKeys.sort()
                                         executionPlanBegDate = executionPlan.get(pyDate(begDate.date()), {})
                                         if not executionPlanBegDate:
                                             for keyDate in executionPlanKeys:
                                                 executionPlanTimes = executionPlan.get(keyDate, {})
                                                 aliquoticityNew = len(executionPlanTimes)
                                                 if aliquoticityNew:
                                                     executionPlanTimeKeys = executionPlanTimes.keys()
                                                     executionPlanTimeKeys.sort()
                                                     aliquoticity = aliquoticityNew
                                                     begDateDate = begDate.date()
                                                     durationNew = duration - begDateDate.daysTo(
                                                         QtCore.QDate(keyDate))
                                                     duration = durationNew
                                                     begDate = QtCore.QDateTime(QtCore.QDate(keyDate),
                                                                                executionPlanTimeKeys[0])
                                                     break
                                         else:
                                             executionPlanBegDateKeys = executionPlanBegDate.keys()
                                             executionPlanBegDateKeys.sort()
                                             begTime = executionPlanBegDateKeys[0]
                                             executionPlanKeys = executionPlan.keys()
                                             executionPlanKeys.sort()
                                             if QtCore.QDate(executionPlanKeys[0]) == begDate.date():
                                                 aliquoticity = len(executionPlanBegDateKeys)
                                                 newBegDate = begDate.date().addDays(1)
                                                 maxBegDate = executionPlanKeys[len(executionPlanKeys) - 1]
                                                 while newBegDate <= maxBegDate:
                                                     periodicityPlanTimes = executionPlan.get(pyDate(newBegDate), {})
                                                     if len(periodicityPlanTimes):
                                                         periodicity = begDate.date().daysTo(newBegDate) - 1
                                                         break
                                                     else:
                                                         newBegDate = newBegDate.addDays(1)
                                                 if periodicity < 0:
                                                     periodicity = 0
                                             begDate = QtCore.QDateTime(begDate.date(), begTime)
                                         prevRecord.setValue('aliquoticity', toVariant(aliquoticity))
                                         prevRecord.setValue('begDate', toVariant(begDate))
                                         prevRecord.setValue('endDate',
                                                             toVariant(QtCore.QDateTime(begDate.date(), execTime)))
                                         prevRecord.setValue('status', toVariant(2))
                                         prevRecord.setValue('plannedEndDate',
                                                             toVariant(begDate.addDays(duration - 1)))
                                         prevRecord.setValue('duration', toVariant(duration))
                                         endDate = forceDateTime(prevRecord.value('endDate'))
                                         newExecutionPlan = {}
                                         tableActionExecutionPlan = db.table('Action_ExecutionPlan')
                                         for execDate, timeList in executionPlan.items():
                                             timeListDict = {}
                                             for execTime, record in timeList.items():
                                                 if QtCore.QDateTime(QtCore.QDate(execDate), execTime) > begDate:
                                                     newExecPlanRecord = tableActionExecutionPlan.newRecord()
                                                     newExecPlanRecord.setValue('execDate',
                                                                                toVariant(record.value('execDate')))
                                                     newExecPlanRecord.setValue('master_id', toVariant(None))
                                                     newExecPlanRecord.setValue('id', toVariant(None))
                                                     timeListDict[execTime] = newExecPlanRecord
                                             if timeListDict or QtCore.QDate(execDate) > begDate.date():
                                                 newExecutionPlan[execDate] = timeListDict
                                         begDateNew = None
                                         periodicityNew = -1
                                         if newExecutionPlan:
                                             newExecutionPlanKeys = newExecutionPlan.keys()
                                             newExecutionPlanKeys.sort()
                                             newExecTimeList = {}
                                             newExecDate = None
                                             for planKey in newExecutionPlanKeys:
                                                 newExecTimeList = newExecutionPlan.get(planKey, {})
                                                 if newExecTimeList:
                                                     newExecDate = planKey
                                                     break
                                             if newExecTimeList and newExecDate:
                                                 newExecTimeListKeys = newExecTimeList.keys()
                                                 if len(newExecTimeListKeys) > 0:
                                                     newExecTimeListKeys.sort()
                                                     newExecTime = newExecTimeListKeys[0]
                                                     begDateNew = QtCore.QDateTime(QtCore.QDate(newExecDate),
                                                                                   newExecTime)
                                                     aliquoticity = len(newExecTimeListKeys)
                                                     begDateDate = begDate.date()
                                                     periodicity = begDateDate.daysTo(begDateNew.date()) - 1
                                                     if periodicity < 0:
                                                         periodicity = 0
                                                     if begDateDate == begDateNew.date():
                                                         durationNew = duration
                                                     else:
                                                         durationNew = duration - 1 - periodicity
                                                     periodicityNew = 0
                                                     begDateNewDate = begDateNew.date()
                                                     for newExecutionKey in newExecutionPlanKeys:
                                                         newExecutionDate = QtCore.QDate(newExecutionKey)
                                                         if newExecutionDate > begDateNewDate:
                                                             periodicityNew = begDateNewDate.daysTo(
                                                                 newExecutionDate) - 1
                                                             if periodicityNew < 0:
                                                                 periodicityNew = 0
                                                             break
                                         elif aliquoticity > 1 and aliquoticity > quoticity:
                                             begDateNew = QtCore.QDateTime(endDate.date(),
                                                                           execTime if execTime else self.getCurrentTimeAction(
                                                                               endDate))
                                             durationNew = duration
                                         else:
                                             endDateNew = endDate.addDays(periodicity + 1)
                                             begDateNew = QtCore.QDateTime(endDateNew.date(),
                                                                           execTime if execTime else  self.getCurrentTimeAction(
                                                                               endDate))
                                             durationNew = duration - 1 - periodicity
                                         prevRecord.setValue('periodicity', toVariant(periodicity))
                                         if begDateNew and durationNew:
                                             if periodicityNew > -1:
                                                 periodicity = periodicityNew
                                             newRecord = tableAction.newRecord()
                                             newRecord.setValue('event_id', toVariant(prevRecord.value('event_id')))
                                             newRecord.setValue('begDate', toVariant(begDateNew))
                                             newRecord.setValue('status', toVariant(0))
                                             newRecord.setValue('idx', toVariant(9999))
                                             newRecord.setValue('specifiedName', toVariant(specifiedName))
                                             newRecord.setValue('duration', toVariant(durationNew))
                                             newRecord.setValue('periodicity', toVariant(periodicity))
                                             newRecord.setValue('aliquoticity', toVariant(aliquoticity))
                                             newRecord.setValue('plannedEndDate',
                                                                toVariant(begDateNew.addDays(durationNew - 1)))
                                             newRecord.setValue('actionType_id', toVariant(actionTypeId))
                                             newRecord.setValue('directionDate',
                                                                toVariant(prevRecord.value('directionDate')))
                                             newRecord.setValue('setPerson_id',
                                                                toVariant(prevRecord.value('setPerson_id')))
                                             newRecord.setValue('person_id', toVariant(QtGui.qApp.userId if (
                                             QtGui.qApp.userId and QtGui.qApp.userSpecialityId) else self.cmbSetPerson.value()))
                                             newRecord.setValue('org_id', toVariant(prevRecord.value('org_id')))
                                             newRecord.setValue('amount', toVariant(prevRecord.value('amount')))
                                             newAction = CAction(record=newRecord)
                                             if newExecutionPlan:
                                                 newAction.setExecutionPlan(newExecutionPlan)
                                             if newAction:
                                                 for properties in self.action._properties:
                                                     type = properties._type
                                                     name = type.name
                                                     if (type.canChangeOnlyOwner > 0
                                                         or type.inActionsSelectionTable == 1
                                                         or type.isActionNameSpecifier
                                                         ) and name:
                                                         newAction[name] = self.action[name]
                                                 self.newActionId = newAction.save(idx=9999)
                                             newRecordAction = True
                                             self.setRecordByNext(prevRecord)
                                             self.saveData()
                                             self.close()
                             if duration == 1 and not newRecordAction:
                                 begDate = forceDateTime(prevRecord.value('begDate'))
                                 prevRecord.setValue('status', toVariant(2))
                                 endDate = forceDateTime(prevRecord.value('endDate'))
                                 if not endDate:
                                     prevRecord.setValue('endDate', toVariant(begDate))
                                 prevRecord.setValue('person_id', toVariant(QtGui.qApp.userId if (
                                 QtGui.qApp.userId and QtGui.qApp.userSpecialityId) else self.cmbSetPerson.value()))
                                 prevRecord.setValue('plannedEndDate', toVariant(begDate.addDays(duration - 1)))
                                 self.setRecordByNext(prevRecord)
                                 self.saveData()
                                 self.close()
コード例 #9
0
    def build(self, params):
        begDate          = params.get('begDate', QtCore.QDate())
        endDate          = params.get('endDate', QtCore.QDate())
        orgStructureId   = params.get('orgStructureId', None)
        personId         = params.get('personId', None)
        rowGrouping      = params.get('rowGrouping', 0)
        sex              = params.get('sex', 0)
        socStatusClassId = params.get('socStatusClassId', None)
        socStatusTypeId  = params.get('socStatusTypeId', None)
        group            = params.get('group', False)
        address          = params.get('address', False)
        regAddress       = params.get('regAddress', False)
        query = select(begDate, endDate, orgStructureId, personId, rowGrouping, sex, socStatusClassId, socStatusTypeId, group)
        self.setQueryText(forceString(query.lastQuery()))
        if rowGrouping == 5:
            forceKeyVal = forceRef
            keyValToString = lambda clientId: forceString(QtGui.qApp.db.translate('vrbClientInfo', 'id', clientId, 'clientName'))
            keyName = u'Пациент'
        elif rowGrouping == 4: # by post_id
            forceKeyVal = forceRef
            keyValToString = lambda postId: forceString(QtGui.qApp.db.translate('rbPost', 'id', postId, 'name'))
            keyName = u'Должность'
        elif rowGrouping == 3: # by speciality_id
            forceKeyVal = forceRef
            keyValToString = lambda specialityId: forceString(QtGui.qApp.db.translate('rbSpeciality', 'id', specialityId, 'name'))
            keyName = u'Специальность'
        elif rowGrouping == 2: # by orgStructureId
            forceKeyVal = forceRef
            keyValToString = lambda orgStructureId: forceString(QtGui.qApp.db.translate('OrgStructure', 'id', orgStructureId, 'name'))
            keyName = u'Подразделение'
        elif rowGrouping == 1: # by personId
            forceKeyVal = forceRef
            keyValToString = lambda personId: forceString(QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id', personId, 'name'))
            keyName = u'Врач'
        else:
            forceKeyVal = lambda x: pyDate(forceDate(x))
            keyValToString = lambda x: forceString(QtCore.QDate(x))
            keyName = u'Дата'


        forceKey = forceRef
        keyToString = lambda orgStructureId: forceString(QtGui.qApp.db.translate('OrgStructure', 'id', orgStructureId, 'name'))

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)

        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        additional = 0
        tableColumns = [('5%', u'№п/п', CReportBase.AlignLeft),
                        ( '20%', [keyName], CReportBase.AlignLeft)]
        if regAddress:
            tableColumns.append(('10%', [u'Адрес регистрации'], CReportBase.AlignCenter))
            additional += 1
        if address:
            tableColumns.append(('10%', [u'Адрес проживания'], CReportBase.AlignCenter))
            additional += 1
        tableColumns.append(( '10%', [u'Всего'], CReportBase.AlignCenter))
        tableColumns.append(( '10%', [u'Амбулаторно'], CReportBase.AlignCenter))
        tableColumns.append(( '10%', [u'На дому'], CReportBase.AlignCenter))

        table = createTable(cursor, tableColumns)

        total = [0, 0, 0]
        totalOrg = [0]*3
        prevOrgGroup = None
        
        orderNumber = 0
        while query.next():
            record = query.record()
            orderNumber += 1
            rowKey    = forceKeyVal(record.value('rowKey'))
            cnt       = forceInt(record.value('cnt'))
            atHome    = forceInt(record.value('atHome'))
            orgGroup  = keyToString(forceKey(record.value('orgGroup')))
            clientInfo = CClientInfo(CInfoContext(), rowKey)
            regAddr = clientInfo.regAddress
            addr    = clientInfo.locAddress
            if not orgGroup:
                orgGroup = '-'
            if group:
                if prevOrgGroup and prevOrgGroup != orgGroup:
                    i = table.addRow()
                    table.setText(i, 1, u'Всего', CReportBase.TableTotal)
                    for j in xrange(3):
                        table.setText(i, j+2, totalOrg[j], CReportBase.TableTotal)
                        total[j] += totalOrg[j]
                    totalOrg = [0]*3
                if prevOrgGroup != orgGroup:
                    i = table.addRow()
                    table.setText(i, 1, orgGroup, CReportBase.TableTotal)
                    table.mergeCells(i, 0, 1, 4)
                    prevOrgGroup = orgGroup
            i = table.addRow()
            table.setText(i, 0, forceString(orderNumber))
            table.setText(i, 1, keyValToString(rowKey))
            if regAddress:
                table.setText(i, 2, regAddr)
            if address:
                table.setText(i, 1 + additional, addr)
            table.setText(i, 2 + additional, cnt)
            totalOrg[0] += cnt
            table.setText(i, 3 + additional, cnt-atHome)
            totalOrg[1] += cnt - atHome
            table.setText(i, 4 + additional, atHome)
            totalOrg[2] +=  atHome

        if group:
            i = table.addRow()
            table.setText(i, 1, u'Всего', CReportBase.TableTotal)
            for j in xrange(3):
                table.setText(i, j+2 + additional, totalOrg[j], CReportBase.TableTotal)
                total[j] += totalOrg[j]
        else:
            total = totalOrg
        i = table.addRow()
        table.setText(i, 0, u'Итого', CReportBase.TableTotal)
        for j in xrange(3):
            table.setText(i, j+2 + additional, total[j], CReportBase.TableTotal)
        return doc
コード例 #10
0
ファイル: ReportTreatmentRoom.py プロジェクト: dio4/vista_1
    def build(self, params):
        begDate = params.get('begDate', None)
        endDate = params.get('endDate', None)
        personId = params.get('personId', None)
        rowGrouping = params.get('rowGrouping', 0)
        query = selectData(begDate, endDate, personId, rowGrouping)

        if rowGrouping == 1:  # by personId
            forceKeyVal = forceRef
            keyValToString = lambda personId: forceString(
                QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id',
                                        personId, 'name'))
            keyName = u'Врач'
        else:
            forceKeyVal = lambda x: pyDate(forceDate(x))
            keyValToString = lambda x: forceString(QtCore.QDate(x))
            keyName = u'Дата'

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        tableColumns = [('%20', [keyName], 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)]
        table = createTable(cursor, tableColumns)

        boldChars = QtGui.QTextCharFormat()
        boldChars.setFontWeight(QtGui.QFont.Bold)

        boldItalicChars = QtGui.QTextCharFormat()
        boldItalicChars.setFontWeight(QtGui.QFont.Bold)
        boldItalicChars.setFontItalic(True)

        total = [0] * 6
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            rowKey = forceKeyVal(record.value('rowKey'))
            vena = forceInt(record.value('vena'))
            drop = forceInt(record.value('drip'))
            muscle = forceInt(record.value('muscle'))
            ad = forceInt(record.value('AD'))
            atm = forceInt(record.value('ATM'))
            sum = forceInt(record.value('Summary'))
            i = table.addRow()
            table.setText(i, 0, keyValToString(rowKey))
            table.setText(i, 1, vena)
            total[0] = total[0] + vena
            table.setText(i, 2, drop)
            total[1] = total[1] + drop
            table.setText(i, 3, muscle)
            total[2] = total[2] + muscle
            table.setText(i, 4, ad)
            total[3] = total[3] + ad
            table.setText(i, 5, atm)
            total[4] = total[4] + atm
            table.setText(i, 6, sum)
            total[5] = total[5] + sum
        i = table.addRow()
        table.setText(i, 0, u'Всего', CReportBase.TableTotal)
        for j in xrange(6):
            table.setText(i, j + 1, total[j], CReportBase.TableTotal)
        return doc
コード例 #11
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))
コード例 #12
0
    def build(self, params):
        begDate = params.get('begDate', None)
        endDate = params.get('endDate', None)
        personId = params.get('personId', None)
        rowGrouping = params.get('rowGrouping', 0)

        query = selectData(begDate, endDate, personId, rowGrouping)
        self.setQueryText(forceString(query.lastQuery()))

        if rowGrouping == 1:  # by personId
            forceKeyVal = forceRef
            keyValToString = lambda personId: forceString(
                QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id',
                                        personId, 'name'))
            keyName = u'Психолог'
        else:
            forceKeyVal = lambda x: pyDate(forceDate(x))
            keyValToString = lambda x: forceString(QtCore.QDate(x))
            keyName = u'Дата'

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        tableColumns = [('%20', [keyName], 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)]
        table = createTable(cursor, tableColumns)

        total = [0] * 6
        while query.next():
            record = query.record()
            rowKey = forceKeyVal(record.value('rowKey'))
            adults = forceInt(record.value('adults'))
            children = forceInt(record.value('children'))
            teens = forceInt(record.value('teens'))
            adn_apl = forceInt(record.value('adn_apl'))
            boss = forceInt(record.value('boss'))
            summary = forceInt(record.value('summary'))
            i = table.addRow()
            table.setText(i, 0, keyValToString(rowKey))
            table.setText(i, 1, adults)
            table.setText(i, 2, children)
            table.setText(i, 3, teens)
            table.setText(i, 4, adn_apl)
            table.setText(i, 5, boss)
            table.setText(i, 6, summary)
            total[0] += adults
            total[1] += children
            total[2] += teens
            total[3] += adn_apl
            total[4] += boss
            total[5] += summary

        i = table.addRow()
        table.setText(i, 0, u'Всего', CReportBase.TableTotal)
        for j in xrange(len(total)):
            table.setText(i, j + 1, total[j], CReportBase.TableTotal)

        return doc
コード例 #13
0
    def build(self, params):
        begDate = params.get('begDate', QtCore.QDate())
        endDate = params.get('endDate', QtCore.QDate())
        isEventTime = params.get('isEventCreateParams', False)
        eventDate = ((
            params.get('eventBegDatetime', QtCore.QDate.currentDate()),
            params.get('eventEndDatetime', QtCore.QDate.currentDate()))
                     if isEventTime else None)
        eventPurposeId = params.get('eventPurposeId', None)
        eventTypesDict = params.get('eventTypes', {})
        eventTypes = eventTypesDict.keys()
        orgStructureId = params.get('orgStructureId', None)
        personId = params.get('personId', None)
        rowGrouping = params.get('advancedRowGrouping', 0)
        visitPayStatus = params.get('visitPayStatus', 0)
        detailChildren = params.get('detailChildren', False)
        visitHospital = params.get('visitHospital', False)
        visitDisp = params.get('visitDisp', False)
        sex = params.get('sex', 0)
        ageFrom = params.get('ageFrom', 0)
        ageTo = params.get('ageTo', 150)
        self.countCall = params.get('countCall', False)
        visitPayStatus -= 1

        if rowGrouping == 4:  # by post_id
            postId = None
            forceKeyVal = forceRef
            keyValToString = lambda postId: forceString(
                QtGui.qApp.db.translate('rbPost', 'id', postId, 'name'))
            keyValToSort = keyValToString
            keyName = u'Должность'
        elif rowGrouping == 3:  # by speciality_id
            specialityId = None
            forceKeyVal = forceRef
            keyValToString = lambda specialityId: forceString(
                QtGui.qApp.db.translate('rbSpeciality', 'id', specialityId,
                                        'name'))
            keyValToSort = keyValToString
            keyName = u'Специальность'
        elif rowGrouping == 2:  # by orgStructureId
            forceKeyVal = forceRef
            keyValToString = None
            keyValToSort = None
            keyName = u'Подразделение'
        elif rowGrouping == 1:  # by personId
            forceKeyVal = forceRef
            keyValToString = lambda personId: forceString(
                QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id',
                                        personId, 'name'))
            # keyValToString = lambda personId: getPersonString(personId)
            keyValToSort = keyValToString
            keyName = u'Врач'
        else:
            forceKeyVal = lambda x: pyDate(forceDate(x))
            keyValToSort = None
            keyValToString = lambda x: forceString(QtCore.QDate(x))
            keyName = u'Дата'

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(QtGui.QTextCharFormat())
        self.createHeader(cursor, params)

        # i3149: Форма 39 для Краснодарского края1987
        if QtGui.qApp.region().startswith('23'):
            query = selectDataForKK(begDate, endDate, eventPurposeId,
                                    eventTypes, orgStructureId, personId,
                                    rowGrouping, visitPayStatus, visitHospital,
                                    sex, ageFrom, ageTo, visitDisp, eventDate)
            self.setQueryText(forceString(query.lastQuery()))
            rowSize = 19
            reportData = self.processQueryForKK(query, forceKeyVal, rowSize)
        else:
            query = selectData(begDate, endDate, eventPurposeId, eventTypes,
                               orgStructureId, personId, rowGrouping,
                               visitPayStatus, visitHospital, sex, ageFrom,
                               ageTo, visitDisp, eventDate)
            self.setQueryText(forceString(query.lastQuery()))
            rowSize = 19
            reportData = self.processQuery(query, forceKeyVal, rowSize)

        table = self.createTable(cursor, keyName)

        if rowGrouping == 2:  # by orgStructureId
            self.genOrgStructureReport(table, reportData, rowSize,
                                       orgStructureId)
        else:
            keys = reportData.keys()
            if not keyValToSort is None:
                keys.sort(key=keyValToSort)
            else:
                keys.sort()
            total = [0] * rowSize
            for key in keys:
                i = table.addRow()
                table.setText(i, 0, keyValToString(key))
                row = reportData[key]
                for j in xrange(rowSize):
                    table.setText(i, j + 1, row[j])
                    total[j] += row[j]
            i = table.addRow()
            table.setText(i, 0, u'Всего', CReportBase.TableTotal)
            for j in xrange(rowSize):
                table.setText(i, j + 1, total[j], CReportBase.TableTotal)

        cursor.movePosition(QtGui.QTextCursor.End)
        cursor.insertBlock()
        cursor.insertBlock()
        doctorSignColumns = [
            ('60%', [], CReportBase.AlignLeft),
            ('40%',
             [u'Подпись врача ______________________________________________'
              ], CReportBase.AlignLeft)
        ]
        doctorSign = createTable(cursor,
                                 doctorSignColumns,
                                 border=0,
                                 cellPadding=2,
                                 cellSpacing=0)

        return doc
コード例 #14
0
 def getExecutionPlan(self):
     currentRow = self.currentIndex().row()
     model = self.model()
     items = model.items()
     if 0 <= currentRow < len(items):
         actionTypeId = forceRef(items[currentRow].value('actionType_id'))
         action = model._idToAction[actionTypeId] if actionTypeId else None
         record = action.getRecord() if action else None
         if record and action:
             dialog = CGetExecutionPlan(self, record,
                                        action.getExecutionPlan())
             dialog.exec_()
             begDate = forceDateTime(record.value('begDate'))
             duration = forceInt(record.value('duration'))
             aliquoticity = forceInt(record.value('aliquoticity'))
             periodicity = forceInt(record.value('periodicity'))
             plannedEndDate = forceDateTime(record.value('plannedEndDate'))
             executionPlan = dialog.model.executionPlan
             executionPlanKeys = executionPlan.keys()
             executionPlanKeys.sort()
             executionPlanBegDate = executionPlan.get(
                 pyDate(begDate.date()), {})
             if not executionPlanBegDate:
                 iKey = 0
                 periodicity = 0
                 aliquoticity = 0
                 for keyDate in executionPlanKeys:
                     iKey += 1
                     executionPlanTimes = executionPlan.get(keyDate, {})
                     aliquoticityNew = len(executionPlanTimes)
                     if aliquoticityNew:
                         executionPlanTimeKeys = executionPlanTimes.keys()
                         executionPlanTimeKeys.sort()
                         aliquoticity = aliquoticityNew
                         begDateDate = begDate.date()
                         durationNew = duration - begDateDate.daysTo(
                             QtCore.QDate(keyDate))
                         duration = durationNew
                         iKeys = iKey
                         while len(executionPlanKeys) > iKeys:
                             periodicityDate = executionPlanKeys[iKeys]
                             periodicityPlanTimes = executionPlan.get(
                                 periodicityDate, {})
                             if len(periodicityPlanTimes):
                                 periodicity = QtCore.QDate(keyDate).daysTo(
                                     QtCore.QDate(periodicityDate)) - 1
                                 break
                             else:
                                 iKeys += 1
                         if periodicity < 0:
                             periodicity = 0
                         begDate = QtCore.QDateTime(
                             QtCore.QDate(keyDate),
                             executionPlanTimeKeys[0])
                         break
             else:
                 executionPlanBegDateKeys = executionPlanBegDate.keys()
                 executionPlanBegDateKeys.sort()
                 begTime = executionPlanBegDateKeys[0]
                 aliquoticity = len(executionPlanBegDateKeys)
                 begDate = QtCore.QDateTime(begDate.date(), begTime)
                 executionPlanKeys = executionPlan.keys()
                 executionPlanKeys.sort()
                 newBegDate = begDate.date().addDays(1)
                 maxBegDate = executionPlanKeys[len(executionPlanKeys) - 1]
                 while newBegDate <= maxBegDate:
                     periodicityPlanTimes = executionPlan.get(
                         pyDate(newBegDate), {})
                     if len(periodicityPlanTimes):
                         periodicity = begDate.date().daysTo(newBegDate) - 1
                         break
                     else:
                         newBegDate = newBegDate.addDays(1)
                 if periodicity < 0:
                     periodicity = 0
             record.setValue('aliquoticity', toVariant(aliquoticity))
             record.setValue('begDate', toVariant(begDate))
             record.setValue('duration', toVariant(duration))
             record.setValue('periodicity', toVariant(periodicity))
             record.setValue('plannedEndDate',
                             toVariant(begDate.addDays(duration - 1)))
             action.setExecutionPlan(dialog.model.executionPlan)
コード例 #15
0
ファイル: TemperatureList.py プロジェクト: dio4/vista_1
    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)
コード例 #16
0
    def build(self, params):
        begDate = params.get('begDate', None)
        endDate = params.get('endDate', None)
        personId = params.get('personId', None)
        rowGrouping = params.get('rowGrouping', 0)
        query = selectData(begDate, endDate, personId, rowGrouping)

        if rowGrouping == 1:  # by personId
            forceKeyVal = forceRef
            keyValToString = lambda personId: forceString(
                QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id',
                                        personId, 'name'))
            keyName = u'Логопед'
        else:
            forceKeyVal = lambda x: pyDate(forceDate(x))
            keyValToString = lambda x: forceString(QtCore.QDate(x))
            keyName = u'Дата'

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        tableColumns = [('%20', [keyName], CReportBase.AlignLeft),
                        ('%5', [u'от 0 до 14 лет'], CReportBase.AlignLeft),
                        ('%5', [u'от 14 до 18 лет'], CReportBase.AlignLeft),
                        ('%5', [u'старше 18 лет'], CReportBase.AlignLeft),
                        ('%5', [u'из низ законченных случаев'],
                         CReportBase.AlignLeft),
                        ('%5', [u'Итого'], CReportBase.AlignLeft)]
        table = createTable(cursor, tableColumns)

        total = [0] * 5
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            rowKey = forceKeyVal(record.value('rowKey'))
            children = forceInt(record.value('children'))
            teens = forceInt(record.value('teens'))
            adults = forceInt(record.value('adults'))
            finished = forceInt(record.value('finished'))
            summary = forceInt(record.value('summary'))
            i = table.addRow()
            table.setText(i, 0, keyValToString(rowKey))
            table.setText(i, 1, children)
            table.setText(i, 2, teens)
            table.setText(i, 3, adults)
            table.setText(i, 4, finished)
            table.setText(i, 5, summary)

            total[0] += children
            total[1] += teens
            total[2] += adults
            total[3] += finished
            total[4] += summary

        i = table.addRow()
        table.setText(i, 0, u'Всего', CReportBase.TableTotal)
        for j in xrange(len(total)):
            table.setText(i, j + 1, total[j], CReportBase.TableTotal)

        return doc
コード例 #17
0
ファイル: ReportHospitalization.py プロジェクト: dio4/vista_1
    def build(self, params):
        begDate = params.get('begDate', None)
        endDate = params.get('endDate', None)
        personId = params.get('personId', None)
        rowGrouping = params.get('rowGrouping', 0)
        query = selectData(begDate, endDate, personId, rowGrouping)
        self.setQueryText(forceString(query.lastQuery()))
        if rowGrouping == 1:  # by personId
            forceKeyVal = forceRef
            keyValToString = lambda personId: forceString(
                QtGui.qApp.db.translate('vrbPersonWithSpeciality', 'id',
                                        personId, 'name'))
            keyName = u'Врач'
        else:
            forceKeyVal = lambda x: pyDate(forceDate(x))
            keyValToString = lambda x: forceString(QtCore.QDate(x))
            keyName = u'Дата'

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        tableColumns = [('%20', [keyName], 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)]
        table = createTable(cursor, tableColumns)

        boldChars = QtGui.QTextCharFormat()
        boldChars.setFontWeight(QtGui.QFont.Bold)

        boldItalicChars = QtGui.QTextCharFormat()
        boldItalicChars.setFontWeight(QtGui.QFont.Bold)
        boldItalicChars.setFontItalic(True)

        total = [0] * (len(tableColumns) - 1)

        while query.next():
            record = query.record()

            i = table.addRow()
            table.setText(i, 0,
                          keyValToString(forceKeyVal(record.value('rowKey'))))
            row = [
                forceInt(record.value('pnd')),
                forceInt(record.value('cmp')),
                forceInt(record.value('other')),
                forceInt(record.value('primaryCount')),
                forceInt(record.value('secondaryCount')),
                forceInt(record.value('repeatedCount'))
            ]

            for n, x in enumerate(row):
                table.setText(i, n + 1, x)
                total[n] = total[n] + x

        i = table.addRow()
        table.setText(i, 0, u'Всего', CReportBase.TableTotal)
        for n, x in enumerate(total):
            table.setText(i, n + 1, x, CReportBase.TableTotal)

        return doc