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 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 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 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