Пример #1
0
    def setTable(self, tableName, recordCacheCapacity=300):
        db = QtGui.qApp.db
        tableClient = db.table('Client')
        tableEvent = db.table('Event')
        tableOrder = db.table('{0}.N3LabOrderLog'.format(getLoggerDbName()))
        tableOrderSync = db.table('{0}.N3LabOrderSyncLog'.format(
            getLoggerDbName()))
        tableOrderSent = tableOrderSync.alias('OrderSent')
        tableOrderRecv = tableOrderSync.alias('OrderRecv')
        tableOrderCurrent = tableOrderSync.alias('OrderCurrent')
        tableTissueType = db.table('rbTissueType')
        tableTTJ = db.table('TakenTissueJournal')

        table = tableOrder
        table = table.leftJoin(
            tableOrderSent, tableOrderSent['id'].eqStmt(
                db.selectMin(tableOrderSync, tableOrderSync['id'], [
                    tableOrderSync['order_id'].eq(tableOrder['id']),
                    tableOrderSync['status'].eq(OrderSyncStatus.OrderSent)
                ])))
        table = table.leftJoin(
            tableOrderRecv, tableOrderRecv['id'].eqStmt(
                db.selectMax(tableOrderSync, tableOrderSync['id'], [
                    tableOrderSync['order_id'].eq(tableOrder['id']),
                    tableOrderSync['status'].eq(OrderSyncStatus.ResultReceived)
                ])))
        table = table.leftJoin(
            tableOrderCurrent, tableOrderCurrent['id'].eqStmt(
                db.selectMax(tableOrderSync, tableOrderSync['id'],
                             tableOrderSync['order_id'].eq(tableOrder['id']))))
        table = table.leftJoin(tableEvent,
                               tableEvent['id'].eq(tableOrder['event_id']))
        table = table.leftJoin(tableClient,
                               tableClient['id'].eq(tableEvent['client_id']))
        table = table.leftJoin(
            tableTTJ, tableTTJ['id'].eq(tableOrder['takenTissueJournal_id']))
        table = table.leftJoin(
            tableTissueType,
            tableTissueType['id'].eq(tableTTJ['tissueType_id']))

        cols = [
            tableOrder['orderMisId'], tableOrder['orderUUID'],
            tableOrder['datetime'], tableOrder['status'],
            tableOrder['event_id'], tableOrderCurrent['error'],
            db.concat_ws(' ', tableClient['lastName'],
                         tableClient['firstName'],
                         tableClient['patrName']).alias('clientName'),
            tableTTJ['externalId'],
            tableTissueType['name'].alias('tissueTypeName'),
            tableOrderCurrent['status'].alias('lastSyncStatus'),
            tableOrderSent['datetime'].alias('sentDatetime'),
            tableOrderRecv['datetime'].alias('receivedDatetime')
        ]

        self._table = table
        self._recordsCache = CTableRecordCache(db, self._table, cols,
                                               recordCacheCapacity)
Пример #2
0
    def reloadOrderList(self, order=None, reverse=False):
        status = self.cmbOrderStatus.value()
        syncStatus = self.cmbOrderSyncStatus.value()
        hasError = self.chkOrderError.isChecked()
        errorText = forceString(self.edtOrderError.text())
        dateFrom = self.edtOrderDateFrom.date(
        ) if self.chkOrderDateFrom.isChecked() else None
        dateTo = self.edtOrderDateTo.date() if self.chkOrderDateTo.isChecked(
        ) else None

        db = QtGui.qApp.db
        tableOrder = db.table('{0}.N3LabOrderLog'.format(getLoggerDbName()))
        tableOrderSync = db.table('{0}.N3LabOrderSyncLog'.format(
            getLoggerDbName()))
        tableOrderCurrent = tableOrderSync.alias('OrderCurrent')

        table = tableOrder

        cond = []
        if status is not None:
            cond.append(tableOrder['status'].eq(status))

        if (syncStatus is not None or hasError):
            table = table.leftJoin(
                tableOrderCurrent, tableOrderCurrent['id'].eqStmt(
                    db.selectMax(
                        tableOrderSync, tableOrderSync['id'],
                        tableOrderSync['order_id'].eq(tableOrder['id']))))

            if syncStatus is not None:
                cond.append(tableOrderCurrent['status'].eq(syncStatus))

            if errorText:
                cond.append(tableOrderCurrent['error'].like(
                    u'%{0}%'.format(errorText)))
            elif hasError:
                cond.append(tableOrderCurrent['error'].ne(''))

        if dateFrom:
            cond.append(tableOrder['datetime'].dateGe(dateFrom))

        if dateTo:
            cond.append(tableOrder['datetime'].dateLe(dateTo))

        if order is None:
            order = [tableOrder['id'].desc()]
        idList = db.getDistinctIdList(table,
                                      tableOrder['id'],
                                      cond,
                                      order=order)
        if reverse:
            idList = idList[::-1]
        self.tblOrder.model().setIdList(idList)
        self.lblOrderCount.setText(u'Записей в таблице: {0}'.format(
            len(idList)))
Пример #3
0
    def setTable(self, tableName, recordCacheCapacity=300):
        db = QtGui.qApp.db
        tableClient = db.table('Client')
        tableEvent = db.table('Event')
        tableOrderResponse = db.table('{0}.N3LabOrderResponseLog'.format(
            getLoggerDbName()))
        tableOrderResponseSync = db.table(
            '{0}.N3LabOrderResponseSyncLog'.format(getLoggerDbName()))
        tableOrderResponseSent = tableOrderResponseSync.alias(
            'OrderResponseSent')
        tableOrderResponseCurrent = tableOrderResponseSync.alias(
            'OrderResponseCurrent')

        table = tableOrderResponse
        table = table.leftJoin(
            tableOrderResponseSent, tableOrderResponseSent['id'].eqStmt(
                db.selectMin(tableOrderResponseSync,
                             tableOrderResponseSync['id'], [
                                 tableOrderResponseSync['orderResponse_id'].eq(
                                     tableOrderResponse['id']),
                                 tableOrderResponseSync['status'].eq(
                                     OrderResponseSyncStatus.ResultSent)
                             ])))
        table = table.leftJoin(
            tableOrderResponseCurrent, tableOrderResponseCurrent['id'].eqStmt(
                db.selectMax(
                    tableOrderResponseSync, tableOrderResponseSync['id'],
                    tableOrderResponseSync['orderResponse_id'].eq(
                        tableOrderResponse['id']))))
        table = table.leftJoin(
            tableEvent, tableEvent['id'].eq(tableOrderResponse['event_id']))
        table = table.leftJoin(tableClient,
                               tableClient['id'].eq(tableEvent['client_id']))

        cols = [
            tableOrderResponse['orderUUID'],
            tableOrderResponse['orderResponseUUID'],
            tableOrderResponse['datetime'], tableOrderResponse['status'],
            tableOrderResponse['event_id'], tableOrderResponseCurrent['error'],
            db.concat_ws(' ', tableClient['lastName'],
                         tableClient['firstName'],
                         tableClient['patrName']).alias('clientName'),
            tableOrderResponseCurrent['status'].alias('lastSyncStatus'),
            tableOrderResponseSent['datetime'].alias('sentDatetime')
        ]

        self._table = table
        self._recordsCache = CTableRecordCache(db, self._table, cols,
                                               recordCacheCapacity)
Пример #4
0
def getEventLogStatus(db, eventId):
    tableEventLog = db.table(
        '{logger}.IEMKEventLog'.format(logger=getLoggerDbName()))
    rec = db.getRecordEx(tableEventLog, tableEventLog['status'],
                         tableEventLog['event_id'].eq(eventId),
                         tableEventLog['id'].desc())
    return forceInt(rec.value('status')) if rec else None
Пример #5
0
    def on_actResendOrder_triggered(self):
        idList = self.tblOrder.model().idList()
        orderIdList = [
            idList[index.row()]
            for index in self.tblOrder.selectionModel().selectedRows()
            if index.isValid()
        ]

        db = QtGui.qApp.db
        tableOrder = db.table('{0}.N3LabOrderLog'.format(getLoggerDbName()))
        cond = [
            tableOrder['id'].inlist(orderIdList), tableOrder['status'].inlist(
                [OrderStatus.Outdated, OrderStatus.HasError])
        ]
        expr = [tableOrder['status'].eq(OrderStatus.NotSent)]
        db.updateRecords(tableOrder, expr, cond)
        self.tblOrder.model().recordCache().invalidate(orderIdList)
Пример #6
0
def getDeAttachQueryLogTable():
    u""" Таблица для логгирования исходящих запросов на открепление (от одного МО к другому) """
    return '{logger}.DeAttachQueryLog'.format(logger=getLoggerDbName())
Пример #7
0
def getAttachLogTable():
    u""" Таблица для логгирования статусов синхронизации прикреплений с ТФОМС """
    return '{logger}.AttachLog'.format(logger=getLoggerDbName())