MyMoneyMoney MyMoneyForecast::calculateAccountTrend(const MyMoneyAccount& acc, int trendDays) { MyMoneyFile* file = MyMoneyFile::instance(); MyMoneyTransactionFilter filter; MyMoneyMoney netIncome; QDate startDate; QDate openingDate = acc.openingDate(); //validate arguments if(trendDays < 1) { throw new MYMONEYEXCEPTION("Illegal arguments when calling calculateAccountTrend. trendDays must be higher than 0"); } //If it is a new account, we don't take into account the first day //because it is usually a weird one and it would mess up the trend if(openingDate.daysTo(QDate::currentDate())<trendDays){ startDate = (acc.openingDate()).addDays(1); } else { startDate = QDate::currentDate().addDays(-trendDays); } //get all transactions for the period filter.setDateFilter(startDate, QDate::currentDate()); if(acc.accountGroup() == MyMoneyAccount::Income || acc.accountGroup() == MyMoneyAccount::Expense) { filter.addCategory(acc.id()); } else { filter.addAccount(acc.id()); } filter.setReportAllSplits(false); QValueList<MyMoneyTransaction> transactions = file->transactionList(filter); QValueList<MyMoneyTransaction>::const_iterator it_t = transactions.begin(); //add all transactions for that account for(; it_t != transactions.end(); ++it_t ) { const QValueList<MyMoneySplit>& splits = (*it_t).splits(); QValueList<MyMoneySplit>::const_iterator it_s = splits.begin(); for(; it_s != splits.end(); ++it_s ) { if(!(*it_s).shares().isZero()) { if(acc.id()==(*it_s).accountId()) netIncome += (*it_s).value(); } } } //calculate trend of the account in the past period MyMoneyMoney accTrend; //don't take into account the first day of the account if(openingDate.daysTo(QDate::currentDate())<trendDays) { accTrend = netIncome/MyMoneyMoney(openingDate.daysTo(QDate::currentDate())-1,1); } else { accTrend = netIncome/MyMoneyMoney(trendDays,1); } return accTrend; }
void MyMoneyForecast::addFutureTransactions(void) { MyMoneyTransactionFilter filter; MyMoneyFile* file = MyMoneyFile::instance(); // collect and process all transactions that have already been entered but // are located in the future. filter.setDateFilter(forecastStartDate(), forecastEndDate()); filter.setReportAllSplits(false); QValueList<MyMoneyTransaction> transactions = file->transactionList(filter); QValueList<MyMoneyTransaction>::const_iterator it_t = transactions.begin(); for(; it_t != transactions.end(); ++it_t ) { const QValueList<MyMoneySplit>& splits = (*it_t).splits(); QValueList<MyMoneySplit>::const_iterator it_s = splits.begin(); for(; it_s != splits.end(); ++it_s ) { if(!(*it_s).shares().isZero()) { MyMoneyAccount acc = file->account((*it_s).accountId()); if(isForecastAccount(acc)) { dailyBalances balance; balance = m_accountList[acc.id()]; //if it is income, the balance is stored as negative number if(acc.accountType() == MyMoneyAccount::Income) { balance[(*it_t).postDate()] += ((*it_s).shares() * MyMoneyMoney(-1, 1)); } else { balance[(*it_t).postDate()] += (*it_s).shares(); } m_accountList[acc.id()] = balance; } } } } #if 0 QFile trcFile("forecast.csv"); trcFile.open(IO_WriteOnly); QTextStream s(&trcFile); { s << "Already present transactions\n"; QMap<QString, dailyBalances>::Iterator it_a; QMap<QString, QString>::ConstIterator it_n; for(it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n) { MyMoneyAccount acc = file->account(*it_n); it_a = m_accountList.find(*it_n); s << "\"" << acc.name() << "\","; for(int i = 0; i < 90; ++i) { s << "\"" << (*it_a)[i].formatMoney("") << "\","; } s << "\n"; } } #endif }
KMyMoneyFileInfoDlg::KMyMoneyFileInfoDlg(QWidget *parent, const char *name ) : KMyMoneyFileInfoDlgDecl(parent, name) { // Hide the unused buttons. buttonCancel->hide(); buttonHelp->hide(); // Now fill the fields with data IMyMoneyStorage* storage = MyMoneyFile::instance()->storage(); m_creationDate->setText(storage->creationDate().toString(Qt::ISODate)); m_lastModificationDate->setText(storage->lastModificationDate().toString(Qt::ISODate)); m_baseCurrency->setText(storage->value("kmm-baseCurrency")); m_payeeCount->setText(QString("%1").arg(storage->payeeList().count())); m_institutionCount->setText(QString("%1").arg(storage->institutionList().count())); QValueList<MyMoneyAccount> a_list; storage->accountList(a_list); m_accountCount->setText(QString("%1").arg(a_list.count())); QMap<MyMoneyAccount::accountTypeE, int> accountMap; QMap<MyMoneyAccount::accountTypeE, int> accountMapClosed; QValueList<MyMoneyAccount>::const_iterator it_a; for(it_a = a_list.begin(); it_a != a_list.end(); ++it_a) { accountMap[(*it_a).accountType()] = accountMap[(*it_a).accountType()] + 1; accountMapClosed[(*it_a).accountType()] = accountMapClosed[(*it_a).accountType()] + 0; if((*it_a).isClosed()) accountMapClosed[(*it_a).accountType()] = accountMapClosed[(*it_a).accountType()] + 1; } QMap<MyMoneyAccount::accountTypeE, int>::const_iterator it_m; for(it_m = accountMap.begin(); it_m != accountMap.end(); ++it_m) { new KListViewItem(m_accountView, KMyMoneyUtils::accountTypeToString(it_m.key()), QString("%1").arg(*it_m), QString("%1").arg(accountMapClosed[it_m.key()])); } MyMoneyTransactionFilter filter; filter.setReportAllSplits(false); m_transactionCount->setText(QString("%1").arg(storage->transactionList(filter).count())); filter.setReportAllSplits(true); m_splitCount->setText(QString("%1").arg(storage->transactionList(filter).count())); m_scheduleCount->setText(QString("%1").arg(storage->scheduleList().count())); MyMoneyPriceList list = storage->priceList(); MyMoneyPriceList::const_iterator it_p; int pCount = 0; for(it_p = list.begin(); it_p != list.end(); ++it_p) pCount += (*it_p).count(); m_priceCount->setText(QString("%1").arg(pCount)); }
KMyMoneyFileInfoDlg::KMyMoneyFileInfoDlg(QWidget *parent) : KMyMoneyFileInfoDlgDecl(parent) { // Now fill the fields with data IMyMoneyStorage* storage = MyMoneyFile::instance()->storage(); m_creationDate->setText(storage->creationDate().toString(Qt::ISODate)); m_lastModificationDate->setText(storage->lastModificationDate().toString(Qt::ISODate)); m_baseCurrency->setText(storage->value("kmm-baseCurrency")); m_payeeCount->setText(QString("%1").arg(storage->payeeList().count())); m_institutionCount->setText(QString("%1").arg(storage->institutionList().count())); QList<MyMoneyAccount> a_list; storage->accountList(a_list); m_accountCount->setText(QString("%1").arg(a_list.count())); QMap<MyMoneyAccount::accountTypeE, int> accountMap; QMap<MyMoneyAccount::accountTypeE, int> accountMapClosed; QList<MyMoneyAccount>::const_iterator it_a; for (it_a = a_list.constBegin(); it_a != a_list.constEnd(); ++it_a) { accountMap[(*it_a).accountType()] = accountMap[(*it_a).accountType()] + 1; accountMapClosed[(*it_a).accountType()] = accountMapClosed[(*it_a).accountType()] + 0; if ((*it_a).isClosed()) accountMapClosed[(*it_a).accountType()] = accountMapClosed[(*it_a).accountType()] + 1; } QMap<MyMoneyAccount::accountTypeE, int>::const_iterator it_m; for (it_m = accountMap.constBegin(); it_m != accountMap.constEnd(); ++it_m) { QTreeWidgetItem *item = new QTreeWidgetItem(); item->setText(0, KMyMoneyUtils::accountTypeToString(it_m.key())); item->setText(1, QString("%1").arg(*it_m)); item->setText(2, QString("%1").arg(accountMapClosed[it_m.key()])); m_accountView->invisibleRootItem()->addChild(item); } MyMoneyTransactionFilter filter; filter.setReportAllSplits(false); m_transactionCount->setText(QString("%1").arg(storage->transactionList(filter).count())); filter.setReportAllSplits(true); m_splitCount->setText(QString("%1").arg(storage->transactionList(filter).count())); m_scheduleCount->setText(QString("%1").arg(storage->scheduleList().count())); MyMoneyPriceList list = storage->priceList(); MyMoneyPriceList::const_iterator it_p; int pCount = 0; for (it_p = list.constBegin(); it_p != list.constEnd(); ++it_p) pCount += (*it_p).count(); m_priceCount->setText(QString("%1").arg(pCount)); }
void MyMoneyStorageXML::writeTransactions(QDomElement& transactions) { MyMoneyTransactionFilter filter; filter.setReportAllSplits(false); QList<MyMoneyTransaction> list; m_storage->transactionList(list, filter); transactions.setAttribute("count", list.count()); QList<MyMoneyTransaction>::ConstIterator it; signalProgress(0, list.count(), i18n("Saving transactions...")); int i = 0; for (it = list.constBegin(); it != list.constEnd(); ++it) { writeTransaction(transactions, *it); signalProgress(++i, 0); } }
void MyMoneyForecast::pastTransactions() { MyMoneyFile* file = MyMoneyFile::instance(); MyMoneyTransactionFilter filter; filter.setDateFilter(historyStartDate(), historyEndDate()); filter.setReportAllSplits(false); QValueList<MyMoneyTransaction> transactions = file->transactionList(filter); QValueList<MyMoneyTransaction>::const_iterator it_t = transactions.begin(); //Check past transactions for(; it_t != transactions.end(); ++it_t ) { const QValueList<MyMoneySplit>& splits = (*it_t).splits(); QValueList<MyMoneySplit>::const_iterator it_s = splits.begin(); for(; it_s != splits.end(); ++it_s ) { if(!(*it_s).shares().isZero()) { MyMoneyAccount acc = file->account((*it_s).accountId()); //workaround for stock accounts which have faulty opening dates QDate openingDate; if(acc.accountType() == MyMoneyAccount::Stock) { MyMoneyAccount parentAccount = file->account(acc.parentAccountId()); openingDate = parentAccount.openingDate(); } else { openingDate = acc.openingDate(); } if(isForecastAccount(acc) //If it is one of the accounts we are checking, add the amount of the transaction && ( (openingDate < (*it_t).postDate() && skipOpeningDate()) || !skipOpeningDate() ) ){ //don't take the opening day of the account to calculate balance dailyBalances balance; //FIXME deal with leap years balance = m_accountListPast[acc.id()]; if(acc.accountType() == MyMoneyAccount::Income) {//if it is income, the balance is stored as negative number balance[(*it_t).postDate()] += ((*it_s).shares() * MyMoneyMoney(-1, 1)); } else { balance[(*it_t).postDate()] += (*it_s).shares(); } // check if this is a new account for us m_accountListPast[acc.id()] = balance; } } } } //purge those accounts with no transactions on the period if(isIncludingUnusedAccounts() == false) purgeForecastAccountsList(m_accountListPast); //calculate running sum QMap<QString, QString>::Iterator it_n; for(it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n) { MyMoneyAccount acc = file->account(*it_n); m_accountListPast[acc.id()][historyStartDate().addDays(-1)] = file->balance(acc.id(), historyStartDate().addDays(-1)); for(QDate it_date = historyStartDate(); it_date <= historyEndDate(); ) { m_accountListPast[acc.id()][it_date] += m_accountListPast[acc.id()][it_date.addDays(-1)]; //Running sum it_date = it_date.addDays(1); } } //adjust value of investments to deep currency for ( it_n = m_nameIdx.begin(); it_n != m_nameIdx.end(); ++it_n ) { MyMoneyAccount acc = file->account ( *it_n ); if ( acc.isInvest() ) { //get the id of the security for that account MyMoneySecurity undersecurity = file->security ( acc.currencyId() ); if ( ! undersecurity.isCurrency() ) //only do it if the security is not an actual currency { MyMoneyMoney rate = MyMoneyMoney ( 1, 1 ); //set the default value MyMoneyPrice price; for ( QDate it_date = historyStartDate().addDays(-1) ; it_date <= historyEndDate();) { //get the price for the tradingCurrency that day price = file->price ( undersecurity.id(), undersecurity.tradingCurrency(), it_date ); if ( price.isValid() ) { rate = price.rate ( undersecurity.tradingCurrency() ); } //value is the amount of shares multiplied by the rate of the deep currency m_accountListPast[acc.id() ][it_date] = m_accountListPast[acc.id() ][it_date] * rate; it_date = it_date.addDays(1); } } } } }
void KTagsView::showTransactions() { MyMoneyMoney balance; MyMoneyFile *file = MyMoneyFile::instance(); MyMoneySecurity base = file->baseCurrency(); // setup sort order m_register->setSortOrder(KMyMoneyGlobalSettings::sortSearchView()); // clear the register m_register->clear(); if (m_tag.id().isEmpty() || !m_tabWidget->isEnabled()) { m_balanceLabel->setText(i18n("Balance: %1", balance.formatMoney(file->baseCurrency().smallestAccountFraction()))); return; } // setup the list and the pointer vector MyMoneyTransactionFilter filter; filter.addTag(m_tag.id()); filter.setDateFilter(KMyMoneyGlobalSettings::startDate().date(), QDate()); // retrieve the list from the engine file->transactionList(m_transactionList, filter); // create the elements for the register QList<QPair<MyMoneyTransaction, MyMoneySplit> >::const_iterator it; QMap<QString, int> uniqueMap; MyMoneyMoney deposit, payment; int splitCount = 0; bool balanceAccurate = true; for (it = m_transactionList.constBegin(); it != m_transactionList.constEnd(); ++it) { const MyMoneySplit& split = (*it).second; MyMoneyAccount acc = file->account(split.accountId()); ++splitCount; uniqueMap[(*it).first.id()]++; KMyMoneyRegister::Register::transactionFactory(m_register, (*it).first, (*it).second, uniqueMap[(*it).first.id()]); // take care of foreign currencies MyMoneyMoney val = split.shares().abs(); if (acc.currencyId() != base.id()) { const MyMoneyPrice &price = file->price(acc.currencyId(), base.id()); // in case the price is valid, we use it. Otherwise, we keep // a flag that tells us that the balance is somewhat inaccurate if (price.isValid()) { val *= price.rate(base.id()); } else { balanceAccurate = false; } } if (split.shares().isNegative()) { payment += val; } else { deposit += val; } } balance = deposit - payment; // add the group markers m_register->addGroupMarkers(); // sort the transactions according to the sort setting m_register->sortItems(); // remove trailing and adjacent markers m_register->removeUnwantedGroupMarkers(); m_register->updateRegister(true); // we might end up here with updates disabled on the register so // make sure that we enable updates here m_register->setUpdatesEnabled(true); m_balanceLabel->setText(i18n("Balance: %1%2", balanceAccurate ? "" : "~", balance.formatMoney(file->baseCurrency().smallestAccountFraction()))); }
void MyMoneyStorageDump::writeStream(QDataStream& _s, IMyMoneySerialize* _storage) { QTextStream s(_s.device()); IMyMoneyStorage* storage = dynamic_cast<IMyMoneyStorage *>(_storage); MyMoneyPayee user = storage->user(); s << "File-Info\n"; s << "---------\n"; s << "user name = " << user.name() << "\n"; s << "user street = " << user.address() << "\n"; s << "user city = " << user.city() << "\n"; s << "user city = " << user.state() << "\n"; s << "user zip = " << user.postcode() << "\n"; s << "user telephone = " << user.telephone() << "\n"; s << "user e-mail = " << user.email() << "\n"; s << "creation date = " << storage->creationDate().toString(Qt::ISODate) << "\n"; s << "last modification date = " << storage->lastModificationDate().toString(Qt::ISODate) << "\n"; s << "base currency = " << storage->value("kmm-baseCurrency") << "\n"; s << "\n"; s << "Internal-Info\n"; s << "-------------\n"; QList<MyMoneyAccount> list_a; storage->accountList(list_a); s << "accounts = " << list_a.count() << ", next id = " << _storage->accountId() << "\n"; MyMoneyTransactionFilter filter; filter.setReportAllSplits(false); QList<MyMoneyTransaction> list_t; storage->transactionList(list_t, filter); QList<MyMoneyTransaction>::ConstIterator it_t; s << "transactions = " << list_t.count() << ", next id = " << _storage->transactionId() << "\n"; QMap<int, int> xferCount; for (it_t = list_t.constBegin(); it_t != list_t.constEnd(); ++it_t) { QList<MyMoneySplit>::ConstIterator it_s; int accountCount = 0; for (it_s = (*it_t).splits().constBegin(); it_s != (*it_t).splits().constEnd(); ++it_s) { MyMoneyAccount acc = storage->account((*it_s).accountId()); if (acc.accountGroup() != MyMoneyAccount::Expense && acc.accountGroup() != MyMoneyAccount::Income) accountCount++; } if (accountCount > 1) xferCount[accountCount] = xferCount[accountCount] + 1; } QMap<int, int>::ConstIterator it_cnt; for (it_cnt = xferCount.constBegin(); it_cnt != xferCount.constEnd(); ++it_cnt) { s << " " << *it_cnt << " of them references " << it_cnt.key() << " accounts\n"; } s << "payees = " << _storage->payeeList().count() << ", next id = " << _storage->payeeId() << "\n"; s << "tags = " << _storage->tagList().count() << ", next id = " << _storage->tagId() << "\n"; s << "institutions = " << _storage->institutionList().count() << ", next id = " << _storage->institutionId() << "\n"; s << "schedules = " << _storage->scheduleList().count() << ", next id = " << _storage->scheduleId() << "\n"; s << "\n"; s << "Institutions\n"; s << "------------\n"; QList<MyMoneyInstitution> list_i = storage->institutionList(); QList<MyMoneyInstitution>::ConstIterator it_i; for (it_i = list_i.constBegin(); it_i != list_i.constEnd(); ++it_i) { s << " ID = " << (*it_i).id() << "\n"; s << " Name = " << (*it_i).name() << "\n"; s << "\n"; } s << "\n"; s << "Payees" << "\n"; s << "------" << "\n"; QList<MyMoneyPayee> list_p = storage->payeeList(); QList<MyMoneyPayee>::ConstIterator it_p; for (it_p = list_p.constBegin(); it_p != list_p.constEnd(); ++it_p) { s << " ID = " << (*it_p).id() << "\n"; s << " Name = " << (*it_p).name() << "\n"; s << " Address = " << (*it_p).address() << "\n"; s << " City = " << (*it_p).city() << "\n"; s << " State = " << (*it_p).state() << "\n"; s << " Zip = " << (*it_p).postcode() << "\n"; s << " E-Mail = " << (*it_p).email() << "\n"; s << " Telephone = " << (*it_p).telephone() << "\n"; s << " Reference = " << (*it_p).reference() << "\n"; s << "\n"; } s << "\n"; s << "Tags" << "\n"; s << "------" << "\n"; QList<MyMoneyTag> list_ta = storage->tagList(); QList<MyMoneyTag>::ConstIterator it_ta; for (it_ta = list_ta.constBegin(); it_ta != list_ta.constEnd(); ++it_ta) { s << " ID = " << (*it_ta).id() << "\n"; s << " Name = " << (*it_ta).name() << "\n"; s << " Closed = " << (*it_ta).isClosed() << "\n"; s << " TagColor = " << (*it_ta).tagColor().name() << "\n"; s << " Notes = " << (*it_ta).notes() << "\n"; s << "\n"; } s << "\n"; s << "Accounts" << "\n"; s << "--------" << "\n"; list_a.push_front(storage->equity()); list_a.push_front(storage->expense()); list_a.push_front(storage->income()); list_a.push_front(storage->liability()); list_a.push_front(storage->asset()); QList<MyMoneyAccount>::ConstIterator it_a; for (it_a = list_a.constBegin(); it_a != list_a.constEnd(); ++it_a) { s << " ID = " << (*it_a).id() << "\n"; s << " Name = " << (*it_a).name() << "\n"; s << " Number = " << (*it_a).number() << "\n"; s << " Description = " << (*it_a).description() << "\n"; s << " Type = " << (*it_a).accountType() << "\n"; if ((*it_a).currencyId().isEmpty()) { s << " Currency = unknown\n"; } else { if ((*it_a).isInvest()) { s << " Equity = " << storage->security((*it_a).currencyId()).name() << "\n"; } else { s << " Currency = " << storage->currency((*it_a).currencyId()).name() << "\n"; } } s << " Parent = " << (*it_a).parentAccountId(); if (!(*it_a).parentAccountId().isEmpty()) { MyMoneyAccount parent = storage->account((*it_a).parentAccountId()); s << " (" << parent.name() << ")"; } else { s << "n/a"; } s << "\n"; s << " Institution = " << (*it_a).institutionId(); if (!(*it_a).institutionId().isEmpty()) { MyMoneyInstitution inst = storage->institution((*it_a).institutionId()); s << " (" << inst.name() << ")"; } else { s << "n/a"; } s << "\n"; s << " Opening date = " << (*it_a).openingDate().toString(Qt::ISODate) << "\n"; s << " Last modified = " << (*it_a).lastModified().toString(Qt::ISODate) << "\n"; s << " Last reconciled = " << (*it_a).lastReconciliationDate().toString(Qt::ISODate) << "\n"; s << " Balance = " << (*it_a).balance().formatMoney("", 2) << "\n"; dumpKVP(" KVP: ", s, *it_a); dumpKVP(" OnlineBankingSettings: ", s, (*it_a).onlineBankingSettings()); QStringList list_s = (*it_a).accountList(); QStringList::ConstIterator it_s; if (list_s.count() > 0) { s << " Children =" << "\n"; } for (it_s = list_s.constBegin(); it_s != list_s.constEnd(); ++it_s) { MyMoneyAccount child = storage->account(*it_s); s << " " << *it_s << " (" << child.name() << ")\n"; } s << "\n"; } s << "\n"; #if 0 s << "Currencies" << "\n"; s << "----------" << "\n"; QList<MyMoneyCurrency> list_c = storage->currencyList(); QList<MyMoneyCurrency>::ConstIterator it_c; for (it_c = list_c.begin(); it_c != list_c.end(); ++it_c) { s << " Name = " << (*it_c).name() << "\n"; s << " ID = " << (*it_c).id() << "\n"; s << " Symbol = " << (*it_c).tradingSymbol() << "\n"; s << " Parts/Unit = " << (*it_c).partsPerUnit() << "\n"; s << " smallest cash fraction = " << (*it_c).smallestCashFraction() << "\n"; s << " smallest account fraction = " << (*it_c).smallestAccountFraction() << "\n"; dumpPriceHistory(s, (*it_c).priceHistory()); s << "\n"; } s << "\n"; #endif s << "Securities" << "\n"; s << "----------" << "\n"; QList<MyMoneySecurity> list_e = storage->securityList(); QList<MyMoneySecurity>::ConstIterator it_e; for (it_e = list_e.constBegin(); it_e != list_e.constEnd(); ++it_e) { s << " Name = " << (*it_e).name() << "\n"; s << " ID = " << (*it_e).id() << "\n"; s << " Market = " << (*it_e).tradingMarket() << "\n"; s << " Symbol = " << (*it_e).tradingSymbol() << "\n"; s << " Currency = " << (*it_e).tradingCurrency() << " ("; if ((*it_e).tradingCurrency().isEmpty()) { s << "unknown"; } else { MyMoneySecurity tradingCurrency = storage->currency((*it_e).tradingCurrency()); if (!tradingCurrency.isCurrency()) { s << "invalid currency: "; } s << tradingCurrency.name(); } s << ")\n"; s << " Type = " << MyMoneySecurity::securityTypeToString((*it_e).securityType()) << "\n"; s << " smallest account fraction = " << (*it_e).smallestAccountFraction() << "\n"; s << " KVP: " << "\n"; QMap<QString, QString>kvp = (*it_e).pairs(); QMap<QString, QString>::Iterator it; for (it = kvp.begin(); it != kvp.end(); ++it) { s << " '" << it.key() << "' = '" << it.value() << "'\n"; } s << "\n"; } s << "\n"; s << "Prices" << "\n"; s << "--------" << "\n"; MyMoneyPriceList list_pr = _storage->priceList(); MyMoneyPriceList::ConstIterator it_pr; for (it_pr = list_pr.constBegin(); it_pr != list_pr.constEnd(); ++it_pr) { s << " From = " << it_pr.key().first << "\n"; s << " To = " << it_pr.key().second << "\n"; MyMoneyPriceEntries::ConstIterator it_pre; for (it_pre = (*it_pr).constBegin(); it_pre != (*it_pr).constEnd(); ++it_pre) { s << " Date = " << (*it_pre).date().toString() << "\n"; s << " Price = " << (*it_pre).rate(QString()).formatMoney("", 8) << "\n"; s << " Source = " << (*it_pre).source() << "\n"; s << " From = " << (*it_pre).from() << "\n"; s << " To = " << (*it_pre).to() << "\n"; } s << "\n"; } s << "\n"; s << "Transactions" << "\n"; s << "------------" << "\n"; for (it_t = list_t.constBegin(); it_t != list_t.constEnd(); ++it_t) { dumpTransaction(s, storage, *it_t); } s << "\n"; s << "Schedules" << "\n"; s << "---------" << "\n"; QList<MyMoneySchedule> list_s = storage->scheduleList(); QList<MyMoneySchedule>::ConstIterator it_s; for (it_s = list_s.constBegin(); it_s != list_s.constEnd(); ++it_s) { s << " ID = " << (*it_s).id() << "\n"; s << " Name = " << (*it_s).name() << "\n"; s << " Startdate = " << (*it_s).startDate().toString(Qt::ISODate) << "\n"; if ((*it_s).willEnd()) s << " Enddate = " << (*it_s).endDate().toString(Qt::ISODate) << "\n"; else s << " Enddate = not specified\n"; s << " Occurence = " << (*it_s).occurrenceToString() << "\n"; // krazy:exclude=spelling s << " OccurenceMultiplier = " << (*it_s).occurrenceMultiplier() << "\n"; s << " Type = " << MyMoneySchedule::scheduleTypeToString((*it_s).type()) << "\n"; s << " Paymenttype = " << MyMoneySchedule::paymentMethodToString((*it_s).paymentType()) << "\n"; s << " Fixed = " << (*it_s).isFixed() << "\n"; s << " AutoEnter = " << (*it_s).autoEnter() << "\n"; if ((*it_s).lastPayment().isValid()) s << " Last payment = " << (*it_s).lastPayment().toString(Qt::ISODate) << "\n"; else s << " Last payment = not defined" << "\n"; if ((*it_s).isFinished()) s << " Next payment = payment finished" << "\n"; else { s << " Next payment = " << (*it_s).nextDueDate().toString(Qt::ISODate) << "\n"; if ((*it_s).isOverdue()) s << " = overdue!" << "\n"; } QList<QDate> list_d; QList<QDate>::ConstIterator it_d; list_d = (*it_s).recordedPayments(); if (list_d.count() > 0) { s << " Recorded payments" << "\n"; for (it_d = list_d.constBegin(); it_d != list_d.constEnd(); ++it_d) { s << " " << (*it_d).toString(Qt::ISODate) << "\n"; } } s << " TRANSACTION\n"; dumpTransaction(s, storage, (*it_s).transaction()); } s << "\n"; s << "Reports" << "\n"; s << "-------" << "\n"; QList<MyMoneyReport> list_r = storage->reportList(); QList<MyMoneyReport>::ConstIterator it_r; for (it_r = list_r.constBegin(); it_r != list_r.constEnd(); ++it_r) { s << " ID = " << (*it_r).id() << "\n"; s << " Name = " << (*it_r).name() << "\n"; } s << "Budgets" << "\n"; s << "-------" << "\n"; QList<MyMoneyBudget> list_b = storage->budgetList(); QList<MyMoneyBudget>::ConstIterator it_b; for (it_b = list_b.constBegin(); it_b != list_b.constEnd(); ++it_b) { s << " ID = " << (*it_b).id() << "\n"; s << " Name = " << (*it_b).name() << "\n"; } }