Пример #1
0
        def processQuery(query):
            while query.next():
                record = query.record()
                refuseTypeId = forceRef(record.value('refuseType_id'))
                refuseTypeCode = forceString(record.value('refuseTypeCode'))
                refuseTypeName = forceString(record.value('refuseTypeName'))
                personId = forceRef(record.value('person_id'))
                specialityName = forceString(record.value('specialityName'))
                specialityId = forceInt(record.value('speciality_id'))
                lastName = forceString(record.value('lastName'))
                firstName = forceString(record.value('firstName'))
                patrName = forceString(record.value('patrName'))
                code = forceString(record.value('code'))

                itemCount = forceInt(record.value('itemCount'))
                amount = forceDouble(record.value('amount'))
                uet = forceDouble(record.value('uet'))
                sum = forceDouble(record.value('sum'))
                name = formatName(lastName, firstName, patrName)
                key = (
                    specialityName
                    if specialityName else u'Без указания специальности',
                    name if name else u'Без указания врача',
                    code,
                    #                       personId,
                    refuseTypeCode,
                    refuseTypeName,
                    #                       refuseTypeId
                )

                reportLine = reportData.setdefault(key, [0] * reportRowSize)
                reportLine[0] += itemCount
                reportLine[1] += amount
                reportLine[2] += uet
                reportLine[3] += sum
Пример #2
0
    def build(self, params):
        begDate = getVal(params, 'begDate', QtCore.QDate())
        endDate = getVal(params, 'endDate', QtCore.QDate())
        eventTypeId = getVal(params, 'eventTypeId', None)
        sex = params.get('sex', 0)
        ageFrom = params.get('ageFrom', 0)
        ageTo = params.get('ageTo', 150)
        actionTypeClass = params.get('actionTypeClass', None)
        actionTypeId = params.get('actionTypeId', None)
        onlyPermanentAttach = params.get('onlyPermanentAttach', None)
        MKBFilter = params.get('MKBFilter', 0)
        MKBFrom = params.get('MKBFrom', '')
        MKBTo = params.get('MKBTo', '')
        onlyPayedEvents = params.get('onlyPayedEvents', False)
        begPayDate = params.get('begPayDate', QtCore.QDate())
        endPayDate = params.get('endPayDate', QtCore.QDate())

        query = selectData(begDate, endDate, eventTypeId, sex, ageFrom, ageTo,
                           actionTypeClass, actionTypeId, onlyPermanentAttach,
                           MKBFilter, MKBFrom, MKBTo, onlyPayedEvents,
                           begPayDate, endPayDate)

        #        db = QtGui.qApp.db
        reportData = []
        self.setQueryText(forceString(query.lastQuery()))
        while query.next():
            record = query.record()
            name = forceString(record.value('name'))
            amount = forceDouble(record.value('amount'))
            done = forceDouble(record.value('done'))
            cnt = forceInt(record.value('cnt'))
            reportData.append([name, cnt, amount, done])

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

        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [
            ('6%', [u'№ п/п'], CReportBase.AlignRight),
            ('30%', [u'Наименование'], CReportBase.AlignLeft),
            ('10%', [u'Случаев'], CReportBase.AlignRight),
            ('20%', [u'Назначено'], CReportBase.AlignRight),
            ('20%', [u'Выполнено'], CReportBase.AlignRight),
        ]

        table = createTable(cursor, tableColumns)

        for row in reportData:
            i = table.addRow()
            table.setText(i, 0, i)
            for j in xrange(len(row)):
                table.setText(i, j + 1, row[j])

        return doc
Пример #3
0
 def updateTotalSum(self):
     s = 0.0
     for item in self.modelDiagnostics.items():
         if forceBool(item.value('include')) and forceBool(
                 item.value('cash')):
             s += forceDouble(item.value('sum'))
     for item in self.modelActions.items():
         if forceBool(item.value('include')) and forceBool(
                 item.value('cash')):
             s += forceDouble(item.value('sum'))
     self.lblSumValue.setText('%.2f' % s)
Пример #4
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
Пример #5
0
    def fillStatDsTable(self, query, table):
        if query.first():
            record = query.record()
            values = [(forceInt(record.value('countEvent')),
                       forceInt(record.value('countEventPrimary'))),
                      (forceInt(record.value('countChildren')),
                       forceInt(record.value('countChildrenPrimary'))),
                      (forceInt(record.value('countOld')),
                       forceInt(record.value('countOldPrimary'))), (0, 0),
                      (forceInt(record.value('countCrimea')),
                       forceInt(record.value('countCrimeaPrimary'))),
                      (forceInt(record.value('days')),
                       forceInt(record.value('daysPrimary'))),
                      (forceInt(record.value('daysChildren')),
                       forceInt(record.value('daysChildrenPrimary'))),
                      (forceInt(record.value('daysOld')),
                       forceInt(record.value('daysOldPrimary'))), (0, 0),
                      (forceInt(record.value('daysCrimea')),
                       forceInt(record.value('daysCrimeaPrimary'))),
                      (forceDouble(record.value('summa')),
                       forceDouble(record.value('summaPrimary'))),
                      (forceDouble(record.value('summaChildren')),
                       forceDouble(record.value('summaChildrenPrimary'))),
                      (forceDouble(record.value('summaOld')),
                       forceDouble(record.value('summaOldPrimary'))),
                      (0.0, 0.0),
                      (forceDouble(record.value('summaCrimea')),
                       forceDouble(record.value('summaCrimeaPrimary')))]

            for index, value in enumerate(values):
                table.setText(index + 8, 3, value[0])
                table.setText(index + 8, 4, value[0])
                table.setText(index + 8, 5, value[1])
Пример #6
0
    def structInfo(self, query, params):
        financeId = params.get('financeId', None)
        detailContracts = params.get('detailContracts', False)

        detailFinance = not bool(financeId)

        self.resetHelpers()

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

            payerId = forceRef(record.value('payerId'))
            payerName = forceString(record.value('payerName'))
            financeId = forceRef(record.value('financeId'))
            contractName = forceString(
                record.value('contractName')) if detailContracts else None
            accountId = forceRef(record.value('accountId'))
            accountServicesAmount = forceInt(
                record.value('accountServicesAmount'))
            accountSum = forceDouble(record.value('accountSum'))
            accountInfo = forceString(record.value('accountInfo'))
            serviceMeanPrice = forceDouble(record.value('serviceMeanPrice'))
            clientMeanPrice = forceDouble(record.value('clientMeanPrice'))

            if detailFinance:
                payerIdList = self._mapFinanceIdToPayerId.setdefault(
                    financeId, [payerId])
                if not payerId in payerIdList:
                    payerIdList.append(payerId)

            payerInfo = self._mapPayerIdToInfo.setdefault(
                payerId, {
                    'payerName': payerName,
                    'contractInfoList': []
                })
            contractInfoList = payerInfo.setdefault('contractInfoList', [])
            contractInfo = {}
            contractInfo['contractName'] = contractName
            contractInfo['payerName'] = payerName
            contractInfo[
                'attachedClientsCount'] = self.getAttachedClientsCount(payerId)
            contractInfo[
                'accountsClientsCount'] = self.getAccountsClientsCount(
                    payerId, accountId)
            contractInfo['accountServicesAmount'] = accountServicesAmount
            contractInfo['accountSum'] = accountSum
            contractInfo['accountInfo'] = accountInfo
            contractInfo['serviceMeanPrice'] = serviceMeanPrice
            contractInfo['clientMeanPrice'] = clientMeanPrice
            contractInfoList.append(contractInfo)
Пример #7
0
    def __str__(self):
        strItems = [
            u'%s' % self.name,
            u'кол-во = %0.3f' % forceDouble(self.quantity),
            u'цена = %0.3f' % forceDouble(self.price),
            u'Статус оплаты = %s' %
            (CPayStatus.names[self.payStatus] if self.payStatus in xrange(
                len(CPayStatus.names)) else u'<ошибка>'),
            u'Отдел = %s' % self.department,
            u'скидка = %0.3f%s' % (forceDouble(
                self.discountValue), u'%' if self.discountType == 1 else u'')
        ]

        return ', '.join(strItems)
Пример #8
0
    def saveItems(self, formularyId):
        if formularyId is None:
            return False

        db = QtGui.qApp.db

        db.transaction()

        try:
            for item in self._items:
                stmt = '''
                    INSERT INTO DrugFormulary_Item (id, master_id, drug_id, `limit`)
                    VALUES (%(id)s, %(master_id)s, %(drug_id)s, '%(limit)s')
                    ON DUPLICATE KEY UPDATE drug_id = %(drug_id)s, `limit` = '%(limit)s'
                ''' % {
                    'id' : forceInt(item.value('id')),
                    'master_id' : forceInt(formularyId),
                    'drug_id' : forceInt(item.value('drug_id')),
                    'limit' : forceDouble(item.value('limit'))
                }

                db.query(stmt)

            db.commit()
            return True
        except:
            db.rollback()
            return False
Пример #9
0
    def getDataToDosesSetupDialog(self, curRow):
        item = self._items[curRow]
        route = forceInt(item.value('drugRouteId'))
        beginDate = forceDate(item.value('takeDateBegin'))
        endDate = forceDate(item.value('takeDateEnd'))
        interval = forceInt(item.value('interval'))

        timesStr = forceString(item.value('takeTime'))
        times = timesStr.split(',') if timesStr else []

        timeList = sorted([
            datetime.datetime.strptime(time, '%H:%M:%S').time()
            if time else datetime.datetime.time() for time in times
        ]) if times else []
        takeDose = forceString(item.value('takeDose'))
        doseItems = [forceDouble(dose)
                     for dose in takeDose.split(',')] if takeDose else []

        stmt = u'''
               SELECT rbUnit.code
               FROM rbMedicines
               INNER JOIN DrugFormulary_Item ON rbMedicines.id = DrugFormulary_Item.drug_id
               INNER JOIN rbUnit ON rbUnit.id = rbMedicines.unit_id
               WHERE DrugFormulary_Item.id = %(id)s
               ''' % {
            'id':
            forceInt(item.value('drugItem_id'))
            if curRow < len(self._items) else '0'
        }
        query = QtGui.qApp.db.query(stmt)
        unit = forceString(query.record().value(0)) if query.first() else ''

        commentsList = forceString(item.value('takeComment'))
        comments = commentsList.split(',') if commentsList else []
        return unit, timeList, doseItems, route, interval, beginDate, endDate, comments
Пример #10
0
    def getExpenses(self, tariffIdList):
        u"""Возвращает словарь списков записей затрат"""

        db = QtGui.qApp.db
        tableCCE = db.table('Contract_CompositionExpense')
        tableRBESI = db.table('rbExpenseServiceItem')
        queryTable = tableCCE.innerJoin(
            tableRBESI, tableRBESI['id'].eq(tableCCE['rbTable_id']))
        result = {}
        recordList = db.getRecordList(
            queryTable,
            cols=[
                tableCCE['master_id'], tableCCE['percent'], tableRBESI['code']
            ],
            where=[
                tableCCE['master_id'].inlist(tariffIdList),
                tableRBESI['code'].inlist(['1', '2', '3', '4'])
            ])

        for record in recordList:
            tariffId = forceRef(record.value('master_id'))
            expenses = result.setdefault(tariffId, {})
            expenses[forceString(record.value('code'))] = forceDouble(
                record.value('percent'))

        return result
Пример #11
0
    def exportTariffs(self, dbf, tariffs):
        lpuCode = forceString(self.edtLpuCode.text())
        expenses = self.getExpenses([forceRef(t.value('id')) for t in tariffs])

        serviceCache = CRBModelDataCache.getData('rbService',
                                                 True,
                                                 codeFieldName='code')

        self.progressBar.setFormat('%p%')
        self.progressBar.setValue(0)
        self.progressBar.setMaximum(len(tariffs))

        for tariff in tariffs:
            self.progressBar.step(1)
            QtGui.qApp.processEvents()
            tariffExpenses = expenses.get(forceRef(tariff.value('id')), {})
            record = dbf.newRecord()
            record['CODE_MO'] = lpuCode
            record['KUSL'] = serviceCache.getCodeById(
                forceRef(tariff.value('service_id')))
            record['DATN'] = forceDate(tariff.value('begDate')).toPyDate()
            record['DATO'] = forceDate(
                tariff.value('endDate')).toPyDate() if forceString(
                    tariff.value('endDate')) else u''
            price = forceDouble(tariff.value('price'))
            # amount = forceDouble(tariff.value('amount'))
            # priceKD = price/amount if amount else price
            record['TARIF'] = price
            # record['TARIF_B'] = tariffExpenses.get('1', 0.0)
            # record['TARIF_DM'] = tariffExpenses.get('2', 0.0)
            # record['TARIF_D'] = tariffExpenses.get('3', 0.0)
            # record['TARIF_UC'] = tariffExpenses.get('4', 0.0)
            # record['CENA_KD'] = 0 if forceDate(tariff.value('begDate')) >= QtCore.QDate(2015, 01, 01) else priceKD
            # record['LEVEL'] = self.cmbMedicalAidLevel.code()
            record.store()
Пример #12
0
 def getTable(self, cursor):
     columnCount = self.modelTableCap._colsCount
     tableColumns = []
     tableCapItems = [
         item for idx, item in enumerate(self.modelTableCap.items())
         if not self.modelTableCap.isGroupRow(idx)
         and not self.modelTableCap._fieldRow == idx
     ]
     for column in range(columnCount):
         listTitle = []
         for rowItems in tableCapItems:
             title = ''
             item = rowItems.get(column, None)
             if item:
                 title = item.name()
             listTitle.append(title)
         tableColumns.append(
             ('%s%%' % forceString(forceDouble(100 / columnCount)),
              listTitle, CReportBase.AlignCenter))
     table = createTable(cursor, tableColumns)
     for row, rowItems in enumerate(self.modelTableCap.items()):
         for column, item in rowItems.items():
             if item.rowSpan() > 1 or item.columnSpan() > 1:
                 table.mergeCells(row, column, item.rowSpan(),
                                  item.columnSpan())
     return table, tableColumns
Пример #13
0
    def convertValue(cls, value, typeName='str', return_null=False):
        """Преобразует переданное значение в указанный тип.
        Поддерживаемые типы:
            - 'double' или 'float': Вещественное число. Для преобразование используется forceDouble из library.Utils
            - 'int' или 'n': Целое число. Для преобразование используется forceInt из library.Utils
            - 'ref' или 'r': Ссылка на запись БД. Для преобразование используется forceRef из library.Utils
            - 'date' или 'd': Дата. Значение преобразуется в строку, из которой согласно `defaultDateFormat` в QDate

        :param value: Значение, которое необходимо преобразовать.
        :param typeName: имя типа, в который необходимо преобразовать значение.
        :param return_null: возвращать None для null-значений
        :return: преобразованное значение *value*
        """
        if return_null and value.isNull():
            return None
        typeName = typeName.lower()
        if typeName in ['double', 'float']:
            return forceDouble(value)
        elif typeName in ['int', 'n']:
            return forceInt(value)
        elif typeName in ['ref', 'r']:
            return forceRef(value)
        elif typeName in ['date', 'd']:
            return QtCore.QDate.fromString(forceStringEx(value),
                                           cls.defaultDateFormat)
        return forceStringEx(value)
Пример #14
0
 def getActionUET(self, action):
     personId = forceRef(action.getRecord().value('person_id'))
     financeId = self.eventEditor.eventFinanceId
     contractId = self.eventEditor.getContractId()
     return forceDouble(
         action.getRecord().value('amount')) * self.eventEditor.getUet(
             action.getType().id, personId, financeId, contractId)
Пример #15
0
 def on_edtSalaryPercentage_textChanged(self, text):
     result = re.search(self._salaryPercentageRegExp,
                        self.edtSalaryPercentage.text())
     if result:
         if forceDouble(result.group(0)) > 100.0:
             self.edtSalaryPercentage.setText('100')
     if len(self.edtSalaryPercentage.text()) == 0:
         self.edtSalaryPercentage.setText('0')
Пример #16
0
 def getRowColor(self, row):
     if self._cachedRow != row:
         self._cachedRow = row
         record = self._items[row]
         varQnt = record.value('qnt')
         varConstrainedQnt = record.value('constrainedQnt')
         varOrderQnt = record.value('orderQnt')
         self._cachedRowColor = None
         if not (varConstrainedQnt.isNull() or varOrderQnt.isNull()):
             qnt = forceDouble(varQnt)
             constrainedQnt = forceDouble(varConstrainedQnt)
             orderQnt = forceDouble(varOrderQnt)
             if qnt < constrainedQnt:
                 self._cachedRowColor = QtGui.QColor(QtCore.Qt.darkRed)
             elif qnt < orderQnt:
                 self._cachedRowColor = QtGui.QColor(QtCore.Qt.darkGreen)
     return self._cachedRowColor
Пример #17
0
 def readStock(self, orgStructureId, nomenclatureId, financeId):
     qnt = 0.0
     sum = 0.0
     if orgStructureId and nomenclatureId and financeId:
         try:
             db = QtGui.qApp.db
             query = db.query(
                 'CALL getStock(%d, %d, %d, NULL, @resQnt, @resSum)' %
                 (orgStructureId, nomenclatureId, financeId))
             query = db.query('SELECT @resQnt, @resSum')
             if query.next():
                 record = query.record()
                 qnt = forceDouble(record.value(0))
                 sum = forceDouble(record.value(1))
         except:
             QtGui.qApp.logCurrentException()
     return qnt, sum
    def build(self, params):
        eventTypesDict = params.get('eventTypes', None)
        eventTypes =eventTypesDict.keys()
        query = selectData(params, eventTypes)
        self.setQueryText(forceString(query.lastQuery()))

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        if eventTypes:
            cursor.insertText(u'исключены обращения с типами действия: ' + ', '.join([forceString(eventTypesDict[key]) for key in eventTypes]))
        cursor.insertBlock()
        groupOrgStructure = params.get('groupOrgStructure')
        tabIndex = TableColIndex()
        tableColumns = []
        tableColumns.extend([
            ( '5%',  [u'Код услуги'], CReportBase.AlignLeft),
            ( '15%', [u'Название кода тарифа'], CReportBase.AlignRight),
            ( '5%',  [u'Кол-во'], CReportBase.AlignLeft),
            ( '10%', [u'Тариф'], CReportBase.AlignLeft),
            ( '10%', [u'Стоимость'], CReportBase.AlignLeft)])
        tabIndex.addColumns(['code', 'actionName', 'amount', 'price', 'cost'])
        table = createTable(cursor, tableColumns)
        totalAmount = 0
        totalCost = 0
        previousOsName = None
        while query.next():
            record = query.record()
            if groupOrgStructure:
                osName = forceString(record.value('osName'))
                if osName != previousOsName:
                    row = table.addRow()
                    table.mergeCells(row, 0, 1, len(tabIndex))
                    table.setText(row, 0, osName)
                    previousOsName = osName
            code = forceString(record.value('code'))
            actionName = forceString(record.value('actionName'))
            amount = forceInt(record.value('amount'))
            price = forceDouble(record.value('price'))
            cost = amount * price
            totalAmount += amount
            totalCost += cost

            row = table.addRow()
            table.setText(row, tabIndex.code, code)
            table.setText(row, tabIndex.actionName, actionName)
            table.setText(row, tabIndex.amount, amount)
            table.setText(row, tabIndex.price, forceMoneyRepr(price))
            table.setText(row, tabIndex.cost, forceMoneyRepr(cost))

        row = table.addRow()
        table.setText(row, tabIndex.actionName, u'Итого:', CReportBase.TableTotal)
        table.setText(row, tabIndex.amount, totalAmount, CReportBase.TableTotal)
        table.setText(row, tabIndex.cost, totalCost, CReportBase.TableTotal)
        return doc
Пример #19
0
 def setData(self, index, value, role=QtCore.Qt.EditRole):
     column = index.column()
     row = index.row()
     if role == QtCore.Qt.CheckStateRole:
         column = index.column()
         if column == 0:
             group = forceInt(self.items()[row].value('selectionGroup'))
             newState = 1 if forceInt(value) == QtCore.Qt.Checked else 0
             if group > 0:
                 newState = 1
             if group == 0:  # нулевая группа - всегда переключается
                 result = CInDocTableModel.setData(self, index, value, role)
                 self.emit(QtCore.SIGNAL('sumChanged()'))
                 return result
             if group == 1:  # первая группа - никогда не переключается
                 return False
             for itemIndex, item in enumerate(self.items()):
                 itemGroup = forceInt(item.value('selectionGroup'))
                 if itemGroup == group:
                     item.setValue(
                         'include',
                         QtCore.QVariant(newState if itemIndex ==
                                         row else 0))
             self.emitColumnChanged(0)
             self.emit(QtCore.SIGNAL('sumChanged()'))
             return True
         elif column == self.ciCash:
             payable = forceInt(self.items()[row].value('payable'))
             if payable == 1:
                 result = CInDocTableModel.setData(self, index, value, role)
                 self.emit(QtCore.SIGNAL('sumChanged()'))
                 return result
             else:
                 return False
     result = CInDocTableModel.setData(self, index, value, role)
     if result and role == QtCore.Qt.EditRole:
         if column == self.ciPrice or column == self.ciAmount:
             item = self.items()[row]
             price = forceDouble(item.value('price'))
             amount = forceDouble(item.value('amount'))
             sum = round(price * amount, 2)
             item.setValue('sum', toVariant(sum))
             self.emitCellChanged(row, column)
             self.emit(QtCore.SIGNAL('sumChanged()'))
     return result
Пример #20
0
 def checkItemDataEntered(self, row, item):
     nomenclatureId = forceString(item.value('nomenclature_id'))
     qnt = forceDouble(item.value('qnt'))
     result = nomenclatureId or self.checkInputMessage(
         u'лекарственное средство или изделие медицинского назначения',
         False, self.tblProperties, row, 0)
     result = result and (qnt or self.checkInputMessage(
         u'количество', False, self.tblProperties, row, 2))
     return result
Пример #21
0
 def _getContainerTypeId(self, cond):
     db = QtGui.qApp.db
     record = db.getRecordEx('ActionType_TissueType', 'containerType_id, amount', cond)
     if record:
         amount = forceDouble(record.value('amount'))
         containerTypeId = forceRef(record.value('containerType_id'))
         calcAmountForContainerTypeId(containerTypeId, amount)
         return containerTypeId
     return None
Пример #22
0
 def getInfoList(self, context):
     result = []
     for item in self.items():
         include = forceBool(item.value('include'))
         cash = forceBool(item.value('cash'))
         if include:
             actionTypeId = forceRef(item.value('actionType_id'))
             actionType = CActionTypeCache.getById(actionTypeId)
             actionTypeInfo = CActionTypeInfo(context, actionType)
             price = forceDouble(item.value('price'))
             actionTypeInfo.price = price
             amount = forceDouble(item.value('amount'))
             actionTypeInfo.amount = amount
             sum = forceDouble(item.value('sum'))
             actionTypeInfo.sum = sum
             actionTypeInfo.cash = cash
             result.append(actionTypeInfo)
     return result
Пример #23
0
 def setRequsitions(self, requisitionIdList):
     db = QtGui.qApp.db
     table = db.table('StockRequisition_Item')
     requisitionItems = db.getRecordList(
         table, '*', table['master_id'].inlist(requisitionIdList),
         'master_id, idx')
     for item in requisitionItems:
         qnt = forceDouble(item.value('qnt')) - forceDouble(
             item.value('satisfiedQnt'))
         if qnt > 0:
             myItem = self.getEmptyRecord()
             myItem.setValue('nomenclature_id',
                             item.value('nomenclature_id'))
             myItem.setValue('finance_id', item.value('finance_id'))
             myItem.setValue('qnt', toVariant(qnt))
             myItem.setValue('sum', toVariant(self.calcSum(myItem)))
             self.items().append(myItem)
     self.reset()
Пример #24
0
    def build(self, params):
        lstStandartDict = params.get('lstStandart', None)
        lstStandart = lstStandartDict.keys()
        query = selectData(params, lstStandart)
        self.setQueryText(forceString(query.lastQuery()))

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

        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()

        tableColumns = [('20?', [u'ФИО пациента'], CReportBase.AlignLeft),
                        ('15?', [u'Код стандарта'], CReportBase.AlignCenter),
                        ('10?', [u'Даты начала/окончания'],
                         CReportBase.AlignLeft),
                        ('5?', [u'К/д'], CReportBase.AlignCenter),
                        ('15?', [u'ФИО врача'], CReportBase.AlignLeft),
                        ('5?', [u'Сумма'], CReportBase.AlignCenter)]

        table = createTable(cursor, tableColumns)

        currentClient = None
        countStandart = 0
        while query.next():
            record = query.record()
            client = forceString(record.value('clientInfo'))
            standart = forceString(record.value('code'))
            dates = forceString(record.value('dates'))
            duration = forceInt(record.value('duration'))
            person = forceString(record.value('name'))
            tariff = forceDouble(record.value('tariff'))

            i = table.addRow()
            if client != currentClient:
                if currentClient is not None:
                    table.mergeCells(i - countStandart, 0, countStandart, 1)
                    countStandart = 0
                table.setText(i, 0, client)
                currentClient = client

            table.setText(i, 1, standart)
            table.setText(i, 2, dates)
            table.setText(i, 3, duration)
            table.setText(i, 4, person)
            table.setText(i, 5, tariff)

            countStandart += 1

        if countStandart > 1:
            table.mergeCells(i - countStandart, 0, countStandart, 1)

        return doc
Пример #25
0
    def setData(self, index, value, role=QtCore.Qt.EditRole):
        if role == QtCore.Qt.EditRole:
            column = index.column()
            row = index.row()
            old = None

            if row < self.daysInMonth:
                item = self.items[row]
                valueChanged = False
                if column == self.ciTime:
                    newValue = convertVariantToTimeRange(value)
                    valueChanged = item.timeRange != newValue
                    if valueChanged and self.checkEQRangeIntersection(
                            row, item.eQueueTypeId, newValue, item.quantity):
                        item.timeRange = newValue
                    else:
                        return False
                elif column == self.ciPlan:
                    newValue = forceInt(value)
                    valueChanged = item.quantity != newValue

                    newValue = max(newValue, item.countUsed())
                    if valueChanged and self.checkEQRangeIntersection(
                            row, item.eQueueTypeId, item.timeRange, newValue):
                        old = item.quantity
                        item.quantity = newValue
                    else:
                        return False

                elif column == self.ciLimitSuperviseUnit:
                    newValue = forceDouble(value)
                    valueChanged = item.limitSuperviseUnit != newValue
                    item.limitSuperviseUnit = newValue if newValue > 0 else 0.0
                elif column == self.ciPersonQuota:
                    newValue = forceInt(value)
                    valueChanged = item.personQuota != newValue
                    newValue = newValue if newValue > 0 else 0
                    newValue = newValue if newValue < 100 else 100
                    item.personQuota = newValue
                if valueChanged:
                    self.emitCellChanged(row, column, old)
            return True
        elif role == QtCore.Qt.CheckStateRole:
            column = index.column()
            row = index.row()
            if row < self.daysInMonth:
                item = self.items[row]
                valueChanged = False
                if column == self.ciIsOvertime:
                    newValue = forceInt(value) == QtCore.Qt.Checked
                    valueChanged = item.isOvertime != newValue
                    item.isOvertime = newValue
                if valueChanged:
                    self.emitCellChanged(row, column)
            return True
        return False
Пример #26
0
        def processQuery(query, isByMoney):
            self.setQueryText(forceString(query.lastQuery()))
            while query.next():
                record = query.record()
                personId = forceInt(record.value('personId'))
                personName = forceString(record.value('personName'))
                date = forceDate(record.value('date'))
                sumDivider = forceInt(record.value('sumDivider'))
                amount = forceDouble(record.value('amount')) / sumDivider
                sum = forceDouble(record.value('sum')) / sumDivider
                if amount == int(amount):
                    amount = int(amount)

                doctorData = doctorsData.setdefault(personId, {
                    'name': personName,
                    'data': [0] * daysCount
                })
                doctorData['data'][begDate.daysTo(date)] += (sum if isByMoney
                                                             else amount)
Пример #27
0
 def _getValue(self):
     record = QtGui.qApp.db.getRecord('rbContainerType',
                                      'CONCAT_WS(\' | \', code, name) AS val, color, amount', self._id)
     if record:
         self._color = QtGui.QColor(forceString(record.value('color')))
         self._capacity = forceDouble(record.value('amount'))
         return forceString(record.value('val'))
     else:
         self._color = QtGui.QColor()
         return ''
Пример #28
0
 def getDataAsFNDict(self):
     result = {}
     for item in self.items():
         financeId = forceRef(item.value('finance_id'))
         nomenclatureId = forceRef(item.value('nomenclature_id'))
         if financeId and nomenclatureId:
             ndict = result.setdefault(financeId, {})
             ndict[nomenclatureId] = ndict.get(
                 nomenclatureId, 0) + forceDouble(item.value('qnt'))
     return result
Пример #29
0
    def build(self, params):
        grouped = bool(params.get('lstSource'))

        doc = QtGui.QTextDocument()
        cursor = QtGui.QTextCursor(doc)
        cursor.setCharFormat(CReportBase.ReportTitle)
        cursor.insertText(self.title())
        cursor.insertBlock()
        self.dumpParams(cursor, params)
        cursor.insertBlock()
        tableColumns = [
            ('%50', [u'Количество пациентов'], CReportBase.AlignRight),
            ('%50', [u'Cумма (р.)'], CReportBase.AlignRight),
        ]

        if grouped:
            tableColumns.insert(0,
                                ('%50', [u'Источник'], CReportBase.AlignRight))

        table = createTable(cursor, tableColumns)

        query = selectData(params)
        self.setQueryText(forceString(query.lastQuery()))

        if grouped:
            reportData = {}
            while query.next():
                rec = query.record()
                reportData[forceRef(rec.value('rbInfoSource_id'))] = (forceInt(
                    rec.value('clientsCount')), forceDouble(rec.value('sum')))
            for rec in selectInfoSourceNameMap(params):
                sourceId = forceRef(rec.value('id'))
                sourceName = forceString(rec.value('name'))
                clientsCount, accountSum = reportData.get(sourceId, (0, 0.0))
                table.addRowWithContent(sourceName, clientsCount, accountSum)
        else:
            while query.next():
                rec = query.record()
                table.addRowWithContent(forceInt(rec.value('clientsCount')),
                                        forceDouble(rec.value('sum')))

        return doc
Пример #30
0
def insertMedicamentsSection(cursor, mesId):
    cursor.movePosition(QtGui.QTextCursor.End)
    cursor.insertBlock()
    cursor.insertBlock()
    cursor.insertText(u'Лекарственные средства (МНН) в официнальной дозировке')
    cursor.insertBlock()
    columns = [
        ('5%', [u'№'], CReportBase.AlignRight),
        ('10%', [u'Код'], CReportBase.AlignLeft),
        ('65%', [u'Наименование'], CReportBase.AlignLeft),
        ('5%', [u'СЧЕ'], CReportBase.AlignRight),
        ('5%', [u'Чн'], CReportBase.AlignRight),
    ]
    table = createTable(cursor, columns)
    stmt = '''
        SELECT MES_medicament.medicamentCode as code, MES_medicament.dosage, MES_medicament.averageQnt, MES_medicament.necessity,
               mrbMedicamentDosageForm.name AS formName,
               mrbMedicament.name AS name, mrbMedicament.form AS medicamentForm, mrbMedicament.dosage AS medicamentDosage,
               G1.name AS groupName,
               G2.name AS subgroupName
        FROM mes.MES_medicament
        LEFT JOIN mes.mrbMedicamentDosageForm ON mrbMedicamentDosageForm.id = MES_medicament.dosageForm_id
        LEFT JOIN mes.mrbMedicament ON mrbMedicament.code = MES_medicament.medicamentCode
        LEFT JOIN mes.mrbMedicamentGroup AS G1 ON G1.code = SUBSTRING_INDEX(MES_medicament.medicamentCode, '.', 1)
        LEFT JOIN mes.mrbMedicamentGroup AS G2 ON G2.code = SUBSTRING_INDEX(MES_medicament.medicamentCode, '.', 2)
        WHERE MES_medicament.master_id=%d
        ORDER BY MES_medicament.medicamentCode, mrbMedicament.name
        ''' % mesId
    query = QtGui.qApp.db.query(stmt)
    row = 0
    while query.next():
        row += 1
        record = query.record()
        groupName = forceString(record.value('groupName'))
        subgroupName = forceString(record.value('subgroupName'))
        code = forceString(record.value('code'))
        name = forceString(record.value('name'))
        averageQnt = forceInt(record.value('averageQnt'))
        necessity = forceDouble(record.value('necessity'))
        i = table.addRow()
        table.setText(i, 0, row)
        table.setText(i, 1, u'Группа')
        table.setText(i, 2, groupName)
        i = table.addRow()
        table.setText(i, 1, u'Подгруппа')
        table.setText(i, 2, subgroupName)
        i = table.addRow()
        table.setText(i, 1, code)
        table.setText(i, 2, name)
        table.setText(i, 3, averageQnt)
        table.setText(i, 4, necessity)
        table.mergeCells(i - 2, 0, 3, 1)
        table.mergeCells(i - 2, 2, 1, 3)
        table.mergeCells(i - 1, 2, 1, 3)