diff options
-rw-r--r-- | doc/sample.dat | 2 | ||||
-rw-r--r-- | src/value.cc | 25 |
2 files changed, 18 insertions, 9 deletions
diff --git a/doc/sample.dat b/doc/sample.dat index 5b34157e..5fdc98d1 100644 --- a/doc/sample.dat +++ b/doc/sample.dat @@ -29,6 +29,8 @@ N $ 2004/05/27 Book Store Expenses:Books $20.00 + Expenses:Cards $40.00 + Expenses:Docs $30.00 Liabilities:MasterCard 2004/05/27 (100) Credit card company diff --git a/src/value.cc b/src/value.cc index 3b9cfb00..6ea286dc 100644 --- a/src/value.cc +++ b/src/value.cc @@ -747,7 +747,7 @@ bool value_t::is_less_than(const value_t& val) const case INTEGER: return as_long() < val.as_long(); case AMOUNT: - return val.as_amount() < as_long(); + return val.as_amount() >= as_long(); default: break; } @@ -1424,20 +1424,27 @@ bool sort_value_is_less_than(const std::list<sort_value_t>& left_values, while (left_iter != left_values.end() && right_iter != right_values.end()) { - DEBUG("value.sort", - "Comparing " << (*left_iter).value << " < " << (*right_iter).value); - - if ((*left_iter).value < (*right_iter).value) - return ! (*left_iter).inverted; - else if ((*left_iter).value > (*right_iter).value) - return (*left_iter).inverted; + // Don't even try to sort balance values + if (! (*left_iter).value.is_balance() && + ! (*right_iter).value.is_balance()) { + DEBUG("value.sort", + "Comparing " << (*left_iter).value << " < " << (*right_iter).value); + if ((*left_iter).value < (*right_iter).value) { + DEBUG("value.sort", " is less"); + return ! (*left_iter).inverted; + } + else if ((*left_iter).value > (*right_iter).value) { + DEBUG("value.sort", " is greater"); + return (*left_iter).inverted; + } + } left_iter++; right_iter++; } assert(left_iter == left_values.end()); assert(right_iter == right_values.end()); - return false; + return true; } } // namespace ledger |