Merge commit 'dd6185a12091045831fc3e0a0c36217e44762333' into next

This commit is contained in:
Craig Earls 2015-04-05 09:41:44 -07:00
commit 17a267e101
6 changed files with 64 additions and 35 deletions

View file

@ -194,8 +194,10 @@ outside world. This process is called reconciliation (@pxref{Basics of
Reconciliation}) and can be quite onerous. Ledger-mode attempts to make Reconciliation}) and can be quite onerous. Ledger-mode attempts to make
it as painless as possible. it as painless as possible.
In the @file{demo.ledger} buffer type @kbd{C-c C-r}. Emacs will prompt In the @file{demo.ledger} buffer type @kbd{C-c C-r}. If cursor is on an
for an account to reconcile in the Minibuffer. Enter @samp{Checking}. account, Ledger-mode will propose this account, or in the Minibuffer,
will prompt for an account to reconcile. Hit @kbd{RET} if you are happy
with proposed account, or enter @samp{Checking} as example.
Emacs will then prompt for a target value. The target value is the Emacs will then prompt for a target value. The target value is the
amount you want the cleared transactions in the buffer to total. amount you want the cleared transactions in the buffer to total.
Normally this would be the ending value from your bank statement, or the Normally this would be the ending value from your bank statement, or the
@ -383,13 +385,15 @@ transaction.
@end itemize @end itemize
@kindex C-c C-e
@kindex C-c C-c @kindex C-c C-c
@kindex C-c C-e
Clearing complete transactions is done by typing @kbd{C-c C-e} with Typing @kbd{C-c C-c}, depending where is the point, will clear the
point in a transaction. This places an asterisk @samp{*} after the complete transaction, or an individual posting. This places an asterisk
date. Clearing individual postings is done by typing @kbd{C-c C-c} @samp{*} prior to the payee for the complete transaction, or prior to
while in a posting. This places an asterisk prior to the posting. the account for an individual posting. When point is inside
a transaction, specifically on an individual posting, you can still
clear the complete transaction by typing @kbd{C-c C-e}.
@node Formatting Transactions, Deleting Transactions, Marking Transactions, The Ledger Buffer @node Formatting Transactions, Deleting Transactions, Marking Transactions, The Ledger Buffer
@section Formatting Transactions @section Formatting Transactions
@ -550,17 +554,25 @@ about. You can get this from a monthly statement, or from checking your
on-line transaction history. It also helps immensely to know the final on-line transaction history. It also helps immensely to know the final
cleared balance you are aiming for. cleared balance you are aiming for.
Use menu @samp{Reconcile Account} or keyboard shortcut @kbd{C-c C-r} and enter the account Use menu @samp{Reconcile Account} or keyboard shortcut @kbd{C-c C-r} to
you wish to reconcile in the Minibuffer. Ledger-mode is not particular start reconciliation.
about what you enter for the account. You can leave it blank and
@file{*Reconcile*} buffer will show you @emph{all} uncleared If cursor is on an account, Ledger-mode will propose this account, or in
transactions. After you enter the account enter the target amount. the Minibuffer, will prompt for an account to reconcile. Hit @kbd{RET}
Ledger expects you to enter an amount with a commodity. It assumes if you are happy with proposed account, or enter @samp{Checking} as
initially that you are using @samp{$} (USD) as your default commodity. example. Ledger-mode is not particular about what you enter for the
If you are working in a different currency you can change the default in account. You can leave it blank and @file{*Reconcile*} buffer will show
variable @option{ledger-reconcile-default-commodity} to whatever you you @emph{all} uncleared transactions.
need. If you work in multiple commodities simply enter the commoditized
amount (for example @samp{340 VSDX}, for 340 shares of VSDX). After you enter the account enter the target amount. It is helpful to
enter an amount with a commodity. You can also leave it blank, you will
be able to clear transactions but not benefit from balance calculations.
It assumes initially that you are using @samp{$} (USD) as your default
commodity. If you are working in a different currency you can change
the default in variable @option{ledger-reconcile-default-commodity} to
whatever you need. If you work in multiple commodities simply enter the
commoditized amount (for example @samp{340 VSDX}, for 340 shares of
VSDX).
Ledger-mode reconcile cannot currently reconcile accounts that have Ledger-mode reconcile cannot currently reconcile accounts that have
multiple commodities, such as brokerage accounts. You may use multiple commodities, such as brokerage accounts. You may use
@ -596,11 +608,17 @@ mark the transaction if appropriate.
@node Finalize Reconciliation, Adding and Deleting Transactions during Reconciliation, Edit Transactions During Reconciliation, The Reconcile Buffer @node Finalize Reconciliation, Adding and Deleting Transactions during Reconciliation, Edit Transactions During Reconciliation, The Reconcile Buffer
@section Finalize Reconciliation @section Finalize Reconciliation
@cindex reconciliation, finalizing @cindex reconciliation, finalizing
@kindex C-c C-c
@kindex q
Once you have marked all transactions as pending and the cleared balance Once you have marked all transactions as pending and the cleared balance
is correct. Finish the reconciliation by typing @kbd{C-c C-c}. This is correct. Finish the reconciliation by typing @kbd{C-c C-c}. This
marks all pending transactions as cleared and saves the ledger buffer. marks all pending transactions as cleared and saves the ledger buffer.
Type @kbd{q} to close out the reconciliation buffer. If variable
@var{ledger-reconcile-finish-force-quit} is set, the reconciliation
buffer will be killed automatically after @kbd{C-c C-c}.
@node Adding and Deleting Transactions during Reconciliation, Changing Reconciliation Account, Finalize Reconciliation, The Reconcile Buffer @node Adding and Deleting Transactions during Reconciliation, Changing Reconciliation Account, Finalize Reconciliation, The Reconcile Buffer
@section Adding and Deleting Transactions during Reconciliation @section Adding and Deleting Transactions during Reconciliation
@kindex a @kindex a
@ -866,7 +884,7 @@ recurrence relation to be specified. The day names are two character
codes that default to Mo, Tu, We, Th, Fr, Sa, Su, for Monday, Tuesday, codes that default to Mo, Tu, We, Th, Fr, Sa, Su, for Monday, Tuesday,
Wednesday, Thursday, Friday, Saturday, Sunday respectively. You can Wednesday, Thursday, Friday, Saturday, Sunday respectively. You can
change the codes to something more convenient for your locale by change the codes to something more convenient for your locale by
customizing the ledger @var{ledger-schedule-week-days}. They must be two customizing the ledger @option{ledger-schedule-week-days}. They must be two
characters long. characters long.
@ -951,7 +969,7 @@ false toggle between uncleared and cleared @samp{*}.
@item ledger-reconcile-default-date-format @item ledger-reconcile-default-date-format
Date format for the reconcile buffer. Defaults to Date format for the reconcile buffer. Defaults to
ledger-default-date-format. @option{ledger-default-date-format}.
@item ledger-reconcile-target-prompt-string @item ledger-reconcile-target-prompt-string
Prompt for recon target. Defaults to "Target amount for reconciliation ". Prompt for recon target. Defaults to "Target amount for reconciliation ".
@ -964,11 +982,11 @@ header will be displayed. Defaults to "Reconciling account %s\n\n".
@item ledger-reconcile-buffer-line-format @item ledger-reconcile-buffer-line-format
Format string for the ledger reconcile posting format. Available fields Format string for the ledger reconcile posting format. Available fields
are date, status, code, payee, account, amount. The format for each are date, status, code, payee, account, amount. The format for each
field is %WIDTH(FIELD), WIDTH can be preced by a minus sign which mean field is %WIDTH(FIELD), WIDTH can be preceded by a minus sign which mean
to left justify and pad the field. WIDTH is the minimum number of to left justify and pad the field. WIDTH is the minimum number of
characters to display; if string is longer, it is not truncated unless characters to display; if string is longer, it is not truncated unless
ledger-reconcile-buffer-payee-max-chars or @option{ledger-reconcile-buffer-payee-max-chars} or
ledger-reconcile-buffer-account-max-chars is defined. Defaults to @option{ledger-reconcile-buffer-account-max-chars} is defined. Defaults to
"%(date)s %-4(code)s %-50(payee)s %-30(account)s %15(amount)s\n" "%(date)s %-4(code)s %-50(payee)s %-30(account)s %15(amount)s\n"
@item ledger-reconcile-buffer-payee-max-chars @item ledger-reconcile-buffer-payee-max-chars
@ -986,6 +1004,9 @@ ledger file order. Defaults to '(0)'.
If t, prompt for effective date when clearing transactions during If t, prompt for effective date when clearing transactions during
reconciliation. reconciliation.
@item ledger-reconcile-finish-force-quit nil
If t, will force closing reconcile window after @kbd{C-c C-c}.
@end ftable @end ftable
@node Ledger Report Customization Group, Ledger Faces Customization Group, Ledger Reconcile Customization Group, Customization Variables @node Ledger Report Customization Group, Ledger Faces Customization Group, Ledger Reconcile Customization Group, Customization Variables

View file

@ -32,9 +32,9 @@
;; `ledger-single-line-config' macro to form the regex and list of ;; `ledger-single-line-config' macro to form the regex and list of
;; elements ;; elements
(defconst ledger-indent-string "\\(^[ \t]+\\)") (defconst ledger-indent-string "\\(^[ \t]+\\)")
(defconst ledger-status-string "\\([*! ]?\\)") (defconst ledger-status-string "\\(* \\|! \\)?")
(defconst ledger-account-string "[\\[(]?\\(.*?\\)[])]?") (defconst ledger-account-string "[\\[(]?\\(.*?\\)[])]?")
(defconst ledger-separator-string "\\s-\\s-") (defconst ledger-separator-string "\\s-\\s-+")
(defconst ledger-amount-string "\\(-?[0-9]+[\\.,][0-9]*\\)") (defconst ledger-amount-string "\\(-?[0-9]+[\\.,][0-9]*\\)")
(defconst ledger-comment-string "[ \t]*;[ \t]*\\(.*?\\)") (defconst ledger-comment-string "[ \t]*;[ \t]*\\(.*?\\)")
(defconst ledger-nil-string "\\([ \t]\\)") (defconst ledger-nil-string "\\([ \t]\\)")

View file

@ -118,6 +118,11 @@ Possible values are '(date)', '(amount)', '(payee)' or '(0)' for no sorting, i.e
:type 'boolean :type 'boolean
:group 'ledger-reconcile) :group 'ledger-reconcile)
(defcustom ledger-reconcile-finish-force-quit nil
"If t, will force closing reconcile window after \\[ledger-reconcile-finish]."
:type 'boolean
:group 'ledger-reconcile)
;; s-functions below are copied from Magnars' s.el ;; s-functions below are copied from Magnars' s.el
;; prefix ledger-reconcile- is added to not conflict with s.el ;; prefix ledger-reconcile- is added to not conflict with s.el
(defun ledger-reconcile-s-pad-left (len padding s) (defun ledger-reconcile-s-pad-left (len padding s)
@ -314,7 +319,7 @@ Return the number of uncleared xacts found."
(defun ledger-reconcile-finish () (defun ledger-reconcile-finish ()
"Mark all pending posting or transactions as cleared. "Mark all pending posting or transactions as cleared.
Depends on ledger-reconcile-clear-whole-transactions, save the buffers Depends on ledger-reconcile-clear-whole-transactions, save the buffers
and exit reconcile mode" and exit reconcile mode if `ledger-reconcile-finish-force-quit'"
(interactive) (interactive)
(save-excursion (save-excursion
(goto-char (point-min)) (goto-char (point-min))
@ -327,7 +332,8 @@ and exit reconcile mode"
(ledger-toggle-current 'cleared)))) (ledger-toggle-current 'cleared))))
(forward-line 1))) (forward-line 1)))
(ledger-reconcile-save) (ledger-reconcile-save)
(ledger-reconcile-quit)) (when ledger-reconcile-finish-force-quit
(ledger-reconcile-quit)))
(defun ledger-reconcile-quit () (defun ledger-reconcile-quit ()

View file

@ -291,7 +291,7 @@ void report_accounts::flush()
void report_accounts::operator()(post_t& post) void report_accounts::operator()(post_t& post)
{ {
std::map<account_t *, std::size_t>::iterator i = accounts.find(post.account); accounts_report_map::iterator i = accounts.find(post.account);
if (i == accounts.end()) if (i == accounts.end())
accounts.insert(accounts_pair(post.account, 1)); accounts.insert(accounts_pair(post.account, 1));
else else
@ -362,7 +362,7 @@ void report_commodities::operator()(post_t& post)
amount_t temp(post.amount.strip_annotations(report.what_to_keep())); amount_t temp(post.amount.strip_annotations(report.what_to_keep()));
commodity_t& comm(temp.commodity()); commodity_t& comm(temp.commodity());
std::map<commodity_t *, std::size_t>::iterator i = commodities.find(&comm); commodities_report_map::iterator i = commodities.find(&comm);
if (i == commodities.end()) if (i == commodities.end())
commodities.insert(commodities_pair(&comm, 1)); commodities.insert(commodities_pair(&comm, 1));
else else
@ -371,7 +371,7 @@ void report_commodities::operator()(post_t& post)
if (comm.has_annotation()) { if (comm.has_annotation()) {
annotated_commodity_t& ann_comm(as_annotated_commodity(comm)); annotated_commodity_t& ann_comm(as_annotated_commodity(comm));
if (ann_comm.details.price) { if (ann_comm.details.price) {
std::map<commodity_t *, std::size_t>::iterator ii = commodities_report_map::iterator ii =
commodities.find(&ann_comm.details.price->commodity()); commodities.find(&ann_comm.details.price->commodity());
if (ii == commodities.end()) if (ii == commodities.end())
commodities.insert commodities.insert

View file

@ -142,9 +142,10 @@ class report_accounts : public item_handler<post_t>
protected: protected:
report_t& report; report_t& report;
std::map<account_t *, std::size_t, account_compare> accounts;
typedef std::map<account_t *, std::size_t>::value_type accounts_pair; typedef std::map<account_t *, std::size_t>::value_type accounts_pair;
typedef std::map<account_t *, std::size_t, account_compare> accounts_report_map;
accounts_report_map accounts;
public: public:
report_accounts(report_t& _report) : report(_report) { report_accounts(report_t& _report) : report(_report) {
@ -221,9 +222,10 @@ class report_commodities : public item_handler<post_t>
protected: protected:
report_t& report; report_t& report;
std::map<commodity_t *, std::size_t, commodity_compare> commodities;
typedef std::map<commodity_t *, std::size_t>::value_type commodities_pair; typedef std::map<commodity_t *, std::size_t>::value_type commodities_pair;
typedef std::map<commodity_t *, std::size_t, commodity_compare> commodities_report_map;
commodities_report_map commodities;
public: public:
report_commodities(report_t& _report) : report(_report) { report_commodities(report_t& _report) : report(_report) {

View file

@ -29,7 +29,7 @@ class CheckBaselineTests (CheckOptions):
'help', 'help',
'import', 'import',
'no-color', 'no-color',
'no-pager' 'no-pager',
'options', 'options',
'price-exp', 'price-exp',
'revalued-total', 'revalued-total',