예제 #1
0
class DSPToolMainWindow(QMainWindow):
    """
    """

    def __init__(self):
        QMainWindow.__init__(self)
        
        self.project = None
        
        menuBar = QMenuBar()

        self.fileMenu = DSPToolFileMenu(self)
        menuBar.addMenu(self.fileMenu)

        self.signalMenu = DSPToolSignalsMenu(self)
        menuBar.addMenu(self.signalMenu)

        self.setMenuBar(menuBar)
        
        self.mainWidget=QTableWidget()
        self.mainWidget.setRowCount(0)
        self.mainWidget.setColumnCount(0)
              
        scrollWidget = QScrollArea()
        scrollWidget.setWidget(self.mainWidget)
        scrollWidget.setWidgetResizable(True)
        
        self.setCentralWidget(scrollWidget)
        
    def refreshTable(self):
        i = 0
        for x in self.project.signalList:
            j=0
            self.mainWidget.setRowCount(self.mainWidget.rowCount()+1)
            for y in x:
                print "entrou"                
                if self.mainWidget.columnCount() < j+1: self.mainWidget.setColumnCount(self.mainWidget.columnCount()+1)
                label = y.getImage()
                self.mainWidget.setCellWidget(i,j,label)
                self.mainWidget.resizeColumnsToContents()
                self.mainWidget.resizeRowsToContents()
                j+=1            
            i+=1    
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_()
예제 #3
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
예제 #4
0
class PnLPanel(QtGui.QWidget):

    pnLColumnList = "Custody Name;Initial Position;Final Position;Cash In;Weighted Cash In; Cash Out;Weighted Cash Out;PnL;Weighted PnL;TIR;Weighted TIR".split(
        ";")

    def __init__(self):
        super(self.__class__, self).__init__()
        self.layout = QtGui.QGridLayout(self)
        self.pnlFilter = PnLFilter(self)
        self.layout.addWidget(self.pnlFilter, 1, 0, QtCore.Qt.AlignTop)
        #self.layout.setAlignment(self.pnlFilter, QtCore.Qt.AlignTop)
        #self.layout.setAlignment(self.pnlFilter, QtCore.Qt.AlignLeft)
        self.layout.addWidget(self.createPnLTable(), 1, 1, QtCore.Qt.AlignTop)
        #self.layout.setAlignment(self.pnLTableWidget, QtCore.Qt.AlignTop)
        #self.layout.setAlignment(self.pnLTableWidget, QtCore.Qt.AlignLeft)

    def createPnLTable(self):
        self.pnLTableWidget = QTableWidget()
        self.pnLTableWidget.setRowCount(6)
        self.pnLTableWidget.setColumnCount(len(self.pnLColumnList))
        self.pnLTableWidget.setEditTriggers(
            QtGui.QAbstractItemView.NoEditTriggers)
        self.pnLTableWidget.setHorizontalHeaderLabels(self.pnLColumnList)
        #self.pnLTableWidget.resizeColumnsToContents()
        self.pnLTableWidget.resizeRowsToContents()
        self.pnLTableWidget.setFixedSize(1100, 150)
        return self.pnLTableWidget

    def doSubmit(self, fromDate, toDate):
        pnlLO = Engine.buildPnlLogicObject(fromDate, toDate)
        self.renderPnlTable(pnlLO.pnlVOList)

    def renderPnlTable(self, pnlCalculationList):
        row = 0
        for pnlVO in pnlCalculationList:
            #ItemNameItem
            ItemNameItem = QTableWidgetItemString(pnlVO.itemName, False)
            self.pnLTableWidget.setItem(row,
                                        Constant.CONST_COLUMN_PNL_ITEM_NAME,
                                        ItemNameItem)
            #initialPositionItem
            initialPositionItem = QTableWidgetItemDecimal(
                pnlVO.initialPosition, False)
            self.pnLTableWidget.setItem(
                row, Constant.CONST_COLUMN_PNL_INITIAL_POSITION,
                initialPositionItem)
            #finalPositionItem
            finalPositionItem = QTableWidgetItemDecimal(
                pnlVO.finalPosition, False)
            self.pnLTableWidget.setItem(
                row, Constant.CONST_COLUMN_PNL_FINAL_POSITION,
                finalPositionItem)
            #totalCashIn
            totalCashInItem = QTableWidgetItemDecimal(pnlVO.totalCashIn, False)
            self.pnLTableWidget.setItem(row, Constant.CONST_COLUMN_PNL_CASH_IN,
                                        totalCashInItem)
            #totalWeightedCashIn
            totalWeightedCashInItem = QTableWidgetItemDecimal(
                pnlVO.totalWeightedCashIn, False)
            self.pnLTableWidget.setItem(
                row, Constant.CONST_COLUMN_PNL_WEIGHTED_CASH_IN,
                totalWeightedCashInItem)
            #totalCashOut
            totalCashOutItem = QTableWidgetItemDecimal(pnlVO.totalCashOut,
                                                       False)
            self.pnLTableWidget.setItem(row,
                                        Constant.CONST_COLUMN_PNL_CASH_OUT,
                                        totalCashOutItem)
            #totalWeightedCashOut
            totalWeightedCashOutItem = QTableWidgetItemDecimal(
                pnlVO.totalWeightedCashOut, False)
            self.pnLTableWidget.setItem(
                row, Constant.CONST_COLUMN_PNL_WEIGHTED_CASH_OUT,
                totalWeightedCashOutItem)
            #pnlAmount
            pnlAmountItem = QTableWidgetItemDecimal(pnlVO.pnlAmount, False)
            self.pnLTableWidget.setItem(row,
                                        Constant.CONST_COLUMN_PNL_PNL_AMOUNT,
                                        pnlAmountItem)
            #pnlWeightedAmount
            pnlWeightedAmountItem = QTableWidgetItemDecimal(
                pnlVO.pnlWeightedAmount, False)
            self.pnLTableWidget.setItem(
                row, Constant.CONST_COLUMN_PNL_WEIGHTED_PNL_AMOUNT,
                pnlWeightedAmountItem)
            #tir
            tirItem = QTableWidgetItemDecimal(pnlVO.tir, False)
            self.pnLTableWidget.setItem(row, Constant.CONST_COLUMN_PNL_TIR,
                                        tirItem)
            #weightedtir
            weightedTirItem = QTableWidgetItemDecimal(pnlVO.weightedTir, False)
            self.pnLTableWidget.setItem(row,
                                        Constant.CONST_COLUMN_PNL_WEIGHTED_TIR,
                                        weightedTirItem)
            row += 1
예제 #5
0
class PositionPanel(QtGui.QWidget):
    positionTableWidget = None
    summaryTable = None
    movementFilterWidget = None
    row = 0
    summaryRow = 0
    positionColumnList = "Asset Name;Position;Unit Cost;Market Price;Change%;Invested amount;Valuated amount;Tenor;Maturity Date;Gross PNL;Net PNL;Gross%PNL;Net%PNL;Realized Pnl;%Portfolio;WeightedPNL%".split(
        ";")
    summaryColumnList = "Custody;Asset type;Invested Amount;Valuated Amount;Net PnL;Net%PNL;Realized Pnl;RPnL + NPnL;%Portfolio;WeightedPNL%".split(
        ";")

    def __init__(self):
        super(self.__class__, self).__init__()
        self.layout = QtGui.QGridLayout(self)
        self.movementFilterWidget = MovementFilterWidget()
        self.layout.addWidget(self.movementFilterWidget, 1, 0)

    def clearTables(self):
        self.row = 0
        self.summaryRow = 0
        self.createTable()
        self.createSummaryTable()
        self.createGeneralInfoPanel()

    def createSummaryTable(self):
        self.summaryTableWidget = QTableWidget()
        self.summaryTableWidget.setRowCount(7)
        self.summaryTableWidget.setColumnCount(len(self.summaryColumnList))
        self.summaryTableWidget.setEditTriggers(
            QtGui.QAbstractItemView.NoEditTriggers)
        self.summaryTableWidget.setHorizontalHeaderLabels(
            self.summaryColumnList)
        #self.summaryTableWidget.setSortingEnabled(True)
        #self.summaryTableWidget.sortItems(0)
        self.summaryTableWidget.resizeColumnsToContents()
        self.summaryTableWidget.resizeRowsToContents()
        self.summaryTableWidget.setFixedSize(800, 200)
        self.layout.addWidget(self.summaryTableWidget, 1, 1)

    def createGeneralInfoPanel(self):
        self.generalInfoPanel = QWidget()
        self.generalInfoLayout = QtGui.QGridLayout(self.generalInfoPanel)
        self.lblUSDMXN = QLabel("USD/MXN")
        self.lblUSDMXN.font()
        self.lblUSDMXN.setFont(
            QtGui.QFont("MS Shell Dlg", 12, QtGui.QFont.Normal))
        self.generalInfoLayout.addWidget(self.lblUSDMXN, 1, 1)
        self.lblUSDMXNValue = QLabel("0")
        self.lblUSDMXNValue.setFont(
            QtGui.QFont("MS Shell Dlg", 12, QtGui.QFont.Bold))
        self.generalInfoLayout.addWidget(self.lblUSDMXNValue, 1, 2)
        self.generalInfoPanel.setFixedSize(200, 50)
        self.layout.addWidget(self.generalInfoPanel, 1, 2)

    def createTable(self):
        self.positionTableWidget = QTableWidget()
        self.positionTableWidget.setRowCount(27)
        self.positionTableWidget.setColumnCount(
            len(self.positionColumnList) + 1)
        self.positionTableWidget.setColumnHidden(
            Constant.CONST_COLUMN_POSITION_HIDDEN_ID, True)
        self.positionTableWidget.setEditTriggers(
            QtGui.QAbstractItemView.NoEditTriggers)
        self.positionTableWidget.setHorizontalHeaderLabels(
            self.positionColumnList)
        #self.positionTableWidget.setSortingEnabled(True)
        #self.positionTableWidget.sortItems(0)
        self.positionTableWidget.doubleClicked.connect(self.openMovementView)
        self.positionTableWidget.resizeColumnsToContents()
        self.positionTableWidget.resizeRowsToContents()
        self.layout.addWidget(self.positionTableWidget, 2, 0, 3, 3)

    def renderGeneralInfoPanel(self, usdMXNvalue):
        self.lblUSDMXNValue.setText(str(round(usdMXNvalue, 4)))
        #self.generalInfoLayout.addWidget(self.lblUSDMXNValue, 1, 2)

    def renderSummary(self, summaryDict):
        for (key, summaryItem) in sorted(summaryDict.iteritems()):
            if summaryItem.custodyName is None:
                isBold = True
            else:
                isBold = False
            #custodyName
            custodyNameItem = QTableWidgetItemString(summaryItem.custodyName,
                                                     isBold)
            self.summaryTableWidget.setItem(
                self.summaryRow,
                Constant.CONST_COLUMN_SUMMARY_CUST_CUSTODY_NAME,
                custodyNameItem)
            #assetTypeName
            assetTypeNameItem = QTableWidgetItemString(summaryItem.assetType,
                                                       isBold)
            self.summaryTableWidget.setItem(
                self.summaryRow,
                Constant.CONST_COLUMN_SUMMARY_CUST_ASSET_TYPE_NAME,
                assetTypeNameItem)
            #InvestedAmount
            investedAmountItem = QTableWidgetItemDecimal(
                summaryItem.investedAmount, isBold)
            self.summaryTableWidget.setItem(
                self.summaryRow,
                Constant.CONST_COLUMN_SUMMARY_CUST_INVESTED_AMOUNT,
                investedAmountItem)
            #valuatedAmount
            valuatedAmountItem = QTableWidgetItemDecimal(
                summaryItem.valuatedAmount, isBold)
            self.summaryTableWidget.setItem(
                self.summaryRow,
                Constant.CONST_COLUMN_SUMMARY_CUST_VALUATED_AMOUNT,
                valuatedAmountItem)
            #subTotalNetPnL
            netPnLItem = QTableWidgetItemDecimal(summaryItem.netPnL, isBold)
            self.summaryTableWidget.setItem(
                self.summaryRow, Constant.CONST_COLUMN_SUMMARY_CUST_NET_PNL,
                netPnLItem)
            #netPNLPercentage
            netPNLPercentageItem = QTableWidgetItemDecimal(
                summaryItem.getNetPnLPercentage(), isBold)
            self.summaryTableWidget.setItem(
                self.summaryRow,
                Constant.CONST_COLUMN_SUMMARY_CUST_NET_PNL_PERCENTAGE,
                netPNLPercentageItem)
            #realizedPnl
            realizedPnlItem = QTableWidgetItemDecimal(summaryItem.realizedPnl,
                                                      isBold)
            self.summaryTableWidget.setItem(
                self.summaryRow,
                Constant.CONST_COLUMN_SUMMARY_CUST_REALIZED_PNL,
                realizedPnlItem)
            #realizedPnlPlusNetPnL
            realizedPnlPlusNetPnLItem = QTableWidgetItemDecimal(
                summaryItem.realizedPnl + summaryItem.netPnL, isBold)
            self.summaryTableWidget.setItem(
                self.summaryRow,
                Constant.CONST_COLUMN_SUMMARY_CUST_REALIZED_PNL_PLUS_NET_PNL,
                realizedPnlPlusNetPnLItem)
            #positionPercentage
            positionPercentageItem = QTableWidgetItemDecimal(
                summaryItem.positionPercentage, isBold)
            self.summaryTableWidget.setItem(
                self.summaryRow,
                Constant.CONST_COLUMN_SUMMARY_CUST_POSITION_PERCENTAGE,
                positionPercentageItem)
            #weightedPnL
            weightedPnLItem = QTableWidgetItemDecimal(summaryItem.weightedPnL,
                                                      isBold)
            self.summaryTableWidget.setItem(
                self.summaryRow,
                Constant.CONST_COLUMN_SUMMARY_CUST_WEIGHTED_PNL,
                weightedPnLItem)
            self.summaryRow += 1

    def renderSubtotal(self, positionDict, assetType, isSIC):
        accValuatedAmount = Engine.getSubTotalValuatedAmount(
            positionDict, assetType, isSIC)
        accInvestedAmount = Engine.getSubTotalInvestedAmount(
            positionDict, assetType, isSIC)
        accRealizedPnl = Engine.getAccRealizedPnL(positionDict, assetType,
                                                  isSIC)
        accPositionPercentage = Engine.getAccPositionPercentage(
            positionDict, assetType, isSIC)
        accGrossPnlPercentage = Engine.getAccGrossPnlPercentage(
            positionDict, assetType, isSIC)
        accNetPnlPercentage = Engine.getAccNetPnlPercentage(
            positionDict, assetType, isSIC)
        accNetPNL = Engine.getAccNetPNL(positionDict, assetType, isSIC)
        accWeightedPNL = Engine.getAccWeightedPNL(positionDict, assetType,
                                                  isSIC)
        #Invested amount
        investedAmountItem = QTableWidgetItemDecimal(accInvestedAmount, True)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_POSITION_INVESTED_AMOUNT,
            investedAmountItem)
        #sub total valuated amount
        subTotalValuatedAmountItem = QTableWidgetItemDecimal(
            accValuatedAmount, True)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_POSITION_VALUATED_AMOUNT,
            subTotalValuatedAmountItem)
        #sub total Gross PNL
        subTotalGrossPNLItem = QTableWidgetItemDecimalColor(
            Engine.getSubtotalGrossPNL(positionDict, assetType, isSIC), True)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_POSITION_GROSS_PNL,
            subTotalGrossPNLItem)
        #sub total Net PNL
        subTotalNetPNLItem = QTableWidgetItemDecimalColor(accNetPNL, True)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_POSITION_NET_PNL,
            subTotalNetPNLItem)
        #subTotalGrossPnLPercentage
        subTotalGrossPnLPercentage = QTableWidgetItemDecimalColor(
            accGrossPnlPercentage, True)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_POSITION_GROSS_PNL_PERCENTAGE,
            subTotalGrossPnLPercentage)
        #pnLNetPercentage
        subTotalNetPnLPercentage = QTableWidgetItemDecimalColor(
            accNetPnlPercentage, True)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_POSITION_GROSS_NET_PERCENTAGE,
            subTotalNetPnLPercentage)
        #realizedPnL
        realizedPnLItem = QTableWidgetItemDecimalColor(accRealizedPnl, True)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_POSITION_REALIZED_PNL,
            realizedPnLItem)
        #positionPercentage
        positionPercentageItem = QTableWidgetItemDecimal(
            accPositionPercentage, True)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_POSITION_POSITION_PERCENTAGE,
            positionPercentageItem)
        #weightedPercentageItem
        weightedPercentageItem = QTableWidgetItemDecimal(accWeightedPNL, True)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_POSITION_WEIGHTED_PNL,
            weightedPercentageItem)
        #HiddenID
        hiddenIDItem = QTableWidgetItemDecimal(self.row, False)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_POSITION_HIDDEN_ID, hiddenIDItem)

    def renderPositions(self, positionDict, assetType, isSIC):
        positionList = Engine.getPositionByAssetType(positionDict, assetType,
                                                     isSIC)
        for position in positionList:
            print('rendering ' + position.getAssetName())
            if (position.getTotalQuantity() != 0):
                position.row = self.row
                #assetName
                assetNameItem = QTableWidgetItemString(position.getAssetName(),
                                                       False)
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_ASSET_NAME,
                    assetNameItem)
                #totalQuantity
                totalQuantityItem = QTableWidgetItemInt(
                    position.getTotalQuantity(), False)
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_QUANTITY,
                    totalQuantityItem)
                #UnitCostOrRate
                unitCostItem = QTableWidgetItemDecimal(
                    position.getUnitCostOrRate(), False)
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_PPP, unitCostItem)
                #Market price
                marketPriceItem = QTableWidgetItemDuoDecimal(
                    position.getMarketPrice(), position.getMarketPriceOrig())
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_MARKET_PRICE,
                    marketPriceItem)
                #changePercentage
                changePercentageItem = QTableWidgetItemStringPlusMinus(
                    position.changePercentage, False)
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_CHANGE_PERCENTAGE,
                    changePercentageItem)
                #Invested amount
                investedAmountItem = QTableWidgetItemDecimal(
                    position.getInvestedAmount(), False)
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_INVESTED_AMOUNT,
                    investedAmountItem)
                #Valuated amount
                valuatedAmountItem = QTableWidgetItemDuoDecimal(
                    position.getValuatedAmount(),
                    position.getValuatedAmountOrig())
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_VALUATED_AMOUNT,
                    valuatedAmountItem)
                #Tenor
                tenorItem = QTableWidgetItemDuoInt(position.tenor,
                                                   position.getElapsedDays())
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_TENOR, tenorItem)
                #Maturity Date
                maturityDateItem = QTableWidgetItemString(
                    position.getMaturityDate(), False)
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_MATURITY_DATE,
                    maturityDateItem)
                #GrossPnL
                grossPnlItem = QTableWidgetItemDecimalColor(
                    position.getGrossPnL(), False)
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_GROSS_PNL,
                    grossPnlItem)
                #netPnL
                netPnlItem = QTableWidgetItemDecimalColor(
                    position.getNetPnL(), False)
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_NET_PNL,
                    netPnlItem)
                #pnLGrossPercentage
                pnLGrossPercentageItem = QTableWidgetItemDecimalColor(
                    position.getGrossPnLPercentage(), False)
                self.positionTableWidget.setItem(
                    self.row,
                    Constant.CONST_COLUMN_POSITION_GROSS_PNL_PERCENTAGE,
                    pnLGrossPercentageItem)
                #pnLNetPercentage
                pnLNetPercentageItem = QTableWidgetItemDecimalColor(
                    position.getNetPnLPercentage(), False)
                self.positionTableWidget.setItem(
                    self.row,
                    Constant.CONST_COLUMN_POSITION_GROSS_NET_PERCENTAGE,
                    pnLNetPercentageItem)
                #realizedPnL
                realizedPnLItem = QTableWidgetItemDecimalColor(
                    position.getConsolidatedRealizedPnl(), False)
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_REALIZED_PNL,
                    realizedPnLItem)
                #positionPercentage
                positionPercentageItem = QTableWidgetItemDecimal(
                    position.getPositionPercentage(), False)
                self.positionTableWidget.setItem(
                    self.row,
                    Constant.CONST_COLUMN_POSITION_POSITION_PERCENTAGE,
                    positionPercentageItem)
                #weightedPercentageItem
                weightedPercentageItem = QTableWidgetItemDecimal(
                    position.getWeightedPnl(), False)
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_WEIGHTED_PNL,
                    weightedPercentageItem)
                #HiddenID
                hiddenIDItem = QTableWidgetItemDecimal(self.row, False)
                self.positionTableWidget.setItem(
                    self.row, Constant.CONST_COLUMN_POSITION_HIDDEN_ID,
                    hiddenIDItem)
                self.row += 1
        self.renderSubtotal(positionDict, assetType, isSIC)
        self.row += 1

    def openMovementView(self):
        assetName = self.positionTableWidget.item(
            self.positionTableWidget.currentRow(),
            Constant.CONST_COLUMN_POSITION_ASSET_NAME).text()
        movementList = Engine.getMovementListByAsset(
            assetName, (self.movementFilterWidget.dateFromDate.date()
                        ).toString("yyyy-M-dd"),
            (self.movementFilterWidget.dateToDate.date()
             ).toString("yyyy-M-dd"))
        self.movementView = MovementView(movementList)
        self.movementView.show()
예제 #6
0
class MovementView(QWidget):
    positionTableWidget = None
    row = 0
    columnList = "Asset Name;Buy Sell;Acquisition Date;Quantity;Price;Gross Amount;Net Amount;Comm %;Comm Amount; Comm VAT Amount".split(
        ";")

    def __init__(self, movementList):
        QWidget.__init__(self)
        self.layout = QtGui.QGridLayout(self)
        self.positionTableWidget = QTableWidget()
        self.resize(800, 400)
        self.positionTableWidget.setRowCount(10000)
        self.positionTableWidget.setColumnCount(len(self.columnList))
        self.positionTableWidget.setHorizontalHeaderLabels(self.columnList)
        self.positionTableWidget.resizeColumnsToContents()
        self.positionTableWidget.resizeRowsToContents()
        self.layout.addWidget(self.positionTableWidget, 1, 0)
        for (movement) in movementList:
            self.renderMovements(movement)
        self.positionTableWidget.setRowCount(self.row)

    def renderMovements(self, movement):
        #assetName
        assetNameItem = QTableWidgetItemString(movement.asset.name, False)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_MOVEMENT_ASSET_NAME, assetNameItem)
        #buysell
        buySellItem = QTableWidgetItemString(movement.buySell, False)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_MOVEMENT_BUYSELL, buySellItem)
        #acquisitionDate
        acquisitionDateItem = QTableWidgetItemString(
            movement.getAcquisitionDate(), False)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_MOVEMENT_ACQUISITION_DATE,
            acquisitionDateItem)
        #quantity
        quantityItem = QTableWidgetItemInt(movement.quantity, False)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_MOVEMENT_QUANTITY, quantityItem)
        #price
        priceItem = QTableWidgetItem6Decimal(movement.price, False)
        self.positionTableWidget.setItem(self.row,
                                         Constant.CONST_COLUMN_MOVEMENT_PRICE,
                                         priceItem)
        #grossAmount
        grossAmountItem = QTableWidgetItem6Decimal(movement.grossAmount, False)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_MOVEMENT_GROSS_AMOUNT,
            grossAmountItem)
        #netAmount
        netAmountItem = QTableWidgetItem6Decimal(movement.netAmount, False)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_MOVEMENT_NET_AMOUNT, netAmountItem)
        #commissionPercentage
        commissionPercentageItem = QTableWidgetItem6Decimal(
            movement.commissionPercentage, False)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_MOVEMENT_COMMISSION_PERCENTAGE,
            commissionPercentageItem)
        #commissionAmount
        commissionAmountItem = QTableWidgetItem6Decimal(
            movement.commissionAmount, False)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_MOVEMENT_COMMISSION_AMOUNT,
            commissionAmountItem)
        #commissionVATAmount
        commissionVATAmountItem = QTableWidgetItem6Decimal(
            movement.commissionVATAmount, False)
        self.positionTableWidget.setItem(
            self.row, Constant.CONST_COLUMN_MOVEMENT_COMMISSION_VAT_AMOUNT,
            commissionVATAmountItem)
        self.row += 1
예제 #7
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