diff options
-rw-r--r-- | ChangeLog | 33 | ||||
-rw-r--r-- | configure.in | 2 | ||||
-rw-r--r-- | configure.in.in | 2 | ||||
-rw-r--r-- | kmymoney2/converter/mymoneystatementreader.cpp | 4 | ||||
-rw-r--r-- | kmymoney2/mymoney/mymoneyforecast.cpp | 19 | ||||
-rw-r--r-- | kmymoney2/reports/pivottable.cpp | 25 | ||||
-rw-r--r-- | kmymoney2/views/kgloballedgerview.cpp | 7 | ||||
-rw-r--r-- | kmymoney2/views/khomeview.cpp | 7 | ||||
-rw-r--r-- | kmymoney2/views/kinstitutionsview.cpp | 11 | ||||
-rw-r--r-- | kmymoney2/widgets/stdtransactionmatched.cpp | 2 |
10 files changed, 99 insertions, 13 deletions
@@ -1,7 +1,40 @@ +2010-05-15 Thomas Baumgart <ipwizard@users.sourceforge.net> + * Released 1.0.5 + +2010-05-12 Thomas Baumgart <ipwizard@users.sourceforge.net> + * Fixed the way to calculate balance variation for the linear regression + forecast method (backported from KDE4) + +2010-05-09 Alvaro Soliverez <asoliverez@gmail.com> + * Fixed a crash when a budget selected for a report is no longer present + +2010-05-04 Thomas Baumgart <ipwizard@users.sourceforge.net> + * replace all new line characters because we only have one line + available for the displayed data (backported from KDE4) + * Don't allow import of investment transactions that don't have a share + amount. This used to end in a div by zero when calculating the price. + (Backported from KDE4) + +2010-05-03 Alvaro Soliverez <asoliverez@gmail.com> + * Add all overdue schedules when calculating forecast + * Do not show accounts of institutions if it has been selected + in the general settings to Do not show closed accounts + * Do not show an institution if it has no visible accounts and + it has been selected to not show closed accounts + +2010-04-20 Thomas Baumgart <ipwizard@users.sourceforge.net> + * Backported fix from Ian Neal to solve problems when opening the ledger + with specific scheduled transactions + +2010-04-03 Alvaro Soliverez <asoliverez@gmail.com> + * Fixed loop in payments of the home page when a schedule is set to + end by date + 2010-03-30 Thomas Baumgart <ipwizard@users.sourceforge.net> * Backported encoding patch from KDE4 version * Bumped version number + * Released 1.0.4 2010-03-29 Thomas Baumgart <ipwizard@users.sourceforge.net> * Updated Finnish translation by Mikael Kujanpaa diff --git a/configure.in b/configure.in index 8a6c1b8..1a8dd02 100644 --- a/configure.in +++ b/configure.in @@ -40,7 +40,7 @@ dnl Perform program name transformation AC_ARG_PROGRAM dnl Automake doc recommends to do this only here. (Janos) -AM_INIT_AUTOMAKE(kmymoney2, 1.0.4) dnl searches for some needed programs +AM_INIT_AUTOMAKE(kmymoney2, 1.0.5) dnl searches for some needed programs KDE_SET_PREFIX diff --git a/configure.in.in b/configure.in.in index 3f82103..a90f40f 100644 --- a/configure.in.in +++ b/configure.in.in @@ -1,6 +1,6 @@ #MIN_CONFIG(3.3.1) -AM_INIT_AUTOMAKE(kmymoney2,1.0.4) +AM_INIT_AUTOMAKE(kmymoney2,1.0.5) KDE_ENABLE_HIDDEN_VISIBILITY diff --git a/kmymoney2/converter/mymoneystatementreader.cpp b/kmymoney2/converter/mymoneystatementreader.cpp index 6756767..c08dcff 100644 --- a/kmymoney2/converter/mymoneystatementreader.cpp +++ b/kmymoney2/converter/mymoneystatementreader.cpp @@ -664,6 +664,10 @@ void MyMoneyStatementReader::processTransactionEntry(const MyMoneyStatement::Tra if(!t_in.m_price.isZero()) { s1.setPrice(t_in.m_price); } else { + if(t_in.m_shares.isZero()) { + KMessageBox::information(0, i18n("This imported statement contains investment transactions with no share amount. These transactions will be ignored."), i18n("No share amount provided"), TQString("BlankAmount")); + return; + } s1.setPrice(((t_in.m_amount - t_in.m_fees) / t_in.m_shares).convert(MyMoneyMoney::precToDenom(KMyMoneyGlobalSettings::pricePrecision()))); } diff --git a/kmymoney2/mymoney/mymoneyforecast.cpp b/kmymoney2/mymoney/mymoneyforecast.cpp index bfecce0..c1c88c7 100644 --- a/kmymoney2/mymoney/mymoneyforecast.cpp +++ b/kmymoney2/mymoney/mymoneyforecast.cpp @@ -651,7 +651,7 @@ void MyMoneyForecast::addScheduledTransactions (void) TQValueList<MyMoneySchedule> schedule; schedule = file->scheduleList("", MyMoneySchedule::TYPE_ANY, MyMoneySchedule::OCCUR_ANY, MyMoneySchedule::STYPE_ANY, - TQDate::currentDate(), forecastEndDate()); + TQDate(), forecastEndDate()); if(schedule.count() > 0) { TQValueList<MyMoneySchedule>::Iterator it; do { @@ -871,8 +871,21 @@ MyMoneyMoney MyMoneyForecast::accountCycleVariation(const MyMoneyAccount& acc) MyMoneyMoney cycleVariation; if (forecastMethod() == eHistoric) { - for(int t_day = 1; t_day <= accountsCycle() ; ++t_day) { - cycleVariation += m_accountTrendList[acc.id()][t_day]; + switch(historyMethod()) { + case 0: + case 1: + { + for(int t_day = 1; t_day <= accountsCycle() ; ++t_day) { + cycleVariation += m_accountTrendList[acc.id()][t_day]; + } + } + break; + + case 2: + { + cycleVariation = m_accountList[acc.id()][TQDate::currentDate().addDays(accountsCycle())] - m_accountList[acc.id()][TQDate::currentDate()]; + } + break; } } return cycleVariation; diff --git a/kmymoney2/reports/pivottable.cpp b/kmymoney2/reports/pivottable.cpp index db73062..b75ffb9 100644 --- a/kmymoney2/reports/pivottable.cpp +++ b/kmymoney2/reports/pivottable.cpp @@ -825,9 +825,27 @@ void PivotTable::calculateBudgetMapping( void ) // // It will choose the first budget in the list for the start year of the report if no budget is select MyMoneyBudget budget = MyMoneyBudget(); + + TQValueList<MyMoneyBudget> budgets = file->budgetList(); + bool validBudget = false; + + //check that the selected budget is valid + if (m_config_f.budget() != "Any") { + TQValueList<MyMoneyBudget>::const_iterator budgets_it = budgets.begin(); + while( budgets_it != budgets.end() ) { + //pick the budget by id + if ((*budgets_it).id() == m_config_f.budget()) { + budget = file->budget((*budgets_it).id()); + validBudget = true; + break; + } + ++budgets_it; + } + } + //if no budget has been selected - if (m_config_f.budget() == "Any" ) { - TQValueList<MyMoneyBudget> budgets = file->budgetList(); + if (!validBudget ) { + TQValueList<MyMoneyBudget>::const_iterator budgets_it = budgets.begin(); while( budgets_it != budgets.end() ) { //pick the first budget that matches the report start year @@ -843,9 +861,6 @@ void PivotTable::calculateBudgetMapping( void ) //assign the budget to the report m_config_f.setBudget(budget.id(), m_config_f.isIncludingBudgetActuals()); - } else { - //pick the budget selected by the user - budget = file->budget( m_config_f.budget()); } // Dump the budget diff --git a/kmymoney2/views/kgloballedgerview.cpp b/kmymoney2/views/kgloballedgerview.cpp index 8209d3f..e82459a 100644 --- a/kmymoney2/views/kgloballedgerview.cpp +++ b/kmymoney2/views/kgloballedgerview.cpp @@ -485,7 +485,12 @@ void KGlobalLedgerView::loadView(void) break; // for all others, we check if the next payment date is still 'in range' - s.setNextDueDate(s.nextPayment(s.nextDueDate())); + TQDate nextDueDate = s.nextPayment(s.nextDueDate()); + if (nextDueDate.isValid()) { + s.setNextDueDate(nextDueDate); + } else { + break; + } } scheduleList.pop_front(); } diff --git a/kmymoney2/views/khomeview.cpp b/kmymoney2/views/khomeview.cpp index 60bb173..8745d64 100644 --- a/kmymoney2/views/khomeview.cpp +++ b/kmymoney2/views/khomeview.cpp @@ -595,6 +595,13 @@ void KHomeView::showPayments(void) schedule.remove(it); continue; } + + //if nextPayment returns an invalid date, setNextDueDate will just skip it, resulting in a loop + //we check the resulting date and erase the schedule if invalid + if(!((*it).nextPayment((*it).nextDueDate())).isValid()) { + schedule.remove(it); + continue; + } (*it).setNextDueDate((*it).nextPayment((*it).nextDueDate())); qBubbleSort(schedule); diff --git a/kmymoney2/views/kinstitutionsview.cpp b/kmymoney2/views/kinstitutionsview.cpp index 0b9258f..87c0fc1 100644 --- a/kmymoney2/views/kinstitutionsview.cpp +++ b/kmymoney2/views/kinstitutionsview.cpp @@ -161,6 +161,9 @@ void KInstitutionsView::loadAccounts(void) // hide it, if unused noInstitutionItem->setVisible(noInstitutionItem->childCount() != 0); + + bool showClosedAccounts = kmymoney2->toggleAction("view_show_all_accounts")->isChecked() + || !KMyMoneyGlobalSettings::hideClosedAccounts(); TQValueList<MyMoneyInstitution> list = file->institutionList(); TQValueList<MyMoneyInstitution>::const_iterator it_i; @@ -168,6 +171,8 @@ void KInstitutionsView::loadAccounts(void) KMyMoneyAccountTreeItem* item = new KMyMoneyAccountTreeItem(m_accountTree, *it_i); item->setPixmap(0, none.pixmap()); loadSubAccounts(item, (*it_i).id()); + if(!showClosedAccounts) + item->setVisible(item->childCount() != 0); } } catch(MyMoneyException *e) { @@ -201,7 +206,8 @@ void KInstitutionsView::loadAccounts(void) void KInstitutionsView::loadSubAccounts(KMyMoneyAccountTreeItem* parent) { - bool showClosedAccounts = kmymoney2->toggleAction("view_show_all_accounts")->isChecked(); + bool showClosedAccounts = kmymoney2->toggleAction("view_show_all_accounts")->isChecked() + || !KMyMoneyGlobalSettings::hideClosedAccounts(); const MyMoneyAccount& account = dynamic_cast<const MyMoneyAccount&>(parent->itemObject()); TQValueList<TQString>::const_iterator it_a; MyMoneyFile* file = MyMoneyFile::instance(); @@ -230,7 +236,8 @@ void KInstitutionsView::loadSubAccounts(KMyMoneyAccountTreeItem* parent, const T TQMap<TQString, MyMoneyAccount>::const_iterator it_a; MyMoneyMoney value; - bool showClosedAccounts = kmymoney2->toggleAction("view_show_all_accounts")->isChecked(); + bool showClosedAccounts = kmymoney2->toggleAction("view_show_all_accounts")->isChecked() + || !KMyMoneyGlobalSettings::hideClosedAccounts(); for(it_a = m_accountMap.begin(); it_a != m_accountMap.end(); ++it_a) { const MyMoneyAccount& acc = *it_a; diff --git a/kmymoney2/widgets/stdtransactionmatched.cpp b/kmymoney2/widgets/stdtransactionmatched.cpp index 833c88e..9900c3c 100644 --- a/kmymoney2/widgets/stdtransactionmatched.cpp +++ b/kmymoney2/widgets/stdtransactionmatched.cpp @@ -179,6 +179,8 @@ void StdTransactionMatched::registerCellText(TQString& txt, int& align, int row, memo = memo.left(pos); if(memo.endsWith("\n")) memo = memo.left(pos-1); + // replace all new line characters because we only have one line available for the displayed data + memo.replace('\n', " "); } } txt = TQString("%1 %2").arg(postDate.toString(Qt::ISODate)).arg(memo); |