*** empty log message ***

git-svn-id: svn+ssh://svn.gnucash.org/repo/gnucash/trunk@2157 57a11ea4-9604-0410-9ed3-97b8803252fd
This commit is contained in:
Dave Peticolas 2000-04-05 01:57:40 +00:00
parent 50134d0df8
commit 38fcb8da8f
6 changed files with 702 additions and 541 deletions

498
po/de.po
View File

@ -230,7 +230,6 @@ msgstr ""
" ist leer." " ist leer."
#: messages-i18n.c:39 #: messages-i18n.c:39
#, fuzzy
msgid "Changes have been made since the last Save. Save the data to file?" msgid "Changes have been made since the last Save. Save the data to file?"
msgstr "" msgstr ""
"Es wurden Veränderungen seit der letzten Speicherung vorgenommen. " "Es wurden Veränderungen seit der letzten Speicherung vorgenommen. "
@ -358,9 +357,8 @@ msgid "Are you sure you want to delete the current transaction?"
msgstr "Sind sie sicher das sie das %s Konto löschen wollen?" msgstr "Sind sie sicher das sie das %s Konto löschen wollen?"
#: messages-i18n.c:57 #: messages-i18n.c:57
#, fuzzy
msgid "Recalculate Transaction" msgid "Recalculate Transaction"
msgstr "Buchung löschen" msgstr "Buchung neu kalkulieren"
#: messages-i18n.c:58 #: messages-i18n.c:58
msgid "" msgid ""
@ -504,12 +502,10 @@ msgid "Enter the total value of the shares"
msgstr "Geben sie den Gesamtwert der Anteile ein" msgstr "Geben sie den Gesamtwert der Anteile ein"
#: messages-i18n.c:86 #: messages-i18n.c:86
#, fuzzy
msgid "Enter the account to transfer from, or choose one from the list" msgid "Enter the account to transfer from, or choose one from the list"
msgstr "Geben sie ein Transferkonto ein oder wählen sie aus der Liste" msgstr "Geben sie ein Transferkonto ein oder wählen sie aus der Liste"
#: messages-i18n.c:87 #: messages-i18n.c:87
#, fuzzy
msgid "Enter the account to transfer to, or choose one from the list" msgid "Enter the account to transfer to, or choose one from the list"
msgstr "Geben sie ein Transferkonto ein oder wählen sie aus der Liste" msgstr "Geben sie ein Transferkonto ein oder wählen sie aus der Liste"
@ -870,9 +866,8 @@ msgid "Cash"
msgstr "Bargeld" msgstr "Bargeld"
#: messages-i18n.c:176 #: messages-i18n.c:176
#, fuzzy
msgid "Changed" msgid "Changed"
msgstr "Belastung" msgstr "Geändert"
#: messages-i18n.c:177 #: messages-i18n.c:177
msgid "Charge" msgid "Charge"
@ -1232,9 +1227,8 @@ msgid "Second Option"
msgstr "Zweite Option" msgstr "Zweite Option"
#: po/guile_strings.txt:3 #: po/guile_strings.txt:3
#, fuzzy
msgid "Cost" msgid "Cost"
msgstr "Schliessen" msgstr "Kosten"
#: po/guile_strings.txt:5 #: po/guile_strings.txt:5
msgid "Status" msgid "Status"
@ -1263,7 +1257,6 @@ msgid "Stock Portfolio Valuation"
msgstr "" msgstr ""
#: po/guile_strings.txt:15 #: po/guile_strings.txt:15
#, fuzzy
msgid "Stock Portfolio" msgid "Stock Portfolio"
msgstr "Portfolio" msgstr "Portfolio"
@ -1383,7 +1376,6 @@ msgid "Income-Salary-Taxable"
msgstr "zu versteuerndes Einkommen" msgstr "zu versteuerndes Einkommen"
#: po/guile_strings.txt:45 #: po/guile_strings.txt:45
#, fuzzy
msgid "_Stock Portfolio" msgid "_Stock Portfolio"
msgstr "Portfolio" msgstr "Portfolio"
@ -1396,9 +1388,8 @@ msgid "US-style: mm/dd/yyyy"
msgstr "US-Stil : Monat/Tag/Jahr" msgstr "US-Stil : Monat/Tag/Jahr"
#: po/guile_strings.txt:48 #: po/guile_strings.txt:48
#, fuzzy
msgid "You have not selected an account." msgid "You have not selected an account."
msgstr "Wählen sie ein Konto zum Ausbuchen" msgstr "Sie haben kein Konto ausgewählt"
#: po/guile_strings.txt:49 #: po/guile_strings.txt:49
msgid "By default, show every transaction in an account." msgid "By default, show every transaction in an account."
@ -1449,7 +1440,6 @@ msgid "Display the Hello, World report."
msgstr "Den 'Hallo Welt'-Report anzeigen" msgstr "Den 'Hallo Welt'-Report anzeigen"
#: po/guile_strings.txt:64 #: po/guile_strings.txt:64
#, fuzzy
msgid "Gain" msgid "Gain"
msgstr "Gewinn/Verlust" msgstr "Gewinn/Verlust"
@ -1511,7 +1501,6 @@ msgid "Import QIF File - Scripted in Guile."
msgstr "Importieren einer Quicken-Datei (QIF) - Skriptsprache Guile" msgstr "Importieren einer Quicken-Datei (QIF) - Skriptsprache Guile"
#: po/guile_strings.txt:79 #: po/guile_strings.txt:79
#, fuzzy
msgid "Category" msgid "Category"
msgstr "QIF Kategorie" msgstr "QIF Kategorie"
@ -1555,9 +1544,8 @@ msgid "The background color for the active transaction in single mode"
msgstr "Hintergrundfarbe für die aktive Transaktion im 'Single-Mode'" msgstr "Hintergrundfarbe für die aktive Transaktion im 'Single-Mode'"
#: po/guile_strings.txt:88 #: po/guile_strings.txt:88
#, fuzzy
msgid "Loss" msgid "Loss"
msgstr "Gewinn/Verlust" msgstr "Verlust"
#: po/guile_strings.txt:89 #: po/guile_strings.txt:89
msgid "Credit Accounts" msgid "Credit Accounts"
@ -1580,19 +1568,17 @@ msgid "Save window sizes and positions."
msgstr "Speichere Fenstergrössen und -positionen" msgstr "Speichere Fenstergrössen und -positionen"
#: po/guile_strings.txt:95 #: po/guile_strings.txt:95
#, fuzzy
msgid "Number Option" msgid "Number Option"
msgstr "Berichtsoptionen" msgstr "Zahlenoptionen"
#: po/guile_strings.txt:96 #: po/guile_strings.txt:96
#, fuzzy
msgid "There are no accounts to report on." msgid "There are no accounts to report on."
msgstr "Es wurden keine Konten in der Kontenliste ausgewählt." msgstr "Es gibt keine Konten für den Bericht."
#: po/guile_strings.txt:97 #: po/guile_strings.txt:97
#, fuzzy, c-format #, c-format
msgid "Report for %s." msgid "Report for %s."
msgstr "Berichte" msgstr "Bericht für %s."
#: po/guile_strings.txt:98 #: po/guile_strings.txt:98
msgid "Reverse Income and Expense Accounts" msgid "Reverse Income and Expense Accounts"
@ -1690,9 +1676,8 @@ msgid "Date Format Display"
msgstr "Datumsformat-Anzeige" msgstr "Datumsformat-Anzeige"
#: po/guile_strings.txt:124 #: po/guile_strings.txt:124
#, fuzzy
msgid "Ending" msgid "Ending"
msgstr "Zunehmend" msgstr "Endend"
#: po/guile_strings.txt:125 #: po/guile_strings.txt:125
msgid "Reversed-balance account types" msgid "Reversed-balance account types"
@ -1723,9 +1708,8 @@ msgid "Calculate balance sheet up to this date"
msgstr "" msgstr ""
#: po/guile_strings.txt:133 #: po/guile_strings.txt:133
#, fuzzy
msgid "Transaction Report" msgid "Transaction Report"
msgstr "Transaktion" msgstr "Transaktionsbericht"
#: po/guile_strings.txt:134 #: po/guile_strings.txt:134
msgid "Alternate the even and odd colors with each transaction, not each row" msgid "Alternate the even and odd colors with each transaction, not each row"
@ -1816,14 +1800,12 @@ msgid "Do transaction report on this account"
msgstr "Sie können nicht von und zu dem selben Konto transferieren !" msgstr "Sie können nicht von und zu dem selben Konto transferieren !"
#: po/guile_strings.txt:157 #: po/guile_strings.txt:157
#, fuzzy
msgid "Recent Price" msgid "Recent Price"
msgstr "Verkaufspreis" msgstr "letzter Preis"
#: po/guile_strings.txt:158 #: po/guile_strings.txt:158
#, fuzzy
msgid "Net Inflow" msgid "Net Inflow"
msgstr "Datei Info" msgstr "Preis aus dem Netz"
#: po/guile_strings.txt:159 #: po/guile_strings.txt:159
msgid "Single mode default even row background" msgid "Single mode default even row background"
@ -1896,9 +1878,9 @@ msgid "Show both icons and text"
msgstr "Sowohl Icons, als auch Text anzeigen" msgstr "Sowohl Icons, als auch Text anzeigen"
#: po/guile_strings.txt:180 #: po/guile_strings.txt:180
#, fuzzy, c-format #, c-format
msgid "The number option is %s." msgid "The number option is %s."
msgstr "Die Datums-Option ist %s." msgstr "Die Zahlen-Option ist %s."
#: po/guile_strings.txt:181 #: po/guile_strings.txt:181
#, c-format #, c-format
@ -1938,9 +1920,8 @@ msgid "Primary Sort Order"
msgstr "Hauptsortier-Reihenfolge" msgstr "Hauptsortier-Reihenfolge"
#: po/guile_strings.txt:191 #: po/guile_strings.txt:191
#, fuzzy
msgid "Name" msgid "Name"
msgstr "Nummer" msgstr "Name"
#: po/guile_strings.txt:192 #: po/guile_strings.txt:192
msgid "Descending" msgid "Descending"
@ -2073,9 +2054,8 @@ msgid "First Option"
msgstr "Erste Option" msgstr "Erste Option"
#: po/guile_strings.txt:225 #: po/guile_strings.txt:225
#, fuzzy
msgid "Display the Stock Portfolio report." msgid "Display the Stock Portfolio report."
msgstr "Den 'Hallo Welt'-Report anzeigen" msgstr "Den Portfolio-Bericht anzeigen"
#: po/guile_strings.txt:226 #: po/guile_strings.txt:226
msgid "" msgid ""
@ -2165,9 +2145,8 @@ msgid "Primary Key"
msgstr "Primärschlüssel" msgstr "Primärschlüssel"
#: po/guile_strings.txt:247 #: po/guile_strings.txt:247
#, fuzzy
msgid "Ticker" msgid "Ticker"
msgstr "Zeit" msgstr "Ticker"
#: po/guile_strings.txt:248 #: po/guile_strings.txt:248
msgid "Time and Date Option" msgid "Time and Date Option"
@ -2230,19 +2209,16 @@ msgid "Average Balance"
msgstr "Durchschnitt" msgstr "Durchschnitt"
#: po/guile_strings.txt:265 #: po/guile_strings.txt:265
#, fuzzy
msgid "Totals" msgid "Totals"
msgstr "Gesamt" msgstr "Gesamt"
#: po/guile_strings.txt:266 #: po/guile_strings.txt:266
#, fuzzy
msgid "Profit/Loss" msgid "Profit/Loss"
msgstr "Saldo Einnahmen/Ausgaben" msgstr "Saldo Einnahmen/Ausgaben"
#: po/guile_strings.txt:267 #: po/guile_strings.txt:267
#, fuzzy
msgid "Shares" msgid "Shares"
msgstr "Belastung" msgstr "Anteile"
#: po/guile_strings.txt:268 #: po/guile_strings.txt:268
msgid "Show All Transactions" msgid "Show All Transactions"
@ -2377,9 +2353,8 @@ msgstr ""
"Zeige Kreditkarten-, Schulden-, Ausgleichs- und Einkommenskonten umgedreht" "Zeige Kreditkarten-, Schulden-, Ausgleichs- und Einkommenskonten umgedreht"
#: po/guile_strings.txt:300 #: po/guile_strings.txt:300
#, fuzzy
msgid "This is a number option." msgid "This is a number option."
msgstr "Dies ist eine boolsche Option" msgstr "Dies ist eine Zahlen Option"
#: po/guile_strings.txt:302 #: po/guile_strings.txt:302
msgid "Multi mode active split background" msgid "Multi mode active split background"
@ -2416,7 +2391,6 @@ msgid "Something is very wrong with QIF Importing."
msgstr "Es ist etwas nicht in Ordnung mit dem QIF-Import." msgstr "Es ist etwas nicht in Ordnung mit dem QIF-Import."
#: src/gnome/glade-gnc-dialogs.c:74 #: src/gnome/glade-gnc-dialogs.c:74
#, fuzzy
msgid "Import QIF Files" msgid "Import QIF Files"
msgstr "QIF-File importieren" msgstr "QIF-File importieren"
@ -2518,16 +2492,14 @@ msgid "Categories"
msgstr "Kategorien" msgstr "Kategorien"
#: src/gnome/glade-gnc-dialogs.c:506 #: src/gnome/glade-gnc-dialogs.c:506
#, fuzzy
msgid "Select Account" msgid "Select Account"
msgstr "Konto löschen" msgstr "Konto auswählen"
#: src/gnome/glade-gnc-dialogs.c:564 #: src/gnome/glade-gnc-dialogs.c:564
msgid "Selected account:" msgid "Selected account:"
msgstr "Ausgewähltes Konto:" msgstr "Ausgewähltes Konto:"
#: src/gnome/glade-gnc-dialogs.c:573 #: src/gnome/glade-gnc-dialogs.c:573
#, fuzzy
msgid "Description:" msgid "Description:"
msgstr "Beschreibung:" msgstr "Beschreibung:"
@ -2540,7 +2512,6 @@ msgid "Mutual"
msgstr "Investmentfonds" msgstr "Investmentfonds"
#: src/gnome/glade-gnc-dialogs.c:700 #: src/gnome/glade-gnc-dialogs.c:700
#, fuzzy
msgid "Print Preview" msgid "Print Preview"
msgstr "Vorschau" msgstr "Vorschau"
@ -2585,403 +2556,390 @@ msgid "Preview"
msgstr "Vorschau" msgstr "Vorschau"
#: src/gnome/glade-gnc-dialogs.c:1036 #: src/gnome/glade-gnc-dialogs.c:1036
#, fuzzy
msgid "Select Paper Size" msgid "Select Paper Size"
msgstr "Drucker auswählen" msgstr "Papiergrösse auswählen"
#: src/gnome/glade-gnc-dialogs.c:1149 #: src/gnome/glade-gnc-dialogs.c:1149
#, fuzzy
msgid "Print Check" msgid "Print Check"
msgstr "Einstellungen drucken" msgstr "Scheck drucken"
#: src/gnome/glade-gnc-dialogs.c:1178 #: src/gnome/glade-gnc-dialogs.c:1178
#, fuzzy
msgid "Check format:" msgid "Check format:"
msgstr "Datumsformat:" msgstr "Scheckformat:"
#: src/gnome/glade-gnc-dialogs.c:1186 src/gnome/glade-gnc-dialogs.c:1356 #: src/gnome/glade-gnc-dialogs.c:1186 src/gnome/glade-gnc-dialogs.c:1356
#, fuzzy
msgid "Check position:" msgid "Check position:"
msgstr "Girokonto" msgstr "Scheckposition:"
#: src/gnome/glade-gnc-dialogs.c:1216 #: src/gnome/glade-gnc-dialogs.c:1216
msgid "Quicken/QuickBooks (tm)" msgid "Quicken/QuickBooks (tm)"
msgstr "" msgstr "Quicken/Quickbooks (tm)"
#: src/gnome/glade-gnc-dialogs.c:1219 src/gnome/glade-gnc-dialogs.c:1240 #: src/gnome/glade-gnc-dialogs.c:1219 src/gnome/glade-gnc-dialogs.c:1240
#: src/gnome/glade-gnc-dialogs.c:1276 #: src/gnome/glade-gnc-dialogs.c:1276
#, fuzzy
msgid "Custom" msgid "Custom"
msgstr "AutoDepot" msgstr "Üblich"
#: src/gnome/glade-gnc-dialogs.c:1231 #: src/gnome/glade-gnc-dialogs.c:1231
#, fuzzy
msgid "Top" msgid "Top"
msgstr "Zu" msgstr "Anfang/Oben"
#: src/gnome/glade-gnc-dialogs.c:1234 #: src/gnome/glade-gnc-dialogs.c:1234
#, fuzzy
msgid "Middle" msgid "Middle"
msgstr "Datei" msgstr "Mittig"
#: src/gnome/glade-gnc-dialogs.c:1237 #: src/gnome/glade-gnc-dialogs.c:1237
msgid "Bottom" msgid "Bottom"
msgstr "" msgstr "Unten/Ende"
#: src/gnome/glade-gnc-dialogs.c:1252 #: src/gnome/glade-gnc-dialogs.c:1252
msgid "December 31, 2000" msgid "December 31, 2000"
msgstr "" msgstr "Dezember 31., 2000"
#: src/gnome/glade-gnc-dialogs.c:1255 #: src/gnome/glade-gnc-dialogs.c:1255
msgid "31 December, 2000" msgid "31 December, 2000"
msgstr "" msgstr "31. Dezember, 2000"
#: src/gnome/glade-gnc-dialogs.c:1258 #: src/gnome/glade-gnc-dialogs.c:1258
#, fuzzy
msgid "Dec 31, 2000" msgid "Dec 31, 2000"
msgstr "Dezimal (1,000.00)" msgstr "Dez 31, 2000"
#: src/gnome/glade-gnc-dialogs.c:1261 #: src/gnome/glade-gnc-dialogs.c:1261
msgid "31 Dec, 2000" msgid "31 Dec, 2000"
msgstr "" msgstr "31. Dez, 2000"
#: src/gnome/glade-gnc-dialogs.c:1264 #: src/gnome/glade-gnc-dialogs.c:1264
msgid "12/31/2000" msgid "12/31/2000"
msgstr "" msgstr "12/31/2000"
#: src/gnome/glade-gnc-dialogs.c:1267 #: src/gnome/glade-gnc-dialogs.c:1267
msgid "12/31/00" msgid "12/31/00"
msgstr "" msgstr "12/31/00"
#: src/gnome/glade-gnc-dialogs.c:1270 #: src/gnome/glade-gnc-dialogs.c:1270
msgid "31/12/2000" msgid "31/12/2000"
msgstr "" msgstr "31/12/2000"
#: src/gnome/glade-gnc-dialogs.c:1273 #: src/gnome/glade-gnc-dialogs.c:1273
msgid "31/12/00" msgid "31/12/00"
msgstr "" msgstr "31/12/00"
#: src/gnome/glade-gnc-dialogs.c:1281 #: src/gnome/glade-gnc-dialogs.c:1281
msgid "Custom check parameters" msgid "Custom check parameters"
msgstr "" msgstr "Allgemeine Scheck-Parameter"
#: src/gnome/glade-gnc-dialogs.c:1316 #: src/gnome/glade-gnc-dialogs.c:1316
#, fuzzy
msgid "Payee:" msgid "Payee:"
msgstr "Belastung" msgstr "Zahlungsempfänger"
#: src/gnome/glade-gnc-dialogs.c:1324 #: src/gnome/glade-gnc-dialogs.c:1324
#, fuzzy
msgid "Date:" msgid "Date:"
msgstr "Datum" msgstr "Datum:"
#: src/gnome/glade-gnc-dialogs.c:1332 #: src/gnome/glade-gnc-dialogs.c:1332
msgid "Amount (words):" msgid "Amount (words):"
msgstr "" msgstr "Betrag (in Worten):"
#: src/gnome/glade-gnc-dialogs.c:1340 #: src/gnome/glade-gnc-dialogs.c:1340
msgid "Amount (numbers):" msgid "Amount (numbers):"
msgstr "" msgstr "Betrag (in Zahlen):"
#: src/gnome/glade-gnc-dialogs.c:1348 #: src/gnome/glade-gnc-dialogs.c:1348
#, fuzzy
msgid "Memo:" msgid "Memo:"
msgstr "Memo" msgstr "Memo:"
#: src/gnome/glade-gnc-dialogs.c:1372 #: src/gnome/glade-gnc-dialogs.c:1372
msgid "Units:" msgid "Units:"
msgstr "" msgstr "Einheiten:"
#: src/gnome/glade-gnc-dialogs.c:1387 #: src/gnome/glade-gnc-dialogs.c:1387
msgid "x" msgid "x"
msgstr "" msgstr "x"
#: src/gnome/glade-gnc-dialogs.c:1457 #: src/gnome/glade-gnc-dialogs.c:1457
#, fuzzy
msgid "Inches" msgid "Inches"
msgstr "Zunahme" msgstr "Inches"
#: src/gnome/glade-gnc-dialogs.c:1460 #: src/gnome/glade-gnc-dialogs.c:1460
msgid "Centimeters" msgid "Centimeters"
msgstr "" msgstr "Zentimeter"
#: src/gnome/glade-gnc-dialogs.c:1463 #: src/gnome/glade-gnc-dialogs.c:1463
msgid "Millimeters" msgid "Millimeters"
msgstr "" msgstr "Millimeter"
#: src/gnome/glade-gnc-dialogs.c:1466 #: src/gnome/glade-gnc-dialogs.c:1466
#, fuzzy
msgid "Points" msgid "Points"
msgstr "Saldo Einnahmen/Ausgaben" msgstr "Punkte"
#: src/gnome/glade-gnc-dialogs.c:1478 #: src/gnome/glade-gnc-dialogs.c:1478
msgid "y" msgid "y"
msgstr "" msgstr "y"
#: src/gnome/print-session.c:230 #: src/gnome/print-session.c:230
msgid "You must select a printer first." msgid "You must select a printer first."
msgstr "Sie müssen erst einen Drucker auswählen" msgstr "Sie müssen erst einen Drucker auswählen"
#~ msgid "Double line mode with multi-line cursor" msgid "Double line mode with multi-line cursor"
#~ msgstr "Doppel-Zeilen Modus mit Multi-Zeilen-Cursor" msgstr "Doppel-Zeilen Modus mit Multi-Zeilen-Cursor"
#~ msgid "Single line mode with multi-line cursor" msgid "Single line mode with multi-line cursor"
#~ msgstr "Einzel-Zeilen Modus mit Multi-Zeilen-Cursor" msgstr "Einzel-Zeilen Modus mit Multi-Zeilen-Cursor"
#~ msgid "Adjust the balance of the selected account" msgid "Adjust the balance of the selected account"
#~ msgstr "Saldo anpassen" msgstr "Saldo anpassen"
#~ msgid "Adjust the balance of the main account for this register" msgid "Adjust the balance of the main account for this register"
#~ msgstr "Anpassen des Saldo" msgstr "Anpassen des Saldo"
#~ msgid "Move to the blank transaction at the bottom of the register" msgid "Move to the blank transaction at the bottom of the register"
#~ msgstr "Springe zur ersten freien Zeile" msgstr "Springe zur ersten freien Zeile"
#~ msgid "Cancel the current transaction" msgid "Cancel the current transaction"
#~ msgstr "Buchung nicht ausführen" msgstr "Buchung nicht ausführen"
#~ msgid "Close this register window" msgid "Close this register window"
#~ msgstr "Fenster schliessen" msgstr "Fenster schliessen"
#~ msgid "Set the date range of this register" msgid "Set the date range of this register"
#~ msgstr "Den Datumsbereich dieses Registers setzen" msgstr "Den Datumsbereich dieses Registers setzen"
#~ msgid "Delete selected account" msgid "Delete selected account"
#~ msgstr "Gewähltes Konto löschen." msgstr "Gewähltes Konto löschen."
#~ msgid "Delete the current transaction" msgid "Delete the current transaction"
#~ msgstr "Buchung löschen" msgstr "Buchung löschen"
#~ msgid "Make a copy of the current transaction" msgid "Make a copy of the current transaction"
#~ msgstr "Aktuelle Buchung kopieren" msgstr "Aktuelle Buchung kopieren"
#~ msgid "Edit the selected account" msgid "Edit the selected account"
#~ msgstr "Gewähltes Konto bearbeiten." msgstr "Gewähltes Konto bearbeiten."
#~ msgid "Edit the main account for this register" msgid "Edit the main account for this register"
#~ msgstr "Bearbeiten des Hauptkonto" msgstr "Bearbeiten des Hauptkonto"
#~ msgid "Exit GnuCash" msgid "Exit GnuCash"
#~ msgstr "GnuCash verlassen." msgstr "GnuCash verlassen."
#~ msgid "Open the GnuCash help window" msgid "Open the GnuCash help window"
#~ msgstr "Das GnuCash-Hilfe-Fenster öffnen" msgstr "Das GnuCash-Hilfe-Fenster öffnen"
#~ msgid "Import a Quicken QIF file" msgid "Import a Quicken QIF file"
#~ msgstr "Importieren einer Quicken QIF-Datei" msgstr "Importieren einer Quicken QIF-Datei"
#~ msgid "Jump to the corresponding transaction in the other account" msgid "Jump to the corresponding transaction in the other account"
#~ msgstr "Zur passenden Gegentransaktion im Gegenkonto springen" msgstr "Zur passenden Gegentransaktion im Gegenkonto springen"
#~ msgid "Create a new account" msgid "Create a new account"
#~ msgstr "Ein neues Konto eröffnen." msgstr "Ein neues Konto eröffnen."
#~ msgid "Create a new file" msgid "Create a new file"
#~ msgstr "Eine neue Datei anlegen" msgstr "Eine neue Datei anlegen"
#~ msgid "Open the selected account" msgid "Open the selected account"
#~ msgstr "Gewähltes Konto löschen." msgstr "Gewähltes Konto löschen."
#~ msgid "Open the selected account and all its subaccounts" msgid "Open the selected account and all its subaccounts"
#~ msgstr "Öffne das gewählte Konto und alle Sub-Konten" msgstr "Öffne das gewählte Konto und alle Sub-Konten"
#~ msgid "Open a file" msgid "Open a file"
#~ msgstr "Datei öffnen" msgstr "Datei öffnen"
#~ msgid "Open the global preferences dialog" msgid "Open the global preferences dialog"
#~ msgstr "Allgemeine Optionen" msgstr "Allgemeine Optionen"
#~ msgid "Reconcile the selected account" msgid "Reconcile the selected account"
#~ msgstr "Gewähltes Konto ausgleichen" msgstr "Gewähltes Konto ausgleichen"
#~ msgid "Reconcile the main account for this register" msgid "Reconcile the main account for this register"
#~ msgstr "Ausgleichen des Hauptkontos" msgstr "Ausgleichen des Hauptkontos"
#~ msgid "Record the current transaction" msgid "Record the current transaction"
#~ msgstr "Buchung durchführen" msgstr "Buchung durchführen"
#~ msgid "Save the file to disk" msgid "Save the file to disk"
#~ msgstr "Speichern dieser Datei" msgstr "Speichern dieser Datei"
#~ msgid "Identify and fix problems in the account" msgid "Identify and fix problems in the account"
#~ msgstr "Identifizieren und Beseitigen von Problemen in diesem Konto" msgstr "Identifizieren und Beseitigen von Problemen in diesem Konto"
#~ msgid "Identify and fix problems in all the accounts" msgid "Identify and fix problems in all the accounts"
#~ msgstr "Identifizieren und Beseitigen von Problemen in allen Konten" msgstr "Identifizieren und Beseitigen von Problemen in allen Konten"
#~ msgid "Identify and fix problems in the account and its subaccounts" msgid "Identify and fix problems in the account and its subaccounts"
#~ msgstr "" msgstr ""
#~ "Identifizieren und Beseitigen von Problemen in diesem Konto und in den " "Identifizieren und Beseitigen von Problemen in diesem Konto und in den "
#~ "Unterkonten" "Unterkonten"
#~ msgid "Identify and fix problems in the accounts of this register" msgid "Identify and fix problems in the accounts of this register"
#~ msgstr "Identifizieren und Beseitigen von Problemen in diesem Konto" msgstr "Identifizieren und Beseitigen von Problemen in diesem Konto"
#~ msgid "Show all of the transactions in the account" msgid "Show all of the transactions in the account"
#~ msgstr "Alle Buchungen anzeigen" msgstr "Alle Buchungen anzeigen"
#~ msgid "Sort by Amount, then Date, then Num" msgid "Sort by Amount, then Date, then Num"
#~ msgstr "Sortieren nach Betrag, Datum und danach nach Nummer" msgstr "Sortieren nach Betrag, Datum und danach nach Nummer"
#~ msgid "Sort by Date, then Num, then Amount" msgid "Sort by Date, then Num, then Amount"
#~ msgstr "Sortieren nach Datum, Nummer und danach nach Summe" msgstr "Sortieren nach Datum, Nummer und danach nach Summe"
#~ msgid "Sort by Description, then Date, then Num" msgid "Sort by Description, then Date, then Num"
#~ msgstr "Sortieren nach Beschreibung, Datum und danach nach Nummer" msgstr "Sortieren nach Beschreibung, Datum und danach nach Nummer"
#~ msgid "Sort by Memo, then Date, then Num" msgid "Sort by Memo, then Date, then Num"
#~ msgstr "Sortieren nach Memo, Datum und danach nach Nummer" msgstr "Sortieren nach Memo, Datum und danach nach Nummer"
#~ msgid "Sort by Num, then Date, then Amount" msgid "Sort by Num, then Date, then Amount"
#~ msgstr "Sortieren nach Nummer, Datum und danach nach Betrag" msgstr "Sortieren nach Nummer, Datum und danach nach Betrag"
#~ msgid "Keep normal account order" msgid "Keep normal account order"
#~ msgstr "Beibehalten der normalen Kontoreihenfolge" msgstr "Beibehalten der normalen Kontoreihenfolge"
#~ msgid "Transfer funds from one account to another" msgid "Transfer funds from one account to another"
#~ msgstr "Transferieren von Währungen von einem Konto zu einem anderen" msgstr "Transferieren von Währungen von einem Konto zu einem anderen"
#~ msgid "_Account" msgid "_Account"
#~ msgstr "Konto" msgstr "Konto"
#~ msgid "_Accounts" msgid "_Accounts"
#~ msgstr "_Konten" msgstr "_Konten"
#~ msgid "_Blank" msgid "_Blank"
#~ msgstr "Leer" msgstr "Leer"
#~ msgid "_Cancel" msgid "_Cancel"
#~ msgstr "Abbrechen" msgstr "Abbrechen"
#~ msgid "_Date Range" msgid "_Date Range"
#~ msgstr "Datumsbereich" msgstr "Datumsbereich"
#~ msgid "_Delete Account" msgid "_Delete Account"
#~ msgstr "Konto löschen" msgstr "Konto löschen"
#~ msgid "_Delete" msgid "_Delete"
#~ msgstr "Löschen" msgstr "Löschen"
#~ msgid "D_uplicate" msgid "D_uplicate"
#~ msgstr "Wiederholen" msgstr "Wiederholen"
#~ msgid "_Edit Account" msgid "_Edit Account"
#~ msgstr "_Konto bearbeiten" msgstr "_Konto bearbeiten"
#~ msgid "_Help" msgid "_Help"
#~ msgstr "_Hilfe" msgstr "_Hilfe"
#~ msgid "_Jump" msgid "_Jump"
#~ msgstr "Springe" msgstr "Springe"
#~ msgid "_Open Account" msgid "_Open Account"
#~ msgstr "_Konto öffnen" msgstr "_Konto öffnen"
#~ msgid "Open S_ubaccounts" msgid "Open S_ubaccounts"
#~ msgstr "Öffnen Unterkonten" msgstr "Öffnen Unterkonten"
#~ msgid "_Record" msgid "_Record"
#~ msgstr "Eintragen" msgstr "Eintragen"
#~ msgid "_Register" msgid "_Register"
#~ msgstr "Register" msgstr "Register"
#~ msgid "_Scrub" msgid "_Scrub"
#~ msgstr "Ausbuchen" msgstr "Ausbuchen"
#~ msgid "Scrub A_ccount" msgid "Scrub A_ccount"
#~ msgstr "Konto ausbuchen" msgstr "Konto ausbuchen"
#~ msgid "Scrub A_ll" msgid "Scrub A_ll"
#~ msgstr "Ausbuchen" msgstr "Ausbuchen"
#~ msgid "Scrub Su_baccounts" msgid "Scrub Su_baccounts"
#~ msgstr "Ausbuchen Unterkonten" msgstr "Ausbuchen Unterkonten"
#~ msgid "Show _All" msgid "Show _All"
#~ msgstr "Alle anzeigen" msgstr "Alle anzeigen"
#~ msgid "Sort _Order" msgid "Sort _Order"
#~ msgstr "Sortierreihenfolge" msgstr "Sortierreihenfolge"
#~ msgid "_Style" msgid "_Style"
#~ msgstr "Stil" msgstr "Stil"
#~ msgid "_Transaction" msgid "_Transaction"
#~ msgstr "Transaktion" msgstr "_Transaktion"
#~ msgid "New File" msgid "New File"
#~ msgstr "Datei öffnen" msgstr "Neue Datei"
#~ msgid "Sort by Amount" msgid "Sort by Amount"
#~ msgstr "Sortiere nach Betrag" msgstr "Sortiere nach Betrag"
#~ msgid "Sort by Date" msgid "Sort by Date"
#~ msgstr "Sortiere nach Datum" msgstr "Sortiere nach Datum"
#~ msgid "Sort by Description" msgid "Sort by Description"
#~ msgstr "Sortiere nach Beschreibung" msgstr "Sortiere nach Beschreibung"
#~ msgid "Sort by Memo" msgid "Sort by Memo"
#~ msgstr "Sortiere nach Memo" msgstr "Sortiere nach Memo"
#~ msgid "Sort by Num" msgid "Sort by Num"
#~ msgstr "Sortiere nach Nummer" msgstr "Sortiere nach Nummer"
#~ msgid "Standard order" msgid "Standard order"
#~ msgstr "Standard Order" msgstr "Standard Order"
#~ msgid "Blank" msgid "Blank"
#~ msgstr "Leer" msgstr "Leer"
#~ msgid "Cancel" msgid "Cancel"
#~ msgstr "Abbrechen" msgstr "Abbrechen"
#~ msgid "Close" msgid "Close"
#~ msgstr "Schliessen" msgstr "Schliessen"
#~ msgid "Delete" msgid "Delete"
#~ msgstr "Löschen" msgstr "Löschen"
#~ msgid "Duplicate" msgid "Duplicate"
#~ msgstr "Wiederholen" msgstr "Wiederholen"
#~ msgid "Edit" msgid "Edit"
#~ msgstr "Bearbeiten" msgstr "Bearbeiten"
#~ msgid "Exit" msgid "Exit"
#~ msgstr "Beenden" msgstr "Beenden"
#~ msgid "Import" msgid "Import"
#~ msgstr "QIF-File importieren" msgstr "QIF-File importieren"
#~ msgid "Jump" msgid "Jump"
#~ msgstr "Sprung" msgstr "Sprung"
#~ msgid "New" msgid "New"
#~ msgstr "Neu" msgstr "Neu"
#~ msgid "Open" msgid "Open"
#~ msgstr "Öffnen" msgstr "Öffnen"
#~ msgid "Record" msgid "Record"
#~ msgstr "Eintragen" msgstr "Eintragen"
#~ msgid "Save" msgid "Save"
#~ msgstr "Sichern" msgstr "Sichern"
#~ msgid "Transfer" msgid "Transfer"
#~ msgstr "Transfer" msgstr "Transfer"
#~ msgid "Show transactions on multiple lines with one line for each split" msgid "Show transactions on multiple lines with one line for each split"
#~ msgstr "Transaktionen im Multi-Mode mit einer Zeile pro Split anzeigen" msgstr "Transaktionen im Multi-Mode mit einer Zeile pro Split anzeigen"
#~ msgid "__gui" msgid "__gui"
#~ msgstr "__gui" msgstr "__gui"
#~ msgid "Print Dialog" msgid "Print Dialog"
#~ msgstr "Dialog ausdrucken" msgstr "Dialog ausdrucken"
#~ msgid "Failed to load QIF file. Are you sure it's a QIF file?" msgid "Failed to load QIF file. Are you sure it's a QIF file?"
#~ msgstr "" msgstr ""
#~ "QIF-Import fehlgeschlagen.Sind sie sicher, dass es eine QIF-Datei ist?" "QIF-Import fehlgeschlagen.Sind sie sicher, dass es eine QIF-Datei ist?"

View File

@ -2070,10 +2070,10 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
gncBoolean dynamic; gncBoolean dynamic;
unsigned int changed; unsigned int changed;
int save_phys_col;
int type, style;
int phys_row; int phys_row;
int vrow; int vrow;
int type, style;
int save_phys_col;
int i; int i;
xaccSplitRegisterConfigColors (reg); xaccSplitRegisterConfigColors (reg);
@ -2107,6 +2107,8 @@ xaccSRLoadRegister (SplitRegister *reg, Split **slist,
/* paranoia */ /* paranoia */
if (save_phys_col < 0) if (save_phys_col < 0)
save_phys_col = 0; save_phys_col = 0;
if (save_phys_col >= table->num_phys_cols)
save_phys_col = table->num_phys_cols - 1;
/* count the number of rows, looking for the place we want to go. */ /* count the number of rows, looking for the place we want to go. */
found_split = xaccSRCountRows (reg, slist, find_trans, find_split); found_split = xaccSRCountRows (reg, slist, find_trans, find_split);

40
src/backup.txt Normal file
View File

@ -0,0 +1,40 @@
Currently, backups and log files are automatically stored by the engine
with date/time stamps every time the user hits 'save' in the gui.
(The actual file writing is done by xaccWriteAccountGroupFile() in
in src/engine/FileIOP.h)
Proposed design changes:
------------------------
a) Allow user to configure which directory backups should be put into.
(currently, this is same as current directory). Requires changes to
engine FileIOP.h as well as GUI.
One possible default is ~/.gnucash/data/ (Which is supposed to
be the place where files are saved if no directory is specified.!?)
b) Prompt the user to make a backup every third save. Make this number
configurable. If no default backup path set, prompt to set it,
with suggested path being ~/.gnucash/backups/
c) If save format was XML text, then could use RCS ...
Alternately,
For those that don't know, xdelta is like RCS, but it's designed to
handle any kind of data, including binary, is supposed to work really
well, and transparently handles gzipped data with some form of MD5sum
verification. It's also available in library form. Like RCS it would
give us the ability to do cool things like snapshot the data every so
often for nearly no cost. Want to see what things looked like 6
months ago? Just enter the right date into the "time-warp" dialog :>
For those on Debian systems, just install the xdelta and
libxdelta2-dev packages. Others can get the source from
ftp://www.xcf.berkeley.edu/pub/xdelta/, or just go to
ftp.debian.org:/pub/debian/dists/unstable/main/source/utils/xdelta*.tar.gz
d) Could monitor how many changes (records altered) the user has made,
and could prompt for more frequent saves if lots of editing has
ocurred...

View File

@ -57,6 +57,7 @@
;; like map, but restricted to one dimension, and ;; like map, but restricted to one dimension, and
;; guaranteed to have inorder semantics. ;; guaranteed to have inorder semantics.
;; note: map-in-order is in a SRFI.
(define (gnc:inorder-map the-list fn) (define (gnc:inorder-map the-list fn)
(let loop ((rest the-list) (let loop ((rest the-list)
(collected '())) (collected '()))

View File

@ -3,26 +3,32 @@
;; Report on budget ;; Report on budget
;; Bryan Larsen (blarsen@ada-works.com) ;; Bryan Larsen (blarsen@ada-works.com)
;; situations I want to handle ;; TODO
;; lunch M-F -- funny period ;; properly handle income as well
;; xmas gifts & birthday gifts in same budget line ;; proper totals
;; car repairs -- contingency ;; "upcoming/overdue bills" report
;; car fuel-ups -- known amount, variable period ;; druids to enter budget
;; paychecks & rent payments -- specific dates ;; save/load budget
;; internationalization
;; speedup: replace linear search with hash,
;; create structure functions on load,
;; move subexpressions outside loops
;; clean up report
;; graph budget progress
(require 'sort) (require 'sort)
(require 'record) (require 'record)
(gnc:depend "report-utilities.scm") (gnc:depend "report-utilities.scm")
(gnc:depend "html-generator.scm") (gnc:depend "html-generator.scm")
(gnc:depend "date-utilities.scm") (gnc:depend "date-utilities.scm")
(gnc:depend "acc-create.scm")
;; budget types ;; budget types
;(define gnc:budget-recurring 1) ; regular, recurring budget expenses ;;(define gnc:budget-recurring 1) ; regular, recurring budget expenses
; that happen once per period ;; that happen once per period
;(define gnc:budget-contingency 2) ; a budget item where you estimate a ;;(define gnc:budget-contingency 2) ; a budget item where you estimate a
; value over a long period for ;; value over a long period for
; unexpected expenses. ;; unexpected expenses.
;; convert a date to a defined fraction ;; convert a date to a defined fraction
(define (gnc:date-to-N-fraction caltime type) (define (gnc:date-to-N-fraction caltime type)
(case type (case type
@ -126,92 +132,151 @@
(define budget-entry-structure (define budget-entry-structure
(make-record-type (make-record-type
"budget-entry-structure" "budget-entry-structure"
'(description amount accounts period period-type budget-type '(description accounts subentries)))
window-start window-end)))
(define (make-budget-entry desc amt acct per ptype budget-type start end) (define budget-subentry-structure
(make-record-type
"budget-subentry-structure"
'(description amount period period-type mechanism)))
(define budget-recurring-mechanism-structure
(make-record-type
"budget-recurring-mechanism-structure"
'()))
(define budget-bill-mechanism-structure
(make-record-type
"budget-bill-mechanism-structure"
'(window-start-day window-end-day)))
(define budget-contingency-mechanism-structure
(make-record-type
"budget-contingency-mechanism-structure"
'()))
(define (make-budget-entry desc acct subentries)
((record-constructor budget-entry-structure) ((record-constructor budget-entry-structure)
desc amt acct per ptype budget-type start end)) desc acct subentries))
(define (make-budget-subentry desc amt per ptype mech)
((record-constructor budget-subentry-structure)
desc amt per ptype mech))
(define (make-recurring-mechanism)
((record-constructor budget-recurring-mechanism-structure)))
(define (make-bill-mechanism window-start-day window-end-day)
((record-constructor budget-bill-mechanism-structure)
window-start-day window-end-day))
(define (make-contingency-mechanism)
((record-constructor budget-contingency-mechanism-structure)))
(define gnc:budget-entries (define gnc:budget-entries
(list (list
(make-budget-entry "lunch" 8 '("Food:Lunch") 1 ;; first line is always the "other" collector.
'gnc:budget-day 'gnc:budget-recurring 1 0) (make-budget-entry "other" '()
(make-budget-entry "junk food" 0.50 '("Food:Junk") 1 (list
'gnc:budget-day 'gnc:budget-recurring 1 0) (make-budget-subentry "" 3 1 'gnc:budget-day
(make-budget-entry "car repairs" 2500 '("Car:Repairs") 5 (make-recurring-mechanism))))
'gnc:budget-year 'gnc:budget-contingency 1 0) (make-budget-entry "lunch" '("Expense:Food:Lunch" "Expense:Food:Junk")
(make-budget-entry "rent" 312.50 '("Household:Rent") 1 (list
'gnc:budget-month 'gnc:budget-trigger -1 2) (make-budget-subentry "" 8 1 'gnc:budget-day
(make-budget-entry "car payments" 374.80 '("Car:Loan Payments") 1 (make-recurring-mechanism))))
'gnc:budget-month 'gnc:budget-trigger 13 17) (make-budget-entry "car repairs" '("Expense:Car:Repairs")
(make-budget-entry "car 2" 374.80 '("Car:Loan Payments") 1 (list
'gnc:budget-month 'gnc:budget-trigger 20 20))) (make-budget-subentry "contingency" 2500 5 'gnc:budget-year
(make-contingency-mechanism))
(make-budget-subentry "maintenance" 50 6 'gnc:budget-month
(make-recurring-mechanism))))
(make-budget-entry "rent" '("Expense:Household:Rent")
(list
(make-budget-subentry "" 312.50 1 'gnc:budget-month
(make-bill-mechanism 0 2))))
(make-budget-entry "car payments" '("Expense:Car:Loan Payments")
(list
(make-budget-subentry "" 374.80 1 'gnc:budget-month
(make-bill-mechanism 13 17))))))
(define (budget-entry-get-description budget-entry) (define (budget-entry-get-description budget-entry)
((record-accessor budget-entry-structure 'description) budget-entry)) ((record-accessor budget-entry-structure 'description) budget-entry))
(define (budget-entry-get-amount budget-entry) (define (budget-subentry-get-description subentry)
((record-accessor budget-entry-structure 'amount) budget-entry)) ((record-accessor budget-subentry-structure 'description) subentry))
(define (budget-entry-get-accounts budget-entry) (define (budget-entry-get-accounts budget-entry)
((record-accessor budget-entry-structure 'accounts) budget-entry)) ((record-accessor budget-entry-structure 'accounts) budget-entry))
(define (budget-entry-get-period budget-entry) (define (budget-entry-get-subentries budget-entry)
((record-accessor budget-entry-structure 'period) budget-entry)) ((record-accessor budget-entry-structure 'subentries) budget-entry))
(define (budget-entry-get-period-type budget-entry) (define (budget-subentry-get-amount subentry)
((record-accessor budget-entry-structure 'period-type) budget-entry)) ((record-accessor budget-subentry-structure 'amount) subentry))
(define (budget-entry-get-window-start budget-entry) (define (budget-subentry-get-period subentry)
((record-accessor budget-entry-structure 'window-start) budget-entry)) ((record-accessor budget-subentry-structure 'period) subentry))
(define (budget-entry-get-window-end budget-entry) (define (budget-subentry-get-period-type subentry)
((record-accessor budget-entry-structure 'window-end) budget-entry)) ((record-accessor budget-subentry-structure 'period-type) subentry))
(define (budget-bill-get-window-start-day bill)
((record-accessor budget-bill-mechanism-structure 'window-start-day) bill))
(define (budget-bill-get-window-end-day bill)
((record-accessor budget-bill-mechanism-structure 'window-end-day) bill))
(define (budget-subentry-get-mechanism subentry)
((record-accessor budget-subentry-structure 'mechanism) subentry))
(define (budget-description-html-proc) (define (budget-description-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-generic-cell #f #f #f (html-generic-cell #f #f #f (budget-entry-get-description entry))))
(budget-entry-get-description
(budget-line-get-entry budget-line)))))
(define (budget-amount-html-proc) (define (budget-sub-description-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-entry-get-amount (html-generic-cell #f #f #f (budget-subentry-get-description subentry))))
(budget-line-get-entry budget-line)))))
;; fixme -- only returns the first account in the list
(define (budget-accounts-html-proc) (define (budget-accounts-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-generic-cell (html-generic-cell
#f #f #f #f #f #f
(car (budget-entry-get-accounts (budget-line-get-entry budget-line)))))) (list->string (budget-entry-get-accounts entry)))))
(define (budget-amount-html-proc)
(lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-subentry-get-amount subentry))))
(define (budget-period-html-proc) (define (budget-period-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-number-cell (html-number-cell
#f #f "%i" (budget-entry-get-period (budget-line-get-entry budget-line))))) #f #f "%i" (budget-subentry-get-period subentry))))
(define (budget-period-type-html-proc) (define (budget-period-type-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-generic-cell (html-generic-cell
#f #f #f #f #f #f
(gnc:date-describe-type (gnc:date-describe-type
(budget-entry-get-period-type (budget-line-get-entry budget-line)))))) (budget-subentry-get-period-type subentry)))))
(define (budget-window-start-html-proc) (define (budget-window-start-day-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-number-cell (let ((mechanism (budget-subentry-get-mechanism subentry)))
#f #f "%i" (budget-entry-get-window-start (budget-line-get-entry budget-line))))) (if ((record-predicate budget-bill-mechanism-structure) mechanism)
(html-number-cell
#f #f "%i" (budget-bill-get-window-start-day mechanism))
(html-generic-cell #f #f #f "")))))
(define (budget-window-end-html-proc) (define (budget-window-end-day-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-number-cell (let ((mechanism (budget-subentry-get-mechanism subentry)))
#f #f "%i" (budget-entry-get-window-end (budget-line-get-entry budget-line))))) (if ((record-predicate budget-bill-mechanism-structure) mechanism)
(html-number-cell
#f #f "%i" (budget-bill-get-window-end-day mechanism))
(html-generic-cell #f #f #f "")))))
;; budget report: a vector with indexes corresponding to the budget ;; budget report: a vector with indexes corresponding to the budget
;; 0 - actual: the amount spend / recieved ;; 0 - actual: the amount spend / recieved
;; 1 - budgeted: the budgeted amount. Simply the periods * amount ;; 1 - nominal: the nominal budgeted amount. Simply the periods * amount
;; 2 - num-periods: the number of periods for the line in the report ;; 2 - num-periods: the number of periods for the line in the report
;; 3 - mimimum-expected: minimum you expected to spend during the ;; 3 - mimimum-expected: minimum you expected to spend during the
;; report period ;; report period
@ -222,83 +287,88 @@
(define budget-report-structure (define budget-report-structure
(make-record-type (make-record-type
"budget-report-structure" "budget-report-structure"
'(actual budgeted num-periods minimum-expected maximum-expected '(actual nominal minimum-expected maximum-expected subreports)))
time-remaining num-triggers-upper num-triggers-lower)))
(define (make-empty-budget-report) (define budget-subreport-structure
(make-record-type
"budget-subreport-structure"
'(nominal minimum-expected maximum-expected)))
(define (make-empty-budget-report entry)
((record-constructor budget-report-structure) ((record-constructor budget-report-structure)
0 0 0 0 0 0 0 0)) 0 0 0 0
(map
(lambda (subentry)
(make-empty-subreport))
(budget-entry-get-subentries entry))))
(define (make-empty-subreport)
((record-constructor budget-subreport-structure)
0 0 0))
(define (budget-report-get-subreports brep)
((record-accessor budget-report-structure 'subreports) brep))
(define (budget-report-get-actual brep) (define (budget-report-get-actual brep)
((record-accessor budget-report-structure 'actual) brep)) ((record-accessor budget-report-structure 'actual) brep))
(define (budget-report-get-budgeted brep) (define (budget-report-get-nominal brep)
((record-accessor budget-report-structure 'budgeted) brep)) ((record-accessor budget-report-structure 'nominal) brep))
(define (budget-report-get-num-periods brep) (define (budget-subreport-get-nominal brep)
((record-accessor budget-report-structure 'num-periods) brep)) ((record-accessor budget-subreport-structure 'nominal) brep))
(define (budget-report-get-minimum-expected brep) (define (budget-report-get-minimum-expected brep)
((record-accessor budget-report-structure 'minimum-expected) brep)) ((record-accessor budget-report-structure 'minimum-expected) brep))
(define (budget-subreport-get-minimum-expected brep)
((record-accessor budget-subreport-structure 'minimum-expected) brep))
(define (budget-report-get-maximum-expected brep) (define (budget-report-get-maximum-expected brep)
((record-accessor budget-report-structure 'maximum-expected) brep)) ((record-accessor budget-report-structure 'maximum-expected) brep))
(define (budget-report-get-time-remaining brep) (define (budget-subreport-get-maximum-expected brep)
((record-accessor budget-report-structure 'time-remaining) brep)) ((record-accessor budget-subreport-structure 'maximum-expected) brep))
(define (budget-report-get-num-triggers-upper brep)
((record-accessor budget-report-structure 'num-triggers-upper) brep))
(define (budget-report-get-num-triggers-lower brep)
((record-accessor budget-report-structure 'num-triggers-lower) brep))
(define (budget-actual-html-proc) (define (budget-actual-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-report-get-actual (html-currency-cell #f #f (budget-report-get-actual report))))
(budget-line-get-report budget-line)))))
(define (budget-budgeted-html-proc) (define (budget-nominal-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-report-get-budgeted (html-currency-cell #f #f (budget-report-get-nominal report))))
(budget-line-get-report budget-line)))))
(define (budget-num-periods-html-proc)
(lambda (budget-line)
(html-number-cell #f #f "%.6f" (budget-report-get-num-periods
(budget-line-get-report budget-line)))))
(define (budget-minimum-expected-html-proc) (define (budget-minimum-expected-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-report-get-minimum-expected (html-currency-cell #f #f (budget-report-get-minimum-expected report))))
(budget-line-get-report budget-line)))))
(define (budget-maximum-expected-html-proc) (define (budget-maximum-expected-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-report-get-maximum-expected (html-currency-cell #f #f (budget-report-get-maximum-expected report))))
(budget-line-get-report budget-line)))))
(define (budget-time-remaining-html-proc) (define (budget-sub-nominal-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-number-cell #f #f "%.1f" (budget-report-get-time-remaining (html-currency-cell #f #f (budget-subreport-get-nominal subreport))))
(budget-line-get-report budget-line)))))
(define (budget-num-triggers-upper-html-proc) (define (budget-sub-minimum-expected-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-number-cell #f #f "%.0f" (budget-report-get-num-triggers-upper (html-currency-cell #f #f (budget-subreport-get-minimum-expected subreport))))
(budget-line-get-report budget-line)))))
(define (budget-num-triggers-lower-html-proc) (define (budget-sub-maximum-expected-html-proc)
(lambda (budget-line) (lambda (entry subentry report subreport)
(html-number-cell #f #f "%.0f" (budget-report-get-num-triggers-lower (html-currency-cell #f #f (budget-subreport-get-maximum-expected subreport))))
(budget-line-get-report budget-line)))))
(define (budget-null-html-proc)
(lambda (entry subentry report subreport)
(html-generic-cell
#f #f #f "")))
(define budget-line-structure (define budget-line-structure
(make-record-type "budget-line-structure" (make-record-type "budget-line-structure"
'(entry report))) '(entry report)))
(define (make-budget-line entry report) (define (make-budget-line entry report)
((record-constructor budget-line-structure) entry report)) ((record-constructor budget-line-structure) entry report))
(define (budget-line-get-entry line) (define (budget-line-get-entry line)
((record-accessor budget-line-structure 'entry) line)) ((record-accessor budget-line-structure 'entry) line))
@ -306,6 +376,53 @@
(define (budget-line-get-report line) (define (budget-line-get-report line)
((record-accessor budget-line-structure 'report) line)) ((record-accessor budget-line-structure 'report) line))
(define report-spec-structure
(make-record-type
"report-spec-structure"
'(header format-proc type)))
(define (make-report-spec header format-proc type)
((record-constructor report-spec-structure)
header format-proc type))
(define (report-spec-get-header spec)
((record-accessor report-spec-structure 'header) spec))
(define (report-spec-get-format-proc spec)
((record-accessor report-spec-structure 'format-proc) spec))
(define (report-spec-get-type spec)
((record-accessor report-spec-structure 'type) spec))
(define (budget-line-html line report-specs)
(let ((entry (budget-line-get-entry line))
(report (budget-line-get-report line)))
;;(map-in-order
(map
(lambda (subentry subreport)
(html-table-row-manual
(map
(lambda (specs)
(case (report-spec-get-type specs)
((gnc:report-all)
((report-spec-get-format-proc specs)
entry subentry report subreport))
((gnc:report-first)
(if (eqv? subreport (car (budget-report-get-subreports report)))
((report-spec-get-format-proc specs)
entry subentry report subreport)
((budget-null-html-proc)
entry subentry report subreport)))
((gnc:report-last)
(if (= (cdr subentry) '())
((report-spec-get-format-proc specs)
entry subentry report subreport)
((budget-null-html-proc)
entry subentry report subreport)))
(else (gnc:debug "budget-line-html: invalid type"))))
report-specs)))
(budget-entry-get-subentries entry)
(budget-report-get-subreports report))))
;; add a value to the budget accumulator ;; add a value to the budget accumulator
(define (budget-report-accumulate-actual! value budget-line) (define (budget-report-accumulate-actual! value budget-line)
@ -313,56 +430,90 @@
(budget-line-get-report budget-line) (budget-line-get-report budget-line)
(+ value (budget-report-get-actual (budget-line-get-report budget-line))))) (+ value (budget-report-get-actual (budget-line-get-report budget-line)))))
;; calculate the # of periods on a budget line. (define (budget-subreport-set-min-expected! subreport min-expected)
;; dates are in # seconds after 1970 ((record-modifier budget-subreport-structure 'minimum-expected)
(define (budget-calculate-periods! budget-line begin-date end-date) subreport min-expected))
(let ((entry (budget-line-get-entry budget-line)))
((record-modifier budget-report-structure 'num-periods)
(budget-line-get-report budget-line)
(/ (gnc:date-N-delta begin-date end-date
(budget-entry-get-period-type entry))
(budget-entry-get-period entry)))))
;; calculate the budgeted value. (define (budget-subreport-set-max-expected! subreport max-expected)
;; dependency: budget-calculate-periods! ((record-modifier budget-subreport-structure 'maximum-expected)
(define (budget-calculate-budgeted! budget-line) subreport max-expected))
((record-modifier budget-report-structure 'budgeted)
(define (budget-report-accumulate-min-expected! report min-expected)
((record-modifier budget-report-structure 'minimum-expected) report
(+ min-expected (budget-report-get-minimum-expected report))))
(define (budget-report-accumulate-max-expected! report max-expected)
((record-modifier budget-report-structure 'maximum-expected) report
(+ max-expected (budget-report-get-maximum-expected report))))
;; return the # of budget periods over the report period
(define (budget-num-periods subentry begin-date end-date)
(/ (gnc:date-N-delta begin-date end-date
(budget-subentry-get-period-type subentry))
(budget-subentry-get-period subentry)))
(define (budget-calculate-expected! budget-line begin-date end-date)
(let ((entry (budget-line-get-entry budget-line))
(report (budget-line-get-report budget-line)))
(for-each
(lambda (subentry subreport)
(let ((mechanism (budget-subentry-get-mechanism subentry)))
(cond (((record-predicate
budget-bill-mechanism-structure) mechanism)
(budget-calculate-bill!
subentry subreport mechanism begin-date end-date))
(((record-predicate
budget-recurring-mechanism-structure) mechanism)
(budget-calculate-recurring!
subentry subreport mechanism begin-date end-date))
(((record-predicate
budget-contingency-mechanism-structure) mechanism)
(budget-calculate-contingency!
subentry subreport mechanism begin-date end-date))
(else (gnc:debug "invalid mechanism!")))
(budget-report-accumulate-min-expected!
report (budget-subreport-get-minimum-expected subreport))
(budget-report-accumulate-max-expected!
report (budget-subreport-get-maximum-expected subreport))))
(budget-entry-get-subentries entry)
(budget-report-get-subreports report))))
;; calculate the nominal value.
(define (budget-calculate-nominal! budget-line begin-date end-date)
((record-modifier budget-report-structure 'nominal)
(budget-line-get-report budget-line) (budget-line-get-report budget-line)
(* (budget-entry-get-amount (budget-line-get-entry budget-line)) (apply +
(budget-report-get-num-periods (budget-line-get-report budget-line))))) (map
(lambda (subentry subreport)
(let ((t (* (budget-subentry-get-amount subentry)
(budget-num-periods subentry begin-date end-date))))
((record-modifier budget-subreport-structure 'nominal)
subreport t)
t))
(budget-entry-get-subentries (budget-line-get-entry budget-line))
(budget-report-get-subreports (budget-line-get-report budget-line))))))
;; calculate the values for minimum-expected and maxmimum-expected (define (budget-calculate-recurring! subentry subreport mechanism begin end)
;; dependency: budget-calculate-periods! (let ((np (budget-num-periods subentry begin end))
(define (budget-calculate-expected! budget-line) (amount (budget-subentry-get-amount subentry)))
(let ((brep (budget-line-get-report budget-line)) (budget-subreport-set-min-expected! subreport (* amount (floor np)))
(entry (budget-line-get-entry budget-line))) (budget-subreport-set-max-expected! subreport (* amount (ceiling np)))))
; fixme: contingency type budget entries may have a lower minimum
((record-modifier budget-report-structure 'minimum-expected) brep
(* (budget-entry-get-amount entry)
(floor (budget-report-get-num-periods brep))))
((record-modifier budget-report-structure 'maximum-expected) brep
(* (budget-entry-get-amount entry)
(ceiling (budget-report-get-num-periods brep))))))
;; calculate the amount of time remaining in the budget period (define (budget-calculate-contingency! subentry subreport mechanism begin end)
;; dependency: budget-calculate-periods! (let ((np (budget-num-periods subentry begin end))
(define (budget-calculate-time-remaining! budget-line) (amount (budget-subentry-get-amount subentry)))
(let* ((entry (budget-line-get-entry budget-line)) (let ((min
(brep (budget-line-get-report budget-line)) (max 0 (* (- np 1.0) amount))))
(periods (budget-report-get-num-periods brep))) (budget-subreport-set-min-expected! subreport min)
((record-modifier budget-report-structure 'time-remaining) brep (budget-subreport-set-max-expected! subreport (+ min amount)))))
(* (- (ceiling periods) periods)
(budget-entry-get-period entry)))))
;; calculate the number of times the trigger window occurs in the budget (define (budget-calculate-bill! subentry subreport mechanism begin-date end-date)
;; period (let ((N-type (budget-subentry-get-period-type subentry))
(define (budget-calculate-num-triggers! budget-line begin-date end-date) (window-start (budget-bill-get-window-start-day mechanism))
(let ((entry (budget-line-get-entry budget-line))) (window-end (budget-bill-get-window-end-day mechanism))
(let ((brep (budget-line-get-report budget-line)) (psize (budget-subentry-get-period subentry))
(N-type (budget-entry-get-period-type entry)) (amount (budget-subentry-get-amount subentry)))
(window-start (budget-entry-get-window-start entry))
(window-end (budget-entry-get-window-end entry))
(psize (budget-entry-get-period entry)))
; convert negative numbers to positive numbers ; convert negative numbers to positive numbers
(let ((trig-start-A (if (> window-start 0) (let ((trig-start-A (if (> window-start 0)
window-start window-start
@ -431,26 +582,33 @@
(floor (/ (gnc:date-to-N-fraction (floor (/ (gnc:date-to-N-fraction
begin-date N-type) psize)))))))) begin-date N-type) psize))))))))
; now save 'em into the record ; now save 'em into the record
((record-modifier budget-report-structure 'num-triggers-lower) brep (budget-subreport-set-min-expected! subreport
sure) (* amount sure))
((record-modifier budget-report-structure 'num-triggers-upper) brep (budget-subreport-set-max-expected! subreport
(+ sure possible)))))) (* amount (+ sure possible))))))
;; given an account name, return the budget line ;; given an account name, return the budget line
;; return #f if there is no budget line for that account ;; return #f if there is no budget line for that account
(define (budget-get-line account-name budget) (define (budget-get-line account-name budg)
(cond ((null? budget) #f) (let loop1 ((budget budg))
(else (cond ((null? budget) #f)
(let loop2 (else
((accounts (budget-entry-get-accounts (cond ((budget-get-line-2 account-name (car budget))
(budget-line-get-entry (car budget))))) (car budget))
(cond ((null? accounts) #f) (else (loop1 (cdr budget))))))))
(else
(cond ((or (string=? account-name (car accounts)) ;; I should be able to put this inside budget-get-line, but for some
(loop2 (cdr accounts))) ;; reason, it screws up.
(car budget)) (define (budget-get-line-2 account-name budget-line)
(else (let loop2
(budget-get-line account-name (cdr budget)))))))))) ((accounts (budget-entry-get-accounts
(budget-line-get-entry budget-line))))
(cond ((null? accounts) #f)
(else
(cond ((or (string=? account-name (car accounts))
(loop2 (cdr accounts)))
budget-line)
(else #f))))))
;; register a configuration option for the budget report ;; register a configuration option for the budget report
@ -503,6 +661,73 @@
"How are you doing on your budget?")))) "How are you doing on your budget?"))))
gnc:*budget-report-options*) gnc:*budget-report-options*)
(define gnc:budget-full-report-specs
(list
(make-report-spec
"Description" (budget-description-html-proc) 'gnc:report-first)
(make-report-spec
"Accounts" (budget-accounts-html-proc) 'gnc:report-first)
(make-report-spec
"Description (subs)" (budget-sub-description-html-proc) 'gnc:report-all)
(make-report-spec
"Amount" (budget-amount-html-proc) 'gnc:report-all)
(make-report-spec
"Period" (budget-period-html-proc) 'gnc:report-all)
(make-report-spec
"" (budget-period-type-html-proc) 'gnc:report-all)
(make-report-spec
"Window Start Day" (budget-window-start-day-html-proc) 'gnc:report-all)
(make-report-spec
"Window End Day" (budget-window-end-day-html-proc) 'gnc:report-all)
(make-report-spec
"Actual" (budget-actual-html-proc) 'gnc:report-first)
(make-report-spec
"Nominal (total)" (budget-nominal-html-proc) 'gnc:report-first)
(make-report-spec
"Nominal" (budget-sub-nominal-html-proc) 'gnc:report-all)
(make-report-spec
"Upper Limit (total)" (budget-maximum-expected-html-proc) 'gnc:report-first)
(make-report-spec
"Upper Limit" (budget-sub-maximum-expected-html-proc) 'gnc:report-all)
(make-report-spec
"Lower Limit (total)" (budget-minimum-expected-html-proc) 'gnc:report-first)
(make-report-spec
"Lower Limit" (budget-sub-minimum-expected-html-proc) 'gnc:report-all)))
(define gnc:budget-balance-report-specs
(list
(make-report-spec
"Description" (budget-description-html-proc) 'gnc:report-first)
(make-report-spec
"Accounts" (budget-accounts-html-proc) 'gnc:report-first)
(make-report-spec
"Description (subs)" (budget-sub-description-html-proc) 'gnc:report-all)
(make-report-spec
"Amount" (budget-amount-html-proc) 'gnc:report-all)
(make-report-spec
"Period" (budget-period-html-proc) 'gnc:report-all)
(make-report-spec
"" (budget-period-type-html-proc) 'gnc:report-all)
(make-report-spec
"Window Start Day" (budget-window-start-day-html-proc) 'gnc:report-all)
(make-report-spec
"Window End Day" (budget-window-end-day-html-proc) 'gnc:report-all)
(make-report-spec
"Nominal (total)" (budget-nominal-html-proc) 'gnc:report-first)
(make-report-spec
"Nominal" (budget-sub-nominal-html-proc) 'gnc:report-all)))
(define gnc:budget-status-report-specs
(list
(make-report-spec
"Description" (budget-description-html-proc) 'gnc:report-first)
(make-report-spec
"Upper Limit" (budget-maximum-expected-html-proc) 'gnc:report-first)
(make-report-spec
"Lower Limit" (budget-minimum-expected-html-proc) 'gnc:report-first)
(make-report-spec
"Actual" (budget-actual-html-proc) 'gnc:report-first)))
(gnc:define-report (gnc:define-report
;; version ;; version
1 1
@ -520,124 +745,59 @@
(gnc:option-value enddate)))) (gnc:option-value enddate))))
(budget-list (map (budget-list (map
(lambda (entry) (lambda (entry)
(make-budget-line entry (make-empty-budget-report))) (make-budget-line entry (make-empty-budget-report entry)))
gnc:budget-entries))) gnc:budget-entries)))
(let loop ((group (gnc:get-current-group))) (let loop ((group (gnc:get-current-group)))
(if (not (pointer-token-null? group)) (if (not (pointer-token-null? group))
(gnc:group-map-accounts (gnc:group-map-accounts
(lambda (account) (lambda (account)
(let ((line (if (eqv? (gnc:account-type->symbol (gnc:account-get-type account))
(budget-get-line 'EXPENSE)
(gnc:account-get-full-name account) (let* ((line
budget-list))) (budget-get-line
(if line (gnc:account-get-full-name account)
budget-list))
(line2 (if line line (car budget-list))))
(gnc:for-each-split-in-account (gnc:for-each-split-in-account
account account
(lambda (split) (lambda (split)
(budget-report-accumulate-actual! (budget-report-accumulate-actual!
(gnc:split-get-value split) line)))) (gnc:split-get-value split) line2)))))
(loop (gnc:account-get-children account)))) (loop (gnc:account-get-children account)))
group))) group)))
(for-each (for-each
(lambda (line) (lambda (line)
(begin (begin
(budget-calculate-periods! line begin-date-secs end-date-secs) (budget-calculate-nominal! line begin-date-secs end-date-secs)
(budget-calculate-budgeted! line) (budget-calculate-expected! line begin-date-secs end-date-secs)))
(budget-calculate-expected! line)
(budget-calculate-time-remaining! line)
(budget-calculate-num-triggers! line begin-date-secs end-date-secs)))
budget-list) budget-list)
(let ((report-headers '()) (let ((report-specs
(report-procs '())) (case (gnc:option-value
(case (gnc:option-value (gnc:lookup-option options "Report Options" "View"))
(gnc:lookup-option options "Report Options" "View")) ((full) gnc:budget-full-report-specs)
((full) ((balancing) gnc:budget-balance-report-specs)
(set! report-headers (list ((status) gnc:budget-status-report-specs)
"Description" (else (gnc:debug (list "Invalid view option"
"Amount" (gnc:option-value
"Accounts" (gnc:lookup-option options "Report Options" "View"))))))))
"Period"
""
"Actual"
"Window Start"
"Window End"
"Budgeted"
"Number of Periods"
"Lower Limit"
"Upper Limit"
"Time Remaining"
""
"Num Triggers Upper"
"Num Triggers Lower"))
(set! report-procs (list
budget-description-html-proc
budget-amount-html-proc
budget-accounts-html-proc
budget-period-html-proc
budget-period-type-html-proc
budget-actual-html-proc
budget-window-start-html-proc
budget-window-end-html-proc
budget-budgeted-html-proc
budget-num-periods-html-proc
budget-minimum-expected-html-proc
budget-maximum-expected-html-proc
budget-time-remaining-html-proc
budget-period-type-html-proc
budget-num-triggers-upper-html-proc
budget-num-triggers-lower-html-proc)))
((balancing)
(set! report-headers (list
"Description"
"Accounts"
"Period"
""
"Amount"
"Number of Periods"
"Budgeted"))
(set! report-procs (list
budget-description-html-proc
budget-accounts-html-proc
budget-period-html-proc
budget-period-type-html-proc
budget-amount-html-proc
budget-num-periods-html-proc
budget-budgeted-html-proc)))
((status)
(set! report-headers (list
"Description"
"Time Remaining"
""
"Lower Limit"
"Upper Limit"
"Actual"))
(set! report-procs (list
budget-description-html-proc
budget-time-remaining-html-proc
budget-period-type-html-proc
budget-minimum-expected-html-proc
budget-maximum-expected-html-proc
budget-actual-html-proc)))
(else
(gnc:debug "Invalid view option")))
(list (list
(html-start-document) (html-start-document)
"<p>This is a budget report. It is very preliminary, but you may find it useful. To actually change the budget, currently you have to edit budget-report.scm.</p>" "<p>This is a budget report. It is very preliminary, but you may find it useful. To actually change the budget, currently you have to edit budget-report.scm.</p>"
(html-start-table) (html-start-table)
(html-table-row-manual (html-table-row-manual
(map-in-order ;;(map-in-order
(lambda (item) (html-cell-header item)) (map
report-headers)) (lambda (spec)
(map-in-order (html-cell-header
(report-spec-get-header spec)))
report-specs))
;;(map-in-order
(map
(lambda (line) (lambda (line)
(html-table-row-manual (budget-line-html line report-specs))
(map-in-order
(lambda (proc)
((proc) line))
report-procs)))
budget-list) budget-list)
(html-end-table) (html-end-table)
(html-end-document)))))) (html-end-document))))))

View File

@ -1019,7 +1019,7 @@
;;; We extend MAP to handle arguments of unequal length. ;;; We extend MAP to handle arguments of unequal length.
(define map map-in-order) ;; (define map map-in-order)
;;; filter, remove, partition ;;; filter, remove, partition