def __init__(self, parent=None): super(WindowSelectionWidget, self).__init__(parent) self.start_dt: QDateTimeEdit = QDateTimeEdit() self.end_dt: QDateTimeEdit = QDateTimeEdit() now: datetime.datetime = datetime.datetime.now() fifteen_minutes_ago: datetime.datetime = now - datetime.timedelta( minutes=15) date_fmt: str = "yyyy-MM-dd HH:mm UTC" self.start_dt.setDisplayFormat(date_fmt) self.start_dt.setTimeSpec(PySide6.QtCore.Qt.UTC) self.end_dt.setDisplayFormat(date_fmt) self.end_dt.setTimeSpec(PySide6.QtCore.Qt.UTC) self.start_dt.setCalendarPopup(True) self.end_dt.setCalendarPopup(True) self.start_dt.setDateTime(fifteen_minutes_ago) self.end_dt.setDateTime(now) layout: QHBoxLayout = QHBoxLayout() layout.addWidget(QLabel("Start")) layout.addWidget(self.start_dt) layout.addWidget(QLabel("End")) layout.addWidget(self.end_dt) self.setLayout(layout)
def create_date_picker(text, parent): """Creates a label with the given text and an accompanying date picker""" date_edit = QDateTimeEdit(QDate.currentDate(), parent) date_edit.setMaximumDate(QDate.currentDate()) date_edit.setDisplayFormat(DATE_FORMAT) date_edit.setCalendarPopup(True) date_edit.setDisabled(True) date_edit_label = QLabel(text, date_edit) date_edit_label.setBuddy(date_edit) return (date_edit, date_edit_label)
def __init__( self, parent: QWidget ) -> None: super().__init__(parent) self.date_time_edit = QDateTimeEdit() self.date_time_edit.setDateTime(QDateTime.currentDateTime()) self.button_box = QDialogButtonBox(QDialogButtonBox.Save | QDialogButtonBox.Cancel) self.button_box.accepted.connect(self.accept) self.button_box.rejected.connect(self.reject) self.main_layout = QVBoxLayout() self.main_layout.addWidget(self.date_time_edit) self.main_layout.addWidget(self.button_box) self.setLayout(self.main_layout) self.setWindowTitle('Report done')
def __init__(self, parent=None): AbstractOperationDetails.__init__(self, parent) self.name = "Transfer" self.operation_type = LedgerTransaction.Transfer self.from_date_label = QLabel(self) self.from_account_label = QLabel(self) self.from_amount_label = QLabel(self) self.to_date_label = QLabel(self) self.to_account_label = QLabel(self) self.to_amount_label = QLabel(self) self.fee_account_label = QLabel(self) self.fee_amount_label = QLabel(self) self.comment_label = QLabel(self) self.arrow_account = QLabel(self) self.copy_date_btn = QPushButton(self) self.copy_amount_btn = QPushButton(self) self.main_label.setText(self.tr("Transfer")) self.from_date_label.setText(self.tr("Date/Time")) self.from_account_label.setText(self.tr("From")) self.from_amount_label.setText(self.tr("Amount")) self.to_date_label.setText(self.tr("Date/Time")) self.to_account_label.setText(self.tr("To")) self.to_amount_label.setText(self.tr("Amount")) self.fee_account_label.setText(self.tr("Fee from")) self.fee_amount_label.setText(self.tr("Fee amount")) self.comment_label.setText(self.tr("Note")) self.arrow_account.setText(" ➜ ") self.copy_date_btn.setText("➜") self.copy_date_btn.setFixedWidth( self.copy_date_btn.fontMetrics().horizontalAdvance("XXXX")) self.copy_amount_btn.setText("➜") self.copy_amount_btn.setFixedWidth( self.copy_amount_btn.fontMetrics().horizontalAdvance("XXXX")) self.withdrawal_timestamp = QDateTimeEdit(self) self.withdrawal_timestamp.setCalendarPopup(True) self.withdrawal_timestamp.setTimeSpec(Qt.UTC) self.withdrawal_timestamp.setFixedWidth( self.withdrawal_timestamp.fontMetrics().horizontalAdvance( "00/00/0000 00:00:00") * 1.25) self.withdrawal_timestamp.setDisplayFormat("dd/MM/yyyy hh:mm:ss") self.deposit_timestamp = QDateTimeEdit(self) self.deposit_timestamp.setCalendarPopup(True) self.deposit_timestamp.setTimeSpec(Qt.UTC) self.deposit_timestamp.setFixedWidth( self.deposit_timestamp.fontMetrics().horizontalAdvance( "00/00/0000 00:00:00") * 1.25) self.deposit_timestamp.setDisplayFormat("dd/MM/yyyy hh:mm:ss") self.from_account_widget = AccountSelector(self) self.to_account_widget = AccountSelector(self) self.fee_account_widget = AccountSelector(self) self.withdrawal = QLineEdit(self) self.withdrawal.setAlignment(Qt.AlignRight) self.deposit = QLineEdit(self) self.deposit.setAlignment(Qt.AlignRight) self.fee = QLineEdit(self) self.fee.setAlignment(Qt.AlignRight) self.comment = QLineEdit(self) self.layout.addWidget(self.from_date_label, 1, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.from_account_label, 2, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.from_amount_label, 3, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.comment_label, 5, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.withdrawal_timestamp, 1, 1, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.from_account_widget, 2, 1, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.withdrawal, 3, 1, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.comment, 5, 1, 1, 4) self.layout.addWidget(self.copy_date_btn, 1, 2, 1, 1) self.layout.addWidget(self.arrow_account, 2, 2, 1, 1, Qt.AlignCenter) self.layout.addWidget(self.copy_amount_btn, 3, 2, 1, 1) self.layout.addWidget(self.to_date_label, 1, 3, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.to_account_label, 2, 3, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.to_amount_label, 3, 3, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.fee_account_label, 4, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.fee_amount_label, 4, 3, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.deposit_timestamp, 1, 4, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.to_account_widget, 2, 4, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.deposit, 3, 4, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.fee_account_widget, 4, 1, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.fee, 4, 4, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.commit_button, 0, 6, 1, 1) self.layout.addWidget(self.revert_button, 0, 7, 1, 1) self.layout.addItem(self.verticalSpacer, 6, 0, 1, 1) self.layout.addItem(self.horizontalSpacer, 1, 5, 1, 1) self.copy_date_btn.clicked.connect(self.onCopyDate) self.copy_amount_btn.clicked.connect(self.onCopyAmount) super()._init_db("transfers") self.mapper.setItemDelegate(TransferWidgetDelegate(self.mapper)) self.from_account_widget.changed.connect(self.mapper.submit) self.to_account_widget.changed.connect(self.mapper.submit) self.fee_account_widget.changed.connect(self.mapper.submit) self.mapper.addMapping(self.withdrawal_timestamp, self.model.fieldIndex("withdrawal_timestamp")) self.mapper.addMapping(self.from_account_widget, self.model.fieldIndex("withdrawal_account")) self.mapper.addMapping(self.withdrawal, self.model.fieldIndex("withdrawal")) self.mapper.addMapping(self.deposit_timestamp, self.model.fieldIndex("deposit_timestamp")) self.mapper.addMapping(self.to_account_widget, self.model.fieldIndex("deposit_account")) self.mapper.addMapping(self.deposit, self.model.fieldIndex("deposit")) self.mapper.addMapping(self.fee_account_widget, self.model.fieldIndex("fee_account")) self.mapper.addMapping(self.fee, self.model.fieldIndex("fee")) self.mapper.addMapping(self.comment, self.model.fieldIndex("note")) self.model.select()
class TransferWidget(AbstractOperationDetails): def __init__(self, parent=None): AbstractOperationDetails.__init__(self, parent) self.name = "Transfer" self.operation_type = LedgerTransaction.Transfer self.from_date_label = QLabel(self) self.from_account_label = QLabel(self) self.from_amount_label = QLabel(self) self.to_date_label = QLabel(self) self.to_account_label = QLabel(self) self.to_amount_label = QLabel(self) self.fee_account_label = QLabel(self) self.fee_amount_label = QLabel(self) self.comment_label = QLabel(self) self.arrow_account = QLabel(self) self.copy_date_btn = QPushButton(self) self.copy_amount_btn = QPushButton(self) self.main_label.setText(self.tr("Transfer")) self.from_date_label.setText(self.tr("Date/Time")) self.from_account_label.setText(self.tr("From")) self.from_amount_label.setText(self.tr("Amount")) self.to_date_label.setText(self.tr("Date/Time")) self.to_account_label.setText(self.tr("To")) self.to_amount_label.setText(self.tr("Amount")) self.fee_account_label.setText(self.tr("Fee from")) self.fee_amount_label.setText(self.tr("Fee amount")) self.comment_label.setText(self.tr("Note")) self.arrow_account.setText(" ➜ ") self.copy_date_btn.setText("➜") self.copy_date_btn.setFixedWidth( self.copy_date_btn.fontMetrics().horizontalAdvance("XXXX")) self.copy_amount_btn.setText("➜") self.copy_amount_btn.setFixedWidth( self.copy_amount_btn.fontMetrics().horizontalAdvance("XXXX")) self.withdrawal_timestamp = QDateTimeEdit(self) self.withdrawal_timestamp.setCalendarPopup(True) self.withdrawal_timestamp.setTimeSpec(Qt.UTC) self.withdrawal_timestamp.setFixedWidth( self.withdrawal_timestamp.fontMetrics().horizontalAdvance( "00/00/0000 00:00:00") * 1.25) self.withdrawal_timestamp.setDisplayFormat("dd/MM/yyyy hh:mm:ss") self.deposit_timestamp = QDateTimeEdit(self) self.deposit_timestamp.setCalendarPopup(True) self.deposit_timestamp.setTimeSpec(Qt.UTC) self.deposit_timestamp.setFixedWidth( self.deposit_timestamp.fontMetrics().horizontalAdvance( "00/00/0000 00:00:00") * 1.25) self.deposit_timestamp.setDisplayFormat("dd/MM/yyyy hh:mm:ss") self.from_account_widget = AccountSelector(self) self.to_account_widget = AccountSelector(self) self.fee_account_widget = AccountSelector(self) self.withdrawal = QLineEdit(self) self.withdrawal.setAlignment(Qt.AlignRight) self.deposit = QLineEdit(self) self.deposit.setAlignment(Qt.AlignRight) self.fee = QLineEdit(self) self.fee.setAlignment(Qt.AlignRight) self.comment = QLineEdit(self) self.layout.addWidget(self.from_date_label, 1, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.from_account_label, 2, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.from_amount_label, 3, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.comment_label, 5, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.withdrawal_timestamp, 1, 1, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.from_account_widget, 2, 1, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.withdrawal, 3, 1, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.comment, 5, 1, 1, 4) self.layout.addWidget(self.copy_date_btn, 1, 2, 1, 1) self.layout.addWidget(self.arrow_account, 2, 2, 1, 1, Qt.AlignCenter) self.layout.addWidget(self.copy_amount_btn, 3, 2, 1, 1) self.layout.addWidget(self.to_date_label, 1, 3, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.to_account_label, 2, 3, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.to_amount_label, 3, 3, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.fee_account_label, 4, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.fee_amount_label, 4, 3, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.deposit_timestamp, 1, 4, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.to_account_widget, 2, 4, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.deposit, 3, 4, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.fee_account_widget, 4, 1, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.fee, 4, 4, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.commit_button, 0, 6, 1, 1) self.layout.addWidget(self.revert_button, 0, 7, 1, 1) self.layout.addItem(self.verticalSpacer, 6, 0, 1, 1) self.layout.addItem(self.horizontalSpacer, 1, 5, 1, 1) self.copy_date_btn.clicked.connect(self.onCopyDate) self.copy_amount_btn.clicked.connect(self.onCopyAmount) super()._init_db("transfers") self.mapper.setItemDelegate(TransferWidgetDelegate(self.mapper)) self.from_account_widget.changed.connect(self.mapper.submit) self.to_account_widget.changed.connect(self.mapper.submit) self.fee_account_widget.changed.connect(self.mapper.submit) self.mapper.addMapping(self.withdrawal_timestamp, self.model.fieldIndex("withdrawal_timestamp")) self.mapper.addMapping(self.from_account_widget, self.model.fieldIndex("withdrawal_account")) self.mapper.addMapping(self.withdrawal, self.model.fieldIndex("withdrawal")) self.mapper.addMapping(self.deposit_timestamp, self.model.fieldIndex("deposit_timestamp")) self.mapper.addMapping(self.to_account_widget, self.model.fieldIndex("deposit_account")) self.mapper.addMapping(self.deposit, self.model.fieldIndex("deposit")) self.mapper.addMapping(self.fee_account_widget, self.model.fieldIndex("fee_account")) self.mapper.addMapping(self.fee, self.model.fieldIndex("fee")) self.mapper.addMapping(self.comment, self.model.fieldIndex("note")) self.model.select() @Slot() def saveChanges(self): record = self.model.record(0) # Set related fields NULL if we don't have fee. This is required for correct transfer processing fee_amount = record.value(self.model.fieldIndex("fee")) if not fee_amount: fee_amount = 0 if abs(float(fee_amount)) < Setup.CALC_TOLERANCE: self.model.setData( self.model.index(0, self.model.fieldIndex("fee_account")), None) self.model.setData( self.model.index(0, self.model.fieldIndex("fee")), None) super().saveChanges() def prepareNew(self, account_id): new_record = super().prepareNew(account_id) new_record.setValue( "withdrawal_timestamp", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) new_record.setValue("withdrawal_account", account_id) new_record.setValue("withdrawal", 0) new_record.setValue( "deposit_timestamp", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) new_record.setValue("deposit_account", 0) new_record.setValue("deposit", 0) new_record.setValue("fee_account", 0) new_record.setValue("fee", 0) new_record.setValue("asset", None) 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( "withdrawal_timestamp", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) new_record.setValue( "deposit_timestamp", int(datetime.now().replace(tzinfo=tz.tzutc()).timestamp())) return new_record @Slot() def onCopyDate(self): self.deposit_timestamp.setDateTime( self.withdrawal_timestamp.dateTime()) # mapper.submit() isn't needed here as 'changed' signal of 'deposit_timestamp' is linked with it @Slot() def onCopyAmount(self): self.deposit.setText(self.withdrawal.text()) self.mapper.submit()
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 __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()
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
def __init__(self, parent=None): AbstractOperationDetails.__init__(self, parent) self.name = "Corporate action" self.combo_model = None self.date_label = QLabel(self) self.account_label = QLabel(self) self.type_label = QLabel(self) self.number_label = QLabel(self) self.before_label = QLabel(self) self.asset_b_label = QLabel(self) self.qty_b_label = QLabel(self) self.after_label = QLabel(self) self.asset_a_label = QLabel(self) self.qty_a_label = QLabel(self) self.ratio_label = QLabel(self) self.comment_label = QLabel(self) self.arrow_asset = QLabel(self) self.arrow_amount = QLabel(self) self.main_label.setText(self.tr("Corporate Action")) self.date_label.setText(self.tr("Date/Time")) self.account_label.setText(self.tr("Account")) self.type_label.setText(self.tr("Type")) self.number_label.setText(self.tr("#")) self.asset_b_label.setText(self.tr("Asset")) self.qty_b_label.setText(self.tr("Qty")) self.asset_a_label.setText(self.tr("Asset")) self.qty_a_label.setText(self.tr("Qty")) self.ratio_label.setText(self.tr("% of basis")) self.comment_label.setText(self.tr("Note")) self.arrow_asset.setText(" ➜ ") self.arrow_amount.setText(" ➜ ") 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.type = QComboBox(self) self.account_widget = AccountSelector(self) self.asset_b_widget = AssetSelector(self) self.asset_a_widget = AssetSelector(self) self.qty_b_edit = QLineEdit(self) self.qty_a_edit = QLineEdit(self) self.ratio_edit = QLineEdit(self) self.number = QLineEdit(self) self.comment = QLineEdit(self) self.layout.addWidget(self.date_label, 1, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.type_label, 2, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.number_label, 3, 0, 1, 1, Qt.AlignRight) self.layout.addWidget(self.comment_label, 5, 0, 1, 6, Qt.AlignLeft) self.layout.addWidget(self.timestamp_editor, 1, 1, 1, 1) self.layout.addWidget(self.type, 2, 1, 1, 1) self.layout.addWidget(self.number, 3, 1, 1, 1) self.layout.addWidget(self.comment, 5, 1, 1, 6) self.layout.addWidget(self.account_label, 1, 2, 1, 1, Qt.AlignRight) self.layout.addWidget(self.asset_b_label, 2, 2, 1, 1, Qt.AlignRight) self.layout.addWidget(self.qty_b_label, 3, 2, 1, 1, Qt.AlignRight) self.layout.addWidget(self.account_widget, 1, 3, 1, 4) self.layout.addWidget(self.asset_b_widget, 2, 3, 1, 1) self.layout.addWidget(self.qty_b_edit, 3, 3, 1, 1) self.layout.addWidget(self.arrow_asset, 2, 4, 1, 1) self.layout.addWidget(self.arrow_amount, 3, 4, 1, 1) self.layout.addWidget(self.asset_a_label, 2, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.qty_a_label, 3, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.ratio_label, 4, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.asset_a_widget, 2, 6, 1, 1) self.layout.addWidget(self.qty_a_edit, 3, 6, 1, 1) self.layout.addWidget(self.ratio_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, 0, 1, 1) self.layout.addItem(self.horizontalSpacer, 1, 7, 1, 1) super()._init_db("corp_actions") self.combo_model = QStringListModel([ self.tr("N/A"), self.tr("Merger"), self.tr("Spin-Off"), self.tr("Symbol change"), self.tr("Split"), self.tr("Stock dividend") ]) self.type.setModel(self.combo_model) self.mapper.setItemDelegate(CorporateActionWidgetDelegate(self.mapper)) self.account_widget.changed.connect(self.mapper.submit) self.asset_b_widget.changed.connect(self.mapper.submit) self.asset_a_widget.changed.connect(self.mapper.submit) self.mapper.addMapping(self.timestamp_editor, self.model.fieldIndex("timestamp")) self.mapper.addMapping(self.account_widget, self.model.fieldIndex("account_id")) self.mapper.addMapping(self.asset_b_widget, self.model.fieldIndex("asset_id")) self.mapper.addMapping(self.asset_a_widget, self.model.fieldIndex("asset_id_new")) self.mapper.addMapping(self.number, self.model.fieldIndex("number")) self.mapper.addMapping(self.qty_b_edit, self.model.fieldIndex("qty")) self.mapper.addMapping(self.qty_a_edit, self.model.fieldIndex("qty_new")) self.mapper.addMapping(self.ratio_edit, self.model.fieldIndex("basis_ratio")) self.mapper.addMapping(self.comment, self.model.fieldIndex("note")) self.mapper.addMapping(self.type, self.model.fieldIndex("type"), QByteArray().setRawData("currentIndex", 12)) self.model.select()
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
def setupUi(self, ImportSlipDlg): if not ImportSlipDlg.objectName(): ImportSlipDlg.setObjectName(u"ImportSlipDlg") ImportSlipDlg.resize(850, 587) self.verticalLayout = QVBoxLayout(ImportSlipDlg) self.verticalLayout.setSpacing(6) self.verticalLayout.setObjectName(u"verticalLayout") self.verticalLayout.setContentsMargins(2, 2, 2, 2) self.InputFrame = QFrame(ImportSlipDlg) self.InputFrame.setObjectName(u"InputFrame") sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Maximum) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.InputFrame.sizePolicy().hasHeightForWidth()) self.InputFrame.setSizePolicy(sizePolicy) self.InputFrame.setFrameShape(QFrame.NoFrame) self.InputFrame.setFrameShadow(QFrame.Plain) self.horizontalLayout_3 = QHBoxLayout(self.InputFrame) self.horizontalLayout_3.setSpacing(2) self.horizontalLayout_3.setObjectName(u"horizontalLayout_3") self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0) self.QRGroup = QGroupBox(self.InputFrame) self.QRGroup.setObjectName(u"QRGroup") sizePolicy1 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Preferred) sizePolicy1.setHorizontalStretch(0) sizePolicy1.setVerticalStretch(0) sizePolicy1.setHeightForWidth( self.QRGroup.sizePolicy().hasHeightForWidth()) self.QRGroup.setSizePolicy(sizePolicy1) self.QRGroup.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignVCenter) self.verticalLayout_3 = QVBoxLayout(self.QRGroup) self.verticalLayout_3.setSpacing(6) self.verticalLayout_3.setObjectName(u"verticalLayout_3") self.verticalLayout_3.setContentsMargins(2, 2, 2, 2) self.GetQRfromCameraBtn = QPushButton(self.QRGroup) self.GetQRfromCameraBtn.setObjectName(u"GetQRfromCameraBtn") self.verticalLayout_3.addWidget(self.GetQRfromCameraBtn) self.LoadQRfromFileBtn = QPushButton(self.QRGroup) self.LoadQRfromFileBtn.setObjectName(u"LoadQRfromFileBtn") self.verticalLayout_3.addWidget(self.LoadQRfromFileBtn) self.GetQRfromClipboardBtn = QPushButton(self.QRGroup) self.GetQRfromClipboardBtn.setObjectName(u"GetQRfromClipboardBtn") self.verticalLayout_3.addWidget(self.GetQRfromClipboardBtn) self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding) self.verticalLayout_3.addItem(self.verticalSpacer) self.horizontalLayout_3.addWidget(self.QRGroup) self.SlipDataGroup = QGroupBox(self.InputFrame) self.SlipDataGroup.setObjectName(u"SlipDataGroup") sizePolicy1.setHeightForWidth( self.SlipDataGroup.sizePolicy().hasHeightForWidth()) self.SlipDataGroup.setSizePolicy(sizePolicy1) self.gridLayout_2 = QGridLayout(self.SlipDataGroup) self.gridLayout_2.setObjectName(u"gridLayout_2") self.gridLayout_2.setContentsMargins(2, 2, 2, 2) self.GetSlipBtn = QPushButton(self.SlipDataGroup) self.GetSlipBtn.setObjectName(u"GetSlipBtn") self.gridLayout_2.addWidget(self.GetSlipBtn, 7, 1, 1, 1) self.AmountLbl = QLabel(self.SlipDataGroup) self.AmountLbl.setObjectName(u"AmountLbl") self.gridLayout_2.addWidget(self.AmountLbl, 0, 2, 1, 1) self.SlipTimstamp = QDateTimeEdit(self.SlipDataGroup) self.SlipTimstamp.setObjectName(u"SlipTimstamp") self.SlipTimstamp.setTimeSpec(Qt.UTC) self.gridLayout_2.addWidget(self.SlipTimstamp, 0, 1, 1, 1) self.TimestampLbl = QLabel(self.SlipDataGroup) self.TimestampLbl.setObjectName(u"TimestampLbl") self.gridLayout_2.addWidget(self.TimestampLbl, 0, 0, 1, 1) self.FDlbl = QLabel(self.SlipDataGroup) self.FDlbl.setObjectName(u"FDlbl") self.gridLayout_2.addWidget(self.FDlbl, 2, 0, 1, 1) self.SlipAmount = QLineEdit(self.SlipDataGroup) self.SlipAmount.setObjectName(u"SlipAmount") self.gridLayout_2.addWidget(self.SlipAmount, 0, 3, 1, 1) self.FP = QLineEdit(self.SlipDataGroup) self.FP.setObjectName(u"FP") self.gridLayout_2.addWidget(self.FP, 2, 3, 1, 1) self.FD = QLineEdit(self.SlipDataGroup) self.FD.setObjectName(u"FD") self.gridLayout_2.addWidget(self.FD, 2, 1, 1, 1) self.FNlbl = QLabel(self.SlipDataGroup) self.FNlbl.setObjectName(u"FNlbl") self.gridLayout_2.addWidget(self.FNlbl, 4, 0, 1, 1) self.DummyLbl = QLabel(self.SlipDataGroup) self.DummyLbl.setObjectName(u"DummyLbl") self.gridLayout_2.addWidget(self.DummyLbl, 7, 0, 1, 1) self.SlipTypeLbl = QLabel(self.SlipDataGroup) self.SlipTypeLbl.setObjectName(u"SlipTypeLbl") self.gridLayout_2.addWidget(self.SlipTypeLbl, 4, 2, 1, 1) self.FN = QLineEdit(self.SlipDataGroup) self.FN.setObjectName(u"FN") self.gridLayout_2.addWidget(self.FN, 4, 1, 1, 1) self.LoadJSONfromFileBtn = QPushButton(self.SlipDataGroup) self.LoadJSONfromFileBtn.setObjectName(u"LoadJSONfromFileBtn") self.gridLayout_2.addWidget(self.LoadJSONfromFileBtn, 7, 3, 1, 1) self.FPlbl = QLabel(self.SlipDataGroup) self.FPlbl.setObjectName(u"FPlbl") self.gridLayout_2.addWidget(self.FPlbl, 2, 2, 1, 1) self.line = QFrame(self.SlipDataGroup) self.line.setObjectName(u"line") self.line.setFrameShape(QFrame.HLine) self.line.setFrameShadow(QFrame.Sunken) self.gridLayout_2.addWidget(self.line, 5, 0, 1, 4) self.SlipType = QComboBox(self.SlipDataGroup) self.SlipType.addItem("") self.SlipType.addItem("") self.SlipType.setObjectName(u"SlipType") self.gridLayout_2.addWidget(self.SlipType, 4, 3, 1, 1) self.horizontalLayout_3.addWidget(self.SlipDataGroup) self.CameraGroup = QGroupBox(self.InputFrame) self.CameraGroup.setObjectName(u"CameraGroup") self.verticalLayout_2 = QVBoxLayout(self.CameraGroup) self.verticalLayout_2.setSpacing(2) self.verticalLayout_2.setObjectName(u"verticalLayout_2") self.verticalLayout_2.setContentsMargins(2, 2, 2, 2) self.ScannerQR = QRScanner(self.CameraGroup) self.ScannerQR.setObjectName(u"ScannerQR") sizePolicy2 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding) sizePolicy2.setHorizontalStretch(0) sizePolicy2.setVerticalStretch(0) sizePolicy2.setHeightForWidth( self.ScannerQR.sizePolicy().hasHeightForWidth()) self.ScannerQR.setSizePolicy(sizePolicy2) self.verticalLayout_2.addWidget(self.ScannerQR) self.CameraBtnFrame = QFrame(self.CameraGroup) self.CameraBtnFrame.setObjectName(u"CameraBtnFrame") self.CameraBtnFrame.setFrameShape(QFrame.NoFrame) self.CameraBtnFrame.setFrameShadow(QFrame.Plain) self.horizontalLayout_5 = QHBoxLayout(self.CameraBtnFrame) self.horizontalLayout_5.setSpacing(2) self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") self.horizontalLayout_5.setContentsMargins(0, 0, 0, 0) self.StopCameraBtn = QPushButton(self.CameraBtnFrame) self.StopCameraBtn.setObjectName(u"StopCameraBtn") self.horizontalLayout_5.addWidget(self.StopCameraBtn) self.verticalLayout_2.addWidget(self.CameraBtnFrame) self.horizontalLayout_3.addWidget(self.CameraGroup) self.verticalLayout.addWidget(self.InputFrame) self.SlipGroup = QGroupBox(ImportSlipDlg) self.SlipGroup.setObjectName(u"SlipGroup") sizePolicy2.setHeightForWidth( self.SlipGroup.sizePolicy().hasHeightForWidth()) self.SlipGroup.setSizePolicy(sizePolicy2) self.gridLayout = QGridLayout(self.SlipGroup) self.gridLayout.setObjectName(u"gridLayout") self.gridLayout.setContentsMargins(2, 2, 2, 2) self.SlipDateTime = QDateTimeEdit(self.SlipGroup) self.SlipDateTime.setObjectName(u"SlipDateTime") self.SlipDateTime.setTimeSpec(Qt.UTC) self.gridLayout.addWidget(self.SlipDateTime, 2, 1, 1, 1) self.DateTimeLbl = QLabel(self.SlipGroup) self.DateTimeLbl.setObjectName(u"DateTimeLbl") self.gridLayout.addWidget(self.DateTimeLbl, 1, 1, 1, 1) self.CorrespondenceLbl = QLabel(self.SlipGroup) self.CorrespondenceLbl.setObjectName(u"CorrespondenceLbl") self.gridLayout.addWidget(self.CorrespondenceLbl, 3, 2, 1, 1) self.PeerEdit = PeerSelector(self.SlipGroup) self.PeerEdit.setObjectName(u"PeerEdit") self.gridLayout.addWidget(self.PeerEdit, 3, 3, 1, 1) self.PeerLbl = QLabel(self.SlipGroup) self.PeerLbl.setObjectName(u"PeerLbl") self.gridLayout.addWidget(self.PeerLbl, 3, 0, 1, 1) self.SlipShopName = QLineEdit(self.SlipGroup) self.SlipShopName.setObjectName(u"SlipShopName") self.SlipShopName.setEnabled(False) self.gridLayout.addWidget(self.SlipShopName, 3, 1, 1, 1) self.LinesLbl = QLabel(self.SlipGroup) self.LinesLbl.setObjectName(u"LinesLbl") self.LinesLbl.setAlignment(Qt.AlignLeading | Qt.AlignLeft | Qt.AlignTop) self.gridLayout.addWidget(self.LinesLbl, 4, 0, 1, 1) self.AccountLbl = QLabel(self.SlipGroup) self.AccountLbl.setObjectName(u"AccountLbl") self.gridLayout.addWidget(self.AccountLbl, 1, 3, 1, 1) self.AccountEdit = AccountSelector(self.SlipGroup) self.AccountEdit.setObjectName(u"AccountEdit") self.gridLayout.addWidget(self.AccountEdit, 2, 3, 1, 1) self.LinesTableView = QTableView(self.SlipGroup) self.LinesTableView.setObjectName(u"LinesTableView") self.LinesTableView.verticalHeader().setVisible(False) self.LinesTableView.verticalHeader().setMinimumSectionSize(20) self.LinesTableView.verticalHeader().setDefaultSectionSize(20) self.gridLayout.addWidget(self.LinesTableView, 4, 1, 1, 4) self.AssignCategoryBtn = QPushButton(self.SlipGroup) self.AssignCategoryBtn.setObjectName(u"AssignCategoryBtn") self.gridLayout.addWidget(self.AssignCategoryBtn, 2, 4, 1, 1) self.AssignTagBtn = QPushButton(self.SlipGroup) self.AssignTagBtn.setObjectName(u"AssignTagBtn") self.gridLayout.addWidget(self.AssignTagBtn, 3, 4, 1, 1) self.verticalLayout.addWidget(self.SlipGroup) self.DialogButtonsFrame = QFrame(ImportSlipDlg) self.DialogButtonsFrame.setObjectName(u"DialogButtonsFrame") self.DialogButtonsFrame.setFrameShape(QFrame.NoFrame) self.DialogButtonsFrame.setFrameShadow(QFrame.Plain) self.horizontalLayout_4 = QHBoxLayout(self.DialogButtonsFrame) self.horizontalLayout_4.setObjectName(u"horizontalLayout_4") self.horizontalLayout_4.setContentsMargins(2, 2, 2, 2) self.ClearBtn = QPushButton(self.DialogButtonsFrame) self.ClearBtn.setObjectName(u"ClearBtn") self.ClearBtn.setEnabled(True) self.horizontalLayout_4.addWidget(self.ClearBtn) self.AddOperationBtn = QPushButton(self.DialogButtonsFrame) self.AddOperationBtn.setObjectName(u"AddOperationBtn") self.AddOperationBtn.setEnabled(True) self.horizontalLayout_4.addWidget(self.AddOperationBtn) self.CloseBtn = QPushButton(self.DialogButtonsFrame) self.CloseBtn.setObjectName(u"CloseBtn") self.horizontalLayout_4.addWidget(self.CloseBtn) self.verticalLayout.addWidget(self.DialogButtonsFrame) self.retranslateUi(ImportSlipDlg) self.CloseBtn.clicked.connect(ImportSlipDlg.close) QMetaObject.connectSlotsByName(ImportSlipDlg)
def __init__(self, parent=None): AbstractOperationDetails.__init__(self, parent) self.name = "Income/Spending" self.details_model = None self.category_delegate = CategorySelectorDelegate() self.tag_delegate = TagSelectorDelegate() self.float_delegate = FloatDelegate(2) self.date_label = QLabel(self) self.details_label = QLabel(self) self.account_label = QLabel(self) self.peer_label = QLabel(self) self.main_label.setText(self.tr("Income / Spending")) self.date_label.setText(self.tr("Date/Time")) self.details_label.setText(self.tr("Details")) self.account_label.setText(self.tr("Account")) self.peer_label.setText(self.tr("Peer")) 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.account_widget = AccountSelector(self) self.peer_widget = PeerSelector(self) self.a_currency = OptionalCurrencyComboBox(self) self.a_currency.setText(self.tr("Paid in foreign currency:")) self.add_button = QPushButton(load_icon("add.png"), '', self) self.add_button.setToolTip(self.tr("Add detail")) self.del_button = QPushButton(load_icon("remove.png"), '', self) self.del_button.setToolTip(self.tr("Remove detail")) self.copy_button = QPushButton(load_icon("copy.png"), '', self) self.copy_button.setToolTip(self.tr("Copy detail")) self.details_table = QTableView(self) self.details_table.horizontalHeader().setFont(self.bold_font) self.details_table.setAlternatingRowColors(True) self.details_table.verticalHeader().setVisible(False) self.details_table.verticalHeader().setMinimumSectionSize(20) self.details_table.verticalHeader().setDefaultSectionSize(20) self.layout.addWidget(self.date_label, 1, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.details_label, 2, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.timestamp_editor, 1, 1, 1, 4) self.layout.addWidget(self.add_button, 2, 1, 1, 1) self.layout.addWidget(self.copy_button, 2, 2, 1, 1) self.layout.addWidget(self.del_button, 2, 3, 1, 1) self.layout.addWidget(self.account_label, 1, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.peer_label, 2, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.account_widget, 1, 6, 1, 1) self.layout.addWidget(self.peer_widget, 2, 6, 1, 1) self.layout.addWidget(self.a_currency, 1, 7, 1, 1) self.layout.addWidget(self.commit_button, 0, 9, 1, 1) self.layout.addWidget(self.revert_button, 0, 10, 1, 1) self.layout.addWidget(self.details_table, 4, 0, 1, 11) self.layout.addItem(self.horizontalSpacer, 1, 8, 1, 1) self.add_button.clicked.connect(self.addChild) self.copy_button.clicked.connect(self.copyChild) self.del_button.clicked.connect(self.delChild) super()._init_db("actions") self.model.beforeInsert.connect(self.before_record_insert) self.model.beforeUpdate.connect(self.before_record_update) self.mapper.setItemDelegate(IncomeSpendingWidgetDelegate(self.mapper)) self.details_model = DetailsModel(self.details_table, db_connection()) self.details_model.setTable("action_details") self.details_model.setEditStrategy(QSqlTableModel.OnManualSubmit) self.details_table.setModel(self.details_model) self.details_model.dataChanged.connect(self.onDataChange) self.account_widget.changed.connect(self.mapper.submit) self.peer_widget.changed.connect(self.mapper.submit) self.a_currency.changed.connect(self.mapper.submit) self.a_currency.name_updated.connect(self.details_model.setAltCurrency) self.mapper.addMapping(self.timestamp_editor, self.model.fieldIndex("timestamp")) self.mapper.addMapping(self.account_widget, self.model.fieldIndex("account_id")) self.mapper.addMapping(self.peer_widget, self.model.fieldIndex("peer_id")) self.mapper.addMapping(self.a_currency, self.model.fieldIndex("alt_currency_id")) self.details_table.setItemDelegateForColumn(2, self.category_delegate) self.details_table.setItemDelegateForColumn(3, self.tag_delegate) self.details_table.setItemDelegateForColumn(4, self.float_delegate) self.details_table.setItemDelegateForColumn(5, self.float_delegate) self.model.select() self.details_model.select() self.details_model.configureView()
class IncomeSpendingWidget(AbstractOperationDetails): def __init__(self, parent=None): AbstractOperationDetails.__init__(self, parent) self.name = "Income/Spending" self.details_model = None self.category_delegate = CategorySelectorDelegate() self.tag_delegate = TagSelectorDelegate() self.float_delegate = FloatDelegate(2) self.date_label = QLabel(self) self.details_label = QLabel(self) self.account_label = QLabel(self) self.peer_label = QLabel(self) self.main_label.setText(self.tr("Income / Spending")) self.date_label.setText(self.tr("Date/Time")) self.details_label.setText(self.tr("Details")) self.account_label.setText(self.tr("Account")) self.peer_label.setText(self.tr("Peer")) 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.account_widget = AccountSelector(self) self.peer_widget = PeerSelector(self) self.a_currency = OptionalCurrencyComboBox(self) self.a_currency.setText(self.tr("Paid in foreign currency:")) self.add_button = QPushButton(load_icon("add.png"), '', self) self.add_button.setToolTip(self.tr("Add detail")) self.del_button = QPushButton(load_icon("remove.png"), '', self) self.del_button.setToolTip(self.tr("Remove detail")) self.copy_button = QPushButton(load_icon("copy.png"), '', self) self.copy_button.setToolTip(self.tr("Copy detail")) self.details_table = QTableView(self) self.details_table.horizontalHeader().setFont(self.bold_font) self.details_table.setAlternatingRowColors(True) self.details_table.verticalHeader().setVisible(False) self.details_table.verticalHeader().setMinimumSectionSize(20) self.details_table.verticalHeader().setDefaultSectionSize(20) self.layout.addWidget(self.date_label, 1, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.details_label, 2, 0, 1, 1, Qt.AlignLeft) self.layout.addWidget(self.timestamp_editor, 1, 1, 1, 4) self.layout.addWidget(self.add_button, 2, 1, 1, 1) self.layout.addWidget(self.copy_button, 2, 2, 1, 1) self.layout.addWidget(self.del_button, 2, 3, 1, 1) self.layout.addWidget(self.account_label, 1, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.peer_label, 2, 5, 1, 1, Qt.AlignRight) self.layout.addWidget(self.account_widget, 1, 6, 1, 1) self.layout.addWidget(self.peer_widget, 2, 6, 1, 1) self.layout.addWidget(self.a_currency, 1, 7, 1, 1) self.layout.addWidget(self.commit_button, 0, 9, 1, 1) self.layout.addWidget(self.revert_button, 0, 10, 1, 1) self.layout.addWidget(self.details_table, 4, 0, 1, 11) self.layout.addItem(self.horizontalSpacer, 1, 8, 1, 1) self.add_button.clicked.connect(self.addChild) self.copy_button.clicked.connect(self.copyChild) self.del_button.clicked.connect(self.delChild) super()._init_db("actions") self.model.beforeInsert.connect(self.before_record_insert) self.model.beforeUpdate.connect(self.before_record_update) self.mapper.setItemDelegate(IncomeSpendingWidgetDelegate(self.mapper)) self.details_model = DetailsModel(self.details_table, db_connection()) self.details_model.setTable("action_details") self.details_model.setEditStrategy(QSqlTableModel.OnManualSubmit) self.details_table.setModel(self.details_model) self.details_model.dataChanged.connect(self.onDataChange) self.account_widget.changed.connect(self.mapper.submit) self.peer_widget.changed.connect(self.mapper.submit) self.a_currency.changed.connect(self.mapper.submit) self.a_currency.name_updated.connect(self.details_model.setAltCurrency) self.mapper.addMapping(self.timestamp_editor, self.model.fieldIndex("timestamp")) self.mapper.addMapping(self.account_widget, self.model.fieldIndex("account_id")) self.mapper.addMapping(self.peer_widget, self.model.fieldIndex("peer_id")) self.mapper.addMapping(self.a_currency, self.model.fieldIndex("alt_currency_id")) self.details_table.setItemDelegateForColumn(2, self.category_delegate) self.details_table.setItemDelegateForColumn(3, self.tag_delegate) self.details_table.setItemDelegateForColumn(4, self.float_delegate) self.details_table.setItemDelegateForColumn(5, self.float_delegate) self.model.select() self.details_model.select() self.details_model.configureView() def setId(self, id): super().setId(id) self.details_model.setFilter(f"action_details.pid = {id}") @Slot() def addChild(self): new_record = self.details_model.record() new_record.setNull("tag_id") new_record.setValue("amount", 0) new_record.setValue("amount_alt", 0) if not self.details_model.insertRecord(-1, new_record): logging.fatal( self.tr("Failed to add new record: ") + self.details_model.lastError().text()) return @Slot() def copyChild(self): idx = self.details_table.selectionModel().selection().indexes() src_record = self.details_model.record(idx[0].row()) new_record = self.details_model.record() new_record.setValue("category_id", src_record.value("category_id")) if src_record.value("tag_id"): new_record.setValue("tag_id", src_record.value("tag_id")) else: new_record.setNull("tag_id") new_record.setValue("amount", src_record.value("amount")) new_record.setValue("amount_alt", src_record.value("amount_alt")) new_record.setValue("note", src_record.value("note")) if not self.details_model.insertRecord(-1, new_record): logging.fatal( self.tr("Failed to add new record: ") + self.details_model.lastError().text()) return @Slot() def delChild(self): selection = self.details_table.selectionModel().selection().indexes() for idx in selection: self.details_model.removeRow(idx.row()) self.onDataChange(idx, idx, None) @Slot() def saveChanges(self): if not self.model.submitAll(): logging.fatal( self.tr("Operation submit failed: ") + self.model.lastError().text()) return pid = self.model.data(self.model.index(0, self.model.fieldIndex("id"))) if pid is None: # we just have saved new action record and need last inserted id pid = self.model.query().lastInsertId() for row in range(self.details_model.rowCount()): self.details_model.setData( self.details_model.index(row, self.details_model.fieldIndex("pid")), pid) if not self.details_model.submitAll(): logging.fatal( self.tr("Operation details submit failed: ") + self.details_model.lastError().text()) return self.modified = False self.commit_button.setEnabled(False) self.revert_button.setEnabled(False) self.dbUpdated.emit() @Slot() def revertChanges(self): self.model.revertAll() self.details_model.revertAll() self.modified = False self.commit_button.setEnabled(False) self.revert_button.setEnabled(False) def createNew(self, account_id=0): super().createNew(account_id) self.details_model.setFilter(f"action_details.pid = 0") 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("account_id", account_id) new_record.setValue("peer_id", 0) new_record.setValue("alt_currency_id", None) return new_record def copyNew(self): old_id = self.model.record(self.mapper.currentIndex()).value(0) super().copyNew() self.details_model.setFilter(f"action_details.pid = 0") query = executeSQL( "SELECT * FROM action_details WHERE pid = :pid ORDER BY id DESC", [(":pid", old_id)]) while query.next(): new_record = query.record() new_record.setNull("id") new_record.setNull("pid") assert self.details_model.insertRows(0, 1) self.details_model.setRecord(0, 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())) return new_record def before_record_insert(self, record): if record.value("alt_currency_id") == 0: record.setNull("alt_currency_id") def before_record_update(self, _row, record): self.before_record_insert( record) # processing is the same as before insert
class TradeWidget(AbstractOperationDetails): def __init__(self, parent=None): AbstractOperationDetails.__init__(self, parent) self.name = "Trade" self.operation_type = LedgerTransaction.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 = super().prepareNew(account_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
def createEditor(self, parent, option, index): editor = QDateTimeEdit(QtCore.QDate.currentDate().addDays(1), parent) editor.setDisplayFormat(self.format) editor.setTimeSpec(self.time_spec) return editor