r18439 - gnucash/trunk/src/report - Bug #570895: Allow reporting for single budget periods in budget income statement

Christian Stimming cstim at code.gnucash.org
Mon Nov 23 14:58:22 EST 2009


Author: cstim
Date: 2009-11-23 14:58:22 -0500 (Mon, 23 Nov 2009)
New Revision: 18439
Trac: http://svn.gnucash.org/trac/changeset/18439

Modified:
   gnucash/trunk/src/report/report-system/html-utilities.scm
   gnucash/trunk/src/report/report-system/report-system.scm
   gnucash/trunk/src/report/standard-reports/budget-income-statement.scm
Log:
Bug #570895: Allow reporting for single budget periods in budget income statement

Patch by Forest Bond:

The budget income statement would be more useful if it allowed reporting for
single budget periods, rather than always reporting for the entire budget at
once. This patch implements the requested feature.

Modified: gnucash/trunk/src/report/report-system/html-utilities.scm
===================================================================
--- gnucash/trunk/src/report/report-system/html-utilities.scm	2009-11-23 19:46:55 UTC (rev 18438)
+++ gnucash/trunk/src/report/report-system/html-utilities.scm	2009-11-23 19:58:22 UTC (rev 18439)
@@ -786,13 +786,18 @@
 
 
 (define (gnc:html-make-generic-budget-warning report-title-string)
+  (gnc:html-make-generic-simple-warning
+    report-title-string
+    (_ "No budgets exist.  You must create at least one budget.")))
+
+
+(define (gnc:html-make-generic-simple-warning report-title-string message)
   (let ((p (gnc:make-html-text)))
     (gnc:html-text-append!
      p
-     (gnc:html-markup-h2 (string-append (_ report-title-string) ":"))
+     (gnc:html-markup-h2 (string-append report-title-string ":"))
      (gnc:html-markup-h2 "")
-     (gnc:html-markup-p
-       (_ "No budgets exist.  You must create at least one budget.")))
+     (gnc:html-markup-p message))
     p))
 
 

Modified: gnucash/trunk/src/report/report-system/report-system.scm
===================================================================
--- gnucash/trunk/src/report/report-system/report-system.scm	2009-11-23 19:46:55 UTC (rev 18438)
+++ gnucash/trunk/src/report/report-system/report-system.scm	2009-11-23 19:58:22 UTC (rev 18439)
@@ -93,6 +93,7 @@
 (export gnc:html-make-no-account-warning)
 (export gnc:html-make-generic-budget-warning)
 (export gnc:html-make-generic-options-warning)
+(export gnc:html-make-generic-simple-warning)
 (export gnc:html-make-empty-data-warning)
 
 ;; report.scm

Modified: gnucash/trunk/src/report/standard-reports/budget-income-statement.scm
===================================================================
--- gnucash/trunk/src/report/standard-reports/budget-income-statement.scm	2009-11-23 19:46:55 UTC (rev 18438)
+++ gnucash/trunk/src/report/standard-reports/budget-income-statement.scm	2009-11-23 19:58:22 UTC (rev 18439)
@@ -58,6 +58,19 @@
 (define optname-budget (N_ "Budget"))
 (define opthelp-budget (N_ "Budget to use."))
 
+(define optname-use-budget-period-range
+  (N_ "Report for range of budget periods"))
+(define opthelp-use-budget-period-range
+  (N_ "Create report for a budget period range instead of the entire budget."))
+
+(define optname-budget-period-start (N_ "Range start"))
+(define opthelp-budget-period-start
+  (N_ "Select a budget period that begins the reporting range."))
+
+(define optname-budget-period-end (N_ "Range end"))
+(define opthelp-budget-period-end
+  (N_ "Select a budget period that ends the reporting range."))
+
 ;; FIXME this could use an indent option
 
 (define optname-accounts (N_ "Accounts to include"))
@@ -142,7 +155,48 @@
      (gnc:make-budget-option
       gnc:pagename-general optname-budget
       "c" opthelp-budget))
+
+    (add-option
+     (gnc:make-complex-boolean-option
+      gnc:pagename-general
+      optname-use-budget-period-range
+      "d"
+      opthelp-use-budget-period-range
+      #f
+      #f
+      ;; Make budget-period-start and budget-period-end option widgets
+      ;; selectable only when we are running the report for a budget period
+      ;; range.
+      (lambda (value)
+        (gnc-option-db-set-option-selectable-by-name
+          options
+          gnc:pagename-general
+          optname-budget-period-start
+          value)
+        (gnc-option-db-set-option-selectable-by-name
+          options
+          gnc:pagename-general
+          optname-budget-period-end
+          value))))
+
+    (add-option
+     (gnc:make-number-range-option
+      gnc:pagename-general optname-budget-period-start
+      "e" opthelp-budget-period-start
+      ;; FIXME: It would be nice if the max number of budget periods (60) was
+      ;; defined globally somewhere so we could reference it here.  However, it
+      ;; only appears to be defined currently in src/gnome/glade/budget.glade.
+      1 1 60 0 1))
     
+    (add-option
+     (gnc:make-number-range-option
+      gnc:pagename-general optname-budget-period-end
+      "f" opthelp-budget-period-end
+      ;; FIXME: It would be nice if the max number of budget periods (60) was
+      ;; defined globally somewhere so we could reference it here.  However, it
+      ;; only appears to be defined currently in src/gnome/glade/budget.glade.
+      1 1 60 0 1))
+    
     ;; accounts to work on
     (add-option
      (gnc:make-account-list-option
@@ -251,13 +305,25 @@
      (gnc:lookup-option 
       (gnc:report-options report-obj) pagename optname)))
   
-  (define (get-assoc-account-balances-budget budget accountlist get-balance-fn)
+  (define
+    (get-assoc-account-balances-budget
+      budget
+      accountlist
+      period-start
+      period-end
+      get-balance-fn)
     (gnc:get-assoc-account-balances
       accountlist
-      (lambda (account) (get-balance-fn budget account))))
+      (lambda (account)
+        (get-balance-fn budget account period-start period-end))))
 
-  (define (get-budget-account-budget-balance budget account)
-    (gnc:budget-account-get-net budget account #f #f))
+  (define
+    (get-budget-account-budget-balance
+      budget
+      account
+      period-start
+      period-end)
+    (gnc:budget-account-get-net budget account period-start period-end))
 
   (gnc:report-starting reportname)
   
@@ -267,7 +333,30 @@
 	 (company-name (get-option gnc:pagename-general optname-party-name))
          (budget (get-option gnc:pagename-general optname-budget))
          (budget-valid? (and budget (not (null? budget))))
-         (date-tp (if budget-valid? (gnc:budget-get-start-date budget) #f))
+         (use-budget-period-range?
+           (get-option gnc:pagename-general optname-use-budget-period-range))
+         (user-budget-period-start
+           (if use-budget-period-range?
+             (inexact->exact
+               (truncate
+                 (get-option gnc:pagename-general optname-budget-period-start)))
+             #f))
+         (user-budget-period-end
+           (if use-budget-period-range?
+             (inexact->exact
+               (truncate
+                 (get-option gnc:pagename-general optname-budget-period-end)))
+             #f))
+         (period-start
+           (if use-budget-period-range? (- user-budget-period-start 1) #f))
+         (period-end
+           (if use-budget-period-range? user-budget-period-end #f))
+         (date-tp
+           (if budget-valid?
+             (gnc-budget-get-period-start-date
+               budget
+               (if use-budget-period-range? period-start 0))
+             #f))
          (accounts (get-option gnc:pagename-accounts
                                optname-accounts))	 
 	 (depth-limit (get-option gnc:pagename-accounts 
@@ -373,13 +462,21 @@
       ((null? accounts)
         ;; No accounts selected.
         (gnc:html-document-add-object! 
-         doc 
-         (gnc:html-make-no-account-warning 
-	  reportname (gnc:report-id report-obj))))
+          doc 
+          (gnc:html-make-no-account-warning 
+	    reportname (gnc:report-id report-obj))))
       ((not budget-valid?)
         ;; No budget selected.
         (gnc:html-document-add-object!
           doc (gnc:html-make-generic-budget-warning report-title)))
+      ((and use-budget-period-range?
+          (< user-budget-period-end user-budget-period-start))
+        ;; User has selected a range with end period lower than start period.
+        (gnc:html-document-add-object!
+          doc
+          (gnc:html-make-generic-simple-warning
+            report-title
+            (_ "Reporting range end period cannot be less than start period."))))
       (else (begin
         ;; Get all the balances for each of the account types.
         (let* (
@@ -404,7 +501,24 @@
                (revenue-table #f)                  ;; gnc:html-acct-table
                (expense-table #f)                  ;; gnc:html-acct-table
                (budget-name (gnc-budget-get-name budget))
-	       (period-for (string-append " " (_ "for Budget") " " budget-name))
+               (period-for
+                 (if use-budget-period-range?
+                   (if (equal? user-budget-period-start user-budget-period-end)
+                     (sprintf
+                       #f
+                       (_ "for Budget %s Period %u")
+                       budget-name
+                       user-budget-period-start)
+                     (sprintf
+                       #f
+                       (_ "for Budget %s Periods %u - %u")
+                       budget-name
+                       user-budget-period-start
+                       user-budget-period-end))
+                   (sprintf
+                     #f
+                     (_ "for Budget %s")
+                     budget-name)))
 	       )
 
 	  ;; a helper to add a line to our report
@@ -451,6 +565,8 @@
             (get-assoc-account-balances-budget
               budget
               expense-accounts
+              period-start
+              period-end
               get-budget-account-budget-balance))
 
           ;; Total expenses.
@@ -471,6 +587,8 @@
             (get-assoc-account-balances-budget
               budget
               revenue-accounts
+              period-start
+              period-end
               get-budget-account-budget-balance))
 
           ;; Total revenue.
@@ -497,7 +615,8 @@
 	  (gnc:report-percent-done 30)
 
           (gnc:html-document-set-title! 
-            doc (sprintf #f "%s %s %s" company-name report-title budget-name))
+            doc
+            (sprintf #f "%s %s %s" company-name report-title period-for))
 
 	  (set! table-env
 		(list
@@ -569,8 +688,8 @@
 	   (if standard-order? 
 	       exp-table 
 	       inc-table)
-	   (string-append (_ "Net income") period-for)
-	   (string-append (_ "Net loss") period-for)
+	   (string-append (_ "Net income") " " period-for)
+	   (string-append (_ "Net loss") " " period-for)
 	   net-income
 	   (* 2 (- tree-depth 1)) exchange-fn #f #f
 	   )



More information about the gnucash-changes mailing list