class Ui_UpdateQuotesDlg(object): def setupUi(self, UpdateQuotesDlg): if not UpdateQuotesDlg.objectName(): UpdateQuotesDlg.setObjectName(u"UpdateQuotesDlg") UpdateQuotesDlg.setWindowModality(Qt.ApplicationModal) UpdateQuotesDlg.resize(256, 107) self.gridLayout = QGridLayout(UpdateQuotesDlg) self.gridLayout.setObjectName(u"gridLayout") self.StartDateLbl = QLabel(UpdateQuotesDlg) self.StartDateLbl.setObjectName(u"StartDateLbl") self.gridLayout.addWidget(self.StartDateLbl, 0, 0, 1, 1) self.StartDateEdit = QDateEdit(UpdateQuotesDlg) self.StartDateEdit.setObjectName(u"StartDateEdit") self.StartDateEdit.setCalendarPopup(True) self.StartDateEdit.setTimeSpec(Qt.UTC) self.gridLayout.addWidget(self.StartDateEdit, 0, 1, 1, 1) self.buttonBox = QDialogButtonBox(UpdateQuotesDlg) self.buttonBox.setObjectName(u"buttonBox") self.buttonBox.setOrientation(Qt.Horizontal) self.buttonBox.setStandardButtons(QDialogButtonBox.Cancel|QDialogButtonBox.Ok) self.gridLayout.addWidget(self.buttonBox, 2, 1, 1, 1) self.EndDateLbl = QLabel(UpdateQuotesDlg) self.EndDateLbl.setObjectName(u"EndDateLbl") self.gridLayout.addWidget(self.EndDateLbl, 1, 0, 1, 1) self.EndDateEdit = QDateEdit(UpdateQuotesDlg) self.EndDateEdit.setObjectName(u"EndDateEdit") self.EndDateEdit.setCalendarPopup(True) self.EndDateEdit.setTimeSpec(Qt.UTC) self.gridLayout.addWidget(self.EndDateEdit, 1, 1, 1, 1) self.retranslateUi(UpdateQuotesDlg) self.buttonBox.accepted.connect(UpdateQuotesDlg.accept) self.buttonBox.rejected.connect(UpdateQuotesDlg.reject) QMetaObject.connectSlotsByName(UpdateQuotesDlg) # setupUi def retranslateUi(self, UpdateQuotesDlg): UpdateQuotesDlg.setWindowTitle(QCoreApplication.translate("UpdateQuotesDlg", u"Update asset's quotes", None)) self.StartDateLbl.setText(QCoreApplication.translate("UpdateQuotesDlg", u"Start date", None)) self.StartDateEdit.setDisplayFormat(QCoreApplication.translate("UpdateQuotesDlg", u"dd/MM/yyyy", None)) self.EndDateLbl.setText(QCoreApplication.translate("UpdateQuotesDlg", u"End date", None)) self.EndDateEdit.setDisplayFormat(QCoreApplication.translate("UpdateQuotesDlg", u"dd/MM/yyyy", None))
class TradeWidget(AbstractOperationDetails): def __init__(self, parent=None): AbstractOperationDetails.__init__(self, parent) self.name = "Trade" self.date_label = QLabel(self) self.settlement_label = QLabel() self.number_label = QLabel(self) self.account_label = QLabel(self) self.symbol_label = QLabel(self) self.qty_label = QLabel(self) self.price_label = QLabel(self) self.fee_label = QLabel(self) self.comment_label = QLabel(self) self.main_label.setText(self.tr("Buy / Sell")) self.date_label.setText(self.tr("Date/Time")) self.settlement_label.setText(self.tr("Settlement")) self.number_label.setText(self.tr("#")) self.account_label.setText(self.tr("Account")) self.symbol_label.setText(self.tr("Asset")) self.qty_label.setText(self.tr("Qty")) self.price_label.setText(self.tr("Price")) self.fee_label.setText(self.tr("Fee")) self.comment_label.setText(self.tr("Note")) self.timestamp_editor = QDateTimeEdit(self) self.timestamp_editor.setCalendarPopup(True) self.timestamp_editor.setTimeSpec(Qt.UTC) self.timestamp_editor.setFixedWidth(self.timestamp_editor.fontMetrics().horizontalAdvance("00/00/0000 00:00:00") * 1.25) self.timestamp_editor.setDisplayFormat("dd/MM/yyyy hh:mm:ss") self.settlement_editor = QDateEdit(self) self.settlement_editor.setCalendarPopup(True) self.settlement_editor.setTimeSpec(Qt.UTC) self.settlement_editor.setFixedWidth(self.settlement_editor.fontMetrics().horizontalAdvance("00/00/0000") * 1.5) self.settlement_editor.setDisplayFormat("dd/MM/yyyy") self.account_widget = AccountSelector(self) self.asset_widget = AssetSelector(self) self.qty_edit = QLineEdit(self) self.qty_edit.setAlignment(Qt.AlignRight) self.price_edit = QLineEdit(self) self.price_edit.setAlignment(Qt.AlignRight) self.fee_edit = QLineEdit(self) self.fee_edit.setAlignment(Qt.AlignRight) self.number = QLineEdit(self) self.comment = QLineEdit(self) self.layout.addWidget(self.date_label, 1, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.account_label, 2, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.symbol_label, 3, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.comment_label, 4, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.timestamp_editor, 1, 1, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.account_widget, 2, 1, 1, 4) self.layout.addWidget(self.asset_widget, 3, 1, 1, 4) self.layout.addWidget(self.comment, 4, 1, 1, 4) self.layout.addWidget(self.settlement_label, 1, 2, 1, 1, Qt.AlignRight) self.layout.addWidget(self.settlement_editor, 1, 3, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.number_label, 1, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.qty_label, 2, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.price_label, 3, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.fee_label, 4, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.number, 1, 6, 1, 1) self.layout.addWidget(self.qty_edit, 2, 6, 1, 1) self.layout.addWidget(self.price_edit, 3, 6, 1, 1) self.layout.addWidget(self.fee_edit, 4, 6, 1, 1) self.layout.addWidget(self.commit_button, 0, 8, 1, 1) self.layout.addWidget(self.revert_button, 0, 9, 1, 1) self.layout.addItem(self.verticalSpacer, 6, 6, 1, 1) self.layout.addItem(self.horizontalSpacer, 1, 6, 1, 1) super()._init_db("trades") self.mapper.setItemDelegate(TradeWidgetDelegate(self.mapper)) self.account_widget.changed.connect(self.mapper.submit) self.asset_widget.changed.connect(self.mapper.submit) self.mapper.addMapping(self.timestamp_editor, self.model.fieldIndex("timestamp")) self.mapper.addMapping(self.settlement_editor, self.model.fieldIndex("settlement")) self.mapper.addMapping(self.account_widget, self.model.fieldIndex("account_id")) self.mapper.addMapping(self.asset_widget, self.model.fieldIndex("asset_id")) self.mapper.addMapping(self.number, self.model.fieldIndex("number")) self.mapper.addMapping(self.qty_edit, self.model.fieldIndex("qty")) self.mapper.addMapping(self.price_edit, self.model.fieldIndex("price")) self.mapper.addMapping(self.fee_edit, self.model.fieldIndex("fee")) self.mapper.addMapping(self.comment, self.model.fieldIndex("note")) self.model.select() def prepareNew(self, account_id): new_record = self.model.record() new_record.setNull("id") new_record.setValue("timestamp", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) new_record.setValue("settlement", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) new_record.setValue("number", '') new_record.setValue("account_id", account_id) new_record.setValue("asset_id", 0) new_record.setValue("qty", 0) new_record.setValue("price", 0) new_record.setValue("fee", 0) new_record.setValue("note", None) return new_record def copyToNew(self, row): new_record = self.model.record(row) new_record.setNull("id") new_record.setValue("timestamp", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) new_record.setValue("settlement", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) new_record.setValue("number", '') return new_record
class DividendWidget(AbstractOperationDetails): def __init__(self, parent=None): AbstractOperationDetails.__init__(self, parent) self.name = "Dividend" self.operation_type = LedgerTransaction.Dividend self.combo_model = None self.date_label = QLabel(self) self.ex_date_label = QLabel(self) self.number_label = QLabel(self) self.type_label = QLabel(self) self.account_label = QLabel(self) self.symbol_label = QLabel(self) self.amount_label = QLabel(self) self.price_label = QLabel(self) self.tax_label = QLabel(self) self.comment_label = QLabel(self) self.main_label.setText(self.tr("Dividend")) self.date_label.setText(self.tr("Date/Time")) self.ex_date_label.setText(self.tr("Ex-Date")) self.type_label.setText(self.tr("Type")) self.number_label.setText(self.tr("#")) self.account_label.setText(self.tr("Account")) self.symbol_label.setText(self.tr("Asset")) self.amount_label.setText(self.tr("Dividend")) self.price_label.setText(self.tr("Price")) self.tax_label.setText(self.tr("Tax")) self.comment_label.setText(self.tr("Note")) self.timestamp_editor = QDateTimeEdit(self) self.timestamp_editor.setCalendarPopup(True) self.timestamp_editor.setTimeSpec(Qt.UTC) self.timestamp_editor.setFixedWidth(self.timestamp_editor.fontMetrics().horizontalAdvance("00/00/0000 00:00:00") * 1.25) self.timestamp_editor.setDisplayFormat("dd/MM/yyyy hh:mm:ss") self.ex_date_editor = QDateEdit(self) self.ex_date_editor.setCalendarPopup(True) self.ex_date_editor.setTimeSpec(Qt.UTC) self.ex_date_editor.setFixedWidth(self.ex_date_editor.fontMetrics().horizontalAdvance("00/00/0000") * 1.5) self.ex_date_editor.setDisplayFormat("dd/MM/yyyy") self.type = QComboBox(self) self.account_widget = AccountSelector(self) self.asset_widget = AssetSelector(self) self.dividend_edit = QLineEdit(self) self.dividend_edit.setAlignment(Qt.AlignRight) self.price_edit = QLineEdit(self) self.price_edit.setAlignment(Qt.AlignRight) self.price_edit.setReadOnly(True) self.tax_edit = QLineEdit(self) self.tax_edit.setAlignment(Qt.AlignRight) self.number = QLineEdit(self) self.comment = QLineEdit(self) self.layout.addWidget(self.date_label, 1, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.account_label, 2, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.symbol_label, 3, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.comment_label, 4, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.timestamp_editor, 1, 1, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.account_widget, 2, 1, 1, 4) self.layout.addWidget(self.asset_widget, 3, 1, 1, 4) self.layout.addWidget(self.comment, 4, 1, 1, 8) self.layout.addWidget(self.ex_date_label, 1, 2, 1, 1, Qt.AlignRight) self.layout.addWidget(self.ex_date_editor, 1, 3, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.type_label, 1, 5, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.amount_label, 2, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.tax_label, 3, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.type, 1, 6, 1, 1) self.layout.addWidget(self.dividend_edit, 2, 6, 1, 1) self.layout.addWidget(self.tax_edit, 3, 6, 1, 1) self.layout.addWidget(self.number_label, 1, 7, 1, 1, Qt.AlignRight) self.layout.addWidget(self.price_label, 2, 7, 1, 1, Qt.AlignRight) self.layout.addWidget(self.number, 1, 8, 1, 1) self.layout.addWidget(self.price_edit, 2, 8, 1, 1) self.layout.addWidget(self.commit_button, 0, 9, 1, 1) self.layout.addWidget(self.revert_button, 0, 10, 1, 1) self.layout.addItem(self.verticalSpacer, 5, 0, 1, 1) self.layout.addItem(self.horizontalSpacer, 1, 8, 1, 1) super()._init_db("dividends") self.combo_model = QStringListModel([self.tr("N/A"), self.tr("Dividend"), self.tr("Bond Interest"), self.tr("Stock Dividend")]) self.type.setModel(self.combo_model) self.mapper.setItemDelegate(DividendWidgetDelegate(self.mapper)) self.account_widget.changed.connect(self.mapper.submit) self.asset_widget.changed.connect(self.assetChanged) self.type.currentIndexChanged.connect(self.typeChanged) self.timestamp_editor.dateTimeChanged.connect(self.refreshAssetPrice) self.mapper.addMapping(self.timestamp_editor, self.model.fieldIndex("timestamp")) self.mapper.addMapping(self.ex_date_editor, self.model.fieldIndex("ex_date")) self.mapper.addMapping(self.account_widget, self.model.fieldIndex("account_id")) self.mapper.addMapping(self.asset_widget, self.model.fieldIndex("asset_id")) self.mapper.addMapping(self.type, self.model.fieldIndex("type"), QByteArray().setRawData("currentIndex", 12)) self.mapper.addMapping(self.number, self.model.fieldIndex("number")) self.mapper.addMapping(self.dividend_edit, self.model.fieldIndex("amount")) self.mapper.addMapping(self.tax_edit, self.model.fieldIndex("tax")) self.mapper.addMapping(self.comment, self.model.fieldIndex("note")) self.model.select() @Slot() def assetChanged(self): self.mapper.submit() self.refreshAssetPrice() @Slot() def typeChanged(self, dividend_type_id): self.price_label.setVisible(dividend_type_id == Dividend.StockDividend) self.price_edit.setVisible(dividend_type_id == Dividend.StockDividend) self.refreshAssetPrice() def refreshAssetPrice(self): if self.type.currentIndex() == Dividend.StockDividend: price = JalDB().get_quote(self.asset_widget.selected_id, JalDB().get_account_currency(self.account_widget.selected_id), self.timestamp_editor.dateTime().toSecsSinceEpoch()) if price is not None: self.price_edit.setText(str(price)) self.price_edit.setStyleSheet('') self.price_edit.setToolTip("") else: self.price_edit.setText(self.tr("No quote")) self.price_edit.setStyleSheet("color: red") self.price_edit.setToolTip( self.tr("You should set quote via Data->Quotes menu for Date/Time of the dividend")) def prepareNew(self, account_id): new_record = super().prepareNew(account_id) new_record.setValue("timestamp", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) new_record.setValue("ex_date", 0) new_record.setValue("type", 0) new_record.setValue("number", '') new_record.setValue("account_id", account_id) new_record.setValue("asset_id", 0) new_record.setValue("amount", 0) new_record.setValue("tax", 0) new_record.setValue("note", None) return new_record def copyToNew(self, row): new_record = self.model.record(row) new_record.setNull("id") new_record.setValue("timestamp", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) new_record.setValue("ex_date", 0) new_record.setValue("number", '') return new_record
class DividendWidget(AbstractOperationDetails): def __init__(self, parent=None): AbstractOperationDetails.__init__(self, parent) self.name = "Dividend" self.combo_model = None self.date_label = QLabel(self) self.ex_date_label = QLabel(self) self.number_label = QLabel(self) self.type_label = QLabel(self) self.account_label = QLabel(self) self.symbol_label = QLabel(self) self.amount_label = QLabel(self) self.tax_label = QLabel(self) self.comment_label = QLabel(self) self.main_label.setText(self.tr("Dividend")) self.date_label.setText(self.tr("Date/Time")) self.ex_date_label.setText(self.tr("Ex-Date")) self.type_label.setText(self.tr("Type")) self.number_label.setText(self.tr("#")) self.account_label.setText(self.tr("Account")) self.symbol_label.setText(self.tr("Asset")) self.amount_label.setText(self.tr("Dividend")) self.tax_label.setText(self.tr("Tax")) self.comment_label.setText(self.tr("Note")) self.timestamp_editor = QDateTimeEdit(self) self.timestamp_editor.setCalendarPopup(True) self.timestamp_editor.setTimeSpec(Qt.UTC) self.timestamp_editor.setFixedWidth(self.timestamp_editor.fontMetrics().horizontalAdvance("00/00/0000 00:00:00") * 1.25) self.timestamp_editor.setDisplayFormat("dd/MM/yyyy hh:mm:ss") self.ex_date_editor = QDateEdit(self) self.ex_date_editor.setCalendarPopup(True) self.ex_date_editor.setTimeSpec(Qt.UTC) self.ex_date_editor.setFixedWidth(self.ex_date_editor.fontMetrics().horizontalAdvance("00/00/0000") * 1.5) self.ex_date_editor.setDisplayFormat("dd/MM/yyyy") self.type = QComboBox(self) self.account_widget = AccountSelector(self) self.asset_widget = AssetSelector(self) self.dividend_edit = QLineEdit(self) self.dividend_edit.setAlignment(Qt.AlignRight) self.tax_edit = QLineEdit(self) self.tax_edit.setAlignment(Qt.AlignRight) self.number = QLineEdit(self) self.comment = QLineEdit(self) self.layout.addWidget(self.date_label, 1, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.account_label, 2, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.symbol_label, 3, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.comment_label, 4, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.timestamp_editor, 1, 1, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.account_widget, 2, 1, 1, 4) self.layout.addWidget(self.asset_widget, 3, 1, 1, 4) self.layout.addWidget(self.comment, 4, 1, 1, 8) self.layout.addWidget(self.ex_date_label, 1, 2, 1, 1, Qt.AlignRight) self.layout.addWidget(self.ex_date_editor, 1, 3, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.type_label, 1, 5, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.amount_label, 2, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.tax_label, 3, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.type, 1, 6, 1, 1) self.layout.addWidget(self.dividend_edit, 2, 6, 1, 1) self.layout.addWidget(self.tax_edit, 3, 6, 1, 1) self.layout.addWidget(self.number_label, 1, 7, 1, 1, Qt.AlignRight) self.layout.addWidget(self.number, 1, 8, 1, 1) self.layout.addWidget(self.commit_button, 0, 9, 1, 1) self.layout.addWidget(self.revert_button, 0, 10, 1, 1) self.layout.addItem(self.verticalSpacer, 5, 0, 1, 1) self.layout.addItem(self.horizontalSpacer, 1, 8, 1, 1) super()._init_db("dividends") self.combo_model = QStringListModel([self.tr("N/A"), self.tr("Dividend"), self.tr("Bond Interest")]) self.type.setModel(self.combo_model) self.mapper.setItemDelegate(DividendWidgetDelegate(self.mapper)) self.account_widget.changed.connect(self.mapper.submit) self.asset_widget.changed.connect(self.mapper.submit) self.mapper.addMapping(self.timestamp_editor, self.model.fieldIndex("timestamp")) self.mapper.addMapping(self.ex_date_editor, self.model.fieldIndex("ex_date")) self.mapper.addMapping(self.account_widget, self.model.fieldIndex("account_id")) self.mapper.addMapping(self.asset_widget, self.model.fieldIndex("asset_id")) self.mapper.addMapping(self.type, self.model.fieldIndex("type"), QByteArray().setRawData("currentIndex", 12)) self.mapper.addMapping(self.number, self.model.fieldIndex("number")) self.mapper.addMapping(self.dividend_edit, self.model.fieldIndex("amount")) self.mapper.addMapping(self.tax_edit, self.model.fieldIndex("tax")) self.mapper.addMapping(self.comment, self.model.fieldIndex("note")) self.model.select() def prepareNew(self, account_id): new_record = self.model.record() new_record.setNull("id") new_record.setValue("timestamp", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) new_record.setValue("ex_date", 0) new_record.setValue("type", 0) new_record.setValue("number", '') new_record.setValue("account_id", account_id) new_record.setValue("asset_id", 0) new_record.setValue("amount", 0) new_record.setValue("tax", 0) new_record.setValue("note", None) return new_record def copyToNew(self, row): new_record = self.model.record(row) new_record.setNull("id") new_record.setValue("timestamp", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) new_record.setValue("ex_date", 0) new_record.setValue("number", '') return new_record
class Ui_HoldingsWidget(object): def setupUi(self, HoldingsWidget): if not HoldingsWidget.objectName(): HoldingsWidget.setObjectName(u"HoldingsWidget") HoldingsWidget.resize(1066, 589) self.verticalLayout = QVBoxLayout(HoldingsWidget) self.verticalLayout.setSpacing(0) self.verticalLayout.setObjectName(u"verticalLayout") self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.HoldingsParamsFrame = QFrame(HoldingsWidget) self.HoldingsParamsFrame.setObjectName(u"HoldingsParamsFrame") self.HoldingsParamsFrame.setFrameShape(QFrame.Panel) self.HoldingsParamsFrame.setFrameShadow(QFrame.Sunken) self.horizontalLayout_8 = QHBoxLayout(self.HoldingsParamsFrame) self.horizontalLayout_8.setSpacing(6) self.horizontalLayout_8.setObjectName(u"horizontalLayout_8") self.horizontalLayout_8.setContentsMargins(2, 2, 2, 2) self.HoldingsDate = QDateEdit(self.HoldingsParamsFrame) self.HoldingsDate.setObjectName(u"HoldingsDate") self.HoldingsDate.setDateTime( QDateTime(QDate(2020, 11, 24), QTime(21, 0, 0))) self.HoldingsDate.setCalendarPopup(True) self.HoldingsDate.setTimeSpec(Qt.UTC) self.horizontalLayout_8.addWidget(self.HoldingsDate) self.HoldingsCurrencyLbl = QLabel(self.HoldingsParamsFrame) self.HoldingsCurrencyLbl.setObjectName(u"HoldingsCurrencyLbl") self.horizontalLayout_8.addWidget(self.HoldingsCurrencyLbl) self.HoldingsCurrencyCombo = CurrencyComboBox(self.HoldingsParamsFrame) self.HoldingsCurrencyCombo.setObjectName(u"HoldingsCurrencyCombo") self.horizontalLayout_8.addWidget(self.HoldingsCurrencyCombo) self.horizontalSpacer = QSpacerItem(1411, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_8.addItem(self.horizontalSpacer) self.verticalLayout.addWidget(self.HoldingsParamsFrame) self.HoldingsTableView = QTreeView(HoldingsWidget) self.HoldingsTableView.setObjectName(u"HoldingsTableView") self.HoldingsTableView.setFrameShape(QFrame.Panel) self.HoldingsTableView.setAlternatingRowColors(True) self.HoldingsTableView.setAnimated(True) self.HoldingsTableView.setAllColumnsShowFocus(True) self.verticalLayout.addWidget(self.HoldingsTableView) self.retranslateUi(HoldingsWidget) QMetaObject.connectSlotsByName(HoldingsWidget) # setupUi def retranslateUi(self, HoldingsWidget): HoldingsWidget.setWindowTitle( QCoreApplication.translate("HoldingsWidget", u"Holdings", None)) self.HoldingsDate.setDisplayFormat( QCoreApplication.translate("HoldingsWidget", u"dd/MM/yyyy", None)) self.HoldingsCurrencyLbl.setText( QCoreApplication.translate("HoldingsWidget", u"Common currency:", None))
class Ui_ReBuildDialog(object): def setupUi(self, ReBuildDialog): if not ReBuildDialog.objectName(): ReBuildDialog.setObjectName(u"ReBuildDialog") ReBuildDialog.setWindowModality(Qt.ApplicationModal) ReBuildDialog.resize(268, 150) sizePolicy = QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( ReBuildDialog.sizePolicy().hasHeightForWidth()) ReBuildDialog.setSizePolicy(sizePolicy) font = QFont() font.setFamilies([u"DejaVu Sans"]) ReBuildDialog.setFont(font) self.verticalLayout = QVBoxLayout(ReBuildDialog) self.verticalLayout.setSpacing(2) self.verticalLayout.setObjectName(u"verticalLayout") self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.TypeGroup = QGroupBox(ReBuildDialog) self.TypeGroup.setObjectName(u"TypeGroup") sizePolicy1 = QSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum) sizePolicy1.setHorizontalStretch(0) sizePolicy1.setVerticalStretch(0) sizePolicy1.setHeightForWidth( self.TypeGroup.sizePolicy().hasHeightForWidth()) self.TypeGroup.setSizePolicy(sizePolicy1) self.formLayout = QFormLayout(self.TypeGroup) self.formLayout.setObjectName(u"formLayout") self.formLayout.setSizeConstraint(QLayout.SetMinimumSize) self.formLayout.setFieldGrowthPolicy(QFormLayout.FieldsStayAtSizeHint) self.formLayout.setHorizontalSpacing(15) self.formLayout.setVerticalSpacing(0) self.formLayout.setContentsMargins(2, 0, 2, 0) self.AllRadioButton = QRadioButton(self.TypeGroup) self.AllRadioButton.setObjectName(u"AllRadioButton") self.formLayout.setWidget(0, QFormLayout.LabelRole, self.AllRadioButton) self.LastRadioButton = QRadioButton(self.TypeGroup) self.LastRadioButton.setObjectName(u"LastRadioButton") self.formLayout.setWidget(1, QFormLayout.LabelRole, self.LastRadioButton) self.FrontierDateLabel = QLabel(self.TypeGroup) self.FrontierDateLabel.setObjectName(u"FrontierDateLabel") self.formLayout.setWidget(1, QFormLayout.FieldRole, self.FrontierDateLabel) self.DateRadionButton = QRadioButton(self.TypeGroup) self.DateRadionButton.setObjectName(u"DateRadionButton") self.formLayout.setWidget(2, QFormLayout.LabelRole, self.DateRadionButton) self.CustomDateEdit = QDateEdit(self.TypeGroup) self.CustomDateEdit.setObjectName(u"CustomDateEdit") self.CustomDateEdit.setCalendarPopup(True) self.CustomDateEdit.setTimeSpec(Qt.UTC) self.formLayout.setWidget(2, QFormLayout.FieldRole, self.CustomDateEdit) self.verticalLayout.addWidget(self.TypeGroup) self.FastAndDirty = QCheckBox(ReBuildDialog) self.FastAndDirty.setObjectName(u"FastAndDirty") self.FastAndDirty.setChecked(True) self.verticalLayout.addWidget(self.FastAndDirty) self.DialogButtonBox = QDialogButtonBox(ReBuildDialog) self.DialogButtonBox.setObjectName(u"DialogButtonBox") sizePolicy1.setHeightForWidth( self.DialogButtonBox.sizePolicy().hasHeightForWidth()) self.DialogButtonBox.setSizePolicy(sizePolicy1) self.DialogButtonBox.setOrientation(Qt.Horizontal) self.DialogButtonBox.setStandardButtons(QDialogButtonBox.Cancel | QDialogButtonBox.Ok) self.verticalLayout.addWidget(self.DialogButtonBox) self.retranslateUi(ReBuildDialog) self.DialogButtonBox.accepted.connect(ReBuildDialog.accept) self.DialogButtonBox.rejected.connect(ReBuildDialog.reject) QMetaObject.connectSlotsByName(ReBuildDialog) # setupUi def retranslateUi(self, ReBuildDialog): ReBuildDialog.setWindowTitle( QCoreApplication.translate("ReBuildDialog", u"Re-Build Ledger", None)) self.TypeGroup.setTitle( QCoreApplication.translate("ReBuildDialog", u"Date Range", None)) self.AllRadioButton.setText( QCoreApplication.translate("ReBuildDialog", u"&Full, from scratch", None)) self.LastRadioButton.setText( QCoreApplication.translate("ReBuildDialog", u"Since &Last actual:", None)) self.FrontierDateLabel.setText( QCoreApplication.translate("ReBuildDialog", u"FrontierDate", None)) self.DateRadionButton.setText( QCoreApplication.translate("ReBuildDialog", u"Since &Date:", None)) self.CustomDateEdit.setDisplayFormat( QCoreApplication.translate("ReBuildDialog", u"dd/MM/yyyy", None)) self.FastAndDirty.setText( QCoreApplication.translate("ReBuildDialog", u"Fast, &unreliable", None))
class DateRangeSelector(QWidget): changed = Signal(int, int) # emits signal when one or both dates were changed, "from" and "to" timestamps are sent def __init__(self, parent): QWidget.__init__(self, parent) self.report_ranges = { 'week': (self.tr("Week"), ManipulateDate.PreviousWeek), 'month': (self.tr("Month"), ManipulateDate.PreviousMonth), 'quarter': (self.tr("Quarter"), ManipulateDate.PreviousQuarter), 'year': (self.tr("Year"), ManipulateDate.PreviousYear), 'QTD': (self.tr("Quarter to date"), ManipulateDate.QuarterToDate), 'YTD': (self.tr("Year to date"), ManipulateDate.YearToDate), 'this_year': (self.tr("This year"), ManipulateDate.ThisYear), 'last_year': (self.tr("Previous year"), ManipulateDate.LastYear), 'all': (self.tr("All dates"), ManipulateDate.AllDates), } self._begin = 0 self._end = 0 self._items = [] self.changing_range = False self.layout = QHBoxLayout() self.layout.setContentsMargins(0, 0, 0, 0) self.range_combo = QComboBox(self) self.layout.addWidget(self.range_combo) self.from_label = QLabel(self.tr("From:"), parent=self) self.layout.addWidget(self.from_label) self.from_date = QDateEdit() self.from_date.setDisplayFormat("dd/MM/yyyy") self.from_date.setCalendarPopup(True) self.from_date.setTimeSpec(Qt.UTC) self.layout.addWidget(self.from_date) self.from_label = QLabel(self.tr("To:"), parent=self) self.layout.addWidget(self.from_label) self.to_date = QDateEdit() self.to_date.setDisplayFormat("dd/MM/yyyy") self.to_date.setCalendarPopup(True) self.to_date.setTimeSpec(Qt.UTC) self.layout.addWidget(self.to_date) self.setLayout(self.layout) self.setFocusProxy(self.range_combo) self.connect_signals_and_slots() def getConfig(self): return ';'.join(self._items) def setConfig(self, items_list): try: self._items = items_list.split(';') except AttributeError: self._items = [] for item in self._items: try: item_name = self.report_ranges[item][ITEM_NAME] self.range_combo.addItem(item_name, item) except KeyError: continue ItemsList = Property(str, getConfig, setConfig) def connect_signals_and_slots(self): self.range_combo.currentIndexChanged.connect(self.onRangeChange) self.from_date.dateChanged.connect(self.onFromChange) self.to_date.dateChanged.connect(self.onToChange) @Slot() def onRangeChange(self, index): item = self.range_combo.itemData(index) self._begin, self._end = self.report_ranges[item][ITEM_METHOD]() self.changing_range = True self.from_date.setDateTime(QDateTime.fromSecsSinceEpoch(self._begin, spec=Qt.UTC)) self.to_date.setDateTime(QDateTime.fromSecsSinceEpoch(self._end, spec=Qt.UTC)) self.changing_range = False self.changed.emit(self._begin, self._end) @Slot() def onFromChange(self): self._begin = self.from_date.date().startOfDay(Qt.UTC).toSecsSinceEpoch() if not self.changing_range: self.changed.emit(self._begin, self._end) @Slot() def onToChange(self): self._end = self.to_date.date().startOfDay(Qt.UTC).toSecsSinceEpoch() if not self.changing_range: self.changed.emit(self._begin, self._end) def setCurrentIndex(self, index): if index == self.range_combo.currentIndex(): self.onRangeChange(index) else: self.range_combo.setCurrentIndex(index)
class Ui_OperationsWidget(object): def setupUi(self, OperationsWidget): if not OperationsWidget.objectName(): OperationsWidget.setObjectName(u"OperationsWidget") OperationsWidget.resize(1232, 552) self.verticalLayout_4 = QVBoxLayout(OperationsWidget) self.verticalLayout_4.setSpacing(0) self.verticalLayout_4.setObjectName(u"verticalLayout_4") self.verticalLayout_4.setContentsMargins(0, 0, 0, 0) self.BalanceOperationsSplitter = QSplitter(OperationsWidget) self.BalanceOperationsSplitter.setObjectName( u"BalanceOperationsSplitter") sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.BalanceOperationsSplitter.sizePolicy().hasHeightForWidth()) self.BalanceOperationsSplitter.setSizePolicy(sizePolicy) self.BalanceOperationsSplitter.setOrientation(Qt.Horizontal) self.BalanceBox = QGroupBox(self.BalanceOperationsSplitter) self.BalanceBox.setObjectName(u"BalanceBox") sizePolicy1 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy1.setHorizontalStretch(1) sizePolicy1.setVerticalStretch(0) sizePolicy1.setHeightForWidth( self.BalanceBox.sizePolicy().hasHeightForWidth()) self.BalanceBox.setSizePolicy(sizePolicy1) self.BalanceBox.setMaximumSize(QSize(16777215, 16777215)) self.verticalLayout = QVBoxLayout(self.BalanceBox) self.verticalLayout.setObjectName(u"verticalLayout") self.verticalLayout.setContentsMargins(0, 0, 0, 0) self.BalanceConfigFrame = QFrame(self.BalanceBox) self.BalanceConfigFrame.setObjectName(u"BalanceConfigFrame") self.BalanceConfigFrame.setMinimumSize(QSize(408, 0)) self.BalanceConfigFrame.setMaximumSize(QSize(16777215, 44)) self.BalanceConfigFrame.setFrameShape(QFrame.Panel) self.BalanceConfigFrame.setFrameShadow(QFrame.Plain) self.BalanceConfigFrame.setLineWidth(0) self.horizontalLayout_2 = QHBoxLayout(self.BalanceConfigFrame) self.horizontalLayout_2.setObjectName(u"horizontalLayout_2") self.horizontalLayout_2.setContentsMargins(2, 2, 2, 2) self.BalanceDate = QDateEdit(self.BalanceConfigFrame) self.BalanceDate.setObjectName(u"BalanceDate") self.BalanceDate.setDateTime( QDateTime(QDate(2020, 11, 25), QTime(21, 0, 0))) self.BalanceDate.setCalendarPopup(True) self.BalanceDate.setTimeSpec(Qt.UTC) self.horizontalLayout_2.addWidget(self.BalanceDate) self.CurrencyLbl = QLabel(self.BalanceConfigFrame) self.CurrencyLbl.setObjectName(u"CurrencyLbl") self.CurrencyLbl.setLayoutDirection(Qt.LeftToRight) self.CurrencyLbl.setAlignment(Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter) self.horizontalLayout_2.addWidget(self.CurrencyLbl) self.BalancesCurrencyCombo = CurrencyComboBox(self.BalanceConfigFrame) self.BalancesCurrencyCombo.setObjectName(u"BalancesCurrencyCombo") self.horizontalLayout_2.addWidget(self.BalancesCurrencyCombo) self.ShowInactiveCheckBox = QCheckBox(self.BalanceConfigFrame) self.ShowInactiveCheckBox.setObjectName(u"ShowInactiveCheckBox") self.horizontalLayout_2.addWidget(self.ShowInactiveCheckBox) self.horizontalSpacer_2 = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_2.addItem(self.horizontalSpacer_2) self.verticalLayout.addWidget(self.BalanceConfigFrame) self.BalancesTableView = QTableView(self.BalanceBox) self.BalancesTableView.setObjectName(u"BalancesTableView") self.BalancesTableView.setFrameShape(QFrame.Panel) self.BalancesTableView.setEditTriggers( QAbstractItemView.EditKeyPressed | QAbstractItemView.SelectedClicked) self.BalancesTableView.setAlternatingRowColors(True) self.BalancesTableView.setSelectionMode(QAbstractItemView.NoSelection) self.BalancesTableView.setGridStyle(Qt.DotLine) self.BalancesTableView.setWordWrap(False) self.BalancesTableView.verticalHeader().setVisible(False) self.BalancesTableView.verticalHeader().setMinimumSectionSize(20) self.BalancesTableView.verticalHeader().setDefaultSectionSize(20) self.verticalLayout.addWidget(self.BalancesTableView) self.BalanceOperationsSplitter.addWidget(self.BalanceBox) self.OperationsBox = QGroupBox(self.BalanceOperationsSplitter) self.OperationsBox.setObjectName(u"OperationsBox") sizePolicy2 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy2.setHorizontalStretch(4) sizePolicy2.setVerticalStretch(0) sizePolicy2.setHeightForWidth( self.OperationsBox.sizePolicy().hasHeightForWidth()) self.OperationsBox.setSizePolicy(sizePolicy2) self.OperationsBox.setContextMenuPolicy(Qt.DefaultContextMenu) self.verticalLayout_2 = QVBoxLayout(self.OperationsBox) self.verticalLayout_2.setObjectName(u"verticalLayout_2") self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.OperationConfigFrame = QFrame(self.OperationsBox) self.OperationConfigFrame.setObjectName(u"OperationConfigFrame") self.OperationConfigFrame.setEnabled(True) self.OperationConfigFrame.setMinimumSize(QSize(0, 0)) self.OperationConfigFrame.setFrameShape(QFrame.Panel) self.OperationConfigFrame.setFrameShadow(QFrame.Plain) self.OperationConfigFrame.setLineWidth(0) self.horizontalLayout_3 = QHBoxLayout(self.OperationConfigFrame) self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") self.horizontalLayout_3.setContentsMargins(2, 2, 2, 2) self.DateRange = DateRangeSelector(self.OperationConfigFrame) self.DateRange.setObjectName(u"DateRange") self.DateRange.setProperty("ItemsList", u"week;month;quarter;year;all") self.horizontalLayout_3.addWidget(self.DateRange) self.AccountLbl = QLabel(self.OperationConfigFrame) self.AccountLbl.setObjectName(u"AccountLbl") self.horizontalLayout_3.addWidget(self.AccountLbl) self.ChooseAccountBtn = AccountButton(self.OperationConfigFrame) self.ChooseAccountBtn.setObjectName(u"ChooseAccountBtn") self.horizontalLayout_3.addWidget(self.ChooseAccountBtn) self.SearchLbl = QLabel(self.OperationConfigFrame) self.SearchLbl.setObjectName(u"SearchLbl") self.horizontalLayout_3.addWidget(self.SearchLbl) self.SearchString = QLineEdit(self.OperationConfigFrame) self.SearchString.setObjectName(u"SearchString") self.horizontalLayout_3.addWidget(self.SearchString) self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalLayout_3.addItem(self.horizontalSpacer) self.verticalLayout_2.addWidget(self.OperationConfigFrame) self.OperationsDetailsSplitter = QSplitter(self.OperationsBox) self.OperationsDetailsSplitter.setObjectName( u"OperationsDetailsSplitter") self.OperationsDetailsSplitter.setOrientation(Qt.Vertical) self.OperationsTableView = QTableView(self.OperationsDetailsSplitter) self.OperationsTableView.setObjectName(u"OperationsTableView") sizePolicy3 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) sizePolicy3.setHorizontalStretch(0) sizePolicy3.setVerticalStretch(4) sizePolicy3.setHeightForWidth( self.OperationsTableView.sizePolicy().hasHeightForWidth()) self.OperationsTableView.setSizePolicy(sizePolicy3) self.OperationsTableView.setAlternatingRowColors(True) self.OperationsTableView.setSelectionMode( QAbstractItemView.ExtendedSelection) self.OperationsTableView.setSelectionBehavior( QAbstractItemView.SelectRows) self.OperationsTableView.setWordWrap(False) self.OperationsDetailsSplitter.addWidget(self.OperationsTableView) self.OperationsTableView.verticalHeader().setVisible(False) self.OperationsTableView.verticalHeader().setMinimumSectionSize(20) self.OperationsTableView.verticalHeader().setDefaultSectionSize(20) self.OperationDetails = QFrame(self.OperationsDetailsSplitter) self.OperationDetails.setObjectName(u"OperationDetails") sizePolicy4 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy4.setHorizontalStretch(0) sizePolicy4.setVerticalStretch(1) sizePolicy4.setHeightForWidth( self.OperationDetails.sizePolicy().hasHeightForWidth()) self.OperationDetails.setSizePolicy(sizePolicy4) self.OperationDetails.setMinimumSize(QSize(0, 100)) self.OperationDetails.setMaximumSize(QSize(16777215, 300)) self.OperationDetails.setFrameShape(QFrame.Panel) self.OperationDetails.setFrameShadow(QFrame.Sunken) self.OperationDetails.setLineWidth(1) self.horizontalLayout_4 = QHBoxLayout(self.OperationDetails) self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0) self.OperationsTabs = QStackedWidget(self.OperationDetails) self.OperationsTabs.setObjectName(u"OperationsTabs") self.NoOperation = QWidget() self.NoOperation.setObjectName(u"NoOperation") self.OperationsTabs.addWidget(self.NoOperation) self.IncomeSpending = IncomeSpendingWidget() self.IncomeSpending.setObjectName(u"IncomeSpending") self.OperationsTabs.addWidget(self.IncomeSpending) self.Dividend = DividendWidget() self.Dividend.setObjectName(u"Dividend") self.OperationsTabs.addWidget(self.Dividend) self.Trade = TradeWidget() self.Trade.setObjectName(u"Trade") self.OperationsTabs.addWidget(self.Trade) self.Transfer = TransferWidget() self.Transfer.setObjectName(u"Transfer") self.OperationsTabs.addWidget(self.Transfer) self.CorporateAction = CorporateActionWidget() self.CorporateAction.setObjectName(u"CorporateAction") self.OperationsTabs.addWidget(self.CorporateAction) self.horizontalLayout_4.addWidget(self.OperationsTabs) self.OperationsButtons = QFrame(self.OperationDetails) self.OperationsButtons.setObjectName(u"OperationsButtons") self.verticalLayout_3 = QVBoxLayout(self.OperationsButtons) self.verticalLayout_3.setSpacing(2) self.verticalLayout_3.setObjectName(u"verticalLayout_3") self.verticalLayout_3.setContentsMargins(2, 2, 2, 2) self.NewOperationBtn = QPushButton(self.OperationsButtons) self.NewOperationBtn.setObjectName(u"NewOperationBtn") self.verticalLayout_3.addWidget(self.NewOperationBtn) self.CopyOperationBtn = QPushButton(self.OperationsButtons) self.CopyOperationBtn.setObjectName(u"CopyOperationBtn") self.verticalLayout_3.addWidget(self.CopyOperationBtn) self.DeleteOperationBtn = QPushButton(self.OperationsButtons) self.DeleteOperationBtn.setObjectName(u"DeleteOperationBtn") self.verticalLayout_3.addWidget(self.DeleteOperationBtn) self.verticalSpacer_4 = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.verticalLayout_3.addItem(self.verticalSpacer_4) self.horizontalLayout_4.addWidget(self.OperationsButtons) self.OperationsDetailsSplitter.addWidget(self.OperationDetails) self.verticalLayout_2.addWidget(self.OperationsDetailsSplitter) self.BalanceOperationsSplitter.addWidget(self.OperationsBox) self.verticalLayout_4.addWidget(self.BalanceOperationsSplitter) self.retranslateUi(OperationsWidget) self.OperationsTabs.setCurrentIndex(5) QMetaObject.connectSlotsByName(OperationsWidget) # setupUi def retranslateUi(self, OperationsWidget): OperationsWidget.setWindowTitle( QCoreApplication.translate("OperationsWidget", u"Operations & Balances", None)) self.BalanceBox.setTitle( QCoreApplication.translate("OperationsWidget", u"Balances", None)) self.BalanceDate.setDisplayFormat( QCoreApplication.translate("OperationsWidget", u"dd/MM/yyyy", None)) self.CurrencyLbl.setText( QCoreApplication.translate("OperationsWidget", u"Sum Currency:", None)) self.ShowInactiveCheckBox.setText( QCoreApplication.translate("OperationsWidget", u"Show &Inactive", None)) self.OperationsBox.setTitle( QCoreApplication.translate("OperationsWidget", u"Operations", None)) self.AccountLbl.setText( QCoreApplication.translate("OperationsWidget", u"Account:", None)) self.SearchLbl.setText( QCoreApplication.translate("OperationsWidget", u"Search:", None)) #if QT_CONFIG(tooltip) self.NewOperationBtn.setToolTip( QCoreApplication.translate("OperationsWidget", u"New operation", None)) #endif // QT_CONFIG(tooltip) self.NewOperationBtn.setText("") #if QT_CONFIG(tooltip) self.CopyOperationBtn.setToolTip( QCoreApplication.translate("OperationsWidget", u"Copy operation", None)) #endif // QT_CONFIG(tooltip) self.CopyOperationBtn.setText("") #if QT_CONFIG(tooltip) self.DeleteOperationBtn.setToolTip( QCoreApplication.translate("OperationsWidget", u"Delete operation", None)) #endif // QT_CONFIG(tooltip) self.DeleteOperationBtn.setText("")