From e17345d4b6ccbce04a1ec75673987f61cfcc55bf Mon Sep 17 00:00:00 2001 From: John Ralls Date: Sat, 9 Sep 2023 13:16:07 -0700 Subject: [PATCH] [stock-txn-asst] Include a marker split in the stock account for divs. --- gnucash/gnome/assistant-stock-transaction.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/gnucash/gnome/assistant-stock-transaction.cpp b/gnucash/gnome/assistant-stock-transaction.cpp index aa7a394bf7..008be45063 100644 --- a/gnucash/gnome/assistant-stock-transaction.cpp +++ b/gnucash/gnome/assistant-stock-transaction.cpp @@ -101,6 +101,8 @@ enum class FieldMask : unsigned ALLOW_NEGATIVE = 1 << 6, CAPITALIZE_DEFAULT = 1 << 7, // fees only: capitalize by default into stock acct CAPGAINS_IN_STOCK = 1 << 8, // capg only: add a balancing split in stock acct + MARKER_SPLIT = 1 << 9, // stock only, place a no-amount, no-value split in the + // stock account to associate the income. }; static FieldMask @@ -191,7 +193,7 @@ static const TxnTypeVec long_types "placeholder amount and correct it in the transaction later.") }, { - FieldMask::DISABLED, // stock_amt + FieldMask::MARKER_SPLIT, // stock_amt FieldMask::ENABLED_DEBIT, // cash_amt FieldMask::ENABLED_DEBIT | FieldMask::ALLOW_ZERO, // fees_amt FieldMask::ENABLED_CREDIT, // dividend_amt @@ -306,7 +308,7 @@ static const TxnTypeVec short_types "amount and correct it in the transaction later.") }, { - FieldMask::DISABLED, // stock_amt + FieldMask::MARKER_SPLIT, // stock_amt FieldMask::ENABLED_CREDIT, // cash_amt FieldMask::ENABLED_DEBIT | FieldMask::ALLOW_ZERO, // fees_amt FieldMask::ENABLED_DEBIT, // dividend_amt @@ -556,6 +558,7 @@ public: virtual void set_amount(gnc_numeric) {} virtual gnc_numeric amount() const { return m_value; } virtual bool has_amount() const { return false; } + virtual bool marker_split() const { return false; } /* Validates that the value and for stock entry the amount meet * the criteria set for the entry by the field mask. * @@ -747,6 +750,7 @@ class StockTransactionStockEntry : public StockTransactionEntry { bool m_amount_enabled; gnc_numeric m_amount; + bool m_marker = false; public: StockTransactionStockEntry() : StockTransactionEntry{}, m_amount{gnc_numeric_error(GNC_ERROR_ARG)} @@ -766,6 +770,7 @@ public: void create_split(Transaction *trans, AccountVec &account_commits) const override; std::string amount_str_for_display() const override; gnc_numeric calculate_price() const override; + bool marker_split() const override { return m_marker; } }; void @@ -776,6 +781,7 @@ StockTransactionStockEntry::set_fieldmask(FieldMask mask) m_amount_enabled = mask & (FieldMask::AMOUNT_CREDIT | FieldMask::AMOUNT_DEBIT); m_debit_side = mask & (FieldMask::ENABLED_DEBIT | FieldMask::AMOUNT_DEBIT); m_input_new_balance = mask & FieldMask::INPUT_NEW_BALANCE; + m_marker = mask & FieldMask::MARKER_SPLIT; } @@ -1300,6 +1306,9 @@ StockAssistantModel::generate_list_of_splits() { } } + if (m_stock_entry->marker_split()) + m_list_of_splits.push_back(m_stock_entry.get()); + if (m_cash_entry->enabled()) { m_cash_entry->validate_amount(m_logger);