Exemplo n.º 1
0
    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
Exemplo n.º 2
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
Exemplo n.º 3
0
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)
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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
Exemplo n.º 6
0
    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
Exemplo n.º 7
0
    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()
Exemplo n.º 8
0
    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)
Exemplo n.º 9
0
    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
Exemplo n.º 10
0
    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)
Exemplo n.º 11
0
    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
Exemplo n.º 12
0
    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
Exemplo n.º 13
0
    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
Exemplo n.º 14
0
    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
Exemplo n.º 15
0
    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
Exemplo n.º 16
0
    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
Exemplo n.º 17
0
    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
Exemplo n.º 18
0
    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
Exemplo n.º 19
0
    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
Exemplo n.º 20
0
 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()
Exemplo n.º 21
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
Exemplo n.º 22
0
    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
Exemplo n.º 23
0
    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
Exemplo n.º 24
0
    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
Exemplo n.º 25
0
    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
Exemplo n.º 27
0
    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()
Exemplo n.º 28
0
    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
Exemplo n.º 29
0
    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
Exemplo n.º 30
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