GnuCash 038f90a+
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 537 of file assistant-stock-transaction.cpp.

Constructor & Destructor Documentation

◆ StockTransactionEntry() [1/2]

StockTransactionEntry::StockTransactionEntry ( )
inline

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

553 :
554 m_enabled{false}, m_debit_side{false}, m_allow_zero{false}, m_account{nullptr},
555 m_value{gnc_numeric_error(GNC_ERROR_ARG)}, m_memo{nullptr}, m_action{nullptr},
556 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 557 of file assistant-stock-transaction.cpp.

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

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

574{ return m_account; }

◆ amount()

virtual gnc_numeric StockTransactionEntry::amount ( ) const
inlinevirtual

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

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

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

◆ create_split()

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

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

744{
745 g_return_if_fail(trans);
746 if (!m_account || gnc_numeric_check(m_value))
747 return;
748 auto split = xaccMallocSplit(qof_instance_get_book(trans));
749 xaccSplitSetParent(split, trans);
750 xaccAccountBeginEdit(m_account);
751 account_commits.push_back(m_account);
752 xaccSplitSetAccount(split, m_account);
753 xaccSplitSetMemo(split, m_memo);
754 if (m_enabled)
755 xaccSplitSetValue(split, m_debit_side ? m_value : gnc_numeric_neg(m_value));
756 xaccSplitSetAmount(split, amount());
757 PINFO("creating %s split in Acct(%s): Val(%s), Amt(%s) => Val(%s), Amt(%s)",
758 m_action, m_account ? xaccAccountGetName (m_account) : "Empty!",
759 gnc_num_dbg_to_string(m_value),
760 gnc_num_dbg_to_string(amount()),
763 gnc_set_num_action(nullptr, split, nullptr,
764 g_dpgettext2(nullptr, "Stock Assistant: Action field",
765 m_action));
766}
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 569 of file assistant-stock-transaction.cpp.

569{ return m_debit_side; }

◆ do_capitalize()

virtual bool StockTransactionEntry::do_capitalize ( ) const
inlinevirtual

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

572{ return false; }

◆ enabled()

virtual bool StockTransactionEntry::enabled ( ) const
inlinevirtual

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

568{ return m_enabled; }

◆ get_balance()

virtual gnc_numeric StockTransactionEntry::get_balance ( ) const
inlinevirtual

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

592{ return m_balance; }

◆ get_kvp_tag()

virtual const char * StockTransactionEntry::get_kvp_tag ( )
inlinevirtual

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

577{ return m_kvp_tag; }

◆ has_amount()

virtual bool StockTransactionEntry::has_amount ( ) const
inlinevirtual

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

583{ return false; }

◆ input_new_balance()

virtual bool StockTransactionEntry::input_new_balance ( ) const
inlinevirtual

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

571{ return m_input_new_balance; }

◆ marker_split()

virtual bool StockTransactionEntry::marker_split ( ) const
inlinevirtual

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

584{ return false; }

◆ memo()

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

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

578{ return m_memo; }

◆ print_account()

const char * StockTransactionEntry::print_account ( ) const
virtual

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

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

734{
735 if (!m_account || gnc_numeric_check(amt))
736 return nullptr;
737 auto commodity{xaccAccountGetCommodity(m_account)};
738 auto pinfo{gnc_commodity_print_info(commodity, TRUE)};
739 return xaccPrintAmount(amt, pinfo);
740}
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 769 of file assistant-stock-transaction.cpp.

770{
771 auto price{calculate_price()};
772 if (gnc_numeric_check(price))
773//Translators: "N/A" here means that a commodity doesn't have a valid price.
774 return _("N/A");
775 auto currency{gnc_account_get_currency_or_parent(m_account)};
776 auto pinfo{gnc_price_print_info(currency, TRUE)};
777 return xaccPrintAmount(price, pinfo);
778}
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 712 of file assistant-stock-transaction.cpp.

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

◆ set_account()

virtual void StockTransactionEntry::set_account ( Account account)
inlinevirtual

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

573{ m_account = account; }

◆ set_amount()

virtual void StockTransactionEntry::set_amount ( gnc_numeric  )
inlinevirtual

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

581{}

◆ set_balance()

virtual void StockTransactionEntry::set_balance ( gnc_numeric  balance)
inlinevirtual

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

591{ m_balance = balance; }

◆ set_capitalize()

virtual void StockTransactionEntry::set_capitalize ( bool  capitalize)
inlinevirtual

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

570{}

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

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

◆ set_memo()

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

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

576{ m_memo = memo; }

◆ set_value()

void StockTransactionEntry::set_value ( gnc_numeric  amount)
virtual

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

663{
664 if (gnc_numeric_check (amount))
665 {
667 return;
668 }
669
670 if (gnc_numeric_negative_p (amount))
671 {
672 m_value = gnc_numeric_neg(amount);
673 m_debit_side = !m_debit_side;
674 }
675 else
676 {
677 m_value = amount;
678 }
679 PINFO("Set %s value to %" PRId64 "/%" PRId64, m_action, m_value.num, m_value.denom);
680}
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 683 of file assistant-stock-transaction.cpp.

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

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

◆ m_action

const char* StockTransactionEntry::m_action
protected

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

◆ m_allow_negative

bool StockTransactionEntry::m_allow_negative
protected

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

◆ m_allow_zero

bool StockTransactionEntry::m_allow_zero
protected

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

◆ m_balance

gnc_numeric StockTransactionEntry::m_balance = gnc_numeric_zero()
protected

Definition at line 549 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_input_new_balance

bool StockTransactionEntry::m_input_new_balance = false
protected

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

◆ m_kvp_tag

const char* StockTransactionEntry::m_kvp_tag
protected

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

◆ m_memo

const char* StockTransactionEntry::m_memo
protected

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

◆ m_qof_event_handler

int StockTransactionEntry::m_qof_event_handler
protected

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

◆ m_value

gnc_numeric StockTransactionEntry::m_value
protected

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


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