def build(self,params): begDate = params.get('begDate') endDate = params.get('endDate') isValid = params.get('isValid') group = params.get('group') protocolNum = params.get('protocolNum') if forceInt(group): query = selectEventsList(begDate, endDate, protocolNum, isValid) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() names = self.getVisitsList(forceInt(self.db.translate('PaymentScheme', 'numberProtocol', protocolNum, 'id'))) tableColumns = [('20%', [u'Пациент'], CReportBase.AlignLeft)] for v in names: tableColumns.append(('10%', forceString(v), CReportBase.AlignLeft)) table = createTable(cursor, tableColumns) while query.next(): columnsCount = len(names) record = query.record() i = table.addRow() table.setText(i, 0, forceString(record.value('lastName')) + u' ' + forceString(record.value('firstName')) + u' ' + forceString(record.value('patrName'))) for count in xrange(columnsCount): table.setText(i, count + 1, self.getVisitDone(record, params, names[count])) return doc else: query = selectEventsList(begDate, endDate, protocolNum, isValid) 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), ('10%', [u'Номер визита'], CReportBase.AlignLeft), ('60%', [u'Сумма оказанных услуг'], CReportBase.AlignLeft), ('10%', [u'Статус визита'], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) while query.next(): record = query.record() i = table.addRow() table.setText(i, 0, forceString(record.value('lastName')) + u' ' + forceString(record.value('firstName')) + u' ' + forceString(record.value('patrName'))) table.setText(i, 1, forceString(record.value('protocolName'))) table.setText(i, 2, forceString(self.getClientList(record, params))) table.setText(i, 3, forceString(self.checkOnClose(record)) + u'оплачен' if forceDecimal(record.value('sumUsl')) == forceDecimal(record.value('sumPayed')) else self.checkOnClose(record) + u'не оплачен') return doc
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 insertMKBSection(cursor, mesId): db = QtGui.qApp.db cursor.insertText(u'Заболевания, входящие в МЭС (в формулировках МКБ)') cursor.insertBlock() cursor.setCharFormat(QtGui.QTextCharFormat()) tableColumns = [ ('5%', [u'№'], CReportBase.AlignRight), ('10%', [u'Код диагноза по МКБ'], CReportBase.AlignLeft), ('75%', [u'Диагноз'], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) tableMKB = db.table('mes.MES_mkb') for record in db.getRecordList(tableMKB, 'mkb', tableMKB['master_id'].eq(mesId), 'mkb'): i = table.addRow() table.setText(i, 0, i) mkb = record.value('mkb') table.setText(i, 1, forceString(mkb)) table.setText( i, 2, forceString(db.translate('MKB_Tree', 'DiagID', mkb, 'DiagName'))) cursor.movePosition(QtGui.QTextCursor.End)
def build(self, params): doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(u'Итоги дополнительной диспансеризации граждан') cursor.insertBlock() self.dumpParams(cursor, params) self.buildInt(params, cursor) cursor.movePosition(QtGui.QTextCursor.End) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText('\n\n\n') cursor.insertBlock() rows = [] orgId = QtGui.qApp.currentOrgId() db = QtGui.qApp.db table = db.table('Organisation') record = db.getRecordEx(table, table['chief'], [table['id'].eq(orgId), table['deleted'].eq(0)]) chief = forceString(record.value('chief')) text0 = u'Руководитель ЛПУ %s'%(chief) rows.append([text0]) rows.append([u'\n']) rows.append([u'_____________________________']) rows.append([u' (подпись)']) rows.append([u'\n М.П.\n']) rows.append([u'"_____"________________2010г.']) columnDescrs = [('100%', [], CReportBase.AlignLeft)] table1 = createTable ( cursor, columnDescrs, headerRowCount=len(rows), border=0, cellPadding=2, cellSpacing=0) for i, row in enumerate(rows): table1.setText(i, 0, row[0]) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock() return doc
def build(self, params): query = selectData(params) 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 = [('2%', [u'№'], CReportBase.AlignLeft), ('10%', [u'Подразделение'], CReportBase.AlignLeft), ('10%', [u'ФИО исполнителя'], CReportBase.AlignLeft), ('40%', [u'Наименование услуги'], CReportBase.AlignLeft), ('5%', [u'Кол-во'], CReportBase.AlignLeft), ('5%', [u'Цена'], CReportBase.AlignLeft), ('5%', [u'Сумма'], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) masterRecord = MasterRecord() while query.next(): record = query.record() orgId = forceInt(record.value('orgStructId')) service = ServiceRecord(forceString(record.value('serviceName')), forceInt(record.value('serviceAmount')), forceInt(record.value('servicePrice'))) performer = PerformerRecord( forceString(record.value('performerName')), service) masterRecord.addElement(orgId, performer) buildTable(table, masterRecord) return doc
def makeTable(self, detailChildren, sceneNames, columnShift, cursor): tableColumns = [ ('30%', [u'ФИО врача', u''], CReportBase.AlignLeft), ('5%', [u'всего посещений', u''], CReportBase.AlignRight), ('5%', [u'по поводу заболеваний', u'всего'], CReportBase.AlignRight), ('5%', [u'', u'дети'], CReportBase.AlignRight), ('5%', [u'', u'взр.'], CReportBase.AlignRight), ] if detailChildren: tableColumns.insert( 4, ('5%', [u'', u'подр.'], CReportBase.AlignRight)) for sceneName in sceneNames: tableColumns.append(('5%', [sceneName, u'всего'], CReportBase.AlignRight)) tableColumns.append(('5%', [u'', u'по заб.'], CReportBase.AlignRight)) table = createTable(cursor, tableColumns) table.mergeCells(0, 0, 2, 1) table.mergeCells(0, 1, 2, 1) ageLength = 4 if detailChildren else 3 table.mergeCells(0, 2, 1, ageLength) for sceneIndex in xrange(len(sceneNames)): table.mergeCells(0, 6 + sceneIndex * 2 - columnShift, 1, 2) return table
def dumpParams(self, cursor, params): begDate = params.get('begDate', QtCore.QDate()) endDate = params.get('endDate', QtCore.QDate()) def dateRangeAsStr(begDate, endDate): result = '' if begDate: result += u' с ' + forceString(begDate) if endDate: result += u' по ' + forceString(endDate) return result description = [] if begDate and endDate: description.append(u'за период' + dateRangeAsStr(begDate, endDate)) description.append(u'отчёт составлен: ' + forceString(QtCore.QDateTime.currentDateTime())) columns = [('100%', [], CReportBase.AlignLeft)] table = createTable(cursor, columns, headerRowCount=len(description), border=0, cellPadding=2, cellSpacing=0) for i, row in enumerate(description): table.setText(i, 0, row) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock()
def outPersonTable(self, cursor, personName, personData): cursor.movePosition(QtGui.QTextCursor.End) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(personName) cursor.insertBlock() tableColumns = [] for weekDay in xrange(7): name = forceString(QtCore.QDate.longDayName(weekDay + 1)).capitalize() tableColumns.append(('5%', [name, u'Дата'], CReportBase.AlignLeft)) tableColumns.append(('5%', ['', u'Приём'], CReportBase.AlignLeft)) tableColumns.append(('3%', ['', u'Кабинет'], CReportBase.AlignLeft)) table = createTable(cursor, tableColumns) for weekDay in xrange(7): table.mergeCells(0, weekDay * 3, 1, 3) dateList = personData.keys() dateList.sort() prevIsoWeek = None week = [None] * 7 for date in dateList: isoYear, isoWeek, isoWeekDay = date.isocalendar() if prevIsoWeek != isoWeek: if prevIsoWeek: self.outWeek(table, week) week = [None] * 7 prevIsoWeek = isoWeek ranges = personData[date] ranges.sort() week[isoWeekDay - 1] = date, ranges self.outWeek(table, week)
def build(self, params): doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [ ('100%', [u'Из числа больных, находящихся под диспансерным наблюдением и получающих консультативно-лечебную помощь,' u' получили курс лечения/реабилитации бригадным методом у психиатров для взрослых 1 ___, для подростков 2 ___, детских 3 ____' u'.'], CReportBase.AlignLeft) ] table = createTable(cursor, tableColumns) query = selectData(params) self.setQueryText(forceString(query.lastQuery())) # this does nothing? while query.next(): record = query.record() table.setText(0, 0, forceString(record.value('FIO_cl'))) return doc
def outPersonCommonTable(self, cursor, personNames, reportData, begDate, endDate): cursor.movePosition(QtGui.QTextCursor.End) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertBlock() tableColumns = [('5%', [''], CReportBase.AlignLeft)] listPersonId = [] for personId in personNames.keys(): tableColumns.append( ('5%', [personNames[personId]], CReportBase.AlignLeft)) listPersonId.append(personId) table = createTable(cursor, tableColumns) currentDate = forceDate(begDate) while currentDate != endDate.addDays(1): i = table.addRow() table.setText( i, 0, currentDate.toString('dd.MM.yyyy') + ', ' + forceString(QtCore.QDate.shortDayName( currentDate.dayOfWeek())).capitalize()) key = currentDate.toString('dd.MM.yyyy') for index, personId in enumerate(listPersonId): try: for value in xrange(len(reportData[key][personId])): table.setText( i, index + 1, reportData[key][personId][value][0].toString( 'hh:mm') + '-' + reportData[key][personId] [value][1].toString('hh:mm') + u' каб. ' + reportData[key][personId][value][2] + '\n') except KeyError: pass currentDate = currentDate.addDays(1)
def build(self, params): query = selectData(params) 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), ('3%', [u'Количество'], CReportBase.AlignRight)] table = createTable(cursor, tableColumns) total = 0 while query.next(): record = query.record() name = forceString(record.value('name')) count = forceInt(record.value('count')) i = table.addRow() table.setText(i, 0, name) table.setText(i, 1, count) total += count i = table.addRow() table.setText(i, 0, u'Итого', CReportBase.TableTotal) table.setText(i, 1, total, CReportBase.TableTotal) return doc
def build(self, params): query = selectData(params) 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() u'''Отделения Проведенео операций (кол-во) Прооперировано больных(чел.) - ... ''' tableColumns = [ ('60%', [u'Наименование услуги'], CReportBase.AlignCenter), ('20%', [u'Количество услуг'], CReportBase.AlignCenter), ] table = createTable(cursor, tableColumns) while query.next(): record = query.record() row = table.addRow() fields = ( {'name': u'Посещения', 'format': CReportBase.TableTotal, 'align': CReportBase.AlignLeft}, {'name': forceInt(record.value('quantity')),'format': CReportBase.TableBody, 'align': CReportBase.AlignRight}, ) for col, val in enumerate(fields): table.setText(row, col, val['name'], val['format'], val['align']) return doc
def build(self, params): begDate = params.get('begDate') endDate = params.get('endDate') statusOrg = params.get('statusOrg') partner = params.get('partner') isValid = params.get('isValid') query = selectFinanceData(begDate, endDate, statusOrg, isValid, partner) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [ ('10%', [u'Контрагент'], CReportBase.AlignLeft), ('10%', [u'Номер договора'], CReportBase.AlignLeft), ('10%', [u'Дата заключения'], CReportBase.AlignLeft), ('10%', [u'Дата окончания'], CReportBase.AlignLeft), ('10%', [u'Сумма остатка'], CReportBase.AlignLeft), ('10%', [u'Сумма выписанных услуг'], CReportBase.AlignLeft), ('10%', [u'Сумма выставленных счетов'], CReportBase.AlignLeft), ('10%', [u'Сумма не выставленных счетов'], CReportBase.AlignLeft), ('10%', [u'Сумма не оплаченных счетов'], CReportBase.AlignLeft) ] table = createTable(cursor, tableColumns) table.mergeCells(0, 0, 1, 1) # Контрагент table.mergeCells(0, 0, 1, 1) # Номер договора table.mergeCells(0, 0, 1, 1) # Дата заключения table.mergeCells(0, 0, 1, 1) # Дата окончания table.mergeCells(0, 0, 1, 1) # Сумма остатка table.mergeCells(0, 0, 1, 1) # Сумма выписанных услуг table.mergeCells(0, 0, 1, 1) # Сумма выставленных счетов table.mergeCells(0, 0, 1, 1) # Сумма не выставленных счетов table.mergeCells(0, 0, 1, 1) # Сумма не оплаченных счетов while query.next(): record = query.record() i = table.addRow() table.setText( i, 0, forceString( self.db.translate(self.tblOrganisation, self.tblOrganisation['id'], forceInt(record.value('org_id')), self.tblOrganisation['shortName']))) table.setText(i, 1, forceString(record.value('number'))) table.setText(i, 2, forceString(record.value('begDate'))) table.setText(i, 3, forceString(record.value('endDate'))) table.setText( i, 4, forceDecimal( forceDecimal(record.value('total')) - forceDecimal(record.value('spent')))) table.setText(i, 5, forceDecimal(record.value('sumUsl'))) table.setText(i, 6, forceDecimal(record.value('sumAcc'))) table.setText(i, 7, forceDecimal(record.value('sumNotAcc'))) table.setText(i, 8, forceDecimal(record.value('sumNotPayed'))) return doc
def createClientsTable(cursor, charFormat): tableColumns = [ ('15?', [u'Фамилия, и., о. поступивших'], CReportBase.AlignLeft), ('15?', [u'Фамилия, и., о. поступивших из круглосуточного стационара' ], CReportBase.AlignLeft), ('15?', [u'Фамилия, и., о. выписанных'], CReportBase.AlignLeft), ('15?', [ u'Фамилия, и., о. переведенных', u'в другие отделения данной больницы' ], CReportBase.AlignLeft), ('15?', [u'', u'в другие стационары'], CReportBase.AlignLeft), ('15?', [u'Фамилия, и., о. умерших'], CReportBase.AlignLeft), ('15?', [u'Фамилия, и., о. больных, находящихся во временном отпуск' ], CReportBase.AlignLeft), ] clientsTable = createTable(cursor, tableColumns, charFormat=charFormat) clientsTable.mergeCells(0, 3, 1, 2) for col in (0, 1, 2, 5, 6): clientsTable.mergeCells(0, col, 2, 1) i = clientsTable.addRow() for col in xrange(len(tableColumns)): clientsTable.setText(i, col, col + 1, blockFormat=CReportBase.AlignCenter) return clientsTable
def build(self, params): query = selectData(params) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [('10%', [u'Код клиента', u''], CReportBase.AlignLeft), ('20%', [u'ФИО', u''], CReportBase.AlignLeft), ('15%', [u'Услуга', u''], CReportBase.AlignLeft), ('15%', [u'Причина отказа', u''], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() row = table.addRow() fields = ( forceString(record.value('clientId')), forceString(record.value('fio')), forceString(record.value('usl')), forceString(record.value('reason')), ) for col, val in enumerate(fields): table.setText(row, col, val) return doc
def build(self, params): query = selectData(params) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = (('N', ('2%', [u'№'], CReportBase.AlignLeft)), ('IB', ('10%', [u'№ ИБ'], CReportBase.AlignLeft)), ('LastName', ('20%', [u'Фамилия'], CReportBase.AlignLeft)), ('FirstName', ('20%', [u'Имя'], CReportBase.AlignLeft)), ('PatrName', ('20%', [u'Отчество'], CReportBase.AlignLeft)), ('Days', ('10%', [u'Кол-во койко-дней'], CReportBase.AlignLeft))) table = createTable(cursor, map(lambda item: item[1], tableColumns)) self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() row_ind = table.addRow() for col_ind, (name, col) in enumerate(tableColumns): if name == 'N': table.setText(row_ind, col_ind, str(row_ind)) else: table.setText(row_ind, col_ind, forceString(record.value(name))) return doc
def build(self, params): doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [('30%', [u'Порядок наступления'], CReportBase.AlignLeft), ('30%', [u'Количество'], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) query = selectData(params) self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() i = table.addRow() if forceString(record.value('ord')) == '1': table.setText(i, 0, str('плановый').decode('utf8')) elif forceString(record.value('ord')) == '2': table.setText(i, 0, str('экстренный').decode('utf8')) elif forceString(record.value('ord')) == '3': table.setText(i, 0, str('самотёком').decode('utf8')) elif forceString(record.value('ord')) == '4': table.setText(i, 0, str('принудительный').decode('utf8')) elif forceString(record.value('ord')) == '5': table.setText(i, 0, str('неотложный').decode('utf8')) table.setText(i, 1, forceString(record.value('COUNT_ALL'))) return doc
def build(self, params): doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [('33?', [u'Код услуги'], CReportBase.AlignLeft), ('33?', [u'Наименование услуги'], CReportBase.AlignLeft), ('33?', [u'Цена'], CReportBase.AlignLeft)] table = createTable(cursor, tableColumns) query, data = selectData(params, self.reportNumber) self.setQueryText(forceString(query.lastQuery())) for x in data: i = table.addRow() table.setText(i, 0, forceString(x['code'])) table.setText(i, 1, forceString(x['name'])) table.setText(i, 2, forceString(x['price'])) return doc
def build(self, params): query = selectData(params) self.setQueryText(forceString(query.lastQuery())) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) org_id = QtGui.qApp.currentOrgId() org_info = getOrganisationInfo(org_id) cursor.insertBlock(CReportBase.AlignCenter) cursor.insertText(org_info.get('fullName')) cursor.insertBlock(CReportBase.AlignCenter) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [('20%', [u'Отделение'], CReportBase.AlignCenter)] valueDomain = QtGui.qApp.db.translate('ActionPropertyType', 'name', u'Cостояние пациента', 'valueDomain') state_list = CStrComboBox.parse(forceString(valueDomain))[0] state_list.insert(0, u'') for header in state_list: tableColumns.append(('12%', [header], CReportBase.AlignCenter)) tableColumns.append(('8%', [u'Всего'], CReportBase.AlignCenter)) table = createTable(cursor, tableColumns) struct = OrderedDict() while query.next(): record = query.record() org_struct = forceString(record.value('org_struct')) org_struct = org_struct if org_struct else u'без уточнения' patient_state = forceString(record.value('patient_state')) d = struct.setdefault(org_struct, OrderedDict.fromkeys(state_list, 0)) d[patient_state] += 1 total_col = OrderedDict.fromkeys(state_list, 0) total_col['total'] = 0 for org_struct, d in struct.items(): i = table.addRow() table.setText(i, 0, org_struct) total_row = 0 for col, (state, num) in enumerate(d.items()): table.setText(i, col + 1, num) total_row += num total_col[state] += num table.setText(i, len(d) + 1, total_row) total_col['total'] += total_row i = table.addRow() table.setText(i, 0, u'Всего', CReportBase.TableTotal) for col, N in enumerate(total_col.values()): table.setText(i, col + 1, N, CReportBase.TableTotal) return doc
def on_btnPrint_clicked(self): widgetIndex = self.tabWidget.currentIndex() if widgetIndex == 1: model = self.modelTemperatureSheet doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(u'Таблица температурного листа\n') cursor.insertBlock() cursor.setCharFormat(CReportBase.ReportBody) cursor.insertText(u'Пациент: %s' % (getClientString(self.clientId))) cursor.insertText(u'\nОтчёт составлен: ' + forceString(QtCore.QDateTime.currentDateTime())) cursor.insertBlock() colWidths = [ self.tblTemperatureSheet.columnWidth(i) for i in xrange(model.columnCount() - 1) ] colWidths.insert(0, 10) totalWidth = sum(colWidths) tableColumns = [] iColNumber = False for iCol, colWidth in enumerate(colWidths): widthInPercents = str(max(1, colWidth * 90 / totalWidth)) + '%' if iColNumber == False: tableColumns.append( (widthInPercents, [u'№'], CReportBase.AlignRight)) iColNumber = True headers = model.headers tableColumns.append( (widthInPercents, [forceString(headers[iCol][1])], CReportBase.AlignLeft)) table = createTable(cursor, tableColumns) for iModelRow in xrange(model.rowCount()): iTableRow = table.addRow() table.setText(iTableRow, 0, iModelRow + 1) for iModelCol in xrange(model.columnCount()): index = model.createIndex(iModelRow, iModelCol) text = forceString(model.data(index)) table.setText(iTableRow, iModelCol + 1, text) html = doc.toHtml(QtCore.QByteArray('utf-8')) view = CReportViewDialog(self) view.setText(html) view.exec_() else: printer = QtGui.QPrinter(QtGui.QPrinter.HighResolution) printer.setOrientation(QtGui.QPrinter.Landscape) dialog = QtGui.QPrintDialog(printer, self) if dialog.exec_(): painter = QtGui.QPainter(printer) scale = min( printer.pageRect().width() / self.scrollArea.widget().width(), printer.pageRect().height() / self.scrollArea.widget().height()) painter.scale(scale, scale) self.scrollArea.widget().render(painter) painter.end()
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 createTable(self, params, cursor): # 1 headerTableColumns = [ ('23?', [u''], CReportBase.AlignLeft) ] + [ ('12?', [u''], CReportBase.AlignRight) ] * 4 headerTable = createTable(cursor, headerTableColumns, cellPadding=3) # , border=0, cellPadding=2, cellSpacing=0) for r in xrange(5): headerTable.addRow() cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock() cursor.insertBlock() # 2 mainTableColumns = [ ('23?', [u'Отделение', u''], CReportBase.AlignLeft), ('12?', [u'кол-во\nкоек', u''], CReportBase.AlignRight), ('12?', [u'состояло\nна 9:00\nпредыдущих суток', u''], CReportBase.AlignRight), ('12?', [u'госпитализировано', u''], CReportBase.AlignRight), ('12?', [u'переведено\nиз\nдр. отдел.', u''], CReportBase.AlignRight), ('12?', [u'переведено\nв\nдр. отдел.', u''], CReportBase.AlignRight), ('12?', [u'выписано', u''], CReportBase.AlignRight), ('12?', [u'умерло', u''], CReportBase.AlignRight), ('12?', [u'состоит\nна 7:00\nтекущих суток', u''], CReportBase.AlignRight), ('12?', [u'кол-во\nсвободных коек', u'всего'], CReportBase.AlignRight), ('12?', [u'', u'муж'], CReportBase.AlignRight), ('12?', [u'', u'жен'], CReportBase.AlignRight), ] table = createTable(cursor, mainTableColumns, cellPadding=3) for r in xrange(10): table.addRow() for c in xrange(9): table.mergeCells(0, c, 2, 1) table.mergeCells(0, 9, 1, 3) table.mergeCells(11, 1, 1, 2) table.mergeCells(11, 4, 1, 8) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock() cursor.insertBlock() return headerTable, table
def build(self, params): begDate = params.get('begDate') endDate = params.get('endDate') tableColumns = [('10%', u'Код', CReportBase.AlignRight), ('15%', u'Ф.И.О. пациента', CReportBase.AlignRight), ('6%', u'Дата рождения', CReportBase.AlignRight), ('6%', u'Специальность', CReportBase.AlignRight), ('15%', u'Выбранный врач', CReportBase.AlignRight), ('6%', u'Максимальная дата', CReportBase.AlignRight), ('15%', u'Назначенный врач', CReportBase.AlignRight), ('6%', u'Дата приёма', CReportBase.AlignRight), ('10%', u'Комментарий', CReportBase.AlignRight)] bf = QtGui.QTextCharFormat() bf.setFontWeight(QtGui.QFont.Bold) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setBlockFormat(CReportBase.AlignLeft) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(u'Результаты записи:') cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() cursor.insertBlock() cursor.movePosition(QtGui.QTextCursor.End) table = createTable(cursor, tableColumns) query = QtGui.qApp.db.query(selectData(begDate, endDate)) self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() i = table.addRow() table.setText(i, 0, forceString(record.value('client_id'))) table.setText( i, 1, forceString(record.value('clientLastName')) + ' ' + forceString(record.value('clientFirstName')) + ' ' + forceString(record.value('clientPatrName'))) table.setText(i, 2, forceString(record.value('birthDate'))) table.setText(i, 3, forceString(record.value('specialityName'))) table.setText(i, 4, forceString(record.value('selectedPersonName'))) table.setText(i, 5, forceString(record.value('maxDate'))[0:10]) table.setText( i, 6, forceString(record.value('personLastName')) + ' ' + forceString(record.value('personFirstName')) + ' ' + forceString(record.value('personPatrName'))) table.setText(i, 7, forceString(record.value('directionDate'))) table.setText(i, 8, forceString(record.value('comment'))) return doc
def build(self, params): doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [ ('10%', [u'Из числа больных, находившихся под диспансерным наблюдением и получавших' u'консультативно-лечебную помощь на конец года (стр. 1 гр. 10 т. 2100 и 2110)'], CReportBase.AlignLeft), ('10%', [u''], CReportBase.AlignLeft), ('10%', [u''], CReportBase.AlignLeft), ('8%', [u''], CReportBase.AlignLeft), ('12%', [u''], CReportBase.AlignLeft), ('8%', [u'Из числа снятых с диспансерного наблюдения (стр.1, гр.8, т.2100)'], CReportBase.AlignLeft), ('12%', [u''], CReportBase.AlignLeft) ] table = createTable(cursor, tableColumns) query = selectData(params) self.setQueryText(forceString(query.lastQuery())) # this does nothing? lst_scnd_row = [u'получили курс лечения/реабилитации бригадным методом', u'лиц трудоспособного возраста', u'работающих', u'', u'находится под опекой', u'умерло', u'в том числе непосредственно от псих. заболеваний(коды F00-F09, F20-99)'] lst_count = [0, 1, 2, 3, 4, 5, 6] i = table.addRow() for j in range(0, len(lst_scnd_row)): table.setText(i, lst_count[j], lst_scnd_row[j]) lst_thrd_row = [u'', u'', u'всего', u'из них в трудоспособном возрасте (из гр.3)', u'', u'', u''] i = table.addRow() for j in range(0, len(lst_thrd_row)): table.setText(i, lst_count[j], lst_thrd_row[j]) lst_frth_row = [u'1', u'2', u'3', u'4', u'5', u'6', u'7'] i = table.addRow() for j in range(0, len(lst_frth_row)): table.setText(i, lst_count[j], lst_frth_row[j]) i = table.addRow() query.next() record = query.record() table.setText(i, 0, forceString(record.value(''))) table.setText(i, 1, forceString(record.value('working_age'))) table.setText(i, 2, forceString(record.value('currently_working'))) table.setText(i, 3, forceString(record.value('currently_working_age'))) table.setText(i, 4, forceString(record.value(''))) table.setText(i, 5, forceString(record.value('snjato_umerlo'))) table.setText(i, 6, forceString(record.value(''))) self.merge_cells(table) return doc
def build(self, params): doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [ ('10%', [u'Код'], CReportBase.AlignLeft), ('40%', [u'ФИО пациента'], CReportBase.AlignLeft), ('15%', [u'Код обращения'], CReportBase.AlignLeft), ('20%', [u'Тип обращения'], CReportBase.AlignLeft), ('15%', [u'Дата начала'], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) query = selectData(params) self.setQueryText(forceString(query.lastQuery())) clientMap = {} while query.next(): record = query.record() clientId = forceString(record.value('clientId')) clientName = forceString(record.value('clientName')) eventTypeName = forceString(record.value('eventTypeName')) eventId = forceString(record.value('eventId')) eventSetDate = forceString(record.value('eventSetDate')) clientMap.setdefault((clientId, clientName), []).append( (eventId, eventTypeName, eventSetDate)) clientList = clientMap.keys() clientList.sort() for clientInfo in clientList: clientId, clientName = clientInfo events = clientMap[clientInfo] events.sort() i = table.addRow() table.setText(i, 0, clientId) table.setText(i, 1, clientName) eventsAmount = len(events) rows = [i] for eventNumber in xrange(eventsAmount - 1): rows.append(table.addRow()) for column in xrange(2): table.mergeCells(i, column, eventsAmount, 1) for eventNumber in xrange(eventsAmount): row = rows[eventNumber] eventId, eventTypeName, eventSetDate = events[eventNumber] table.setText(row, 2, eventId) table.setText(row, 3, eventTypeName) table.setText(row, 4, eventSetDate) return doc
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 dumpParams(self, cursor, params, charFormat = QtGui.QTextCharFormat()): description = self.getDescription(params) columns = [('100?', [], CReportBase.AlignLeft)] table = createTable(cursor, columns, headerRowCount=len(description), border=0, cellPadding=2, cellSpacing=0) for i, row in enumerate(description): table.setText(i, 0, row, charFormat = charFormat) cursor.movePosition(QtGui.QTextCursor.End) cursor.insertBlock()
def build(self, params): begDate = getVal(params, 'begDate', QtCore.QDate()) endDate = getVal(params, 'endDate', QtCore.QDate()) eventTypeId = getVal(params, 'eventTypeId', None) db = QtGui.qApp.db reportData = [] query = selectData(begDate, endDate, eventTypeId) self.setQueryText(forceString(query.lastQuery())) while query.next(): record = query.record() login = forceString(record.value('login')) lastName = forceString(record.value('lastName')) firstName = forceString(record.value('firstName')) patrName = forceString(record.value('patrName')) cnt1 = forceInt(record.value('cnt1')) cnt2 = forceInt(record.value('cnt2')) reportData.append( [login, lastName, firstName, patrName, cnt1, cnt2]) doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [ ('10%', [u'Регистрационное имя'], CReportBase.AlignLeft), ('20%', [u'Фамилия'], CReportBase.AlignLeft), ('20%', [u'Имя'], CReportBase.AlignLeft), ('20%', [u'Отчество'], CReportBase.AlignLeft), ('10%', [u'Всего'], CReportBase.AlignRight), ('10%', [u'В т.ч. без даты выполнения'], CReportBase.AlignRight), ] table = createTable(cursor, tableColumns) totalCnt1 = 0 totalCnt2 = 0 for row in reportData: i = table.addRow() for j in xrange(len(row)): table.setText(i, j, row[j]) totalCnt1 += row[4] totalCnt2 += row[5] i = table.addRow() table.mergeCells(i, 0, 1, 4) table.setText(i, 0, u'всего', CReportBase.TableTotal) table.setText(i, 4, totalCnt1, CReportBase.TableTotal) table.setText(i, 5, totalCnt2, CReportBase.TableTotal) return doc
def build(self, params): doc = QtGui.QTextDocument() cursor = QtGui.QTextCursor(doc) cursor.setCharFormat(CReportBase.ReportTitle) cursor.insertText(self.title()) cursor.insertBlock() self.dumpParams(cursor, params) cursor.insertBlock() tableColumns = [ ('12%', [u'Вид жилья'], CReportBase.AlignLeft), ('3%', [u'№ строки'], CReportBase.AlignLeft), ('10%', [ u'Число учреждений, имеющих жилье для пациентов, больных психическими раастройстевами' ], CReportBase.AlignLeft), ('10%', [u'Число мест для проживания'], CReportBase.AlignLeft), ('10%', [ u'Число пациентов, пользовавшихся жильем (проживавших) в течении отчетного года' ], CReportBase.AlignLeft), ('10%', [u'из них число пациентов,проживающих на конец года'], CReportBase.AlignLeft), ] table = createTable(cursor, tableColumns) query = selectData(params) self.setQueryText(forceString(query.lastQuery())) # this does nothing? lst_naimenovanie = [ u'', u'', u'Отделения-общежития', u"Групповые дома", u"Квартиры для независимого проживания" ] lst_numbers = [u'', u'', u'1', u'2', u'3'] for i in range(0, 1): i = table.addRow() table.setText(i, 0, u'1') table.setText(i, 1, u'2') table.setText(i, 2, u'3') table.setText(i, 3, u'4') table.setText(i, 4, u'5') table.setText(i, 5, u'6') for i in range(0, 3): i = table.addRow() table.setText(i, 0, lst_naimenovanie[i]) table.setText(i, 1, lst_numbers[i]) while query.next(): record = query.record() #i = table.addRow() #table.setText(i+2, 1, forceString(record_temp.value('FIO_cl'))) #table.setText(i+2, 6, forceString(record_temp.value('birthdate'))) #table.setText(i+2, 3, forceString(record_temp.value('MKB'))) return doc
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