GnuCash c935c2f+
Loading...
Searching...
No Matches
Public Member Functions | Protected Attributes
StockTransactionEntry Class Reference

Holds the configuration information from the fieldmask and the data to create a single split. More...

Inheritance diagram for StockTransactionEntry:
StockTransactionFeesEntry StockTransactionStockCapGainsEntry StockTransactionStockEntry

Public Member Functions

 StockTransactionEntry (const char *action, const char *kvp_tag)
 
 StockTransactionEntry (const StockTransactionEntry &)=default
 
virtual void set_fieldmask (FieldMask mask)
 Set up the state variables from the FieldMask.
 
virtual bool enabled () const
 
virtual bool debit_side () const
 
virtual void set_capitalize (bool capitalize)
 
virtual bool input_new_balance () const
 
virtual bool do_capitalize () const
 
virtual void set_account (Account *account)
 
virtual Accountaccount () const
 
virtual const char * print_account () const
 
virtual void set_memo (const char *memo)
 
virtual const char * get_kvp_tag ()
 
virtual const char * memo () const
 
virtual void set_value (gnc_numeric amount)
 
virtual GncNumeric value ()
 
virtual void set_amount (gnc_numeric)
 
virtual gnc_numeric amount () const
 
virtual bool has_amount () const
 
virtual bool marker_split () const
 
virtual void validate_amount (Logger &) const
 
virtual void set_balance (gnc_numeric balance)
 
virtual gnc_numeric get_balance () const
 
virtual void create_split (Transaction *trans, AccountVec &commits) const
 
virtual const char * print_value () const
 
virtual const char * print_amount (gnc_numeric amt) const
 
virtual std::string amount_str_for_display () const
 Generate a string representation of the value.
 
virtual gnc_numeric calculate_price () const
 Calculate the price (amount/value) for non-currency accounts.
 
virtual const char * print_price () const
 

Protected Attributes

bool m_enabled
 
bool m_debit_side
 
bool m_allow_zero
 
bool m_allow_negative
 
bool m_input_new_balance = false
 
Accountm_account
 
gnc_numeric m_value
 
const char * m_memo
 
const char * m_action
 
gnc_numeric m_balance = gnc_numeric_zero()
 
const char * m_kvp_tag
 
int m_qof_event_handler
 

Detailed Description

Holds the configuration information from the fieldmask and the data to create a single split.

The base class is used for cash splits to currency accounts. Except as noted the functions are simple accessors and setters that don't need much documentation.

Definition at line 534 of file assistant-stock-transaction.cpp.

Constructor & Destructor Documentation

◆ StockTransactionEntry() [1/2]

StockTransactionEntry::StockTransactionEntry ( )
inline

Definition at line 550 of file assistant-stock-transaction.cpp.

550 :
551 m_enabled{false}, m_debit_side{false}, m_allow_zero{false}, m_account{nullptr},
552 m_value{gnc_numeric_error(GNC_ERROR_ARG)}, m_memo{nullptr}, m_action{nullptr},
553 m_kvp_tag{nullptr}, m_qof_event_handler{qof_event_register_handler(account_destroyed_handler, this)} {}
gint qof_event_register_handler(QofEventHandler handler, gpointer user_data)
Register a handler for events.
Definition qofevent.cpp:73
gnc_numeric gnc_numeric_error(GNCNumericErrorCode error_code)
Create a gnc_numeric object that signals the error condition noted by error_code, rather than a numbe...
@ GNC_ERROR_ARG
Argument is not a valid number.

◆ StockTransactionEntry() [2/2]

StockTransactionEntry::StockTransactionEntry ( const char *  action,
const char *  kvp_tag 
)
inline

Definition at line 554 of file assistant-stock-transaction.cpp.

554 :
555 m_enabled{false}, m_debit_side{false}, m_allow_zero{false}, m_account{nullptr},
556 m_value{gnc_numeric_error(GNC_ERROR_ARG)}, m_memo{nullptr}, m_action{action},
557 m_kvp_tag{kvp_tag}, m_qof_event_handler{qof_event_register_handler(account_destroyed_handler, this)} {}

◆ ~StockTransactionEntry()

virtual StockTransactionEntry::~StockTransactionEntry ( )
inlinevirtual

Definition at line 559 of file assistant-stock-transaction.cpp.

559{ qof_event_unregister_handler(m_qof_event_handler); }
void qof_event_unregister_handler(gint handler_id)
Unregister an event handler.
Definition qofevent.cpp:103

Member Function Documentation

◆ account()

virtual Account * StockTransactionEntry::account ( ) const
inlinevirtual

Definition at line 571 of file assistant-stock-transaction.cpp.

571{ return m_account; }

◆ amount()

virtual gnc_numeric StockTransactionEntry::amount ( ) const
inlinevirtual

Definition at line 579 of file assistant-stock-transaction.cpp.

579{ return m_value; }

◆ amount_str_for_display()

virtual std::string StockTransactionEntry::amount_str_for_display ( ) const
inlinevirtual

Generate a string representation of the value.

Internally uses xaccPrintAmount, which writes to a static string, so the result is copied to a std::string to prevent it being replaced by subsequent calls.

Returns
a std:sstring containing a representation of the value.

Reimplemented in StockTransactionStockEntry.

Definition at line 613 of file assistant-stock-transaction.cpp.

613{ return ""; }

◆ calculate_price()

virtual gnc_numeric StockTransactionEntry::calculate_price ( ) const
inlinevirtual

Calculate the price (amount/value) for non-currency accounts.

Note that multiple currencies in stock transaction s are not supported.

Returns
The calculated price for the Stock entry, GNC_ERROR_ARG otherwise.

Reimplemented in StockTransactionStockEntry.

Definition at line 620 of file assistant-stock-transaction.cpp.

◆ create_split()

void StockTransactionEntry::create_split ( Transaction *  trans,
AccountVec &  commits 
) const
virtual

Definition at line 740 of file assistant-stock-transaction.cpp.

741{
742 g_return_if_fail(trans);
743 if (!m_account || gnc_numeric_check(m_value))
744 return;
745 auto split = xaccMallocSplit(qof_instance_get_book(trans));
746 xaccSplitSetParent(split, trans);
747 xaccAccountBeginEdit(m_account);
748 account_commits.push_back(m_account);
749 xaccSplitSetAccount(split, m_account);
750 xaccSplitSetMemo(split, m_memo);
751 if (m_enabled)
752 xaccSplitSetValue(split, m_debit_side ? m_value : gnc_numeric_neg(m_value));
753 xaccSplitSetAmount(split, amount());
754 PINFO("creating %s split in Acct(%s): Val(%s), Amt(%s) => Val(%s), Amt(%s)",
755 m_action, m_account ? xaccAccountGetName (m_account) : "Empty!",
756 gnc_num_dbg_to_string(m_value),
757 gnc_num_dbg_to_string(amount()),
760 gnc_set_num_action(nullptr, split, nullptr,
761 g_dpgettext2(nullptr, "Stock Assistant: Action field",
762 m_action));
763}
const char * xaccAccountGetName(const Account *acc)
Get the account's name.
Definition Account.cpp:3289
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
Definition Account.cpp:1475
QofBook * qof_instance_get_book(gconstpointer inst)
Return the book pointer.
#define PINFO(format, args...)
Print an informational note.
Definition qoflog.h:256
GNCNumericErrorCode gnc_numeric_check(gnc_numeric in)
Check for error signal in value.
gnc_numeric gnc_numeric_neg(gnc_numeric a)
Returns a newly created gnc_numeric that is the negative of the given gnc_numeric value.
gchar * gnc_num_dbg_to_string(gnc_numeric n)
Convert to string.
void xaccSplitSetMemo(Split *split, const char *memo)
The memo is an arbitrary string associated with a split.
void xaccSplitSetValue(Split *split, gnc_numeric val)
The xaccSplitSetValue() method sets the value of this split in the transaction's commodity.
Split * xaccMallocSplit(QofBook *book)
Constructor.
void xaccSplitSetAmount(Split *split, gnc_numeric amt)
The xaccSplitSetAmount() method sets the amount in the account's commodity that the split should have...
gnc_numeric xaccSplitGetValue(const Split *split)
Returns the value of this split in the transaction's commodity.
gnc_numeric xaccSplitGetAmount(const Split *split)
Returns the amount of the split in the account's commodity.

◆ debit_side()

virtual bool StockTransactionEntry::debit_side ( ) const
inlinevirtual

Definition at line 566 of file assistant-stock-transaction.cpp.

566{ return m_debit_side; }

◆ do_capitalize()

virtual bool StockTransactionEntry::do_capitalize ( ) const
inlinevirtual

Definition at line 569 of file assistant-stock-transaction.cpp.

569{ return false; }

◆ enabled()

virtual bool StockTransactionEntry::enabled ( ) const
inlinevirtual

Definition at line 565 of file assistant-stock-transaction.cpp.

565{ return m_enabled; }

◆ get_balance()

virtual gnc_numeric StockTransactionEntry::get_balance ( ) const
inlinevirtual

Definition at line 589 of file assistant-stock-transaction.cpp.

589{ return m_balance; }

◆ get_kvp_tag()

virtual const char * StockTransactionEntry::get_kvp_tag ( )
inlinevirtual

Definition at line 574 of file assistant-stock-transaction.cpp.

574{ return m_kvp_tag; }

◆ has_amount()

virtual bool StockTransactionEntry::has_amount ( ) const
inlinevirtual

Definition at line 580 of file assistant-stock-transaction.cpp.

580{ return false; }

◆ input_new_balance()

virtual bool StockTransactionEntry::input_new_balance ( ) const
inlinevirtual

Definition at line 568 of file assistant-stock-transaction.cpp.

568{ return m_input_new_balance; }

◆ marker_split()

virtual bool StockTransactionEntry::marker_split ( ) const
inlinevirtual

Definition at line 581 of file assistant-stock-transaction.cpp.

581{ return false; }

◆ memo()

virtual const char * StockTransactionEntry::memo ( ) const
inlinevirtual

Definition at line 575 of file assistant-stock-transaction.cpp.

575{ return m_memo; }

◆ print_account()

const char * StockTransactionEntry::print_account ( ) const
virtual

Definition at line 649 of file assistant-stock-transaction.cpp.

650{
651 auto acct_required = m_enabled &&
652 !(m_allow_zero && (gnc_numeric_zero_p(m_value) ||
653 gnc_numeric_check(m_value)));
654 return m_account ? xaccAccountGetName(m_account) :
655 acct_required ? _("missing") : "";
656}
gboolean gnc_numeric_zero_p(gnc_numeric a)
Returns 1 if the given gnc_numeric is 0 (zero), else returns 0.

◆ print_amount()

const char * StockTransactionEntry::print_amount ( gnc_numeric  amt) const
virtual
Returns
a string representation of the amount.

Definition at line 730 of file assistant-stock-transaction.cpp.

731{
732 if (!m_account || gnc_numeric_check(amt))
733 return nullptr;
734 auto commodity{xaccAccountGetCommodity(m_account)};
735 auto pinfo{gnc_commodity_print_info(commodity, TRUE)};
736 return xaccPrintAmount(amt, pinfo);
737}
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
Get the account's commodity
Definition Account.cpp:3408
const char * xaccPrintAmount(gnc_numeric val, GNCPrintAmountInfo info)
Make a string representation of a gnc_numeric.

◆ print_price()

const char * StockTransactionEntry::print_price ( ) const
virtual
Returns
a string representation of the price if valid.

Definition at line 766 of file assistant-stock-transaction.cpp.

767{
768 auto price{calculate_price()};
769 if (gnc_numeric_check(price))
770//Translators: "N/A" here means that a commodity doesn't have a valid price.
771 return _("N/A");
772 auto currency{gnc_account_get_currency_or_parent(m_account)};
773 auto pinfo{gnc_price_print_info(currency, TRUE)};
774 return xaccPrintAmount(price, pinfo);
775}
virtual gnc_numeric calculate_price() const
Calculate the price (amount/value) for non-currency accounts.
gnc_commodity * gnc_account_get_currency_or_parent(const Account *account)
Returns a gnc_commodity that is a currency, suitable for being a Transaction's currency.
Definition Account.cpp:3415

◆ print_value()

const char * StockTransactionEntry::print_value ( ) const
virtual
Returns
a string representation of the value.

Definition at line 709 of file assistant-stock-transaction.cpp.

710{
711 if (!m_enabled || (gnc_numeric_check(m_value) && m_allow_zero))
712 return nullptr;
713
714 if ((gnc_numeric_check(m_value) || gnc_numeric_zero_p(m_value))
715 && !m_allow_zero)
716 return _("missing");
717
718 /* Don't combine this with the first if, it would prevent showing
719 * "missing" when the value is required.
720 */
721 if (!m_account)
722 return nullptr;
723
724 auto currency{gnc_account_get_currency_or_parent(m_account)};
725 auto pinfo{gnc_commodity_print_info(currency, TRUE)};
726 return xaccPrintAmount(m_value, pinfo);
727}

◆ set_account()

virtual void StockTransactionEntry::set_account ( Account account)
inlinevirtual

Definition at line 570 of file assistant-stock-transaction.cpp.

570{ m_account = account; }

◆ set_amount()

virtual void StockTransactionEntry::set_amount ( gnc_numeric  )
inlinevirtual

Definition at line 578 of file assistant-stock-transaction.cpp.

578{}

◆ set_balance()

virtual void StockTransactionEntry::set_balance ( gnc_numeric  balance)
inlinevirtual

Definition at line 588 of file assistant-stock-transaction.cpp.

588{ m_balance = balance; }

◆ set_capitalize()

virtual void StockTransactionEntry::set_capitalize ( bool  capitalize)
inlinevirtual

Definition at line 567 of file assistant-stock-transaction.cpp.

567{}

◆ set_fieldmask()

void StockTransactionEntry::set_fieldmask ( FieldMask  mask)
virtual

Set up the state variables from the FieldMask.

Parameters
AFieldmast to configure the StockTransactionEntry.

Reimplemented in StockTransactionStockEntry, and StockTransactionFeesEntry.

Definition at line 640 of file assistant-stock-transaction.cpp.

641{
642 m_enabled = mask != FieldMask::DISABLED;
643 m_debit_side = mask & FieldMask::ENABLED_DEBIT;
644 m_allow_zero = mask & FieldMask::ALLOW_ZERO;
645 m_allow_negative = mask & FieldMask::ALLOW_NEGATIVE;
646}

◆ set_memo()

virtual void StockTransactionEntry::set_memo ( const char *  memo)
inlinevirtual

Definition at line 573 of file assistant-stock-transaction.cpp.

573{ m_memo = memo; }

◆ set_value()

void StockTransactionEntry::set_value ( gnc_numeric  amount)
virtual

Definition at line 659 of file assistant-stock-transaction.cpp.

660{
661 if (gnc_numeric_check (amount))
662 {
664 return;
665 }
666
667 if (gnc_numeric_negative_p (amount))
668 {
669 m_value = gnc_numeric_neg(amount);
670 m_debit_side = !m_debit_side;
671 }
672 else
673 {
674 m_value = amount;
675 }
676 PINFO("Set %s value to %" PRId64 "/%" PRId64, m_action, m_value.num, m_value.denom);
677}
gboolean gnc_numeric_negative_p(gnc_numeric a)
Returns 1 if a < 0, otherwise returns 0.

◆ validate_amount()

void StockTransactionEntry::validate_amount ( Logger logger) const
virtual

Definition at line 680 of file assistant-stock-transaction.cpp.

681{
682 auto add_error = [&logger](const char* format_str, const char* arg)
683 {
684 char *buf = g_strdup_printf (_(format_str),
685 g_dpgettext2 (nullptr, "Stock Assistant: Page name", arg));
686 logger.error(buf);
687 g_free (buf);
688 };
689
690
691 if (gnc_numeric_check (m_value))
692 {
693 if (!m_allow_zero)
694 add_error (N_("Amount for %s is missing."), m_action);
695 return;
696 }
697
698 if (gnc_numeric_negative_p (m_value) && !m_allow_negative && m_allow_zero)
699 add_error (N_("Amount for %s must not be negative."), m_action);
700
701 if (!m_allow_zero && !gnc_numeric_positive_p (m_value))
702 add_error (N_("Amount for %s must be positive."), m_action);
703
704 if (!gnc_numeric_zero_p(m_value) && !m_account)
705 add_error(N_("The %s amount has no associated account."), m_action);
706}
gboolean gnc_numeric_positive_p(gnc_numeric a)
Returns 1 if a > 0, otherwise returns 0.

◆ value()

virtual GncNumeric StockTransactionEntry::value ( )
inlinevirtual

Definition at line 577 of file assistant-stock-transaction.cpp.

577{ return (gnc_numeric_check(m_value) ? GncNumeric{} : GncNumeric(m_value)); }
The primary numeric class for representing amounts and values.

Field Documentation

◆ m_account

Account* StockTransactionEntry::m_account
protected

Definition at line 542 of file assistant-stock-transaction.cpp.

◆ m_action

const char* StockTransactionEntry::m_action
protected

Definition at line 545 of file assistant-stock-transaction.cpp.

◆ m_allow_negative

bool StockTransactionEntry::m_allow_negative
protected

Definition at line 540 of file assistant-stock-transaction.cpp.

◆ m_allow_zero

bool StockTransactionEntry::m_allow_zero
protected

Definition at line 539 of file assistant-stock-transaction.cpp.

◆ m_balance

gnc_numeric StockTransactionEntry::m_balance = gnc_numeric_zero()
protected

Definition at line 546 of file assistant-stock-transaction.cpp.

◆ m_debit_side

bool StockTransactionEntry::m_debit_side
protected

Definition at line 538 of file assistant-stock-transaction.cpp.

◆ m_enabled

bool StockTransactionEntry::m_enabled
protected

Definition at line 537 of file assistant-stock-transaction.cpp.

◆ m_input_new_balance

bool StockTransactionEntry::m_input_new_balance = false
protected

Definition at line 541 of file assistant-stock-transaction.cpp.

◆ m_kvp_tag

const char* StockTransactionEntry::m_kvp_tag
protected

Definition at line 547 of file assistant-stock-transaction.cpp.

◆ m_memo

const char* StockTransactionEntry::m_memo
protected

Definition at line 544 of file assistant-stock-transaction.cpp.

◆ m_qof_event_handler

int StockTransactionEntry::m_qof_event_handler
protected

Definition at line 548 of file assistant-stock-transaction.cpp.

◆ m_value

gnc_numeric StockTransactionEntry::m_value
protected

Definition at line 543 of file assistant-stock-transaction.cpp.


The documentation for this class was generated from the following file: