const MyMoneyAccount& KNewAccountDlg::parentAccount(void) { if (!m_bSelectedParentAccount) { MyMoneyFile *file = MyMoneyFile::instance(); switch (m_account.accountGroup()) { case MyMoneyAccount::Asset: m_parentAccount = file->asset(); break; case MyMoneyAccount::Liability: m_parentAccount = file->liability(); break; case MyMoneyAccount::Income: m_parentAccount = file->income(); break; case MyMoneyAccount::Expense: m_parentAccount = file->expense(); break; case MyMoneyAccount::Equity: m_parentAccount = file->equity(); break; default: qDebug("Seems we have an account that hasn't been mapped to the top five"); if(m_categoryEditor) m_parentAccount = file->income(); else m_parentAccount = file->asset(); } } return m_parentAccount; }
void KAccountTemplateSelector::Private::loadHierarchy(void) { m_templateHierarchy.clear(); QListViewItemIterator it(m_parent->m_groupList, QListViewItemIterator::Selected); QListViewItem* it_v; while((it_v = it.current()) != 0) { m_templates[it_v->text(2)].hierarchy(m_templateHierarchy); ++it; } // I need to think about this some more. The code works and shows // the current account hierarchy. It might be usefull, to show // existing accounts dimmed and the new ones in bold or so. #if 0 // add the hierarchy from the MyMoneyFile object QValueList<MyMoneyAccount> aList; QValueList<MyMoneyAccount>::const_iterator it_a; MyMoneyFile* file = MyMoneyFile::instance(); file->accountList(aList); if(aList.count() > 0) { m_templateHierarchy[file->accountToCategory(file->asset().id(), true)] = 0; m_templateHierarchy[file->accountToCategory(file->liability().id(), true)] = 0; m_templateHierarchy[file->accountToCategory(file->income().id(), true)] = 0; m_templateHierarchy[file->accountToCategory(file->expense().id(), true)] = 0; m_templateHierarchy[file->accountToCategory(file->equity().id(), true)] = 0; } for(it_a = aList.begin(); it_a != aList.end(); ++it_a) { m_templateHierarchy[file->accountToCategory((*it_a).id(), true)] = 0; } #endif m_parent->m_accountList->clear(); QMap<QString, QListViewItem*>::iterator it_m; QRegExp exp("(.*):(.*)"); for(it_m = m_templateHierarchy.begin(); it_m != m_templateHierarchy.end(); ++it_m) { if(exp.search(it_m.key()) == -1) { (*it_m) = new KListViewItem(m_parent->m_accountList, it_m.key()); } else { (*it_m) = hierarchyItem(exp.cap(1), exp.cap(2)); } (*it_m)->setOpen(true); } m_parent->m_description->clear(); if(m_parent->m_groupList->currentItem()) { m_parent->m_description->setText(m_templates[m_parent->m_groupList->currentItem()->text(2)].longDescription()); } }
bool MyMoneyTemplate::importTemplate(void(*callback)(int, int, const QString&)) { m_progressCallback = callback; bool rc = !m_accounts.isNull(); MyMoneyFile* file = MyMoneyFile::instance(); signalProgress(0, m_doc.elementsByTagName("account").count(), i18n("Loading template %1", m_source.url())); m_accountsRead = 0; while (rc == true && !m_accounts.isNull() && m_accounts.isElement()) { QDomElement childElement = m_accounts.toElement(); if (childElement.tagName() == "account" && childElement.attribute("name").isEmpty()) { ++m_accountsRead; MyMoneyAccount parent; switch (childElement.attribute("type").toUInt()) { case MyMoneyAccount::Asset: parent = file->asset(); break; case MyMoneyAccount::Liability: parent = file->liability(); break; case MyMoneyAccount::Income: parent = file->income(); break; case MyMoneyAccount::Expense: parent = file->expense(); break; case MyMoneyAccount::Equity: parent = file->equity(); break; default: KMessageBox::error(KMyMoneyUtils::mainWindow(), i18n("<p>Invalid top-level account type <b>%1</b> in template file <b>%2</b></p>", childElement.attribute("type"), m_source.prettyUrl())); rc = false; } if (rc == true) { rc = createAccounts(parent, childElement.firstChild()); } } else { rc = false; } m_accounts = m_accounts.nextSibling(); } signalProgress(-1, -1); return rc; }
void KNewAccountDlg::initParentWidget(QString parentId, const QString& accountId) { MyMoneyFile *file = MyMoneyFile::instance(); MyMoneyAccount liabilityAccount = file->liability(); MyMoneyAccount assetAccount = file->asset(); MyMoneyAccount expenseAccount = file->expense(); MyMoneyAccount incomeAccount = file->income(); MyMoneyAccount equityAccount = file->equity(); m_parentItem = 0; m_accountItem = 0; // Determine the parent account try { m_parentAccount = file->account(parentId); } catch (MyMoneyException *e) { m_bSelectedParentAccount = false; m_parentAccount = MyMoneyAccount(); if(m_account.accountType() != MyMoneyAccount::UnknownAccountType) { parentAccount(); parentId = m_parentAccount.id(); } delete e; } m_bSelectedParentAccount = true; // extract the account type from the combo box MyMoneyAccount::accountTypeE type; MyMoneyAccount::accountTypeE groupType; type = KMyMoneyUtils::stringToAccountType(typeCombo->currentText()); groupType = MyMoneyAccount::accountGroup(type); m_qlistviewParentAccounts->clear(); // Now scan all 4 account roots to load the list and mark the parent try { if (!m_categoryEditor) { if(groupType == MyMoneyAccount::Asset || type == MyMoneyAccount::Loan) { // Asset KMyMoneyAccountTreeBaseItem *assetTopLevelAccount = new KMyMoneyAccountTreeItem(m_qlistviewParentAccounts, assetAccount); if(m_parentAccount.id().isEmpty()) { m_parentAccount = assetAccount; parentId = m_parentAccount.id(); } if (parentId == assetAccount.id()) m_parentItem = assetTopLevelAccount; assetTopLevelAccount->setOpen(true); for ( QStringList::ConstIterator it = assetAccount.accountList().begin(); it != assetAccount.accountList().end(); ++it ) { MyMoneyAccount acc = file->account(*it); if(acc.isClosed()) continue; KMyMoneyAccountTreeBaseItem *accountItem = new KMyMoneyAccountTreeItem(assetTopLevelAccount, acc); if(parentId == acc.id()) { m_parentItem = accountItem; } else if(accountId == acc.id()) { if(m_isEditing) accountItem->setSelectable(false); m_accountItem = accountItem; } QStringList subAccounts = acc.accountList(); if (subAccounts.count() >= 1) { showSubAccounts(subAccounts, accountItem, parentId, acc.id()); } } } if(groupType == MyMoneyAccount::Liability) { // Liability KMyMoneyAccountTreeBaseItem *liabilityTopLevelAccount = new KMyMoneyAccountTreeItem(m_qlistviewParentAccounts, liabilityAccount); if(m_parentAccount.id().isEmpty()) { m_parentAccount = liabilityAccount; parentId = m_parentAccount.id(); } if (parentId == liabilityAccount.id()) m_parentItem = liabilityTopLevelAccount; liabilityTopLevelAccount->setOpen(true); for ( QStringList::ConstIterator it = liabilityAccount.accountList().begin(); it != liabilityAccount.accountList().end(); ++it ) { MyMoneyAccount acc = file->account(*it); if(acc.isClosed()) continue; KMyMoneyAccountTreeBaseItem *accountItem = new KMyMoneyAccountTreeItem(liabilityTopLevelAccount, acc); if(parentId == acc.id()) { m_parentItem = accountItem; } else if(accountId == acc.id()) { if(m_isEditing) accountItem->setSelectable(false); m_accountItem = accountItem; } QStringList subAccounts = acc.accountList(); if (subAccounts.count() >= 1) { showSubAccounts(subAccounts, accountItem, parentId, acc.id()); } } } } else { if(groupType == MyMoneyAccount::Income) { // Income KMyMoneyAccountTreeBaseItem *incomeTopLevelAccount = new KMyMoneyAccountTreeItem(m_qlistviewParentAccounts, incomeAccount); if(m_parentAccount.id().isEmpty()) { m_parentAccount = incomeAccount; parentId = m_parentAccount.id(); } if (parentId == incomeAccount.id()) m_parentItem = incomeTopLevelAccount; incomeTopLevelAccount->setOpen(true); for ( QStringList::ConstIterator it = incomeAccount.accountList().begin(); it != incomeAccount.accountList().end(); ++it ) { KMyMoneyAccountTreeBaseItem *accountItem = new KMyMoneyAccountTreeItem(incomeTopLevelAccount, file->account(*it)); QString id = file->account(*it).id(); if(parentId == id) { m_parentItem = accountItem; } else if(accountId == id) { if(m_isEditing) accountItem->setSelectable(false); m_accountItem = accountItem; } QStringList subAccounts = file->account(*it).accountList(); if (subAccounts.count() >= 1) { showSubAccounts(subAccounts, accountItem, parentId, accountId); } } } if(groupType == MyMoneyAccount::Expense) { // Expense KMyMoneyAccountTreeBaseItem *expenseTopLevelAccount = new KMyMoneyAccountTreeItem(m_qlistviewParentAccounts, expenseAccount); if(m_parentAccount.id().isEmpty()) { m_parentAccount = expenseAccount; parentId = m_parentAccount.id(); } if (parentId == expenseAccount.id()) m_parentItem = expenseTopLevelAccount; expenseTopLevelAccount->setOpen(true); for ( QStringList::ConstIterator it = expenseAccount.accountList().begin(); it != expenseAccount.accountList().end(); ++it ) { KMyMoneyAccountTreeBaseItem *accountItem = new KMyMoneyAccountTreeItem(expenseTopLevelAccount, file->account(*it)); QString id = file->account(*it).id(); if(parentId == id) { m_parentItem = accountItem; } else if(accountId == id) { if(m_isEditing) accountItem->setSelectable(false); m_accountItem = accountItem; } QStringList subAccounts = file->account(*it).accountList(); if (subAccounts.count() >= 1) { showSubAccounts(subAccounts, accountItem, parentId, accountId); } } } } } catch (MyMoneyException *e) { qDebug("Exception in assets account refresh: %s", e->what().latin1()); delete e; } m_qlistviewParentAccounts->setColumnWidth(0, m_qlistviewParentAccounts->width()); if (m_parentItem) { m_subAccountLabel->setText(i18n("Is a sub account of %1").arg(m_parentAccount.name())); m_parentItem->setOpen(true); m_qlistviewParentAccounts->setSelected(m_parentItem, true); } m_qlistviewParentAccounts->setEnabled(true); }