Removed --reconcile and --reconcile-date.
This commit is contained in:
parent
1b9e7fa7be
commit
e8d2409430
9 changed files with 2 additions and 304 deletions
|
|
@ -70,7 +70,6 @@ libledger_report_la_SOURCES = \
|
|||
src/emacs.cc \
|
||||
src/help.cc \
|
||||
src/derive.cc \
|
||||
src/reconcile.cc \
|
||||
src/quotes.cc
|
||||
|
||||
libledger_report_la_CPPFLAGS = $(lib_cppflags)
|
||||
|
|
@ -125,7 +124,6 @@ pkginclude_HEADERS = \
|
|||
src/help.h \
|
||||
\
|
||||
src/derive.h \
|
||||
src/reconcile.h \
|
||||
src/quotes.h \
|
||||
\
|
||||
src/global.h \
|
||||
|
|
@ -227,7 +225,6 @@ libledger_python_la_SOURCES = \
|
|||
python/py_parser.cc \
|
||||
python/py_predicate.cc \
|
||||
python/py_quotes.cc \
|
||||
python/py_reconcile.cc \
|
||||
python/py_report.cc \
|
||||
python/py_scope.cc \
|
||||
python/py_session.cc \
|
||||
|
|
|
|||
2
doc/NEWS
2
doc/NEWS
|
|
@ -16,6 +16,8 @@
|
|||
|
||||
--descend
|
||||
--descend_if EXPR
|
||||
--reconcile
|
||||
--reconcile-date DATE
|
||||
|
||||
* 2.6.1
|
||||
|
||||
|
|
|
|||
|
|
@ -1,68 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2003-2009, John Wiegley. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of New Artisans LLC nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "pyinterp.h"
|
||||
#include "pyutils.h"
|
||||
#include "reconcile.h"
|
||||
|
||||
#include <boost/python/exception_translator.hpp>
|
||||
#include <boost/python/implicit.hpp>
|
||||
#include <boost/python/args.hpp>
|
||||
|
||||
namespace ledger {
|
||||
|
||||
using namespace boost::python;
|
||||
|
||||
#define EXC_TRANSLATOR(type) \
|
||||
void exc_translate_ ## type(const type& err) { \
|
||||
PyErr_SetString(PyExc_ArithmeticError, err.what()); \
|
||||
}
|
||||
|
||||
//EXC_TRANSLATOR(reconcile_error)
|
||||
|
||||
void export_reconcile()
|
||||
{
|
||||
#if 0
|
||||
class_< reconcile_xacts > ("ReconcileXacts")
|
||||
;
|
||||
#endif
|
||||
|
||||
//register_optional_to_python<amount_t>();
|
||||
|
||||
//implicitly_convertible<string, amount_t>();
|
||||
|
||||
#define EXC_TRANSLATE(type) \
|
||||
register_exception_translator<type>(&exc_translate_ ## type);
|
||||
|
||||
//EXC_TRANSLATE(reconcile_error);
|
||||
}
|
||||
|
||||
} // namespace ledger
|
||||
|
|
@ -62,7 +62,6 @@ void export_output();
|
|||
void export_parser();
|
||||
void export_predicate();
|
||||
void export_quotes();
|
||||
void export_reconcile();
|
||||
void export_report();
|
||||
void export_scope();
|
||||
void export_session();
|
||||
|
|
@ -102,7 +101,6 @@ void initialize_for_python()
|
|||
export_parser();
|
||||
export_predicate();
|
||||
export_quotes();
|
||||
export_reconcile();
|
||||
export_report();
|
||||
export_scope();
|
||||
export_session();
|
||||
|
|
|
|||
14
src/chain.cc
14
src/chain.cc
|
|
@ -32,7 +32,6 @@
|
|||
#include "chain.h"
|
||||
#include "report.h"
|
||||
#include "filters.h"
|
||||
#include "reconcile.h"
|
||||
|
||||
namespace ledger {
|
||||
|
||||
|
|
@ -63,19 +62,6 @@ xact_handler_ptr chain_xact_handlers(report_t& report,
|
|||
// from the running total.
|
||||
handler.reset(new calc_xacts(handler));
|
||||
|
||||
#if 0
|
||||
// reconcile_xacts will pass through only those xacts which can be
|
||||
// reconciled to a given balance (calculated against the xacts which it
|
||||
// receives).
|
||||
if (! report.reconcile_balance.empty()) {
|
||||
date_t cutoff = CURRENT_DATE();
|
||||
if (! report.reconcile_date.empty())
|
||||
cutoff = parse_date(report.reconcile_date);
|
||||
handler.reset(new reconcile_xacts
|
||||
(handler, value_t(report.reconcile_balance), cutoff));
|
||||
}
|
||||
#endif
|
||||
|
||||
// filter_xacts will only pass through xacts matching the
|
||||
// `secondary_predicate'.
|
||||
if (report.HANDLED(only_))
|
||||
|
|
|
|||
|
|
@ -84,7 +84,6 @@
|
|||
#include <help.h>
|
||||
|
||||
#include <derive.h>
|
||||
#include <reconcile.h>
|
||||
#include <quotes.h>
|
||||
#include <emacs.h>
|
||||
#include <csv.h>
|
||||
|
|
|
|||
123
src/reconcile.cc
123
src/reconcile.cc
|
|
@ -1,123 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2003-2009, John Wiegley. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of New Artisans LLC nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#include "reconcile.h"
|
||||
|
||||
namespace ledger {
|
||||
|
||||
#define xact_next(x) reinterpret_cast<xact_t *>(x->xdata().ptr)
|
||||
#define xact_next_ptr(x) reinterpret_cast<xact_t **>(&x->xdata().ptr)
|
||||
|
||||
static bool search_for_balance(amount_t& amount,
|
||||
xact_t ** prev, xact_t * next)
|
||||
{
|
||||
for (; next; next = xact_next(next)) {
|
||||
xact_t * temp = *prev;
|
||||
*prev = next;
|
||||
|
||||
amount -= next->amount;
|
||||
|
||||
if (! amount) {
|
||||
*xact_next_ptr(next) = NULL;
|
||||
return true;
|
||||
}
|
||||
else if (search_for_balance(amount, xact_next_ptr(next), xact_next(next)))
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
amount += next->amount;
|
||||
|
||||
*prev = temp;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void reconcile_xacts::push_to_handler(xact_t * first)
|
||||
{
|
||||
for (; first; first = xact_next(first))
|
||||
item_handler<xact_t>::operator()(*first);
|
||||
|
||||
item_handler<xact_t>::flush();
|
||||
}
|
||||
|
||||
void reconcile_xacts::flush()
|
||||
{
|
||||
value_t cleared_balance;
|
||||
value_t pending_balance;
|
||||
|
||||
xact_t * first = NULL;
|
||||
xact_t ** last_ptr = &first;
|
||||
|
||||
foreach (xact_t * xact, xacts) {
|
||||
if (! is_valid(cutoff) || xact->date() < cutoff) {
|
||||
switch (xact->state()) {
|
||||
case item_t::CLEARED:
|
||||
cleared_balance += xact->amount;
|
||||
break;
|
||||
case item_t::UNCLEARED:
|
||||
case item_t::PENDING:
|
||||
pending_balance += xact->amount;
|
||||
*last_ptr = xact;
|
||||
last_ptr = xact_next_ptr(xact);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (cleared_balance.type() >= value_t::BALANCE)
|
||||
throw std::runtime_error("Cannot reconcile accounts with multiple commodities");
|
||||
|
||||
cleared_balance.cast(value_t::AMOUNT);
|
||||
balance.cast(value_t::AMOUNT);
|
||||
|
||||
commodity_t& cb_comm = cleared_balance.as_amount().commodity();
|
||||
commodity_t& b_comm = balance.as_amount().commodity();
|
||||
|
||||
balance -= cleared_balance;
|
||||
if (balance.type() >= value_t::BALANCE)
|
||||
throw_(std::runtime_error,
|
||||
"Reconcile balance is not of the same commodity ('"
|
||||
<< b_comm.symbol() << "' != '" << cb_comm.symbol() << "')");
|
||||
|
||||
// If the amount to reconcile is the same as the pending balance,
|
||||
// then assume an exact match and return the results right away.
|
||||
amount_t& to_reconcile(balance.as_amount_lval());
|
||||
pending_balance.cast(value_t::AMOUNT);
|
||||
if (to_reconcile == pending_balance.as_amount() ||
|
||||
search_for_balance(to_reconcile, &first, first)) {
|
||||
push_to_handler(first);
|
||||
} else {
|
||||
throw std::runtime_error("Could not reconcile account!");
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace ledger
|
||||
|
|
@ -1,91 +0,0 @@
|
|||
/*
|
||||
* Copyright (c) 2003-2009, John Wiegley. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are
|
||||
* met:
|
||||
*
|
||||
* - Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* - Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* - Neither the name of New Artisans LLC nor the names of its
|
||||
* contributors may be used to endorse or promote products derived from
|
||||
* this software without specific prior written permission.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
/**
|
||||
* @addtogroup extra
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file reconcile.h
|
||||
* @author John Wiegley
|
||||
*
|
||||
* @ingroup extra
|
||||
*
|
||||
* @brief Brief
|
||||
*
|
||||
* Long.
|
||||
*/
|
||||
#ifndef _RECONCILE_H
|
||||
#define _RECONCILE_H
|
||||
|
||||
#include "value.h"
|
||||
#include "iterators.h"
|
||||
#include "filters.h"
|
||||
|
||||
namespace ledger {
|
||||
|
||||
/**
|
||||
* @brief Brief
|
||||
*
|
||||
* Long.
|
||||
*/
|
||||
class reconcile_xacts : public item_handler<xact_t>
|
||||
{
|
||||
value_t balance;
|
||||
date_t cutoff;
|
||||
xacts_list xacts;
|
||||
|
||||
reconcile_xacts();
|
||||
|
||||
public:
|
||||
reconcile_xacts(xact_handler_ptr handler,
|
||||
const value_t& _balance,
|
||||
const date_t& _cutoff)
|
||||
: item_handler<xact_t>(handler),
|
||||
balance(_balance), cutoff(_cutoff) {
|
||||
TRACE_CTOR(reconcile_xacts,
|
||||
"xact_handler_ptr, const value_t&, const date_t&");
|
||||
}
|
||||
virtual ~reconcile_xacts() throw() {
|
||||
TRACE_DTOR(reconcile_xacts);
|
||||
}
|
||||
|
||||
void push_to_handler(xact_t * first);
|
||||
|
||||
virtual void flush();
|
||||
virtual void operator()(xact_t& xact) {
|
||||
xacts.push_back(&xact);
|
||||
}
|
||||
};
|
||||
|
||||
} // namespace ledger
|
||||
|
||||
#endif // _RECONCILE_H
|
||||
|
|
@ -262,8 +262,6 @@ public:
|
|||
OPTION(report_t, quantity); // -O
|
||||
OPTION(report_t, quarterly);
|
||||
OPTION(report_t, real); // -R
|
||||
OPTION(report_t, reconcile_);
|
||||
OPTION(report_t, reconcile_date_);
|
||||
OPTION(report_t, register_format_);
|
||||
OPTION(report_t, related); // -r
|
||||
OPTION(report_t, related_all);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue