You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
447 lines
16 KiB
447 lines
16 KiB
/***************************************************************************
|
|
mymoneystoragedump.cpp - description
|
|
-------------------
|
|
begin : Sun May 5 2002
|
|
copyright : (C) 2000-2002 by Michael Edwardes
|
|
email : mte@users.sourceforge.net
|
|
Javier Campos Morales <javi_c@users.sourceforge.net>
|
|
Felix Rodriguez <frodriguez@users.sourceforge.net>
|
|
John C <thetacoturtle@users.sourceforge.net>
|
|
Thomas Baumgart <ipwizard@users.sourceforge.net>
|
|
Kevin Tambascio <ktambascio@users.sourceforge.net>
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// QT Includes
|
|
|
|
#include <tqstring.h>
|
|
#include <tqdatetime.h>
|
|
#include <tqvaluelist.h>
|
|
#include <tqstringlist.h>
|
|
|
|
// ----------------------------------------------------------------------------
|
|
// Project Includes
|
|
|
|
#include "mymoneystoragedump.h"
|
|
#include "imymoneystorage.h"
|
|
#include "../mymoneyaccount.h"
|
|
#include "../mymoneysecurity.h"
|
|
#include "../mymoneyprice.h"
|
|
|
|
MyMoneyStorageDump::MyMoneyStorageDump()
|
|
{
|
|
}
|
|
|
|
MyMoneyStorageDump::~MyMoneyStorageDump()
|
|
{
|
|
}
|
|
|
|
void MyMoneyStorageDump::readStream(TQDataStream& /* s */, IMyMoneySerialize* /* storage */)
|
|
{
|
|
qDebug("Reading not supported by MyMoneyStorageDump!!");
|
|
}
|
|
|
|
void MyMoneyStorageDump::writeStream(TQDataStream& _s, IMyMoneySerialize* _storage)
|
|
{
|
|
TQTextStream 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";
|
|
TQValueList<MyMoneyAccount> list_a;
|
|
storage->accountList(list_a);
|
|
s << "accounts = " << list_a.count() <<", next id = " << _storage->accountId() << "\n";
|
|
MyMoneyTransactionFilter filter;
|
|
filter.setReportAllSplits(false);
|
|
TQValueList<MyMoneyTransaction> list_t;
|
|
storage->transactionList(list_t, filter);
|
|
TQValueList<MyMoneyTransaction>::ConstIterator it_t;
|
|
s << "transactions = " << list_t.count() << ", next id = " << _storage->transactionId() << "\n";
|
|
TQMap<int,int> xferCount;
|
|
for(it_t = list_t.begin(); it_t != list_t.end(); ++it_t) {
|
|
TQValueList<MyMoneySplit>::ConstIterator it_s;
|
|
int accountCount = 0;
|
|
for(it_s = (*it_t).splits().begin(); it_s != (*it_t).splits().end(); ++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;
|
|
}
|
|
TQMap<int,int>::ConstIterator it_cnt;
|
|
for(it_cnt = xferCount.begin(); it_cnt != xferCount.end(); ++it_cnt) {
|
|
s << " " << *it_cnt << " of them references " << it_cnt.key() << " accounts\n";
|
|
}
|
|
|
|
s << "payees = " << _storage->payeeList().count() << ", next id = " << _storage->payeeId() << "\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";
|
|
|
|
TQValueList<MyMoneyInstitution> list_i = storage->institutionList();
|
|
TQValueList<MyMoneyInstitution>::ConstIterator it_i;
|
|
for(it_i = list_i.begin(); it_i != list_i.end(); ++it_i) {
|
|
s << " ID = " << (*it_i).id() << "\n";
|
|
s << " Name = " << (*it_i).name() << "\n";
|
|
s << "\n";
|
|
}
|
|
s << "\n";
|
|
|
|
s << "Payees" << "\n";
|
|
s << "------" << "\n";
|
|
|
|
TQValueList<MyMoneyPayee> list_p = storage->payeeList();
|
|
TQValueList<MyMoneyPayee>::ConstIterator it_p;
|
|
for(it_p = list_p.begin(); it_p != list_p.end(); ++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 << "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());
|
|
TQValueList<MyMoneyAccount>::ConstIterator it_a;
|
|
for(it_a = list_a.begin(); it_a != list_a.end(); ++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 data = " << (*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());
|
|
|
|
TQStringList list_s = (*it_a).accountList();
|
|
TQStringList::ConstIterator it_s;
|
|
if(list_s.count() > 0) {
|
|
s << " Children =" << "\n";
|
|
}
|
|
for(it_s = list_s.begin(); it_s != list_s.end(); ++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";
|
|
|
|
TQValueList<MyMoneyCurrency> list_c = storage->currencyList();
|
|
TQValueList<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";
|
|
|
|
TQValueList<MyMoneySecurity> list_e = storage->securityList();
|
|
TQValueList<MyMoneySecurity>::ConstIterator it_e;
|
|
for(it_e = list_e.begin(); it_e != list_e.end(); ++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";
|
|
TQMap<TQString, TQString>kvp = (*it_e).pairs();
|
|
TQMap<TQString, TQString>::Iterator it;
|
|
for(it = kvp.begin(); it != kvp.end(); ++it) {
|
|
s << " '" << it.key() << "' = '" << it.data() << "'\n";
|
|
}
|
|
s << "\n";
|
|
}
|
|
s << "\n";
|
|
|
|
s << "Prices" << "\n";
|
|
s << "--------" << "\n";
|
|
|
|
MyMoneyPriceList list_pr = _storage->priceList();
|
|
MyMoneyPriceList::ConstIterator it_pr;
|
|
for(it_pr = list_pr.begin(); it_pr != list_pr.end(); ++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).begin(); it_pre != (*it_pr).end(); ++it_pre) {
|
|
s << " Date = " << (*it_pre).date().toString() << "\n";
|
|
s << " Price = " << (*it_pre).rate(TQString()).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.begin(); it_t != list_t.end(); ++it_t) {
|
|
dumpTransaction(s, storage, *it_t);
|
|
}
|
|
s << "\n";
|
|
|
|
|
|
s << "Schedules" << "\n";
|
|
s << "---------" << "\n";
|
|
|
|
TQValueList<MyMoneySchedule> list_s = storage->scheduleList();
|
|
TQValueList<MyMoneySchedule>::ConstIterator it_s;
|
|
for(it_s = list_s.begin(); it_s != list_s.end(); ++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).occurenceToString() << "\n";
|
|
s << " OccurenceMultiplier = " << (*it_s).occurenceMultiplier() << "\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";
|
|
}
|
|
|
|
TQValueList<TQDate> list_d;
|
|
TQValueList<TQDate>::ConstIterator it_d;
|
|
|
|
list_d = (*it_s).recordedPayments();
|
|
if(list_d.count() > 0) {
|
|
s << " Recorded payments" << "\n";
|
|
for(it_d = list_d.begin(); it_d != list_d.end(); ++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";
|
|
|
|
TQValueList<MyMoneyReport> list_r = storage->reportList();
|
|
TQValueList<MyMoneyReport>::ConstIterator it_r;
|
|
for(it_r = list_r.begin(); it_r != list_r.end(); ++it_r) {
|
|
s << " ID = " << (*it_r).id() << "\n";
|
|
s << " Name = " << (*it_r).name() << "\n";
|
|
}
|
|
}
|
|
|
|
void MyMoneyStorageDump::dumpKVP(const TQString& headline, TQTextStream& s, const MyMoneyKeyValueContainer &kvp, int indent)
|
|
{
|
|
TQString ind;
|
|
ind.fill(' ', indent);
|
|
s << ind << headline << "\n";
|
|
TQMap<TQString, TQString>::const_iterator it;
|
|
for(it = kvp.pairs().begin(); it != kvp.pairs().end(); ++it) {
|
|
s << ind << " '" << it.key() << "' = '" << it.data() << "'\n";
|
|
}
|
|
}
|
|
|
|
void MyMoneyStorageDump::dumpTransaction(TQTextStream& s, IMyMoneyStorage* storage, const MyMoneyTransaction& it_t)
|
|
{
|
|
s << " ID = " << it_t.id() << "\n";
|
|
s << " Postdate = " << it_t.postDate().toString(Qt::ISODate) << "\n";
|
|
s << " EntryDate = " << it_t.entryDate().toString(Qt::ISODate) << "\n";
|
|
s << " Commodity = [" << it_t.commodity() << "]\n";
|
|
s << " Memo = " << it_t.memo() << "\n";
|
|
s << " BankID = " << it_t.bankID() << "\n";
|
|
dumpKVP("KVP:", s, it_t, 2);
|
|
|
|
s << " Splits\n";
|
|
s << " ------\n";
|
|
TQValueList<MyMoneySplit>::ConstIterator it_s;
|
|
for(it_s = it_t.splits().begin(); it_s != it_t.splits().end(); ++it_s) {
|
|
s << " ID = " << (*it_s).id() << "\n";
|
|
s << " Transaction = " << (*it_s).transactionId() << "\n";
|
|
s << " Payee = " << (*it_s).payeeId();
|
|
if(!(*it_s).payeeId().isEmpty()) {
|
|
MyMoneyPayee p = storage->payee((*it_s).payeeId());
|
|
s << " (" << p.name() << ")" << "\n";
|
|
} else
|
|
s << " ()\n";
|
|
s << " Account = " << (*it_s).accountId();
|
|
MyMoneyAccount acc;
|
|
try {
|
|
acc = storage->account((*it_s).accountId());
|
|
s << " (" << acc.name() << ") [" << acc.currencyId() << "]\n";
|
|
} catch (MyMoneyException *e) {
|
|
s << " (---) [---]\n";
|
|
delete e;
|
|
}
|
|
s << " Memo = " << (*it_s).memo() << "\n";
|
|
if((*it_s).value() == MyMoneyMoney::autoCalc)
|
|
s << " Value = will be calculated" << "\n";
|
|
else
|
|
s << " Value = " << (*it_s).value().formatMoney("", 2)
|
|
<< " (" << (*it_s).value().toString() << ")\n";
|
|
s << " Shares = " << (*it_s).shares().formatMoney("", 2)
|
|
<< " (" << (*it_s).shares().toString() << ")\n";
|
|
s << " Action = '" << (*it_s).action() << "'\n";
|
|
s << " Nr = '" << (*it_s).number() << "'\n";
|
|
s << " ReconcileFlag = '" << reconcileToString((*it_s).reconcileFlag()) << "'\n";
|
|
if((*it_s).reconcileFlag() != MyMoneySplit::NotReconciled) {
|
|
s << " ReconcileDate = " << (*it_s).reconcileDate().toString(Qt::ISODate) << "\n";
|
|
}
|
|
s << " BankID = " << (*it_s).bankID() << "\n";
|
|
dumpKVP("KVP:", s, (*it_s), 4);
|
|
s << "\n";
|
|
}
|
|
s << "\n";
|
|
}
|
|
|
|
#define i18n TQString
|
|
|
|
const TQString MyMoneyStorageDump::reconcileToString(MyMoneySplit::reconcileFlagE flag) const
|
|
{
|
|
TQString rc;
|
|
|
|
switch(flag) {
|
|
case MyMoneySplit::NotReconciled:
|
|
rc = i18n("not reconciled");
|
|
break;
|
|
case MyMoneySplit::Cleared:
|
|
rc = i18n("cleared");
|
|
break;
|
|
case MyMoneySplit::Reconciled:
|
|
rc = i18n("reconciled");
|
|
break;
|
|
case MyMoneySplit::Frozen:
|
|
rc = i18n("frozen");
|
|
break;
|
|
default:
|
|
rc = i18n("unknown");
|
|
break;
|
|
}
|
|
return rc;
|
|
}
|
|
|
|
#if 0
|
|
void MyMoneyStorageDump::dumpPriceHistory(TQTextStream& s, const equity_price_history history)
|
|
{
|
|
if(history.count() != 0) {
|
|
s << " Price History:\n";
|
|
|
|
equity_price_history::const_iterator it_price = history.begin();
|
|
while ( it_price != history.end() )
|
|
{
|
|
s << " " << it_price.key().toString() << ": " << it_price.data().toDouble() << "\n";
|
|
it_price++;
|
|
}
|
|
}
|
|
}
|
|
#endif
|