[stock-txn-asst] Include a marker split in the stock account for divs.

pull/1759/head
John Ralls 3 years ago
parent 94db524c60
commit e17345d4b6

@ -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);

Loading…
Cancel
Save