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

View File

@ -3,26 +3,32 @@
;; Report on budget
;; Bryan Larsen (blarsen@ada-works.com)
;; situations I want to handle
;; lunch M-F -- funny period
;; xmas gifts & birthday gifts in same budget line
;; car repairs -- contingency
;; car fuel-ups -- known amount, variable period
;; paychecks & rent payments -- specific dates
;; TODO
;; properly handle income as well
;; proper totals
;; "upcoming/overdue bills" report
;; druids to enter budget
;; 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 'record)
(gnc:depend "report-utilities.scm")
(gnc:depend "html-generator.scm")
(gnc:depend "date-utilities.scm")
(gnc:depend "acc-create.scm")
;; budget types
;(define gnc:budget-recurring 1) ; regular, recurring budget expenses
; that happen once per period
;(define gnc:budget-contingency 2) ; a budget item where you estimate a
; value over a long period for
; unexpected expenses.
;;(define gnc:budget-recurring 1) ; regular, recurring budget expenses
;; that happen once per period
;;(define gnc:budget-contingency 2) ; a budget item where you estimate a
;; value over a long period for
;; unexpected expenses.
;; convert a date to a defined fraction
(define (gnc:date-to-N-fraction caltime type)
(case type
@ -126,92 +132,151 @@
(define budget-entry-structure
(make-record-type
"budget-entry-structure"
'(description amount accounts period period-type budget-type
window-start window-end)))
'(description accounts subentries)))
(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)
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
(list
(make-budget-entry "lunch" 8 '("Food:Lunch") 1
'gnc:budget-day 'gnc:budget-recurring 1 0)
(make-budget-entry "junk food" 0.50 '("Food:Junk") 1
'gnc:budget-day 'gnc:budget-recurring 1 0)
(make-budget-entry "car repairs" 2500 '("Car:Repairs") 5
'gnc:budget-year 'gnc:budget-contingency 1 0)
(make-budget-entry "rent" 312.50 '("Household:Rent") 1
'gnc:budget-month 'gnc:budget-trigger -1 2)
(make-budget-entry "car payments" 374.80 '("Car:Loan Payments") 1
'gnc:budget-month 'gnc:budget-trigger 13 17)
(make-budget-entry "car 2" 374.80 '("Car:Loan Payments") 1
'gnc:budget-month 'gnc:budget-trigger 20 20)))
;; first line is always the "other" collector.
(make-budget-entry "other" '()
(list
(make-budget-subentry "" 3 1 'gnc:budget-day
(make-recurring-mechanism))))
(make-budget-entry "lunch" '("Expense:Food:Lunch" "Expense:Food:Junk")
(list
(make-budget-subentry "" 8 1 'gnc:budget-day
(make-recurring-mechanism))))
(make-budget-entry "car repairs" '("Expense:Car:Repairs")
(list
(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)
((record-accessor budget-entry-structure 'description) budget-entry))
(define (budget-entry-get-amount budget-entry)
((record-accessor budget-entry-structure 'amount) budget-entry))
(define (budget-subentry-get-description subentry)
((record-accessor budget-subentry-structure 'description) subentry))
(define (budget-entry-get-accounts budget-entry)
((record-accessor budget-entry-structure 'accounts) budget-entry))
(define (budget-entry-get-period budget-entry)
((record-accessor budget-entry-structure 'period) budget-entry))
(define (budget-entry-get-subentries budget-entry)
((record-accessor budget-entry-structure 'subentries) budget-entry))
(define (budget-entry-get-period-type budget-entry)
((record-accessor budget-entry-structure 'period-type) budget-entry))
(define (budget-subentry-get-amount subentry)
((record-accessor budget-subentry-structure 'amount) subentry))
(define (budget-entry-get-window-start budget-entry)
((record-accessor budget-entry-structure 'window-start) budget-entry))
(define (budget-subentry-get-period subentry)
((record-accessor budget-subentry-structure 'period) subentry))
(define (budget-entry-get-window-end budget-entry)
((record-accessor budget-entry-structure 'window-end) budget-entry))
(define (budget-subentry-get-period-type subentry)
((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)
(lambda (budget-line)
(html-generic-cell #f #f #f
(budget-entry-get-description
(budget-line-get-entry budget-line)))))
(lambda (entry subentry report subreport)
(html-generic-cell #f #f #f (budget-entry-get-description entry))))
(define (budget-amount-html-proc)
(lambda (budget-line)
(html-currency-cell #f #f (budget-entry-get-amount
(budget-line-get-entry budget-line)))))
(define (budget-sub-description-html-proc)
(lambda (entry subentry report subreport)
(html-generic-cell #f #f #f (budget-subentry-get-description subentry))))
;; fixme -- only returns the first account in the list
(define (budget-accounts-html-proc)
(lambda (budget-line)
(lambda (entry subentry report subreport)
(html-generic-cell
#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)
(lambda (budget-line)
(lambda (entry subentry report subreport)
(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)
(lambda (budget-line)
(lambda (entry subentry report subreport)
(html-generic-cell
#f #f #f
(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)
(lambda (budget-line)
(html-number-cell
#f #f "%i" (budget-entry-get-window-start (budget-line-get-entry budget-line)))))
(define (budget-window-start-day-html-proc)
(lambda (entry subentry report subreport)
(let ((mechanism (budget-subentry-get-mechanism subentry)))
(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)
(lambda (budget-line)
(html-number-cell
#f #f "%i" (budget-entry-get-window-end (budget-line-get-entry budget-line)))))
(define (budget-window-end-day-html-proc)
(lambda (entry subentry report subreport)
(let ((mechanism (budget-subentry-get-mechanism subentry)))
(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
;; 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
;; 3 - mimimum-expected: minimum you expected to spend during the
;; report period
@ -222,83 +287,88 @@
(define budget-report-structure
(make-record-type
"budget-report-structure"
'(actual budgeted num-periods minimum-expected maximum-expected
time-remaining num-triggers-upper num-triggers-lower)))
'(actual nominal minimum-expected maximum-expected subreports)))
(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)
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)
((record-accessor budget-report-structure 'actual) brep))
(define (budget-report-get-budgeted brep)
((record-accessor budget-report-structure 'budgeted) brep))
(define (budget-report-get-nominal brep)
((record-accessor budget-report-structure 'nominal) brep))
(define (budget-report-get-num-periods brep)
((record-accessor budget-report-structure 'num-periods) brep))
(define (budget-subreport-get-nominal brep)
((record-accessor budget-subreport-structure 'nominal) brep))
(define (budget-report-get-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)
((record-accessor budget-report-structure 'maximum-expected) brep))
(define (budget-report-get-time-remaining brep)
((record-accessor budget-report-structure 'time-remaining) 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-subreport-get-maximum-expected brep)
((record-accessor budget-subreport-structure 'maximum-expected) brep))
(define (budget-actual-html-proc)
(lambda (budget-line)
(html-currency-cell #f #f (budget-report-get-actual
(budget-line-get-report budget-line)))))
(lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-report-get-actual report))))
(define (budget-budgeted-html-proc)
(lambda (budget-line)
(html-currency-cell #f #f (budget-report-get-budgeted
(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-nominal-html-proc)
(lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-report-get-nominal report))))
(define (budget-minimum-expected-html-proc)
(lambda (budget-line)
(html-currency-cell #f #f (budget-report-get-minimum-expected
(budget-line-get-report budget-line)))))
(lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-report-get-minimum-expected report))))
(define (budget-maximum-expected-html-proc)
(lambda (budget-line)
(html-currency-cell #f #f (budget-report-get-maximum-expected
(budget-line-get-report budget-line)))))
(lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-report-get-maximum-expected report))))
(define (budget-time-remaining-html-proc)
(lambda (budget-line)
(html-number-cell #f #f "%.1f" (budget-report-get-time-remaining
(budget-line-get-report budget-line)))))
(define (budget-sub-nominal-html-proc)
(lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-subreport-get-nominal subreport))))
(define (budget-num-triggers-upper-html-proc)
(lambda (budget-line)
(html-number-cell #f #f "%.0f" (budget-report-get-num-triggers-upper
(budget-line-get-report budget-line)))))
(define (budget-sub-minimum-expected-html-proc)
(lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-subreport-get-minimum-expected subreport))))
(define (budget-num-triggers-lower-html-proc)
(lambda (budget-line)
(html-number-cell #f #f "%.0f" (budget-report-get-num-triggers-lower
(budget-line-get-report budget-line)))))
(define (budget-sub-maximum-expected-html-proc)
(lambda (entry subentry report subreport)
(html-currency-cell #f #f (budget-subreport-get-maximum-expected subreport))))
(define (budget-null-html-proc)
(lambda (entry subentry report subreport)
(html-generic-cell
#f #f #f "")))
(define budget-line-structure
(make-record-type "budget-line-structure"
'(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)
((record-accessor budget-line-structure 'entry) line))
@ -306,6 +376,53 @@
(define (budget-line-get-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
(define (budget-report-accumulate-actual! value budget-line)
@ -313,56 +430,90 @@
(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.
;; dates are in # seconds after 1970
(define (budget-calculate-periods! budget-line begin-date end-date)
(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)))))
(define (budget-subreport-set-min-expected! subreport min-expected)
((record-modifier budget-subreport-structure 'minimum-expected)
subreport min-expected))
;; calculate the budgeted value.
;; dependency: budget-calculate-periods!
(define (budget-calculate-budgeted! budget-line)
((record-modifier budget-report-structure 'budgeted)
(define (budget-subreport-set-max-expected! subreport max-expected)
((record-modifier budget-subreport-structure 'maximum-expected)
subreport max-expected))
(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-entry-get-amount (budget-line-get-entry budget-line))
(budget-report-get-num-periods (budget-line-get-report budget-line)))))
(apply +
(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
;; dependency: budget-calculate-periods!
(define (budget-calculate-expected! budget-line)
(let ((brep (budget-line-get-report budget-line))
(entry (budget-line-get-entry budget-line)))
; 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))))))
(define (budget-calculate-recurring! subentry subreport mechanism begin end)
(let ((np (budget-num-periods subentry begin end))
(amount (budget-subentry-get-amount subentry)))
(budget-subreport-set-min-expected! subreport (* amount (floor np)))
(budget-subreport-set-max-expected! subreport (* amount (ceiling np)))))
;; calculate the amount of time remaining in the budget period
;; dependency: budget-calculate-periods!
(define (budget-calculate-time-remaining! budget-line)
(let* ((entry (budget-line-get-entry budget-line))
(brep (budget-line-get-report budget-line))
(periods (budget-report-get-num-periods brep)))
((record-modifier budget-report-structure 'time-remaining) brep
(* (- (ceiling periods) periods)
(budget-entry-get-period entry)))))
(define (budget-calculate-contingency! subentry subreport mechanism begin end)
(let ((np (budget-num-periods subentry begin end))
(amount (budget-subentry-get-amount subentry)))
(let ((min
(max 0 (* (- np 1.0) amount))))
(budget-subreport-set-min-expected! subreport min)
(budget-subreport-set-max-expected! subreport (+ min amount)))))
;; calculate the number of times the trigger window occurs in the budget
;; period
(define (budget-calculate-num-triggers! budget-line begin-date end-date)
(let ((entry (budget-line-get-entry budget-line)))
(let ((brep (budget-line-get-report budget-line))
(N-type (budget-entry-get-period-type entry))
(window-start (budget-entry-get-window-start entry))
(window-end (budget-entry-get-window-end entry))
(psize (budget-entry-get-period entry)))
(define (budget-calculate-bill! subentry subreport mechanism begin-date end-date)
(let ((N-type (budget-subentry-get-period-type subentry))
(window-start (budget-bill-get-window-start-day mechanism))
(window-end (budget-bill-get-window-end-day mechanism))
(psize (budget-subentry-get-period subentry))
(amount (budget-subentry-get-amount subentry)))
; convert negative numbers to positive numbers
(let ((trig-start-A (if (> window-start 0)
window-start
@ -431,26 +582,33 @@
(floor (/ (gnc:date-to-N-fraction
begin-date N-type) psize))))))))
; now save 'em into the record
((record-modifier budget-report-structure 'num-triggers-lower) brep
sure)
((record-modifier budget-report-structure 'num-triggers-upper) brep
(+ sure possible))))))
(budget-subreport-set-min-expected! subreport
(* amount sure))
(budget-subreport-set-max-expected! subreport
(* amount (+ sure possible))))))
;; given an account name, return the budget line
;; return #f if there is no budget line for that account
(define (budget-get-line account-name budget)
(cond ((null? budget) #f)
(else
(let loop2
((accounts (budget-entry-get-accounts
(budget-line-get-entry (car budget)))))
(cond ((null? accounts) #f)
(else
(cond ((or (string=? account-name (car accounts))
(loop2 (cdr accounts)))
(car budget))
(else
(budget-get-line account-name (cdr budget))))))))))
(define (budget-get-line account-name budg)
(let loop1 ((budget budg))
(cond ((null? budget) #f)
(else
(cond ((budget-get-line-2 account-name (car budget))
(car budget))
(else (loop1 (cdr budget))))))))
;; I should be able to put this inside budget-get-line, but for some
;; reason, it screws up.
(define (budget-get-line-2 account-name budget-line)
(let loop2
((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
@ -503,6 +661,73 @@
"How are you doing on your budget?"))))
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
;; version
1
@ -520,124 +745,59 @@
(gnc:option-value enddate))))
(budget-list (map
(lambda (entry)
(make-budget-line entry (make-empty-budget-report)))
(make-budget-line entry (make-empty-budget-report entry)))
gnc:budget-entries)))
(let loop ((group (gnc:get-current-group)))
(if (not (pointer-token-null? group))
(gnc:group-map-accounts
(lambda (account)
(let ((line
(budget-get-line
(gnc:account-get-full-name account)
budget-list)))
(if line
(if (eqv? (gnc:account-type->symbol (gnc:account-get-type account))
'EXPENSE)
(let* ((line
(budget-get-line
(gnc:account-get-full-name account)
budget-list))
(line2 (if line line (car budget-list))))
(gnc:for-each-split-in-account
account
(lambda (split)
(budget-report-accumulate-actual!
(gnc:split-get-value split) line))))
(loop (gnc:account-get-children account))))
(gnc:split-get-value split) line2)))))
(loop (gnc:account-get-children account)))
group)))
(for-each
(lambda (line)
(begin
(budget-calculate-periods! line begin-date-secs end-date-secs)
(budget-calculate-budgeted! line)
(budget-calculate-expected! line)
(budget-calculate-time-remaining! line)
(budget-calculate-num-triggers! line begin-date-secs end-date-secs)))
(budget-calculate-nominal! line begin-date-secs end-date-secs)
(budget-calculate-expected! line begin-date-secs end-date-secs)))
budget-list)
(let ((report-headers '())
(report-procs '()))
(case (gnc:option-value
(gnc:lookup-option options "Report Options" "View"))
((full)
(set! report-headers (list
"Description"
"Amount"
"Accounts"
"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")))
(let ((report-specs
(case (gnc:option-value
(gnc:lookup-option options "Report Options" "View"))
((full) gnc:budget-full-report-specs)
((balancing) gnc:budget-balance-report-specs)
((status) gnc:budget-status-report-specs)
(else (gnc:debug (list "Invalid view option"
(gnc:option-value
(gnc:lookup-option options "Report Options" "View"))))))))
(list
(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>"
(html-start-table)
(html-table-row-manual
(map-in-order
(lambda (item) (html-cell-header item))
report-headers))
(map-in-order
;;(map-in-order
(map
(lambda (spec)
(html-cell-header
(report-spec-get-header spec)))
report-specs))
;;(map-in-order
(map
(lambda (line)
(html-table-row-manual
(map-in-order
(lambda (proc)
((proc) line))
report-procs)))
(budget-line-html line report-specs))
budget-list)
(html-end-table)
(html-end-document))))))

View File

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