mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Bug 735769: Enable price and shares cells in a split if it is not in the trans currency.
The label for the cells are changed to "Exch. Rate" and "Oth. Curr." in this case.
This commit is contained in:
parent
668aab4a2b
commit
8d9b3c7c5d
@ -145,6 +145,44 @@ gnc_split_register_get_rbaln (VirtualLocation virt_loc, gpointer user_data, gboo
|
||||
return balance;
|
||||
}
|
||||
|
||||
static gnc_commodity *
|
||||
gnc_split_register_get_split_commodity (SplitRegister *reg,
|
||||
VirtualLocation virt_loc)
|
||||
{
|
||||
CursorClass cursor_class;
|
||||
Account *account;
|
||||
Split *split;
|
||||
|
||||
split = gnc_split_register_get_split (reg, virt_loc.vcell_loc);
|
||||
if (!split)
|
||||
return NULL;
|
||||
|
||||
cursor_class = gnc_split_register_get_cursor_class (reg,
|
||||
virt_loc.vcell_loc);
|
||||
if (cursor_class != CURSOR_CLASS_SPLIT)
|
||||
return NULL;
|
||||
|
||||
account = NULL;
|
||||
|
||||
if (virt_cell_loc_equal (virt_loc.vcell_loc,
|
||||
reg->table->current_cursor_loc.vcell_loc) &&
|
||||
gnc_table_layout_get_cell_changed (reg->table->layout, XFRM_CELL, FALSE))
|
||||
{
|
||||
const char *name;
|
||||
|
||||
name = gnc_table_layout_get_cell_value (reg->table->layout, XFRM_CELL);
|
||||
account = gnc_account_lookup_for_register (gnc_get_current_root_account (), name);
|
||||
}
|
||||
|
||||
if (!account)
|
||||
account = xaccSplitGetAccount (split);
|
||||
|
||||
if (!account)
|
||||
return NULL;
|
||||
|
||||
return xaccAccountGetCommodity(account);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
gnc_split_register_use_security_cells (SplitRegister *reg,
|
||||
VirtualLocation virt_loc)
|
||||
@ -182,7 +220,9 @@ gnc_split_register_use_security_cells (SplitRegister *reg,
|
||||
|
||||
if (xaccTransUseTradingAccounts (xaccSplitGetParent (split)))
|
||||
{
|
||||
if (!gnc_commodity_is_iso(xaccAccountGetCommodity(account)))
|
||||
gnc_commodity *commod = xaccAccountGetCommodity(account);
|
||||
if (!gnc_commodity_is_iso(commod) ||
|
||||
!gnc_commodity_equal(commod, xaccTransGetCurrency(xaccSplitGetParent(split))))
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -341,11 +381,16 @@ gnc_split_register_get_price_label (VirtualLocation virt_loc,
|
||||
gpointer user_data)
|
||||
{
|
||||
SplitRegister *reg = user_data;
|
||||
gnc_commodity *commod;
|
||||
|
||||
if (!gnc_split_register_use_security_cells (reg, virt_loc))
|
||||
return NULL;
|
||||
|
||||
return _("Price");
|
||||
commod = gnc_split_register_get_split_commodity (reg, virt_loc);
|
||||
if (!commod || !gnc_commodity_is_iso(commod))
|
||||
return _("Price");
|
||||
else
|
||||
return _("Exch. Rate");
|
||||
}
|
||||
|
||||
static const char *
|
||||
@ -353,11 +398,16 @@ gnc_split_register_get_shares_label (VirtualLocation virt_loc,
|
||||
gpointer user_data)
|
||||
{
|
||||
SplitRegister *reg = user_data;
|
||||
gnc_commodity *commod;
|
||||
|
||||
if (!gnc_split_register_use_security_cells (reg, virt_loc))
|
||||
return NULL;
|
||||
|
||||
return _("Shares");
|
||||
commod = gnc_split_register_get_split_commodity (reg, virt_loc);
|
||||
if (!commod || !gnc_commodity_is_iso(commod))
|
||||
return _("Shares");
|
||||
else
|
||||
return _("Oth. Curr.");
|
||||
}
|
||||
|
||||
static const char *
|
||||
|
Loading…
Reference in New Issue
Block a user