Wired up the "entry" command from 2.x, though it still needs to be ported.
This commit is contained in:
parent
f605e107fc
commit
44518bc640
8 changed files with 72 additions and 107 deletions
|
|
@ -116,8 +116,6 @@ pkginclude_HEADERS = \
|
||||||
src/output.h \
|
src/output.h \
|
||||||
src/emacs.h \
|
src/emacs.h \
|
||||||
src/help.h \
|
src/help.h \
|
||||||
\
|
|
||||||
src/derive.h \
|
|
||||||
src/quotes.h \
|
src/quotes.h \
|
||||||
\
|
\
|
||||||
src/global.h \
|
src/global.h \
|
||||||
|
|
|
||||||
|
|
@ -29,15 +29,27 @@
|
||||||
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
* OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "derive.h"
|
#include "report.h"
|
||||||
#include "session.h"
|
#include "output.h"
|
||||||
#include "iterators.h"
|
|
||||||
|
|
||||||
namespace ledger {
|
namespace ledger {
|
||||||
|
|
||||||
entry_t * derive_new_entry(report_t& report,
|
value_t entry_command(call_scope_t& args)
|
||||||
strings_list::iterator i,
|
{
|
||||||
strings_list::iterator end)
|
report_t& report(find_scope<report_t>(args));
|
||||||
|
scoped_ptr<entry_t> entry(derive_new_entry(report, args.begin(),
|
||||||
|
args.end()));
|
||||||
|
xact_handler_ptr handler
|
||||||
|
(new format_xacts(report, report.HANDLER(print_format_).str()));
|
||||||
|
|
||||||
|
report.entry_report(handler, *entry.get());
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
entry_t * derive_new_entry(report_t& report,
|
||||||
|
value_t::sequence_t::const_iterator i,
|
||||||
|
value_t::sequence_t::const_iterator end)
|
||||||
{
|
{
|
||||||
session_t& session(report.session);
|
session_t& session(report.session);
|
||||||
|
|
||||||
|
|
@ -45,11 +57,11 @@ entry_t * derive_new_entry(report_t& report,
|
||||||
|
|
||||||
entry_t * matching = NULL;
|
entry_t * matching = NULL;
|
||||||
|
|
||||||
added->_date = parse_date(*i++);
|
added->_date = parse_date((*i++).to_string());
|
||||||
if (i == end)
|
if (i == end)
|
||||||
throw std::runtime_error("Too few arguments to 'entry'");
|
throw std::runtime_error("Too few arguments to 'entry'");
|
||||||
|
|
||||||
mask_t regexp(*i++);
|
mask_t regexp((*i++).to_string());
|
||||||
|
|
||||||
entries_list::reverse_iterator j;
|
entries_list::reverse_iterator j;
|
||||||
|
|
||||||
|
|
@ -64,15 +76,16 @@ entry_t * derive_new_entry(report_t& report,
|
||||||
|
|
||||||
added->payee = matching ? matching->payee : regexp.expr.str();
|
added->payee = matching ? matching->payee : regexp.expr.str();
|
||||||
|
|
||||||
|
string arg = (*i).to_string();
|
||||||
if (! matching) {
|
if (! matching) {
|
||||||
account_t * acct;
|
account_t * acct;
|
||||||
if (i == end || ((*i)[0] == '-' || std::isdigit((*i)[0]))) {
|
if (i == end || (arg[0] == '-' || std::isdigit(arg[0]))) {
|
||||||
acct = session.master->find_account("Expenses");
|
acct = session.master->find_account("Expenses");
|
||||||
}
|
}
|
||||||
else if (i != end) {
|
else if (i != end) {
|
||||||
acct = session.master->find_account_re(*i);
|
acct = session.master->find_account_re(arg);
|
||||||
if (! acct)
|
if (! acct)
|
||||||
acct = session.master->find_account(*i);
|
acct = session.master->find_account(arg);
|
||||||
assert(acct);
|
assert(acct);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
@ -80,7 +93,7 @@ entry_t * derive_new_entry(report_t& report,
|
||||||
if (i == end) {
|
if (i == end) {
|
||||||
added->add_xact(new xact_t(acct));
|
added->add_xact(new xact_t(acct));
|
||||||
} else {
|
} else {
|
||||||
xact_t * xact = new xact_t(acct, amount_t(*i++));
|
xact_t * xact = new xact_t(acct, amount_t((*i++).to_string()));
|
||||||
added->add_xact(xact);
|
added->add_xact(xact);
|
||||||
|
|
||||||
if (! xact->amount.commodity()) {
|
if (! xact->amount.commodity()) {
|
||||||
|
|
@ -102,9 +115,9 @@ entry_t * derive_new_entry(report_t& report,
|
||||||
|
|
||||||
if (i != end) {
|
if (i != end) {
|
||||||
if (! acct)
|
if (! acct)
|
||||||
acct = session.master->find_account_re(*i);
|
acct = session.master->find_account_re((*i).to_string());
|
||||||
if (! acct)
|
if (! acct)
|
||||||
acct = session.master->find_account(*i);
|
acct = session.master->find_account((*i).to_string());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! acct) {
|
if (! acct) {
|
||||||
|
|
@ -124,11 +137,11 @@ entry_t * derive_new_entry(report_t& report,
|
||||||
foreach (xact_t * xact, matching->xacts)
|
foreach (xact_t * xact, matching->xacts)
|
||||||
added->add_xact(new xact_t(*xact));
|
added->add_xact(new xact_t(*xact));
|
||||||
}
|
}
|
||||||
else if ((*i)[0] == '-' || std::isdigit((*i)[0])) {
|
else if (arg[0] == '-' || std::isdigit(arg[0])) {
|
||||||
xact_t * m_xact, * xact, * first;
|
xact_t * m_xact, * xact, * first;
|
||||||
m_xact = matching->xacts.front();
|
m_xact = matching->xacts.front();
|
||||||
|
|
||||||
first = xact = new xact_t(m_xact->account, amount_t(*i++));
|
first = xact = new xact_t(m_xact->account, amount_t((*i++).to_string()));
|
||||||
added->add_xact(xact);
|
added->add_xact(xact);
|
||||||
|
|
||||||
if (! xact->amount.commodity())
|
if (! xact->amount.commodity())
|
||||||
|
|
@ -140,9 +153,9 @@ entry_t * derive_new_entry(report_t& report,
|
||||||
added->add_xact(xact);
|
added->add_xact(xact);
|
||||||
|
|
||||||
if (i != end) {
|
if (i != end) {
|
||||||
account_t * acct = session.master->find_account_re(*i);
|
account_t * acct = session.master->find_account_re((*i).to_string());
|
||||||
if (! acct)
|
if (! acct)
|
||||||
acct = session.master->find_account(*i);
|
acct = session.master->find_account((*i).to_string());
|
||||||
assert(acct);
|
assert(acct);
|
||||||
added->xacts.back()->account = acct;
|
added->xacts.back()->account = acct;
|
||||||
}
|
}
|
||||||
|
|
@ -151,7 +164,7 @@ entry_t * derive_new_entry(report_t& report,
|
||||||
account_t * draw_acct = NULL;
|
account_t * draw_acct = NULL;
|
||||||
|
|
||||||
while (i != end) {
|
while (i != end) {
|
||||||
string& re_pat(*i++);
|
string re_pat((*i++).to_string());
|
||||||
account_t * acct = NULL;
|
account_t * acct = NULL;
|
||||||
amount_t * amt = NULL;
|
amount_t * amt = NULL;
|
||||||
|
|
||||||
|
|
@ -177,13 +190,13 @@ entry_t * derive_new_entry(report_t& report,
|
||||||
else
|
else
|
||||||
xact = new xact_t(acct);
|
xact = new xact_t(acct);
|
||||||
} else {
|
} else {
|
||||||
amount_t amount(*i++);
|
amount_t amount((*i++).to_string());
|
||||||
|
|
||||||
strings_list::iterator x = i;
|
value_t::sequence_t::const_iterator x = i;
|
||||||
if (i != end && ++x == end) {
|
if (i != end && ++x == end) {
|
||||||
draw_acct = session.master->find_account_re(*i);
|
draw_acct = session.master->find_account_re((*i).to_string());
|
||||||
if (! draw_acct)
|
if (! draw_acct)
|
||||||
draw_acct = session.master->find_account(*i);
|
draw_acct = session.master->find_account((*i).to_string());
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
59
src/derive.h
59
src/derive.h
|
|
@ -1,59 +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 derive.h
|
|
||||||
* @author John Wiegley
|
|
||||||
*
|
|
||||||
* @ingroup extra
|
|
||||||
*
|
|
||||||
* @brief Brief
|
|
||||||
*
|
|
||||||
* Long.
|
|
||||||
*/
|
|
||||||
#ifndef _DERIVE_H
|
|
||||||
#define _DERIVE_H
|
|
||||||
|
|
||||||
#include "report.h"
|
|
||||||
|
|
||||||
namespace ledger {
|
|
||||||
|
|
||||||
entry_t * derive_new_entry(report_t& report,
|
|
||||||
strings_list::iterator begin,
|
|
||||||
strings_list::iterator end);
|
|
||||||
|
|
||||||
} // namespace ledger
|
|
||||||
|
|
||||||
#endif // _DERIVE_H
|
|
||||||
|
|
@ -80,11 +80,9 @@
|
||||||
|
|
||||||
#include <session.h>
|
#include <session.h>
|
||||||
#include <report.h>
|
#include <report.h>
|
||||||
#include <help.h>
|
|
||||||
|
|
||||||
#include <derive.h>
|
|
||||||
#include <quotes.h>
|
#include <quotes.h>
|
||||||
#include <emacs.h>
|
#include <emacs.h>
|
||||||
|
#include <help.h>
|
||||||
|
|
||||||
#if defined(HAVE_BOOST_PYTHON)
|
#if defined(HAVE_BOOST_PYTHON)
|
||||||
#include <pyinterp.h>
|
#include <pyinterp.h>
|
||||||
|
|
|
||||||
|
|
@ -34,25 +34,6 @@
|
||||||
|
|
||||||
namespace ledger {
|
namespace ledger {
|
||||||
|
|
||||||
namespace {
|
|
||||||
string join_args(call_scope_t& args)
|
|
||||||
{
|
|
||||||
std::ostringstream buf;
|
|
||||||
bool first = true;
|
|
||||||
|
|
||||||
for (std::size_t i = 0; i < args.size(); i++) {
|
|
||||||
if (first) {
|
|
||||||
buf << args[i];
|
|
||||||
first = false;
|
|
||||||
} else {
|
|
||||||
buf << ' ' << args[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return buf.str();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
value_t parse_command(call_scope_t& args)
|
value_t parse_command(call_scope_t& args)
|
||||||
{
|
{
|
||||||
string arg = join_args(args);
|
string arg = join_args(args);
|
||||||
|
|
|
||||||
|
|
@ -521,7 +521,7 @@ expr_t::ptr_op_t report_t::lookup(const string& name)
|
||||||
(reporter<account_t, acct_handler_ptr, &report_t::accounts_report>
|
(reporter<account_t, acct_handler_ptr, &report_t::accounts_report>
|
||||||
(new format_equity(*this, HANDLER(print_format_).str()), *this));
|
(new format_equity(*this, HANDLER(print_format_).str()), *this));
|
||||||
else if (is_eq(p, "entry"))
|
else if (is_eq(p, "entry"))
|
||||||
return NULL; // jww (2009-02-07): NYI
|
return WRAP_FUNCTOR(entry_command);
|
||||||
else if (is_eq(p, "emacs"))
|
else if (is_eq(p, "emacs"))
|
||||||
return NULL; // jww (2009-02-07): NYI
|
return NULL; // jww (2009-02-07): NYI
|
||||||
break;
|
break;
|
||||||
|
|
@ -631,4 +631,21 @@ expr_t::ptr_op_t report_t::lookup(const string& name)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
string join_args(call_scope_t& args)
|
||||||
|
{
|
||||||
|
std::ostringstream buf;
|
||||||
|
bool first = true;
|
||||||
|
|
||||||
|
for (std::size_t i = 0; i < args.size(); i++) {
|
||||||
|
if (first) {
|
||||||
|
buf << args[i];
|
||||||
|
first = false;
|
||||||
|
} else {
|
||||||
|
buf << ' ' << args[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf.str();
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace ledger
|
} // namespace ledger
|
||||||
|
|
|
||||||
10
src/report.h
10
src/report.h
|
|
@ -392,6 +392,16 @@ public:
|
||||||
OPTION(report_t, yearly); // -Y
|
OPTION(report_t, yearly); // -Y
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// jww (2009-02-10): These should perhaps live elsewhere
|
||||||
|
value_t entry_command(call_scope_t& args);
|
||||||
|
|
||||||
|
entry_t * derive_new_entry(report_t& report,
|
||||||
|
value_t::sequence_t::const_iterator i,
|
||||||
|
value_t::sequence_t::const_iterator end);
|
||||||
|
|
||||||
|
string join_args(call_scope_t& args);
|
||||||
|
|
||||||
|
|
||||||
} // namespace ledger
|
} // namespace ledger
|
||||||
|
|
||||||
#endif // _REPORT_H
|
#endif // _REPORT_H
|
||||||
|
|
|
||||||
|
|
@ -182,6 +182,13 @@ public:
|
||||||
args.pop_back();
|
args.pop_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
value_t::sequence_t::const_iterator begin() const {
|
||||||
|
return args.begin();
|
||||||
|
}
|
||||||
|
value_t::sequence_t::const_iterator end() const {
|
||||||
|
return args.end();
|
||||||
|
}
|
||||||
|
|
||||||
std::size_t size() const {
|
std::size_t size() const {
|
||||||
return args.size();
|
return args.size();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue