예제 #1
4
class LogViewer(ScreenWithBackButton):

    def __init__(self, controller, mainWindow):
        self.controller = controller
        ScreenWithBackButton.__init__(self, "System Log", mainWindow)

    def makeContent(self):

        layout = QVBoxLayout()

        self.table = QTableWidget()
        layout.addWidget(self.table)

        return layout

    @handlePyroErrors
    def displayLog(self):
        entries = self.controller.getLog()
        self.table.clearContents()
        self.table.setRowCount(len(entries))
        self.table.setColumnCount(3)
        self.table.setHorizontalHeaderLabels(["Time", "Severity", "Message"])

        i = 0
        for entry in entries:
            self.table.setItem(i, 0, QTableWidgetItem(entry.asctime))
            self.table.setItem(i, 1, QTableWidgetItem(entry.levelname))
            self.table.setItem(i, 2, QTableWidgetItem(entry.message))
            i = i + 1

        self.table.resizeColumnsToContents()
        self.table.horizontalHeader().setStretchLastSection(True)
        self.table.scrollToBottom()
예제 #2
0
class FoamDictWidget(QWidget):
    "QWidget to view and edit simple Foam Dictionary"

    def __init__(self, variable_setting, parent=None):
        super(FoamDictWidget, self).__init__(parent)

        self.buttonLayout = QHBoxLayout()
        self.pushButtonInsert = QPushButton("Insert")
        #self.pushButtonLoad = QPushButton("Load default")
        self.pushButtonRestore = QPushButton("Restore")
        self.pushButtonClear = QPushButton("Clear")
        self.buttonLayout.addWidget(self.pushButtonInsert)
        #self.buttonLayout.addWidget(self.pushButtonLoad)
        self.buttonLayout.addWidget(self.pushButtonRestore)
        self.buttonLayout.addWidget(self.pushButtonClear)

        #PySide has different name other than @QtCore.pyqtSlot, but PySide.QtCore.SLOT
        QtCore.QObject.connect(self.pushButtonInsert,
                               QtCore.SIGNAL("clicked()"), self.insertRow)
        QtCore.QObject.connect(self.pushButtonRestore,
                               QtCore.SIGNAL("clicked()"), self.restoreDict)
        QtCore.QObject.connect(self.pushButtonClear,
                               QtCore.SIGNAL("clicked()"), self.clearDict)

        self.tableWidget = QTableWidget()
        #header, should not sort, has vertical scrollbar
        # set column count, fixed to 2, size of TableItem
        self.tableWidget.setColumnCount(2)
        #5self.tableWidget.setHorizontalHeaderItem(0, )
        self.tableWidget.setHorizontalHeaderLabels(['key', 'value text'])
        # set a default row count, insert as needed
        self.tableWidget.setRowCount(0)

        self.initialDict = variable_setting
        self.restoreDict()
        # debug print to console# does not work for PySide
        QtCore.QObject.connect(self.tableWidget,
                               QtCore.SIGNAL("doubleClicked()"),
                               self.printDict)

        self.myLayout = QVBoxLayout()
        self.myLayout.addWidget(self.tableWidget)
        self.myLayout.addLayout(self.buttonLayout)
        self.setLayout(self.myLayout)

    def dict(self):
        _settings = OrderedDict()
        for i in range(self.tableWidget.rowCount()):
            k = self.tableWidget.item(i, 0).text()
            v = self.tableWidget.item(
                i, 1).text()  # data() will return QVariant type-> python type
            # validated by non-empty string
            if k and v:
                _settings[k] = v
        return _settings

    def updateDictView(self, varible_settings):
        i = 0
        self.clearDict()  # will clear contents, but leave row text empty
        N = self.tableWidget.rowCount()
        for k, v in varible_settings.items():
            # translate seq into unicode
            if i >= N:
                self.tableWidget.insertRow(i)
            kitem = QTableWidgetItem(
                unicode(k))  # also set flags and state, type
            vitem = QTableWidgetItem(unicode(v))
            #print(i, self.tableWidget.item(i, 0)) # debug: None
            self.tableWidget.setItem(i, 0, kitem)
            self.tableWidget.setItem(i, 1, vitem)
            i += 1

    def restoreDict(self):
        self.updateDictView(self.initialDict)

    #@pyqtSlot()  # PySide use another name "QtCore.Slot()"
    def insertRow(self):
        nRows = self.tableWidget.rowCount()
        self.tableWidget.insertRow(nRows)  # inset one row at the end
        kitem = QTableWidgetItem("")  # also set flags and state, type
        vitem = QTableWidgetItem("")
        self.tableWidget.setItem(nRows, 0, kitem)
        #print(nRows, self.tableWidget.item(nRows, 0))
        self.tableWidget.setItem(nRows, 1, vitem)

    def clearDict(self):
        self.tableWidget.clearContents()  # keep the header, clear all items

    def printDict(self):
        print(self.dict())

    def loadDefault(self):
        pass
class ImportMovementPanel(PanelWithTable):

    columnList = ReportMovementPanel.columnList

    def __init__(self):
        super(self.__class__, self).__init__()
        self.layout = QtGui.QGridLayout(self)
        self.importMovementFilter = ImportMovementFilter(self)
        self.layout.addWidget(self.importMovementFilter, 1, 0,
                              QtCore.Qt.AlignTop)
        self.layout.addWidget(self.createTable(), 1, 1, QtCore.Qt.AlignTop)
        self.btnImport = QPushButton("Import", self)
        self.btnImport.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.btnImport)
        self.btnDelete = QPushButton("Delete", self)
        self.btnDelete.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        self.layout.addWidget(self.btnDelete)
        self.initListener()

    def initListener(self):
        self.btnImport.clicked.connect(self.doImport)
        self.btnDelete.clicked.connect(self.doDelete)

    def createTable(self):
        self.table = QTableWidget()
        self.table.setRowCount(1000)
        self.table.setColumnCount(len(self.columnList) + 1)
        self.table.setColumnHidden(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_HIDDEN_ID, True)
        self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
        self.table.setHorizontalHeaderLabels(self.columnList)
        #self.pnLTableWidget.resizeColumnsToContents()
        self.table.sortItems(Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DATE)
        self.table.doubleClicked.connect(self.doImportOrDelete)
        self.table.resizeRowsToContents()
        self.table.setFixedSize(1100, 900)
        return self.table

    def doSubmit(self, filePath, assetName):
        self.imLO = MovementImporter().getMovementList(filePath, assetName)
        self.table.setSortingEnabled(False)
        self.table.clearContents()
        if (self.imLO.movementList is not None):
            countRowTable = len(self.imLO.movementList)
            self.table.setRowCount(countRowTable)
            self.renderTableForObject(self.imLO.movementList)
            imLO2 = Engine.getReportMovementList(self.imLO.fromDate,
                                                 self.imLO.toDate, 'ALL',
                                                 assetName,
                                                 self.imLO.custodyName)
            countRowTable += len(imLO2.movementList)
            self.table.setRowCount(countRowTable)
            self.renderTableForRS(imLO2.movementList)
            self.table.setSortingEnabled(True)
            self.table.resizeRowsToContents()

    def renderTableForObject(self, tableList):
        self.row = 0
        isBold = False
        color = QtGui.QColor(204, 255, 153)
        for movement in tableList:
            self.addItemtoTable2(
                self.table, movement.OID, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_ID, isBold, color)
            self.addItemtoTable2(
                self.table, movement.externalID, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EXTERNAL_ID, isBold,
                color)
            self.addItemtoTable2(self.table, movement.comment, self.row,
                                 Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMENT,
                                 isBold, color)
            self.addItemtoTable2(
                self.table, movement.custody.name, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_CUSTODY_NAME, isBold,
                color)
            self.addItemtoTable2(
                self.table, movement.getMovementType(), self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_TYPE, isBold,
                color)
            self.addItemtoTable2(
                self.table, movement.getMovementSubType(), self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_SUB_TYPE, isBold,
                color)
            if (movement.asset is not None):
                self.addItemtoTable2(
                    self.table, movement.asset.name, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_ASSET_NAME, isBold,
                    color)
            if (movement.tax is not None):
                self.addItemtoTable2(
                    self.table, "NEW", self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_TAX_ID, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.tax.taxAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_TAX_AMOUNT, isBold,
                    color)
            if (isinstance(movement, Movement)):
                self.addItemtoTable2(
                    self.table, movement.buySell, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DIRECTION,
                    isBold, color)
                self.addItemtoTable2(
                    self.table, movement.acquisitionDate, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DATE, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.quantity, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_QUANTITY, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.price, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_PRICE, isBold, color)
                self.addItemtoTable2(
                    self.table, movement.rate, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_RATE, isBold, color)
                self.addItemtoTable2(
                    self.table, movement.grossAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_GROSS_AMOUNT, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.netAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_NET_AMOUNT, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.commissionPercentage, self.row,
                    Constant.
                    CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_PERCENTAGE, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.commissionAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_AMOUNT,
                    isBold, color)
                self.addItemtoTable2(
                    self.table, movement.commissionVATAmount, self.row,
                    Constant.
                    CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_IVA_AMOUNT, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.tenor, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_TENOR, isBold, color)
                self.addItemtoTable2(
                    self.table, movement.maturityDate, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_MATURITY_DATE,
                    isBold, color)
            elif (isinstance(movement, CorporateEvent)):
                self.addItemtoTable2(
                    self.table, movement.paymentDate, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DATE, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.grossAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_GROSS_AMOUNT, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.netAmount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_NET_AMOUNT, isBold,
                    color)
            elif (isinstance(movement, CashMovement)):
                self.addItemtoTable2(
                    self.table, movement.inOut, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DIRECTION,
                    isBold, color)
                self.addItemtoTable2(
                    self.table, movement.movementDate, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DATE, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.amount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_GROSS_AMOUNT, isBold,
                    color)
                self.addItemtoTable2(
                    self.table, movement.amount, self.row,
                    Constant.CONST_COLUMN_IMPORT_MOVEMENT_NET_AMOUNT, isBold,
                    color)
            #HiddenID
            self.addItemtoTable2(
                self.table, self.row, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_HIDDEN_ID, isBold)
            self.row += 1

    def renderTableForRS(self, tableList):
        isBold = False
        for listItem in tableList:
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_ID,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_TYPE, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_SUB_TYPE, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DIRECTION, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_ASSET_NAME, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_DATE, isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_QUANTITY,
                                isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_PRICE,
                                isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_RATE,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_GROSS_AMOUNT, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_NET_AMOUNT, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_PERCENTAGE,
                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_AMOUNT,
                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMISSION_IVA_AMOUNT,
                isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_TENOR,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_MATURITY_DATE, isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_CUSTODY_NAME, isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_TAX_ID,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_TAX_AMOUNT, isBold)
            self.addItemtoTable(self.table, listItem, self.row,
                                Constant.CONST_COLUMN_IMPORT_MOVEMENT_COMMENT,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, self.row,
                Constant.CONST_COLUMN_IMPORT_MOVEMENT_EXTERNAL_ID, isBold)
            self.row += 1

    def doImportOrDelete(self):
        index = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_HIDDEN_ID)
        if (index is not None):
            self.doImport()
        else:
            self.doDelete()

    def doImport(self):
        index = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_HIDDEN_ID)
        if (index is not None):
            operation = self.imLO.movementList[int(index)]
            print(operation.externalID)
            newID = None
            taxNewID = None
            if (isinstance(operation, Movement)):
                rs = DaoMovement.getMovementsByExternalID(operation.externalID)
                if len(rs) == 0:
                    if (operation.OID == "NEW"):
                        newID = DaoMovement.insertMovement(operation)
                if (operation.tax is not None and operation.tax.OID == "NEW"):
                    rs = DaoTax.getTaxByExternalID(operation.tax.externalID)
                    if len(rs) == 0:
                        taxNewID = DaoTax.insert(operation.tax)
            elif (isinstance(operation, CorporateEvent)):
                rs = DaoCorporateEvent.getCorporateEventByExternalID(
                    operation.externalID)
                if len(rs) == 0:
                    newID = DaoCorporateEvent.insert(operation)
                    print(newID)
                    if (operation.tax is not None):
                        rs = DaoTax.getTaxByExternalID(
                            operation.tax.externalID)
                        if len(rs) == 0:
                            operation.tax.originOID = newID
                            taxNewID = DaoTax.insert(operation.tax)
            elif (isinstance(operation, CashMovement)):
                rs = DaoCashMovement.getCashMovementsByExternalID(
                    operation.externalID)
                if len(rs) == 0:
                    newID = DaoCashMovement.insert(operation)
            box = QMessageBox()
            box.setWindowTitle('ADD')
            if (newID is None and taxNewID is None):
                box.setText("CANNOT ADD externalID " + operation.externalID)
            else:
                if (newID is not None and taxNewID is not None):
                    box.setText("INSERTED MOVEMENT " + operation.externalID +
                                " NEWID: " + str(newID) + " NEWTAXID: " +
                                str(taxNewID))
                elif (newID is not None and taxNewID is None):
                    box.setText("INSERTED MOVEMENT " + operation.externalID +
                                " NEWID: " + str(newID))
                else:
                    box.setText("INSERTED TAX " + operation.tax.externalID +
                                " NEWTAXID: " + str(taxNewID))
            box.exec_()

    def doDelete(self):
        movementOID = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_ID)
        movementType = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_TYPE)
        movementSubType = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_EVENT_SUB_TYPE)
        taxOID = self.getCurrentRowValue(
            Constant.CONST_COLUMN_IMPORT_MOVEMENT_TAX_ID)
        result = 0
        if (movementType == Constant.CONST_MOVEMENT_TYPE
                and movementSubType == Constant.CONST_MOVEMENT_SUB_TYPE):
            result = DaoMovement.deleteMovement(movementOID)
            print(result)
        elif (movementType == Constant.CONST_MOVEMENT_TYPE
              and movementSubType == Constant.CONST_CASH_MOVEMENT_SUB_TYPE):
            result = DaoCashMovement.deleteCashMovement(movementOID)
            print(result)
        elif (movementType == Constant.CONST_CORP_EVENT_TYPE
              and movementSubType == Constant.CONST_CORP_EVENT_SUB_TYPE):
            if (taxOID):
                taxResult = DaoTax.deleteTax(taxOID)
            result = DaoCorporateEvent.deleteCorporateEvent(movementOID)
            print(result)
        box = QMessageBox()
        box.setWindowTitle('DELETED')
        if (result == 0):
            box.setText("CANNOT DELETE " + movementType + "-" +
                        movementSubType + "-" + movementOID)
        else:
            if (taxOID is None or taxOID == ""):
                box.setText(movementType + "-" + movementSubType + "-" +
                            movementOID + ": " + str(result) +
                            " record(s) deleted")
            else:
                box.setText(movementType + "-" + movementSubType + "-" +
                            movementOID + ": " + str(result) +
                            " record(s) deleted and taxID: " + taxOID + " " +
                            str(taxResult) + " record(s) deleted")
        box.exec_()
class SubscriberDialog(QDialog):

    if USE_MAEMO_5:
        switchRequested = Signal()

    def __init__(self, parent=None):
        QDialog.__init__(self, parent)
        self.ui = Ui_SubscriberDialog()
        self.ui.setupUi(self)

        self.subscriber = None
        self.tableWidget = None
        self.listWidget = None

        if USE_MAEMO_5:
            switchButton = self.ui.buttonBox.addButton(
                self.tr('Switch'), QDialogButtonBox.ActionRole)
            switchButton.clicked.connect(self.switchRequested)

            self.tableWidget = self.ui.tableWidget
            headerLabels = ('Key', 'Value', 'Type')
            self.tableWidget.setColumnCount(3)
            self.tableWidget.setHorizontalHeaderLabels(headerLabels)
            horizontalHeader = self.tableWidget.horizontalHeader()
            horizontalHeader.setStretchLastSection(True)
            verticalHeader = self.tableWidget.verticalHeader()
            verticalHeader.setVisible(False)
            self.tableWidget.setColumnWidth(0, 200)
            self.tableWidget.setColumnWidth(1, 400)
        else:
            desktopWidget = QDesktopWidget()
            if desktopWidget.availableGeometry().width() < 400:
                # Screen is too small to fit a table widget without scrolling, use a list widget instead.
                self.listWidget = QListWidget()
                self.listWidget.setAlternatingRowColors(True)
                self.ui.verticalLayout.insertWidget(2, self.listWidget)
            else:
                self.tableWidget = QTableWidget()
                headerLabels = ('Key', 'Value', 'Type')
                self.tableWidget.setColumnCount(3)
                self.tableWidget.setHorizontalHeaderLabels(headerLabels)
                horizontalHeader = self.tableWidget.horizontalHeader()
                horizontalHeader.setStretchLastSection(True)
                self.tableWidget.verticalHeader()
                self.setVisible(False)
                self.ui.verticalLayout.insertWidget(2, self.tableWidget)

        self.ui.connectButton.clicked.connect(self.changeSubscriberPath)
        self.changeSubscriberPath()

        # if the default path does not exist reset it to /
        value = self.subscriber.value()
        subPaths = self.subscriber.subPaths()
        if not value and not subPaths:
            self.ui.basePath.setText('/')
            self.changeSubscriberPath()

    def changeEvent(self, e):
        QDialog.changeEvent(self, e)
        if e.type() == QEvent.LanguageChange:
            self.ui.retranslateUi(self)

    def changeSubscriberPath(self):
        if self.listWidget:
            self.listWidget.clear()
        elif self.tableWidget:
            self.tableWidget.clearContents()

        if not self.subscriber:
            self.subscriber = QValueSpaceSubscriber(self.ui.basePath.text(),
                                                    self)
        else:
            self.subscriber.setPath(self.ui.basePath.text())

        self.subscriber.contentsChanged.connect(self.subscriberChanged)
        self.subscriber.connectNotify("contentsChanged()")
        self.subscriberChanged()

    def subscriberChanged(self):
        subPaths = self.subscriber.subPaths()

        if self.listWidget:
            self.listWidget.clear()
        elif self.tableWidget:
            self.tableWidget.clearContents()
            self.tableWidget.setRowCount(len(subPaths))

        for i in xrange(len(subPaths)):
            v = self.subscriber.value(subPaths[i])
            if self.listWidget:
                item = QListWidgetItem('%s (%s)\n%s' %
                                       (subPaths[i], str(type(v)), str(v)))
                item.setFlags(item.flags() & ~Qt.ItemIsEditable)
                self.listWidget.addItem(item)
            elif self.tableWidget:
                pathItem = QTableWidgetItem(subPaths[i])
                pathItem.setFlags(pathItem.flags() & ~Qt.ItemIsEditable)
                valueItem = QTableWidgetItem(str(v))
                valueItem.setFlags(pathItem.flags() & ~Qt.ItemIsEditable)
                typeItem = QTableWidgetItem(str(type(v)))
                typeItem.setFlags(pathItem.flags() & ~Qt.ItemIsEditable)

                self.tableWidget.setItem(i, 0, pathItem)
                self.tableWidget.setItem(i, 1, valueItem)
                self.tableWidget.setItem(i, 2, typeItem)
예제 #5
0
class SubscriberDialog(QDialog):

    if USE_MAEMO_5:
        switchRequested = Signal()

    def __init__(self, parent=None):
        QDialog.__init__(self, parent)
        self.ui = Ui_SubscriberDialog()
        self.ui.setupUi(self)

        self.subscriber = None
        self.tableWidget = None
        self.listWidget = None

        if USE_MAEMO_5:
            switchButton = self.ui.buttonBox.addButton(self.tr('Switch'), QDialogButtonBox.ActionRole)
            switchButton.clicked.connect(self.switchRequested)

            self.tableWidget = self.ui.tableWidget
            headerLabels = ('Key', 'Value', 'Type')
            self.tableWidget.setColumnCount(3)
            self.tableWidget.setHorizontalHeaderLabels(headerLabels)
            horizontalHeader = self.tableWidget.horizontalHeader()
            horizontalHeader.setStretchLastSection(True)
            verticalHeader = self.tableWidget.verticalHeader()
            verticalHeader.setVisible(False)
            self.tableWidget.setColumnWidth(0, 200)
            self.tableWidget.setColumnWidth(1, 400)
        else:
            desktopWidget = QDesktopWidget()
            if desktopWidget.availableGeometry().width() < 400:
                # Screen is too small to fit a table widget without scrolling, use a list widget instead.
                self.listWidget = QListWidget()
                self.listWidget.setAlternatingRowColors(True)
                self.ui.verticalLayout.insertWidget(2, self.listWidget)
            else:
                self.tableWidget = QTableWidget()
                headerLabels = ('Key', 'Value', 'Type')
                self.tableWidget.setColumnCount(3)
                self.tableWidget.setHorizontalHeaderLabels(headerLabels)
                horizontalHeader = self.tableWidget.horizontalHeader()
                horizontalHeader.setStretchLastSection(True)
                self.tableWidget.verticalHeader()
                self.setVisible(False)
                self.ui.verticalLayout.insertWidget(2, self.tableWidget)

        self.ui.connectButton.clicked.connect(self.changeSubscriberPath)
        self.changeSubscriberPath()

        # if the default path does not exist reset it to /
        value = self.subscriber.value()
        subPaths = self.subscriber.subPaths()
        if not value and not subPaths:
            self.ui.basePath.setText('/')
            self.changeSubscriberPath()

    def changeEvent(self, e):
        QDialog.changeEvent(self, e)
        if e.type() == QEvent.LanguageChange:
            self.ui.retranslateUi(self)

    def changeSubscriberPath(self):
        if self.listWidget:
            self.listWidget.clear()
        elif self.tableWidget:
            self.tableWidget.clearContents()

        if not self.subscriber:
            self.subscriber = QValueSpaceSubscriber(self.ui.basePath.text(), self)
        else:
            self.subscriber.setPath(self.ui.basePath.text())

        self.subscriber.contentsChanged.connect(self.subscriberChanged)
        self.subscriber.connectNotify("contentsChanged()")
        self.subscriberChanged()

    def subscriberChanged(self):
        subPaths = self.subscriber.subPaths()

        if self.listWidget:
            self.listWidget.clear()
        elif self.tableWidget:
            self.tableWidget.clearContents()
            self.tableWidget.setRowCount(len(subPaths))

        for i in xrange(len(subPaths)):
            v = self.subscriber.value(subPaths[i])
            if self.listWidget:
                item = QListWidgetItem('%s (%s)\n%s' % (subPaths[i], str(type(v)), str(v)))
                item.setFlags(item.flags() & ~Qt.ItemIsEditable)
                self.listWidget.addItem(item)
            elif self.tableWidget:
                pathItem = QTableWidgetItem(subPaths[i])
                pathItem.setFlags(pathItem.flags() & ~Qt.ItemIsEditable)
                valueItem = QTableWidgetItem(str(v))
                valueItem.setFlags(pathItem.flags() & ~Qt.ItemIsEditable)
                typeItem = QTableWidgetItem(str(type(v)))
                typeItem.setFlags(pathItem.flags() & ~Qt.ItemIsEditable)

                self.tableWidget.setItem(i, 0, pathItem)
                self.tableWidget.setItem(i, 1, valueItem)
                self.tableWidget.setItem(i, 2, typeItem)
예제 #6
0
class AdminWidget(QWidget):
    """Represents admin panel"""
    def __init__(self, window):
        super(AdminWidget, self).__init__(window)

        self.parentWidget().setWindowTitle("Administartor panel")
        self.__setupMenu()

        self.layout = QGridLayout(self)

        self.user_table = QTableWidget(self)
        self.user_table.setColumnCount(3)
        self.user_table.setHorizontalHeaderLabels(["Username", "Blocked", "Password restriction"])
        self.user_table.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.user_table.setSelectionMode(QAbstractItemView.SingleSelection)
        self.user_table.setColumnWidth(0, 210)
        self.user_table.setColumnWidth(2, 170)
        self.user_table.verticalHeader().hide()

        changePasswordBtn = QPushButton("Change Password")
        changePasswordBtn.clicked.connect(window.requestPasswordChange)
        createUserBtn = QPushButton("Add User")
        createUserBtn.clicked.connect(self._request_new_account)
        logOutBtn = QPushButton("Logout")
        logOutBtn.clicked.connect(lambda: (window.app.logOut(), window.hide(), window.requestCredentials()))

        self.layout.addWidget(self.user_table, 0, 0, 1, 0)
        self.layout.addWidget(changePasswordBtn, 1, 0)
        self.layout.addWidget(createUserBtn, 1, 1)
        self.layout.addWidget(logOutBtn, 1, 2)
        self.setLayout(self.layout)

        self.__loadUsers()

    def __loadUsers(self):
        """Loads user's data from DB"""
        users = self.parentWidget().app.getUsers()
        self.user_table.clearContents()
        self.user_table.setRowCount(len(users))
        for i in range(len(users)):
            username_item = QTableWidgetItem(users[i].username)
            username_item.setFlags(username_item.flags() ^ Qt.ItemIsEditable)

            blocked_checkbox = QCheckBox()
            if users[i].blocked:
                blocked_checkbox.setChecked(True)

            def create_blocked_toggle(checkbox, user):
                def blocked_toggle():
                    user.blocked = (1 if checkbox.isChecked() else 0)
                    self.parentWidget().app.updateUser(user)
                    self.__loadUsers()
                return blocked_toggle
            blocked_checkbox.toggled.connect(create_blocked_toggle(blocked_checkbox, users[i]))

            password_restrict_checkbox = QCheckBox()
            if users[i].restrictions:
                password_restrict_checkbox.setChecked(True)

            def create_password_restrict_toggle(checkbox, user):
                def password_restrict_toggle():
                    user.restrictions = (1 if checkbox.isChecked() else 0)
                    self.parentWidget().app.updateUser(user)
                    self.__loadUsers()
                return password_restrict_toggle
            password_restrict_checkbox.toggled.connect(
                create_password_restrict_toggle(password_restrict_checkbox, users[i]))

            self.user_table.setItem(i, 0, username_item)
            self.user_table.setCellWidget(i, 1, blocked_checkbox)
            self.user_table.setCellWidget(i, 2, password_restrict_checkbox)

    def __setupMenu(self):
        add_account_action = QAction("Add account", self)
        add_account_action.triggered.connect(self._request_new_account)
        self.parentWidget().account_menu.addAction(add_account_action)

    def _request_new_account(self):
        dialog = None

        def ok_handler(username):
            if not 3 <= len(username) <= 20:
                QMessageBox.critical(dialog, "Error", "Username's length must be between 3 and 20", modal=True)
                return
            user = User(username=username)
            status = self.parentWidget().app.addUser(user)
            {
                Core.ERROR_USER_EXISTS: lambda:
                QMessageBox.critical(dialog, "Error", "Username already exists", modal=True),
                Core.SUCCESS: lambda: (
                    self.__loadUsers(),
                    dialog.close()
                )
            }[status]()

        def cancel_handler():
            dialog.close()

        dialog = AdminWidget.AddAccountDialog(self, ok_handler, cancel_handler)
        dialog.show()

    class AddAccountDialog(QDialog):
        def __init__(self, parent, ok_handler, cancel_handler):
            super(AdminWidget.AddAccountDialog, self).__init__(parent)

            self.setWindowTitle("Add account")
            self.setFixedSize(300, 100)
            self.setModal(True)

            self.layout = QGridLayout(self)

            self.username_label = QLabel(self)
            self.username_label.setText("Username")
            self.edit_username = QLineEdit(self)

            self.buttons = QDialogButtonBox(self)
            self.buttons.addButton(QDialogButtonBox.Ok)
            self.buttons.addButton(QDialogButtonBox.Cancel)
            self.buttons.button(QDialogButtonBox.Ok).setText("Add")
            self.buttons.button(QDialogButtonBox.Cancel).setText("Cancel")
            self.buttons.button(QDialogButtonBox.Cancel).clicked.connect(cancel_handler)
            self.buttons.button(QDialogButtonBox.Ok).clicked.connect(lambda: ok_handler(self.edit_username.text()))

            self.layout.addWidget(self.username_label, 0, 0)
            self.layout.addWidget(self.edit_username, 0, 1)
            self.layout.addWidget(self.buttons, 1, 0, 1, 2, Qt.AlignCenter)

            self.setLayout(self.layout)
예제 #7
0
class NotificationTab():
    """ui class for new notification tab"""
    global logger

    def __init__(self):
        #####
        logger.info('Inside PurchaseSchedule')
        self.notificationTab_tab_4 = QWidget()
        self.notificationTab_tab_4.setObjectName("notificationTab_tab_4")
        self.gridLayout_19 = QGridLayout(self.notificationTab_tab_4)
        self.gridLayout_19.setObjectName("gridLayout_19")
        ##
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.title_label = QLabel(self.notificationTab_tab_4)
        self.title_label.setObjectName("title_label")
        self.horizontalLayout.addWidget(self.title_label)
        self.gridLayout_19.addLayout(self.horizontalLayout, 0, 0, 1, 1)
        ##
        self.horizontalLayout_6 = QHBoxLayout()
        self.horizontalLayout_6.setObjectName("horizontalLayout_6")
        self.id_label = QLabel(self.notificationTab_tab_4)
        self.id_label.setObjectName("id_label")
        self.horizontalLayout_6.addWidget(self.id_label)
        self.id_line = QLineEdit(self.notificationTab_tab_4)
        self.id_line.setObjectName("id_line")
        self.horizontalLayout_6.addWidget(self.id_line)
        self.notification_schedule_fromdate_label = QLabel(
            self.notificationTab_tab_4)
        self.notification_schedule_fromdate_label.setObjectName(
            "notification_schedule_fromdate_label")
        self.horizontalLayout_6.addWidget(
            self.notification_schedule_fromdate_label)
        self.notification_schedule_fromdate_dateedit = QDateEdit(
            self.notificationTab_tab_4)
        self.notification_schedule_fromdate_dateedit.setMaximumDate(
            QDate.currentDate())
        self.notification_schedule_fromdate_dateedit.setDate(
            QDate.currentDate())
        self.notification_schedule_fromdate_dateedit.setCalendarPopup(True)
        self.notification_schedule_fromdate_dateedit.setObjectName(
            "notification_schedule_fromdate_dateedit")
        self.horizontalLayout_6.addWidget(
            self.notification_schedule_fromdate_dateedit)
        self.notification_schedule_todate_label = QLabel(
            self.notificationTab_tab_4)
        self.notification_schedule_todate_label.setObjectName(
            "notification_schedule_todate_label")
        self.horizontalLayout_6.addWidget(
            self.notification_schedule_todate_label)
        self.notification_schedule_todate_dateedit = QDateEdit(
            self.notificationTab_tab_4)
        self.notification_schedule_todate_dateedit.setMaximumDate(
            QDate.currentDate())
        self.notification_schedule_todate_dateedit.setDate(QDate.currentDate())
        self.notification_schedule_todate_dateedit.setCalendarPopup(True)
        self.notification_schedule_todate_dateedit.setObjectName(
            "notification_schedule_todate_dateedit")
        self.horizontalLayout_6.addWidget(
            self.notification_schedule_todate_dateedit)
        self.type_label = QLabel(self.notificationTab_tab_4)
        self.type_label.setObjectName("type_label")
        self.horizontalLayout_6.addWidget(self.type_label)
        self.notification_states = QComboBox(self.notificationTab_tab_4)
        self.notification_states.setObjectName("notification_states")
        self.horizontalLayout_6.addWidget(self.notification_states)
        self.batch_label = QLabel(self.notificationTab_tab_4)
        self.batch_label.setObjectName("batch_label")
        self.horizontalLayout_6.addWidget(self.batch_label)
        self.notification_results = QComboBox(self.notificationTab_tab_4)
        self.notification_results.setObjectName("notification_results")
        self.horizontalLayout_6.addWidget(self.notification_results)
        self.gridLayout_19.addLayout(self.horizontalLayout_6, 1, 0, 1, 1)
        self.gridLayout_8 = QGridLayout()
        self.gridLayout_8.setObjectName("gridLayout_8")
        self.notification_schedule_table = QTableWidget(
            self.notificationTab_tab_4)
        self.notification_schedule_table.setObjectName(
            "notification_schedule_table")
        self.notification_schedule_table.setColumnCount(5)
        self.notification_schedule_table.setRowCount(0)
        self.notification_schedule_table.setWordWrap(True)
        item = QTableWidgetItem()
        self.notification_schedule_table.setHorizontalHeaderItem(0, item)
        item = QTableWidgetItem()
        self.notification_schedule_table.setHorizontalHeaderItem(1, item)
        item = QTableWidgetItem()
        self.notification_schedule_table.setHorizontalHeaderItem(2, item)
        item = QTableWidgetItem()
        self.notification_schedule_table.setHorizontalHeaderItem(3, item)
        item = QTableWidgetItem()
        self.notification_schedule_table.setHorizontalHeaderItem(4, item)
        self.notification_schedule_table.horizontalHeader(
        ).setCascadingSectionResizes(True)
        self.notification_schedule_table.horizontalHeader(
        ).setStretchLastSection(True)
        self.notification_schedule_table.verticalHeader().setVisible(False)
        self.notification_schedule_table.verticalHeader(
        ).setCascadingSectionResizes(True)
        self.notification_schedule_table.verticalHeader(
        ).setStretchLastSection(False)
        self.gridLayout_8.addWidget(self.notification_schedule_table, 0, 0, 1,
                                    5)
        self.notification_search_button = QPushButton(
            self.notificationTab_tab_4)
        self.notification_search_button.setObjectName(
            "notification_search_button")
        self.gridLayout_8.addWidget(self.notification_search_button, 1, 0, 1,
                                    1)
        spacerItem10 = QSpacerItem(40, 20, QSizePolicy.Expanding,
                                   QSizePolicy.Minimum)
        self.gridLayout_8.addItem(spacerItem10, 1, 2, 1, 1)
        self.notification_reset_button = QPushButton(
            self.notificationTab_tab_4)
        self.notification_reset_button.setObjectName(
            "notification_reset_button")
        self.gridLayout_8.addWidget(self.notification_reset_button, 1, 3, 1, 1)
        self.notification_load_more_button = QPushButton(
            self.notificationTab_tab_4)
        self.notification_load_more_button.setObjectName(
            "notification_load_more_button")
        self.gridLayout_8.addWidget(self.notification_load_more_button, 1, 4,
                                    1, 1)
        self.gridLayout_19.addLayout(self.gridLayout_8, 2, 0, 1, 1)
        ###retranslate
        self.title_label.setText(
            QApplication.translate(
                "MainWindow", "<html><head/><body><p align=\"center\">"
                "<span style=\" font-weight:600;font-size:20px\">"
                "<u>All Notifications</u></span></p></body></html>", None,
                QApplication.UnicodeUTF8))
        self.id_label.setText(
            QApplication.translate("MainWindow", "Message Id", None,
                                   QApplication.UnicodeUTF8))
        self.notification_schedule_fromdate_label.setText(
            QApplication.translate("MainWindow", "From Date", None,
                                   QApplication.UnicodeUTF8))
        self.notification_schedule_fromdate_dateedit.setDisplayFormat(
            QApplication.translate("MainWindow", "dd/MM/yyyy", None,
                                   QApplication.UnicodeUTF8))
        self.notification_schedule_todate_label.setText(
            QApplication.translate("MainWindow", "To Date", None,
                                   QApplication.UnicodeUTF8))
        self.notification_schedule_todate_dateedit.setDisplayFormat(
            QApplication.translate("MainWindow", "dd/MM/yyyy", None,
                                   QApplication.UnicodeUTF8))
        self.type_label.setText(
            QApplication.translate("MainWindow", "Type", None,
                                   QApplication.UnicodeUTF8))
        self.batch_label.setText(
            QApplication.translate("MainWindow", "Number of Notifications",
                                   None, QApplication.UnicodeUTF8))
        self.notification_schedule_table.horizontalHeaderItem(0).setText(
            QApplication.translate("MainWindow", "Message Id", None,
                                   QApplication.UnicodeUTF8))
        self.notification_schedule_table.horizontalHeaderItem(1).setText(
            QApplication.translate("MainWindow", "Date", None,
                                   QApplication.UnicodeUTF8))
        self.notification_schedule_table.horizontalHeaderItem(2).setText(
            QApplication.translate("MainWindow", "From", None,
                                   QApplication.UnicodeUTF8))
        self.notification_schedule_table.horizontalHeaderItem(3).setText(
            QApplication.translate("MainWindow", "Message", None,
                                   QApplication.UnicodeUTF8))
        self.notification_schedule_table.horizontalHeaderItem(4).setText(
            QApplication.translate("MainWindow", "State", None,
                                   QApplication.UnicodeUTF8))
        self.notification_search_button.setText(
            QApplication.translate("MainWindow", "Search", None,
                                   QApplication.UnicodeUTF8))
        self.notification_reset_button.setText(
            QApplication.translate("MainWindow", "Reset All", None,
                                   QApplication.UnicodeUTF8))
        self.notification_load_more_button.setText(
            QApplication.translate("MainWindow", "Load More", None,
                                   QApplication.UnicodeUTF8))
        ##signals and slotts && other stuffs
        self.scheduletable_count = 0
        self.addtable_count = 0
        # self.mainwindow = Ui_MainWindow  # just for the ease of finding the attributes in pycharm
        self.notification_schedule_table.setEditTriggers(
            QAbstractItemView.NoEditTriggers)
        self.batch_number = None
        self.notification_results.addItems([str(i) for i in range(1, 50, 5)])
        self.notification_states.addItems(['All', 'New', 'To Do', 'Done'])
        self.message = Messaging()
        self.notification_load_more_button.clicked.connect(self.load_more)
        self.notification_search_button.clicked.connect(self.search_messages)
        self.notification_reset_button.clicked.connect(self.reset_all)
        self.notificationTab_tab_4.setFocusPolicy(Qt.StrongFocus)
        self.notificationTab_tab_4.focusInEvent = self.load_rows
        # self.assign_shortcuts()

        # def assign_shortcuts(self):
        # QShortcut(QKeySequence(settings.custom_shortcut['key_tabcon_inventorynotification_search']),
        # self.notificationTab_tab_4, self.search_messages)
        # QShortcut(QKeySequence(settings.custom_shortcut['key_tabcon_inventorynotification_additem']),
        # self.notificationTab_tab_4, self.add_new_blank_rows)
        # QShortcut(QKeySequence(settings.custom_shortcut['key_tabcon_inventorynotification_print']),
        # self.notificationTab_tab_4, self.commit_and_print)
        # QShortcut(QKeySequence(settings.custom_shortcut['key_tabcon_inventorynotification_today']),
        # self.notificationTab_tab_4, lambda: self.load_messages('today'))
        # QShortcut(QKeySequence(settings.custom_shortcut['key_tabcon_inventorynotification_tommorow']),
        # self.notificationTab_tab_4, lambda: self.load_messages('tomorrow'))
        # QShortcut(QKeySequence(settings.custom_shortcut['key_tabcon_inventorynotification_thismonth']),
        # self.notificationTab_tab_4, lambda: self.load_messages('month'))
        # QShortcut(QKeySequence(settings.custom_shortcut['key_tabcon_inventorynotification_thisweek']),
        # self.notificationTab_tab_4, lambda: self.load_messages('week'))
        # QShortcut(QKeySequence(settings.custom_shortcut['key_tabcon_inventorynotification_clear']),
        # self.notificationTab_tab_4, self.clear_table)

    def add_messages(self, *args):
        """
        Populates the Schedules when we load the tab
        """
        table = self.notification_schedule_table
        if args:
            if args[0] != 'new':
                table.clearContents()
                table.setRowCount(0)
                table.setRowCount(len(args))
                for i, j in enumerate(args):
                    item = QTableWidgetItem(j['msg_id'])
                    table.setItem(i, 0, item)
                    item = QTableWidgetItem(j['date'])
                    table.setItem(i, 1, item)
                    item = QTableWidgetItem(
                        'Name:{}\nDesignation:{}\nAddress:{}'.format(
                            j['name'], j['designation'], j['address']))
                    table.setItem(i, 2, item)
                    item = QTableWidgetItem(
                        'Message Type:{}\nMessage:{}'.format(
                            j['msg_type'].title(), j['msg_body']))
                    table.setItem(i, 3, item)
                    states = QComboBox()
                    self.populate_states(states, j['msg_state'].title())
                    states.currentIndexChanged.connect(
                        lambda index, row=i: self.changed_state(row, index))
                    table.setCellWidget(i, 4, states)
            elif args[0] == 'new':
                initial = table.rowCount()
                row = table.rowCount() + len(args[1])
                table.setRowCount(row)
                forward_range = range(initial, row)
                for i, j in zip(forward_range, args[1]):
                    item = QTableWidgetItem(j['msg_id'])
                    table.setItem(i, 0, item)
                    item = QTableWidgetItem(j['date'])
                    table.setItem(i, 1, item)
                    item = QTableWidgetItem(
                        'Name:{}\nDesignation:{}\nAddress:{}'.format(
                            j['name'], j['designation'], j['address']))
                    table.setItem(i, 2, item)
                    item = QTableWidgetItem(
                        'Message Type:{}\nMessage:{}'.format(
                            j['msg_type'].title(), j['msg_body']))
                    table.setItem(i, 3, item)
                    states = QComboBox()
                    self.populate_states(states, j['msg_state'].title())
                    states.currentIndexChanged.connect(
                        lambda index, row=i: self.changed_state(row, index))
                    table.setCellWidget(i, 4, states)
        table.setColumnWidth(0, (table.width() * 0.5) / 5)
        table.setColumnWidth(1, (table.width() * 0.5) / 5)
        table.setColumnWidth(2, table.width() / 5)
        table.setColumnWidth(3, (table.width() * 2) / 5)
        self.notification_schedule_table.resizeRowsToContents()

    def populate_states(self, combo, state):
        """
        fills the supplier list for each item line
        :param combo: the combo box of suppliers
        :return:none
        """
        combo.setStyleSheet("QAbstractItemView{" "background: #4B77BE;" "}")
        combo.addItems(['New', 'To Do', 'Done'])
        index = combo.findText(state)
        combo.setCurrentIndex(index)

    def changed_state(self, row, index):
        """
        fill the item combo box
        :param combo: the combobox object
        :return: none
        """
        table = self.notification_schedule_table
        data = {}
        data['message_id'] = table.item(row, 0).text()
        data['msg_state'] = table.cellWidget(row, 4).currentText()
        msg = QMessageBox.information(
            QMessageBox(), 'Alert!!',
            'Do you want to change the status of the Message??',
            QMessageBox.Yes | QMessageBox.No)
        if msg == QMessageBox.Yes:
            report = self.message.update_message(data)
            if report:
                _ = QMessageBox.information(QMessageBox(), 'Success!!',
                                            'The Message was updated',
                                            QMessageBox.Yes | QMessageBox.No)
            else:
                _ = QMessageBox.critical(QMessageBox(), 'Error!!',
                                         'The Message was not updated',
                                         QMessageBox.Yes | QMessageBox.No)

    def search_messages(self):
        """
        Searches for messages when search button is pressed
        """
        logger.info('Notifications searching messages initiated')
        from_date = self.notification_schedule_fromdate_dateedit.text()
        to_date = self.notification_schedule_todate_dateedit.text()
        limit = self.notification_results.currentText()
        msg_id = self.id_line.text()
        msg_state = self.notification_states.currentText()
        dataobj = self.message.load_message(limit=limit,
                                            from_date=from_date,
                                            to_date=to_date,
                                            msg_id=msg_id,
                                            msg_state=msg_state)
        if dataobj:
            self.add_messages(*dataobj)
        else:
            self.notification_schedule_table.clearContents()
            self.notification_schedule_table.setRowCount(0)

    def load_more(self):
        """
        Searches for messages when search button is pressed
        """
        logger.info('Notifications searching messages initiated')
        from_date = self.notification_schedule_fromdate_dateedit.text()
        to_date = self.notification_schedule_todate_dateedit.text()
        limit = self.notification_results.currentText()
        msg_id = self.id_line.text()
        msg_state = self.notification_states.currentText()
        offset = self.notification_schedule_table.rowCount()
        dataobj = self.message.load_message(limit=limit,
                                            from_date=from_date,
                                            to_date=to_date,
                                            msg_id=msg_id,
                                            msg_state=msg_state,
                                            offset=offset)
        if dataobj:
            self.add_messages('new', dataobj)
        else:
            self.notification_schedule_table.clearContents()
            self.notification_schedule_table.setRowCount(0)

    def load_single_message(self, msg_id):  # api
        """method to load a single message"""
        self.reset_all()
        dataobj = self.message.load_message(msg_id=msg_id)
        if dataobj:
            self.add_messages('new', dataobj)
            self.id_line.setText(str(msg_id))
        else:
            self.notification_schedule_table.clearContents()
            self.notification_schedule_table.setRowCount(0)

    def load_rows(self, event):
        """
        :return:loads the rows
        """
        self.add_messages()

    def reset_all(self):
        """
        :return: resets the the data in the search text
        """
        try:
            self.id_line.clear()
            self.notification_schedule_table.clearContents()
            self.notification_schedule_table.setRowCount(0)
        except Exception as _:
            if settings.level == 10:
                logger.exception('raised exception')
            return False
예제 #8
0
class ReportMovementPanel(PanelWithTable):

    columnList = "EVENT_ID;EVENT_TYPE; EVENT_SUB_TYPE; EVENT_DIRECTION; ASSET_NAME; EVENT_DATE; QUANTITY; PRICE; RATE; GROSS_AMOUNT; NET_AMOUNT; COMMISSION_PERCENTAGE; COMMISSION_AMOUNT; COMMISSION_IVA_AMOUNT; TENOR; MATURITY_DATE; CUSTODY_NAME; TAX_ID; TAX_AMOUNT; COMMENT; EXTERNAL_ID".split(
        ";")

    def __init__(self):
        super(self.__class__, self).__init__()
        self.layout = QtGui.QGridLayout(self)
        self.reportMovementFilter = ReportMovementFilter(self)
        self.layout.addWidget(self.reportMovementFilter, 1, 0,
                              QtCore.Qt.AlignTop)
        self.layout.addWidget(self.createTable(), 1, 1, QtCore.Qt.AlignTop)

    def createTable(self):
        self.table = QTableWidget()
        self.table.setRowCount(1000)
        self.table.setColumnCount(len(self.columnList))
        self.table.setEditTriggers(QtGui.QAbstractItemView.NoEditTriggers)
        self.table.setHorizontalHeaderLabels(self.columnList)
        #self.pnLTableWidget.resizeColumnsToContents()
        self.table.sortItems(Constant.CONST_COLUMN_REPORT_MOVEMENT_EVENT_DATE)
        self.table.resizeRowsToContents()
        self.table.setFixedSize(1100, 900)
        return self.table

    def doSubmit(self, fromDate, toDate, movementType, assetName, custodyName):
        reportMovementLO = Engine.getReportMovementList(
            fromDate, toDate, movementType, assetName, custodyName)
        self.table.setSortingEnabled(False)
        self.table.clearContents()
        self.table.setRowCount(len(reportMovementLO.movementList))
        self.renderTable(reportMovementLO.movementList)
        self.table.setSortingEnabled(True)
        self.table.resizeRowsToContents()

    def renderTable(self, tableList):
        row = 0
        isBold = False
        for listItem in tableList:
            self.addItemtoTable(self.table, listItem, row,
                                Constant.CONST_COLUMN_REPORT_MOVEMENT_EVENT_ID,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_EVENT_TYPE, isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_EVENT_SUB_TYPE, isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_EVENT_DIRECTION, isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_ASSET_NAME, isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_EVENT_DATE, isBold)
            self.addItemtoTable(self.table, listItem, row,
                                Constant.CONST_COLUMN_REPORT_MOVEMENT_QUANTITY,
                                isBold)
            self.addItemtoTable(self.table, listItem, row,
                                Constant.CONST_COLUMN_REPORT_MOVEMENT_PRICE,
                                isBold)
            self.addItemtoTable(self.table, listItem, row,
                                Constant.CONST_COLUMN_REPORT_MOVEMENT_RATE,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_GROSS_AMOUNT, isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_NET_AMOUNT, isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_COMMISSION_PERCENTAGE,
                isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_COMMISSION_AMOUNT,
                isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_COMMISSION_IVA_AMOUNT,
                isBold)
            self.addItemtoTable(self.table, listItem, row,
                                Constant.CONST_COLUMN_REPORT_MOVEMENT_TENOR,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_CUSTODY_NAME, isBold)
            self.addItemtoTable(self.table, listItem, row,
                                Constant.CONST_COLUMN_REPORT_MOVEMENT_TAX_ID,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_TAX_AMOUNT, isBold)
            self.addItemtoTable(self.table, listItem, row,
                                Constant.CONST_COLUMN_REPORT_MOVEMENT_COMMENT,
                                isBold)
            self.addItemtoTable(
                self.table, listItem, row,
                Constant.CONST_COLUMN_REPORT_MOVEMENT_EXTERNAL_ID, isBold)
            row += 1
예제 #9
0
class RecorderClipSelectionScreen(QWidget):
    def __init__(self, hyperdeck, state, mainWindow):
        super(RecorderClipSelectionScreen, self).__init__()
        self.hyperdeck = hyperdeck
        self.state = state
        self.mainWindow = mainWindow

        self.selected_clip = None

        layout = QGridLayout()

        lblTitle = TitleLabel("Select clip")
        layout.addWidget(lblTitle, 0, 0, 1, 3)

        self.clipTable = QTableWidget()
        self.clipTable.setColumnCount(2)
        self.clipTable.setHorizontalHeaderLabels(['ID', 'Clip name'])
        self.clipTable.horizontalHeader().setStretchLastSection(True)
        self.clipTable.setSelectionBehavior(
            QAbstractItemView.SelectionBehavior.SelectRows)

        self.clipTable.itemSelectionChanged.connect(self._onClipSelected)

        layout.addWidget(self.clipTable, 1, 0, 1, 3)

        b = ExpandingButton()
        b.setText("Back")
        b.setIcon(QIcon(":icons/go-previous"))
        b.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon)
        b.clicked.connect(mainWindow.stepBack)
        layout.addWidget(b, 2, 0)

        btnRefresh = ExpandingButton()
        btnRefresh.setText('Refresh')
        btnRefresh.setIcon(QIcon(':icons/refresh'))
        btnRefresh.setToolButtonStyle(
            Qt.ToolButtonStyle.ToolButtonTextBesideIcon)

        def refresh():
            self.populateClipsList({})
            hyperdeck.broadcastClipsList()

        btnRefresh.clicked.connect(refresh)

        layout.addWidget(btnRefresh, 2, 1)

        self.btnSelect = ExpandingButton()
        self.btnSelect.setText("Cue clip")
        self.btnSelect.clicked.connect(self._cueClip)
        layout.addWidget(self.btnSelect, 2, 2)

        layout.setRowStretch(0, 0)
        layout.setRowStretch(1, 1)
        layout.setRowStretch(2, 0)

        self.setLayout(layout)

        self.populateClipsList(state.clip_listing)

    def populateClipsList(self, clipsList):
        self.selected_clip = None
        self.btnSelect.setEnabled(False)
        self.clipTable.clearContents()
        self.clipTable.setRowCount(len(clipsList))
        for idx, (clip_id, val) in enumerate(clipsList.iteritems()):
            self.clipTable.setItem(idx, 0, QTableWidgetItem(str(clip_id)))
            self.clipTable.setItem(idx, 1, QTableWidgetItem(val['name']))

    def _updateClipSelectionFromState(self, state):
        if 'clip id' in state:
            clip_id = state['clip id']
            for row in range(self.clipTable.rowCount()):
                this_id = self.clipTable.item(row, 0)
                if this_id.text() == str(clip_id):
                    self.clipTable.selectRow(row)
                    break

    def _onClipSelected(self):
        selected_items = self.clipTable.selectedItems()
        if selected_items:
            self.selected_clip = int(selected_items[0].text())
            self.btnSelect.setEnabled(True)
        else:
            self.btnSelect.setEnabled(False)

    def _cueClip(self):
        if self.selected_clip:
            self.mainWindow.stepBack()
            self.hyperdeck.gotoClip(self.selected_clip)
예제 #10
0
class FoamDictWidget(QWidget):
    "QWidget to view and edit simple Foam Dictionary"
    def __init__(self, variable_setting, parent=None):
        super(FoamDictWidget, self).__init__(parent)

        self.buttonLayout = QHBoxLayout()
        self.pushButtonInsert = QPushButton("Insert")
        #self.pushButtonLoad = QPushButton("Load default")
        self.pushButtonRestore = QPushButton("Restore")
        self.pushButtonClear = QPushButton("Clear")
        self.buttonLayout.addWidget(self.pushButtonInsert)
        #self.buttonLayout.addWidget(self.pushButtonLoad)
        self.buttonLayout.addWidget(self.pushButtonRestore)
        self.buttonLayout.addWidget(self.pushButtonClear)

        self.buttonPreview = QPushButton('Preview FoamFile write-out')
        self.textPreview = QTextEdit('')
        self.textPreview.setVisible(False)
        self.textPreview.setEnabled(False)

        self.tableWidget = QTableWidget()
        #header, should not sort, has vertical scrollbar
        # set column count, fixed to 2, size of TableItem
        self.tableWidget.setColumnCount(2)
        #5self.tableWidget.setHorizontalHeaderItem(0, )
        self.tableWidget.setHorizontalHeaderLabels(['key', 'value text'])
        # set a default row count, insert as needed
        self.tableWidget.setRowCount(0)

        #PySide has different name other than @QtCore.pyqtSlot, but PySide.QtCore.SLOT
        QtCore.QObject.connect(self.pushButtonInsert, QtCore.SIGNAL("clicked()"), self.insertRow)
        QtCore.QObject.connect(self.pushButtonRestore, QtCore.SIGNAL("clicked()"), self.restoreDict)
        QtCore.QObject.connect(self.pushButtonClear, QtCore.SIGNAL("clicked()"), self.clearDict)
        #
        QtCore.QObject.connect(self.tableWidget, QtCore.SIGNAL("doubleClicked()"), self.showPreview)  # does not work for PySide
        QtCore.QObject.connect(self.buttonPreview, QtCore.SIGNAL("clicked()"), self.showPreview)
        self._previewing = False

        self.settings = variable_setting
        self.restoreDict()

        self.myLayout = QVBoxLayout()
        self.myLayout.addLayout(self.buttonLayout)
        self.myLayout.addWidget(self.tableWidget)
        self.myLayout.addWidget(self.buttonPreview)
        self.myLayout.addWidget(self.textPreview)
        self.setLayout(self.myLayout)

    def dict(self):
        _settings = OrderedDict()
        for i in range(self.tableWidget.rowCount()):
            k = self.tableWidget.item(i, 0).text()
            v = self.tableWidget.item(i, 1).text()  # data() will return QVariant type-> python type
            # validated by non-empty string
            if k and v:
                _settings[k] = v
        return _settings

    def setDict(self, settings):
        self.settings = settings
        self.updateDictView(self.settings)

    def restoreDict(self):
        self.updateDictView(self.settings)

    def updateDictView(self, varible_settings):
        i = 0
        self.clearDict()  # will clear contents, but leave row text empty
        N = self.tableWidget.rowCount()
        for k,v in varible_settings.items():
            # translate seq into unicode
            if i>=N:
                self.tableWidget.insertRow(i)
            kitem = QTableWidgetItem(k)  # also set flags and state, type
            vitem = QTableWidgetItem(v)  # automaticall convert str to unicode to feed QWidget?
            self.tableWidget.setItem(i, 0, kitem)
            self.tableWidget.setItem(i, 1, vitem)  # currently only works for string value !
            i += 1

    #@pyqtSlot()  # PySide use another name "QtCore.Slot()"
    def insertRow(self):
        nRows = self.tableWidget.rowCount()
        self.tableWidget.insertRow(nRows)  # inset one row at the end
        kitem = QTableWidgetItem("")  # also set flags and state, type
        vitem = QTableWidgetItem("")
        self.tableWidget.setItem(nRows, 0, kitem)
        self.tableWidget.setItem(nRows, 1, vitem)

    def clearDict(self):
        self.tableWidget.clearContents()  # keep the header, clear all items

    def showPreview(self):
        if self._previewing:
            self._previewing = False
            self.textPreview.setVisible(False)
            self.buttonPreview.setText('click to preview write out')
        else:
            self._previewing = True
            self.buttonPreview.setText('click on text to hide preview')
            # enable scrollbar ?
            self.textPreview.setText(self.printDict())
            self.textPreview.setVisible(True)

    def loadDefault(self):
        pass

    def printDict(self):
        dictText = "{\n"
        for k,v in self.dict().items():
            dictText += "   {}  {};\n".format(str(k), str(v))
        dictText += "}"
        return dictText
예제 #11
0
파일: menu.py 프로젝트: tinavas/FSERP
class MenuWeekday():
    """Tab to manage menu entry for each day"""
    global logger

    def __init__(self, day):
        ####
        logger.info('Inside MenuWeekday')
        self.menudetail_tab_1 = QWidget()
        self.menudetail_tab_1.setObjectName("menudetail_tab_1")
        self.gridLayout_20 = QGridLayout(self.menudetail_tab_1)
        self.gridLayout_20.setObjectName("gridLayout_20")
        self.menu_table = QTableWidget(self.menudetail_tab_1)
        self.menu_table.setSortingEnabled(True)
        self.menu_table.setObjectName("menu_table")
        self.menu_table.setColumnCount(6)
        self.menu_table.setRowCount(0)
        item = QTableWidgetItem()
        self.menu_table.setHorizontalHeaderItem(0, item)
        item = QTableWidgetItem()
        self.menu_table.setHorizontalHeaderItem(1, item)
        item = QTableWidgetItem()
        self.menu_table.setHorizontalHeaderItem(2, item)
        item = QTableWidgetItem()
        self.menu_table.setHorizontalHeaderItem(3, item)
        item = QTableWidgetItem()
        self.menu_table.setHorizontalHeaderItem(4, item)
        item = QTableWidgetItem()
        self.menu_table.setHorizontalHeaderItem(5, item)
        self.menu_table.horizontalHeader().setCascadingSectionResizes(False)
        self.menu_table.horizontalHeader().setStretchLastSection(True)
        self.menu_table.verticalHeader().setVisible(True)
        self.menu_table.verticalHeader().setCascadingSectionResizes(True)
        self.gridLayout_20.addWidget(self.menu_table, 0, 0, 1, 3)
        spacerItem22 = QSpacerItem(612, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
        self.gridLayout_20.addItem(spacerItem22, 1, 0, 1, 1)
        self.menu_table_refresh_button = QPushButton(self.menudetail_tab_1)
        self.menu_table_refresh_button.setObjectName("menu_table_refresh_button")
        self.gridLayout_20.addWidget(self.menu_table_refresh_button, 1, 1, 1, 1)
        self.menu_table_add_button = QPushButton(self.menudetail_tab_1)
        self.menu_table_add_button.setObjectName("menu_table_add_button")
        self.gridLayout_20.addWidget(self.menu_table_add_button, 1, 2, 1, 1)
        ####retranslate
        self.menu_table.horizontalHeaderItem(0).setText(
            QApplication.translate("MainWindow", "Code", None, QApplication.UnicodeUTF8))
        self.menu_table.horizontalHeaderItem(1).setText(
            QApplication.translate("MainWindow", "Item", None, QApplication.UnicodeUTF8))
        self.menu_table.horizontalHeaderItem(2).setText(
            QApplication.translate("MainWindow", "Category", None, QApplication.UnicodeUTF8))
        self.menu_table.horizontalHeaderItem(3).setText(
            QApplication.translate("MainWindow", "Rate", None, QApplication.UnicodeUTF8))
        self.menu_table.horizontalHeaderItem(4).setText(
            QApplication.translate("MainWindow", "Per Day", None, QApplication.UnicodeUTF8))
        self.menu_table.horizontalHeaderItem(5).setText(
            QApplication.translate("MainWindow", "Available", None, QApplication.UnicodeUTF8))
        self.menu_table_refresh_button.setText(
            QApplication.translate("MainWindow", "Refresh", None, QApplication.UnicodeUTF8))
        self.menu_table_add_button.setText(
            QApplication.translate("MainWindow", "Add Dish", None, QApplication.UnicodeUTF8))
        ###signals and slots && other stuffs
        # self.mainwindow = Ui_MainWindow  # just for the ease of finding the attributes in pycharm
        self.day = day
        self.menu_table_add_button.clicked.connect(self.add_menu)
        self.menu_table.itemDoubleClicked.connect(self.popup_edit)
        self.menu_table_refresh_button.clicked.connect(self.update_menu)
        self.menu_table.setSelectionBehavior(QAbstractItemView.SelectRows)
        self.menu_table.setEditTriggers(QAbstractItemView.NoEditTriggers)
        self.menu_table.setShowGrid(False)
        self.menu_table.setAlternatingRowColors(True)
        self.update_menu()
        self.popup = object
        self.menudetail_tab_1.setFocusPolicy(Qt.StrongFocus)
        self.menudetail_tab_1.focusInEvent = self.load_rows
        self.assign_shortcuts()

    def assign_shortcuts(self):
        """assign shortcuts"""
        QShortcut(QKeySequence(settings.custom_shortcut['key_tabcon_menumgtmonsun_view']),
                  self.menudetail_tab_1, self.row_selected)
        QShortcut(QKeySequence(settings.custom_shortcut['key_tabcon_menumgtmonsun_refresh']),
                  self.menudetail_tab_1, self.update_menu)
        QShortcut(QKeySequence(settings.custom_shortcut['key_tabcon_menumgtmonsun_add']),
                  self.menudetail_tab_1, self.add_menu)

    def row_selected(self):
        """selets a row entry"""
        rows = sorted(set(index.row() for index in
                          self.menu_table.selectedIndexes()))
        if rows:
            code = self.menu_table.item(rows[0], 0).text()
            name = self.menu_table.item(rows[0], 1).text()
            quantity = self.menu_table.item(rows[0], 4).text()
            self.add_menu(code, name, quantity)

    def add_menu(self, *args):
        """
        :return: Pops up a new dialogue to add the menus
        """
        if not args:
            self.popup = AddMenuFromList(parent=self, day=self.day)
            self.popup.exec_()
        else:
            self.popup = MenuQuantityEditPopup(parent=self, day=self.day, code=args[0], name=args[1], quantity=args[2])
            self.popup.exec_()

    def update_menu(self):
        """
        :return:Populates the menu table
        """
        menu = WeeklyMenu(day=self.day)
        menulist = menu.load_dish_per_Day()
        if not menulist == []:
            self.add_row(*menulist)
        else:
            self.menu_table.clearContents()
            self.menu_table.setRowCount(0)

    def popup_edit(self, item):
        """
        Pops up the menu to be edited
        :param item: item clicked
        :return:none
        """
        model_index = self.menu_table.indexFromItem(item)
        row = model_index.row()
        code = self.menu_table.item(row, 0).text()
        name = self.menu_table.item(row, 1).text()
        quantity = self.menu_table.item(row, 4).text()
        self.add_menu(code, name, quantity)

    def add_row(self, *args):
        """creates a new row entry"""
        table = self.menu_table
        if args:
            table.setRowCount(len(args))
            for i, j in enumerate(args):
                item = QTableWidgetItem(j['item_no'])
                table.setItem(i, 0, item)
                item = QTableWidgetItem(j['item'])
                table.setItem(i, 1, item)
                item = QTableWidgetItem(j['category'])
                table.setItem(i, 2, item)
                item = QTableWidgetItem(j['rate'])
                table.setItem(i, 3, item)
                item = QTableWidgetItem(j['per_day'])
                table.setItem(i, 4, item)
                item = QTableWidgetItem(j['available'])
                table.setItem(i, 5, item)
        table.setColumnWidth(0, table.width() / 6)
        table.setColumnWidth(1, table.width() / 6)
        table.setColumnWidth(2, table.width() / 6)
        table.setColumnWidth(3, table.width() / 6)
        table.setColumnWidth(4, table.width() / 6)

    def load_rows(self, event):
        """
        :return:checks and adds new rows
        """
        self.add_row()
예제 #12
0
파일: report.py 프로젝트: tinavas/FSERP
class ReportEmployeeTestDialogue(QDialog):
    """
    Employee Report Popup Manager
    """
    global logger

    def __init__(self, code=None, parent=None):
        logger.info('Inside ReportEmployeeTestDialogue')
        super(ReportEmployeeTestDialogue, self).__init__(parent)
        self.resize(500, 500)
        self.vertical_23 = QVBoxLayout(self)
        self.vertical_23.setObjectName("vertical_23")
        self.label_1 = QLabel(self)
        self.vertical_23.addWidget(self.label_1)
        self.report_health_table = QTableWidget(self)
        self.report_health_table.setObjectName("report_health_table")
        self.report_health_table.setColumnCount(5)
        self.report_health_table.setRowCount(0)
        self.report_health_table.setSelectionBehavior(
            QAbstractItemView.SelectRows)
        item = QTableWidgetItem()
        self.report_health_table.setHorizontalHeaderItem(0, item)
        item = QTableWidgetItem()
        self.report_health_table.setHorizontalHeaderItem(1, item)
        item = QTableWidgetItem()
        self.report_health_table.setHorizontalHeaderItem(2, item)
        item = QTableWidgetItem()
        self.report_health_table.setHorizontalHeaderItem(3, item)
        item = QTableWidgetItem()
        self.report_health_table.setHorizontalHeaderItem(4, item)
        self.report_health_table.horizontalHeader().setCascadingSectionResizes(
            True)
        self.report_health_table.horizontalHeader().setStretchLastSection(True)
        self.report_health_table.verticalHeader().setCascadingSectionResizes(
            True)
        self.vertical_23.addWidget(self.report_health_table)
        self.horizontal_21 = QHBoxLayout()
        self.report_health_newrow_buttuon = QPushButton(self)
        self.report_health_newrow_buttuon.setObjectName(
            "report_health_newrow_buttuon")
        self.horizontal_21.addWidget(self.report_health_newrow_buttuon)
        spacerItem23 = QSpacerItem(40, 20, QSizePolicy.Expanding,
                                   QSizePolicy.Minimum)
        self.horizontal_21.addItem(spacerItem23)
        self.vertical_23.addLayout(self.horizontal_21)
        ### retanslate
        self.setWindowTitle(
            QApplication.translate("MainWindow", "Health Report", None,
                                   QApplication.UnicodeUTF8))
        self.label_1.setText(
            QApplication.translate("MainWindow", "Health Report", None,
                                   QApplication.UnicodeUTF8))
        self.report_health_table.horizontalHeaderItem(0).setText(
            QApplication.translate("MainWindow", "Code", None,
                                   QApplication.UnicodeUTF8))
        self.report_health_table.horizontalHeaderItem(1).setText(
            QApplication.translate("MainWindow", "Date", None,
                                   QApplication.UnicodeUTF8))
        self.report_health_table.horizontalHeaderItem(2).setText(
            QApplication.translate("MainWindow", "Organization Name", None,
                                   QApplication.UnicodeUTF8))
        self.report_health_table.horizontalHeaderItem(3).setText(
            QApplication.translate("MainWindow", "Test", None,
                                   QApplication.UnicodeUTF8))
        self.report_health_table.horizontalHeaderItem(4).setText(
            QApplication.translate("MainWindow", "Description", None,
                                   QApplication.UnicodeUTF8))
        self.report_health_newrow_buttuon.setText(
            QApplication.translate("MainWindow", "New Row", None,
                                   QApplication.UnicodeUTF8))
        ###signals and slots && other stuffs
        self.health = Health(emp_id=code)
        self.report_health_table.setEditTriggers(
            QAbstractItemView.NoEditTriggers)
        self.load_table_rows()
        self.report_health_table.itemDoubleClicked.connect(
            self.popup_health_edit)
        self.report_health_newrow_buttuon.clicked.connect(self.new_healthTest)
        self.focusInEvent = self.load_rows

    def new_healthTest(self, code=None):
        """
        pops up a dialog to add a new report or edit the existing report
        :param code:the code of the report
        """
        try:
            pop = HygieneReportPop(parent=self,
                                   table='health_table',
                                   code=code)
            pop.setWindowFlags(Qt.WindowTitleHint)
            pop.exec_()
            self.load_table_rows()
        except Exception:
            if settings.level == 10:
                logger.exception('raised exception')
            return False, 'Some Internal Error'

    def load_table_rows(self):
        """
        loads the table of reports
        """
        try:
            data = self.health.load_report()
            if data[0]:
                self.add_table_rows(*data[1])
                if not data[1]:
                    self.report_health_table.clearContents()
                    self.report_health_table.setRowCount(0)
        except Exception:
            if settings.level == 10:
                logger.exception('raised exception')
            return False, 'Some Internal Error'

    def popup_health_edit(self, item):
        """
        Pops up the menu to be edited
        :param item: item clicked
        """
        try:
            table = self.report_health_table
            model_index = table.indexFromItem(item)
            row = model_index.row()
            self.new_healthTest(table.item(row, 0).text())
        except Exception:
            if settings.level == 10:
                logger.exception('raised exception')
            return False, 'Some Internal Error'

    def add_table_rows(self, *args):
        """
        adds a new row to the pes table
        """
        try:
            table = self.report_health_table
            if args:
                table.setRowCount(len(args))
                for row, data in enumerate(args):
                    table.setItem(row, 0, QTableWidgetItem(data['code']))
                    table.setItem(row, 1, QTableWidgetItem(data['date']))
                    table.setItem(row, 2,
                                  QTableWidgetItem(data['organization']))
                    table.setItem(row, 3, QTableWidgetItem(data['test']))
                    table.setItem(row, 4,
                                  QTableWidgetItem(data['description']))
            table.setColumnWidth(0, (table.width() / 5) * 0.5)
            table.setColumnWidth(1, (table.width() / 5) * 0.5)
            table.setColumnWidth(2, table.width() / 5)
            table.setColumnWidth(3, table.width() / 5)
        except Exception:
            if settings.level == 10:
                logger.exception('raised exception')
            return False, 'Some Internal Error'

    def load_rows(self, event):
        """
        loads the rows of the tables
        """
        self.add_table_rows()
예제 #13
0
파일: report.py 프로젝트: tinavas/FSERP
class Hygiene():
    """ The Hygiene Tab
    """
    global logger

    def __init__(self):
        ####
        logger.info('Inside Hygiene')
        self.reporthygiene_tab_2 = QWidget()
        self.reporthygiene_tab_2.setObjectName("reporthygiene_tab_2")
        self.vertical_23 = QVBoxLayout(self.reporthygiene_tab_2)
        self.vertical_23.setObjectName("vertical_23")
        self.label_1 = QLabel(self.reporthygiene_tab_2)
        self.vertical_23.addWidget(self.label_1)
        self.report_hyginepest_table = QTableWidget(self.reporthygiene_tab_2)
        self.report_hyginepest_table.setObjectName("report_hyginepest_table")
        self.report_hyginepest_table.setColumnCount(5)
        self.report_hyginepest_table.setRowCount(0)
        self.report_hyginepest_table.setSelectionBehavior(
            QAbstractItemView.SelectRows)
        item = QTableWidgetItem()
        self.report_hyginepest_table.setHorizontalHeaderItem(0, item)
        item = QTableWidgetItem()
        self.report_hyginepest_table.setHorizontalHeaderItem(1, item)
        item = QTableWidgetItem()
        self.report_hyginepest_table.setHorizontalHeaderItem(2, item)
        item = QTableWidgetItem()
        self.report_hyginepest_table.setHorizontalHeaderItem(3, item)
        item = QTableWidgetItem()
        self.report_hyginepest_table.setHorizontalHeaderItem(4, item)
        self.report_hyginepest_table.horizontalHeader(
        ).setCascadingSectionResizes(True)
        self.report_hyginepest_table.horizontalHeader().setStretchLastSection(
            True)
        self.report_hyginepest_table.verticalHeader(
        ).setCascadingSectionResizes(True)
        self.vertical_23.addWidget(self.report_hyginepest_table)
        self.horizontal_21 = QHBoxLayout()
        self.report_hyginepest_newrow_buttuon = QPushButton(
            self.reporthygiene_tab_2)
        self.report_hyginepest_newrow_buttuon.setObjectName(
            "report_hyginepest_newrow_buttuon")
        self.horizontal_21.addWidget(self.report_hyginepest_newrow_buttuon)
        spacerItem23 = QSpacerItem(40, 20, QSizePolicy.Expanding,
                                   QSizePolicy.Minimum)
        self.horizontal_21.addItem(spacerItem23)
        # self.report_hyginepest_save_button = QPushButton(self.reporthygiene_tab_2)
        # self.report_hyginepest_save_button.setObjectName("report_hyginepest_save_button")
        # self.horizontal_21.addWidget(self.report_hyginepest_save_button)
        self.vertical_23.addLayout(self.horizontal_21)
        self.label_2 = QLabel(self.reporthygiene_tab_2)
        self.vertical_23.addWidget(self.label_2)
        self.report_hyginewater_table = QTableWidget(self.reporthygiene_tab_2)
        self.report_hyginewater_table.setObjectName("report_hyginewater_table")
        self.report_hyginewater_table.setColumnCount(5)
        self.report_hyginewater_table.setRowCount(0)
        self.report_hyginewater_table.setSelectionBehavior(
            QAbstractItemView.SelectRows)
        item = QTableWidgetItem()
        self.report_hyginewater_table.setHorizontalHeaderItem(0, item)
        item = QTableWidgetItem()
        self.report_hyginewater_table.setHorizontalHeaderItem(1, item)
        item = QTableWidgetItem()
        self.report_hyginewater_table.setHorizontalHeaderItem(2, item)
        item = QTableWidgetItem()
        self.report_hyginewater_table.setHorizontalHeaderItem(3, item)
        item = QTableWidgetItem()
        self.report_hyginewater_table.setHorizontalHeaderItem(4, item)
        self.report_hyginewater_table.horizontalHeader(
        ).setCascadingSectionResizes(True)
        self.report_hyginewater_table.horizontalHeader().setStretchLastSection(
            True)
        self.report_hyginewater_table.verticalHeader(
        ).setCascadingSectionResizes(True)
        self.vertical_23.addWidget(self.report_hyginewater_table)
        self.horizontal_22 = QHBoxLayout()
        self.report_hyginewater_newrow_buttuon = QPushButton(
            self.reporthygiene_tab_2)
        self.report_hyginewater_newrow_buttuon.setObjectName(
            "report_hyginewater_newrow_buttuon")
        self.horizontal_22.addWidget(self.report_hyginewater_newrow_buttuon)
        spacerItem24 = QSpacerItem(40, 20, QSizePolicy.Expanding,
                                   QSizePolicy.Minimum)
        self.horizontal_22.addItem(spacerItem24)
        # self.report_hyginewater_save_button = QPushButton(self.reporthygiene_tab_2)
        # self.report_hyginewater_save_button.setObjectName("report_hyginewater_save_button")
        # self.horizontal_22.addWidget(self.report_hyginewater_save_button)
        self.vertical_23.addLayout(self.horizontal_22)
        ### retanslate
        self.label_1.setText(
            QApplication.translate("MainWindow", "Pest Test Report", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginepest_table.horizontalHeaderItem(0).setText(
            QApplication.translate("MainWindow", "Code", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginepest_table.horizontalHeaderItem(1).setText(
            QApplication.translate("MainWindow", "Date", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginepest_table.horizontalHeaderItem(2).setText(
            QApplication.translate("MainWindow", "Organization Name", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginepest_table.horizontalHeaderItem(3).setText(
            QApplication.translate("MainWindow", "Test", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginepest_table.horizontalHeaderItem(4).setText(
            QApplication.translate("MainWindow", "Description", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginepest_newrow_buttuon.setText(
            QApplication.translate("MainWindow", "New Row", None,
                                   QApplication.UnicodeUTF8))
        # self.report_hyginepest_save_button.setText(
        # QApplication.translate("MainWindow", "Save", None, QApplication.UnicodeUTF8))
        self.label_2.setText(
            QApplication.translate("MainWindow", "Water Test Report", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginewater_table.horizontalHeaderItem(0).setText(
            QApplication.translate("MainWindow", "Code", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginewater_table.horizontalHeaderItem(1).setText(
            QApplication.translate("MainWindow", "Date", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginewater_table.horizontalHeaderItem(2).setText(
            QApplication.translate("MainWindow", "Organization Name", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginewater_table.horizontalHeaderItem(3).setText(
            QApplication.translate("MainWindow", "Test", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginewater_table.horizontalHeaderItem(4).setText(
            QApplication.translate("MainWindow", "Description", None,
                                   QApplication.UnicodeUTF8))
        self.report_hyginewater_newrow_buttuon.setText(
            QApplication.translate("MainWindow", "New Row", None,
                                   QApplication.UnicodeUTF8))
        # self.report_hyginewater_save_button.setText(
        #     QApplication.translate("MainWindow", "Save", None, QApplication.UnicodeUTF8))
        ###signals and slots && other stuffs
        self.pest = Pest()
        self.water = Water()
        self.report_hyginepest_table.setEditTriggers(
            QAbstractItemView.NoEditTriggers)
        self.report_hyginewater_table.setEditTriggers(
            QAbstractItemView.NoEditTriggers)
        self.load_table_rows()
        self.report_hyginepest_table.itemDoubleClicked.connect(
            self.popup_pest_edit)
        self.report_hyginewater_table.itemDoubleClicked.connect(
            self.popup_water_edit)
        self.reporthygiene_tab_2.focusInEvent = self.load_rows  # very important for focus
        self.report_hyginepest_newrow_buttuon.clicked.connect(
            self.new_pestTest)  # if no focus available then we need lambda
        self.report_hyginewater_newrow_buttuon.clicked.connect(
            self.new_waterTest)

    def new_pestTest(self, code=None):
        """
        The pest report popup generator
        :param code: The code of the pest report
        """
        pop = HygieneReportPop(parent=self, table='pest_table', code=code)
        pop.setWindowFlags(Qt.WindowTitleHint)
        pop.exec_()
        self.load_table_rows()

    def new_waterTest(self, code=None):
        """
        The water report popup generator
        :param code: The code of the water report
        """
        pop = HygieneReportPop(parent=self, table='water_table', code=code)
        pop.setWindowFlags(Qt.WindowTitleHint)
        pop.exec_()
        self.load_table_rows()

    def load_table_rows(self):
        """
        Populates the rows for both the table
        """
        logger.info('Hygiene save table initiated')
        try:
            data = self.pest.load_report()
            if data[0]:
                self.add_table_rows('pest_table', *data[1])
                if not data[1]:
                    self.report_hyginepest_table.clearContents()
                    self.report_hyginepest_table.setRowCount(0)
            data = self.water.load_report()
            if data[0]:
                self.add_table_rows('water_table', *data[1])
                if not data[1]:
                    self.report_hyginewater_table.clearContents()
                    self.report_hyginewater_table.setRowCount(0)
        except Exception:
            if settings.level == 10:
                logger.exception('raised exception')
            return False, 'Some Internal Error'

    def popup_pest_edit(self, item):
        """
        Pops up the menu to be edited
        :param item: item clicked
        """
        table = self.report_hyginepest_table
        model_index = table.indexFromItem(item)
        row = model_index.row()
        self.new_pestTest(table.item(row, 0).text())

    def popup_water_edit(self, item):
        """
        Pops up the menu to be edited
        :param item: item clicked
        """
        table = self.report_hyginewater_table
        model_index = table.indexFromItem(item)
        row = model_index.row()
        self.new_waterTest(table.item(row, 0).text())

    def add_table_rows(self, tablename, *args):
        """
        adds a new row to the pes table
        """
        if tablename == 'pest_table':
            table = self.report_hyginepest_table
        else:
            table = self.report_hyginewater_table
        if args:
            table.setRowCount(len(args))
            for row, data in enumerate(args):
                table.setItem(row, 0, QTableWidgetItem(data['code']))
                table.setItem(row, 1, QTableWidgetItem(data['date']))
                table.setItem(row, 2, QTableWidgetItem(data['organization']))
                table.setItem(row, 3, QTableWidgetItem(data['test']))
                table.setItem(row, 4, QTableWidgetItem(data['description']))
        table.setColumnWidth(0, (table.width() / 5) * 0.5)
        table.setColumnWidth(1, (table.width() / 5) * 0.5)
        table.setColumnWidth(2, table.width() / 5)
        table.setColumnWidth(3, table.width() / 5)

    def load_rows(self, event):
        """
        loads the rows of the tables
        """
        self.add_table_rows(tablename='pest_table')
        self.add_table_rows(tablename='water_table')
예제 #14
0
class RecorderClipSelectionScreen(QWidget):
    def __init__(self, hyperdeck, state, mainWindow):
        super(RecorderClipSelectionScreen, self).__init__()
        self.hyperdeck = hyperdeck
        self.state = state
        self.mainWindow = mainWindow

        self.selected_clip = None

        layout = QGridLayout()

        lblTitle = TitleLabel("Select clip")
        layout.addWidget(lblTitle, 0, 0, 1, 3)

        self.clipTable = QTableWidget()
        self.clipTable.setColumnCount(2)
        self.clipTable.setHorizontalHeaderLabels(['ID', 'Clip name'])
        self.clipTable.horizontalHeader().setStretchLastSection(True)
        self.clipTable.setSelectionBehavior(QAbstractItemView.SelectionBehavior.SelectRows)

        self.clipTable.itemSelectionChanged.connect(self._onClipSelected)

        layout.addWidget(self.clipTable, 1, 0, 1, 3)

        b = ExpandingButton()
        b.setText("Back")
        b.setIcon(QIcon(":icons/go-previous"))
        b.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon)
        b.clicked.connect(mainWindow.stepBack)
        layout.addWidget(b, 2, 0)

        btnRefresh = ExpandingButton()
        btnRefresh.setText('Refresh')
        btnRefresh.setIcon(QIcon(':icons/refresh'))
        btnRefresh.setToolButtonStyle(Qt.ToolButtonStyle.ToolButtonTextBesideIcon)

        def refresh():
            self.populateClipsList({})
            hyperdeck.broadcastClipsList()

        btnRefresh.clicked.connect(refresh)

        layout.addWidget(btnRefresh, 2, 1)

        self.btnSelect = ExpandingButton()
        self.btnSelect.setText("Cue clip")
        self.btnSelect.clicked.connect(self._cueClip)
        layout.addWidget(self.btnSelect, 2, 2)

        layout.setRowStretch(0, 0)
        layout.setRowStretch(1, 1)
        layout.setRowStretch(2, 0)

        self.setLayout(layout)

        self.populateClipsList(state.clip_listing)

    def populateClipsList(self, clipsList):
        self.selected_clip = None
        self.btnSelect.setEnabled(False)
        self.clipTable.clearContents()
        self.clipTable.setRowCount(len(clipsList))
        for idx, (clip_id, val) in enumerate(clipsList.iteritems()):
            self.clipTable.setItem(idx, 0, QTableWidgetItem(str(clip_id)))
            self.clipTable.setItem(idx, 1, QTableWidgetItem(val['name']))

    def _updateClipSelectionFromState(self, state):
        if 'clip id' in state:
            clip_id = state['clip id']
            for row in range(self.clipTable.rowCount()):
                this_id = self.clipTable.item(row, 0)
                if this_id.text() == str(clip_id):
                    self.clipTable.selectRow(row)
                    break

    def _onClipSelected(self):
        selected_items = self.clipTable.selectedItems()
        if selected_items:
            self.selected_clip = int(selected_items[0].text())
            self.btnSelect.setEnabled(True)
        else:
            self.btnSelect.setEnabled(False)

    def _cueClip(self):
        if self.selected_clip:
            self.mainWindow.stepBack()
            self.hyperdeck.gotoClip(self.selected_clip)