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_()
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
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
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()
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
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