GnuCash fec5643+
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 Account * account () 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_fieldmask_debit_side = false
 
bool m_allow_zero
 
bool m_allow_negative = false
 
bool m_input_new_balance = false
 
Account * m_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 537 of file assistant-stock-transaction.cpp.

Constructor & Destructor Documentation

◆ StockTransactionEntry() [1/2]

StockTransactionEntry::StockTransactionEntry ( )
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{nullptr},
557 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 558 of file assistant-stock-transaction.cpp.

558 :
559 m_enabled{false}, m_debit_side{false}, m_allow_zero{false}, m_account{nullptr},
560 m_value{gnc_numeric_error(GNC_ERROR_ARG)}, m_memo{nullptr}, m_action{action},
561 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 563 of file assistant-stock-transaction.cpp.

563{ 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 575 of file assistant-stock-transaction.cpp.

575{ return m_account; }

◆ amount()

virtual gnc_numeric StockTransactionEntry::amount ( ) const
inlinevirtual

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

583{ 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 617 of file assistant-stock-transaction.cpp.

617{ 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 624 of file assistant-stock-transaction.cpp.

◆ create_split()

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

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

740{
741 g_return_if_fail(trans);
742 if (!m_account || gnc_numeric_check(m_value))
743 return;
744 auto split = xaccMallocSplit(qof_instance_get_book(trans));
745 xaccSplitSetParent(split, trans);
746 xaccAccountBeginEdit(m_account);
747 account_commits.push_back(m_account);
748 xaccSplitSetAccount(split, m_account);
749 xaccSplitSetMemo(split, m_memo);
750 if (m_enabled)
751 xaccSplitSetValue(split, m_debit_side ? m_value : gnc_numeric_neg(m_value));
752 xaccSplitSetAmount(split, amount());
753 PINFO("creating %s split in Acct(%s): Val(%s), Amt(%s) => Val(%s), Amt(%s)",
754 m_action, m_account ? xaccAccountGetName (m_account) : "Empty!",
755 gnc_num_dbg_to_string(m_value),
756 gnc_num_dbg_to_string(amount()),
759 gnc_set_num_action(nullptr, split, nullptr,
760 g_dpgettext2(nullptr, "Stock Assistant: Action field",
761 m_action));
762}
const char * xaccAccountGetName(const Account *acc)
Get the account's name.
Definition Account.cpp:3277
void xaccAccountBeginEdit(Account *acc)
The xaccAccountBeginEdit() subroutine is the first phase of a two-phase-commit wrapper for account up...
Definition Account.cpp:1463
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 570 of file assistant-stock-transaction.cpp.

570{ return m_debit_side; }

◆ do_capitalize()

virtual bool StockTransactionEntry::do_capitalize ( ) const
inlinevirtual

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

573{ return false; }

◆ enabled()

virtual bool StockTransactionEntry::enabled ( ) const
inlinevirtual

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

569{ return m_enabled; }

◆ get_balance()

virtual gnc_numeric StockTransactionEntry::get_balance ( ) const
inlinevirtual

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

593{ return m_balance; }

◆ get_kvp_tag()

virtual const char * StockTransactionEntry::get_kvp_tag ( )
inlinevirtual

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

578{ return m_kvp_tag; }

◆ has_amount()

virtual bool StockTransactionEntry::has_amount ( ) const
inlinevirtual

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

584{ return false; }

◆ input_new_balance()

virtual bool StockTransactionEntry::input_new_balance ( ) const
inlinevirtual

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

572{ return m_input_new_balance; }

◆ marker_split()

virtual bool StockTransactionEntry::marker_split ( ) const
inlinevirtual

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

585{ return false; }

◆ memo()

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

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

579{ return m_memo; }

◆ print_account()

const char * StockTransactionEntry::print_account ( ) const
virtual

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

655{
656 auto acct_required = m_enabled &&
657 !(m_allow_zero && (gnc_numeric_zero_p(m_value) ||
658 gnc_numeric_check(m_value)));
659 return m_account ? xaccAccountGetName(m_account) :
660 acct_required ? _("missing") : "";
661}
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 729 of file assistant-stock-transaction.cpp.

730{
731 if (!m_account || gnc_numeric_check(amt))
732 return nullptr;
733 auto commodity{xaccAccountGetCommodity(m_account)};
734 auto pinfo{gnc_commodity_print_info(commodity, TRUE)};
735 return xaccPrintAmount(amt, pinfo);
736}
gnc_commodity * xaccAccountGetCommodity(const Account *acc)
Get the account's commodity
Definition Account.cpp:3396
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 765 of file assistant-stock-transaction.cpp.

766{
767 auto price{calculate_price()};
768 if (gnc_numeric_check(price))
769//Translators: "N/A" here means that a commodity doesn't have a valid price.
770 return _("N/A");
771 auto currency{gnc_account_get_currency_or_parent(m_account)};
772 auto pinfo{gnc_price_print_info(currency, TRUE)};
773 return xaccPrintAmount(price, pinfo);
774}
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:3403

◆ print_value()

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

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

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

◆ set_account()

virtual void StockTransactionEntry::set_account ( Account *  account)
inlinevirtual

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

574{ m_account = account; }

◆ set_amount()

virtual void StockTransactionEntry::set_amount ( gnc_numeric  )
inlinevirtual

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

582{}

◆ set_balance()

virtual void StockTransactionEntry::set_balance ( gnc_numeric  balance)
inlinevirtual

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

592{ m_balance = balance; }

◆ set_capitalize()

virtual void StockTransactionEntry::set_capitalize ( bool  capitalize)
inlinevirtual

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

571{}

◆ 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 644 of file assistant-stock-transaction.cpp.

645{
646 m_enabled = mask != FieldMask::DISABLED;
647 m_debit_side = mask & FieldMask::ENABLED_DEBIT;
648 m_fieldmask_debit_side = m_debit_side;
649 m_allow_zero = mask & FieldMask::ALLOW_ZERO;
650 m_allow_negative = mask & FieldMask::ALLOW_NEGATIVE;
651}

◆ set_memo()

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

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

577{ m_memo = memo; }

◆ set_value()

void StockTransactionEntry::set_value ( gnc_numeric  amount)
virtual

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

665{
666 if (gnc_numeric_check (amount))
667 {
669 return;
670 }
671
672 m_value = gnc_numeric_abs(amount);
673 m_debit_side = m_fieldmask_debit_side != gnc_numeric_negative_p (amount);
674
675 PINFO("Set %s value to %" PRId64 "/%" PRId64, m_action, m_value.num, m_value.denom);
676}
gnc_numeric gnc_numeric_abs(gnc_numeric a)
Returns a newly created gnc_numeric that is the absolute value of the given gnc_numeric value.
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 679 of file assistant-stock-transaction.cpp.

680{
681 auto add_error = [&logger](const char* format_str, const char* arg)
682 {
683 char *buf = g_strdup_printf (_(format_str),
684 g_dpgettext2 (nullptr, "Stock Assistant: Page name", arg));
685 logger.error(buf);
686 g_free (buf);
687 };
688
689
690 if (gnc_numeric_check (m_value))
691 {
692 if (!m_allow_zero)
693 add_error (N_("Amount for %s is missing."), m_action);
694 return;
695 }
696
697 if (gnc_numeric_negative_p (m_value) && !m_allow_negative && m_allow_zero)
698 add_error (N_("Amount for %s must not be negative."), m_action);
699
700 if (!m_allow_zero && !gnc_numeric_positive_p (m_value))
701 add_error (N_("Amount for %s must be positive."), m_action);
702
703 if (!gnc_numeric_zero_p(m_value) && !m_account)
704 add_error(N_("The %s amount has no associated account."), m_action);
705}
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 581 of file assistant-stock-transaction.cpp.

581{ 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 546 of file assistant-stock-transaction.cpp.

◆ m_action

const char* StockTransactionEntry::m_action
protected

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

◆ m_allow_negative

bool StockTransactionEntry::m_allow_negative = false
protected

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

◆ m_allow_zero

bool StockTransactionEntry::m_allow_zero
protected

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

◆ m_balance

gnc_numeric StockTransactionEntry::m_balance = gnc_numeric_zero()
protected

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

◆ m_debit_side

bool StockTransactionEntry::m_debit_side
protected

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

◆ m_enabled

bool StockTransactionEntry::m_enabled
protected

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

◆ m_fieldmask_debit_side

bool StockTransactionEntry::m_fieldmask_debit_side = false
protected

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

◆ m_input_new_balance

bool StockTransactionEntry::m_input_new_balance = false
protected

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

◆ m_kvp_tag

const char* StockTransactionEntry::m_kvp_tag
protected

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

◆ m_memo

const char* StockTransactionEntry::m_memo
protected

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

◆ m_qof_event_handler

int StockTransactionEntry::m_qof_event_handler
protected

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

◆ m_value

gnc_numeric StockTransactionEntry::m_value
protected

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


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