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
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
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)
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
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])
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)
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)
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
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
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
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()
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
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)
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)
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')
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
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
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
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
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
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
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()
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
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
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)
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 ''
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
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
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)