From eb62e27fd5481f5e688ade901dcfbfb3477872f4 Mon Sep 17 00:00:00 2001 From: Derek Atkins Date: Thu, 30 Jan 2003 17:42:55 +0000 Subject: [PATCH] * Nathan Neulinger's patch to gnc-split-reg.[ch] to implement a summary-bar "Projected minimum balance". Somewhat fixes #102440. git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@7896 57a11ea4-9604-0410-9ed3-97b8803252fd --- ChangeLog | 3 +++ src/gnome/gnc-split-reg.c | 54 +++++++++++++++++++++++++++++++++++++++ src/gnome/gnc-split-reg.h | 1 + 3 files changed, 58 insertions(+) diff --git a/ChangeLog b/ChangeLog index 3467ec7a3c..a0d4137508 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,9 @@ * po/np.po -- add the proper "Plural" header so it builds again. + * Nathan Neulinger's patch to gnc-split-reg.[ch] to implement + a summary-bar "Projected minimum balance". Somewhat fixes #102440. + 2003-01-29 Matthew Vanecek * src/backend/postgres/Makefile.am: Changed the .sql.c target to diff --git a/src/gnome/gnc-split-reg.c b/src/gnome/gnc-split-reg.c index e4d6b71654..a22bcf59f0 100644 --- a/src/gnome/gnc-split-reg.c +++ b/src/gnome/gnc-split-reg.c @@ -94,6 +94,7 @@ static void gnc_split_reg_change_style (GNCSplitReg *gsr, SplitRegisterStyle sty static GNCPlaceholderType gnc_split_reg_get_placeholder( GNCSplitReg *gsr ); static gnc_numeric gsr_account_present_balance( Account *account ); +static gnc_numeric gsr_account_projectedminimum_balance( Account *account ); static gncUIWidget gnc_split_reg_get_parent( GNCLedgerDisplay *ledger ); static void gsr_create_menus( GNCSplitReg *gsr ); @@ -690,6 +691,9 @@ gsr_redraw_all_cb (GnucashRegister *g_reg, gpointer data) gsr_update_summary_label( gsr->future_label, (AmountGetterFn)xaccAccountGetBalance, leader, print_info, commodity, reverse, euro ); + gsr_update_summary_label( gsr->projectedminimum_label, + (AmountGetterFn)gsr_account_projectedminimum_balance, + leader, print_info, commodity, reverse, euro ); if (gsr->shares_label != NULL) { @@ -1756,6 +1760,7 @@ gsr_create_summary_bar( GNCSplitReg *gsr ) gsr->balance_label = NULL; gsr->reconciled_label = NULL; gsr->future_label = NULL; + gsr->projectedminimum_label = NULL; gsr->shares_label = NULL; gsr->value_label = NULL; @@ -1792,6 +1797,7 @@ gsr_create_summary_bar( GNCSplitReg *gsr ) gsr->future_label = add_summary_label (summarybar, _("Future:")); gsr->cleared_label = add_summary_label (summarybar, _("Cleared:")); gsr->reconciled_label = add_summary_label (summarybar, _("Reconciled:")); + gsr->projectedminimum_label = add_summary_label (summarybar, _("Projected Minimum:")); } else { @@ -2095,6 +2101,54 @@ gsr_account_present_balance (Account *account) return gnc_numeric_zero (); } +/** + * A utility function which retreives the present balance from an Account. + * This should move somewhere more general? + **/ +static +gnc_numeric +gsr_account_projectedminimum_balance (Account *account) +{ + GList *list; + GList *node; + time_t today; + struct tm *tm; + gnc_numeric lowest = gnc_numeric_zero (); + int seen_a_transaction = 0; + + if (!account) + return gnc_numeric_zero (); + + today = time (NULL); + tm = localtime (&today); + tm->tm_hour = 23; + tm->tm_min = 59; + tm->tm_sec = 59; + tm->tm_isdst = -1; + today = mktime (tm); + + list = xaccAccountGetSplitList (account); + for (node = g_list_last (list); node; node = node->prev) + { + Split *split = node->data; + + if (!seen_a_transaction) + { + lowest = xaccSplitGetBalance (split); + seen_a_transaction = 1; + } + + if ( gnc_numeric_compare(xaccSplitGetBalance (split), lowest) < 0 ) + lowest = xaccSplitGetBalance (split); + + if (xaccTransGetDate (xaccSplitGetParent (split)) <= today) + return lowest; + } + + return lowest; +} + + static gncUIWidget gnc_split_reg_get_parent( GNCLedgerDisplay *ledger ) diff --git a/src/gnome/gnc-split-reg.h b/src/gnome/gnc-split-reg.h index 632a72f840..8086e35574 100644 --- a/src/gnome/gnc-split-reg.h +++ b/src/gnome/gnc-split-reg.h @@ -112,6 +112,7 @@ struct _GNCSplitReg { GtkWidget *cleared_label; GtkWidget *reconciled_label; GtkWidget *future_label; + GtkWidget *projectedminimum_label; GtkWidget *shares_label; GtkWidget *value_label;