diff options
-rw-r--r-- | reconcile.cc | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/reconcile.cc b/reconcile.cc index 555f3d60..9d6cae70 100644 --- a/reconcile.cc +++ b/reconcile.cc @@ -75,11 +75,20 @@ void reconcile_transactions(transactions_list& xact_list, return; } - balance -= cleared_balance; - if (balance.type >= value_t::BALANCE) + if (cleared_balance.type >= value_t::BALANCE) throw error("Cannot reconcile accounts with multiple commodities"); + + cleared_balance.cast(value_t::AMOUNT); balance.cast(value_t::AMOUNT); + commodity_t& cb_comm = ((amount_t *) cleared_balance.data)->commodity(); + commodity_t& b_comm = ((amount_t *) balance.data)->commodity(); + + balance -= cleared_balance; + if (balance.type >= value_t::BALANCE) + throw error(std::string("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 = *((amount_t *) balance.data); |