本文整理汇总了C++中MyMoneySplit::value方法的典型用法代码示例。如果您正苦于以下问题:C++ MyMoneySplit::value方法的具体用法?C++ MyMoneySplit::value怎么用?C++ MyMoneySplit::value使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类MyMoneySplit
的用法示例。
在下文中一共展示了MyMoneySplit::value方法的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: writeTransactionEntry
void MyMoneyQifWriter::writeTransactionEntry(QTextStream &s, const MyMoneyTransaction& t, const QString& accountId)
{
MyMoneyFile* file = MyMoneyFile::instance();
MyMoneySplit split = t.splitByAccount(accountId);
s << "D" << m_qifProfile.date(t.postDate()) << endl;
switch(split.reconcileFlag()) {
case MyMoneySplit::Cleared:
s << "C*" << endl;
break;
case MyMoneySplit::Reconciled:
case MyMoneySplit::Frozen:
s << "CX" << endl;
break;
default:
break;
}
if(split.memo().length() > 0) {
QString m = split.memo();
m.replace('\n', "\\n");
s << "M" << m << endl;
}
s << "T" << m_qifProfile.value('T', split.value()) << endl;
if(split.number().length() > 0)
s << "N" << split.number() << endl;
if(!split.payeeId().isEmpty()) {
MyMoneyPayee payee = file->payee(split.payeeId());
s << "P" << payee.name() << endl;
}
QValueList<MyMoneySplit> list = t.splits();
if(list.count() > 1) {
MyMoneySplit sp = t.splitByAccount(accountId, false);
MyMoneyAccount acc = file->account(sp.accountId());
if(acc.accountGroup() != MyMoneyAccount::Income
&& acc.accountGroup() != MyMoneyAccount::Expense) {
s << "L" << m_qifProfile.accountDelimiter()[0]
<< MyMoneyFile::instance()->accountToCategory(sp.accountId())
<< m_qifProfile.accountDelimiter()[1] << endl;
} else {
s << "L" << file->accountToCategory(sp.accountId()) << endl;
}
if(list.count() > 2) {
QValueList<MyMoneySplit>::ConstIterator it;
for(it = list.begin(); it != list.end(); ++it) {
if(!((*it) == split)) {
writeSplitEntry(s, *it);
}
}
}
}
s << "^" << endl;
}
示例2: testReadXML
void MyMoneySplitTest::testReadXML()
{
MyMoneySplit s;
QString ref_ok = QString(
"<!DOCTYPE TEST>\n"
"<SPLIT-CONTAINER>\n"
" <SPLIT payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"Deposit\" bankid=\"SPID\" number=\"124\" reconcileflag=\"2\" memo=\"MyMemo\" value=\"96379/1000\" account=\"A000076\">\n"
" <TAG id=\"G000001\"/>\n"
" </SPLIT>\n"
"</SPLIT-CONTAINER>\n");
QString ref_false = QString(
"<!DOCTYPE TEST>\n"
"<SPLIT-CONTAINER>\n"
" <SPLITS payee=\"P000001\" reconciledate=\"\" shares=\"96379/100\" action=\"Deposit\" bankid=\"SPID\" number=\"124\" reconcileflag=\"2\" memo=\"\" value=\"96379/1000\" account=\"A000076\" />\n"
" <TAG id=\"G000001\"/>\n"
"</SPLIT-CONTAINER>\n");
QDomDocument doc;
QDomElement node;
doc.setContent(ref_false);
node = doc.documentElement().firstChild().toElement();
try {
s = MyMoneySplit(node);
QFAIL("Missing expected exception");
} catch (const MyMoneyException &) {
}
doc.setContent(ref_ok);
node = doc.documentElement().firstChild().toElement();
try {
s = MyMoneySplit(node);
QVERIFY(s.id().isEmpty());
QVERIFY(s.payeeId() == "P000001");
QList<QString> tagIdList;
tagIdList << "G000001";
QVERIFY(s.tagIdList() == tagIdList);
QVERIFY(s.reconcileDate() == QDate());
QVERIFY(s.shares() == MyMoneyMoney(96379, 100));
QVERIFY(s.value() == MyMoneyMoney(96379, 1000));
QVERIFY(s.number() == "124");
QVERIFY(s.bankID() == "SPID");
QVERIFY(s.reconcileFlag() == MyMoneySplit::Reconciled);
QVERIFY(s.action() == MyMoneySplit::ActionDeposit);
QVERIFY(s.accountId() == "A000076");
QVERIFY(s.memo() == "MyMemo");
} catch (const MyMoneyException &) {
}
}
示例3: diffAmount
MyMoneyMoney KSplitTransactionDlg::diffAmount()
{
MyMoneyMoney diff;
// if there is an amount specified in the transaction, we need to calculate the
// difference, otherwise we display the difference as 0 and display the same sum.
if (m_amountValid) {
MyMoneySplit split = m_transaction.splits()[0];
diff = -(splitsValue() + split.value());
}
return diff;
}
示例4: testAssignmentConstructor
void MyMoneySplitTest::testAssignmentConstructor()
{
testSetFunctions();
MyMoneySplit n;
n = *m;
QVERIFY(n.accountId() == "Account");
QVERIFY(n.memo() == "Memo");
QVERIFY(n.reconcileDate() == QDate(1, 2, 3));
QVERIFY(n.reconcileFlag() == MyMoneySplit::Cleared);
QVERIFY(n.shares() == MyMoneyMoney(1234, 100));
QVERIFY(n.value() == MyMoneyMoney(3456, 100));
QVERIFY(n.id() == "MyID");
QVERIFY(n.payeeId() == "Payee");
QList<QString> tagIdList;
tagIdList << "Tag";
QVERIFY(m->tagIdList() == tagIdList);
QVERIFY(n.action() == "Action");
QVERIFY(n.transactionId() == "TestTransaction");
QVERIFY(n.value("Key") == "Value");
}
示例5: writeAccountEntry
void MyMoneyQifWriter::writeAccountEntry(QTextStream &s, const QString& accountId, const QDate& startDate, const QDate& endDate)
{
MyMoneyFile* file = MyMoneyFile::instance();
MyMoneyAccount account;
account = file->account(accountId);
MyMoneyTransactionFilter filter(accountId);
filter.setDateFilter(startDate, endDate);
QValueList<MyMoneyTransaction> list = file->transactionList(filter);
QString openingBalanceTransactionId;
s << "!Type:" << m_qifProfile.profileType() << endl;
if(!startDate.isValid() || startDate <= account.openingDate()) {
s << "D" << m_qifProfile.date(account.openingDate()) << endl;
openingBalanceTransactionId = file->openingBalanceTransaction(account);
MyMoneySplit split;
if(!openingBalanceTransactionId.isEmpty()) {
MyMoneyTransaction openingBalanceTransaction = file->transaction(openingBalanceTransactionId);
split = openingBalanceTransaction.splitByAccount(account.id(), true /* match */);
}
s << "T" << m_qifProfile.value('T', split.value()) << endl;
} else {
s << "D" << m_qifProfile.date(startDate) << endl;
s << "T" << m_qifProfile.value('T', file->balance(accountId, startDate.addDays(-1))) << endl;
}
s << "CX" << endl;
s << "P" << m_qifProfile.openingBalanceText() << endl;
s << "L";
if(m_qifProfile.accountDelimiter().length())
s << m_qifProfile.accountDelimiter()[0];
s << account.name();
if(m_qifProfile.accountDelimiter().length() > 1)
s << m_qifProfile.accountDelimiter()[1];
s << endl;
s << "^" << endl;
QValueList<MyMoneyTransaction>::ConstIterator it;
signalProgress(0, list.count());
int count = 0;
for(it = list.begin(); it != list.end(); ++it) {
// don't include the openingBalanceTransaction again
if((*it).id() != openingBalanceTransactionId)
writeTransactionEntry(s, *it, accountId);
signalProgress(++count, 0);
}
}
示例6: dissectTransaction
void CsvUtil::dissectTransaction(const MyMoneyTransaction& transaction, const MyMoneySplit& split, MyMoneySplit& assetAccountSplit, QList<MyMoneySplit>& feeSplits, QList<MyMoneySplit>& interestSplits, MyMoneySecurity& security, MyMoneySecurity& currency, MyMoneySplit::investTransactionTypeE& transactionType)
{
// collect the splits. split references the stock account and should already
// be set up. assetAccountSplit references the corresponding asset account (maybe
// empty), feeSplits is the list of all expenses and interestSplits
// the list of all incomes
MyMoneyFile* file = MyMoneyFile::instance();
QList<MyMoneySplit>::ConstIterator it_s;
for (it_s = transaction.splits().constBegin(); it_s != transaction.splits().constEnd(); ++it_s) {
MyMoneyAccount acc = file->account((*it_s).accountId());
if ((*it_s).id() == split.id()) {
security = file->security(acc.currencyId());
} else if (acc.accountGroup() == MyMoneyAccount::Expense) {
feeSplits.append(*it_s);
} else if (acc.accountGroup() == MyMoneyAccount::Income) {
interestSplits.append(*it_s);
} else {
assetAccountSplit = *it_s;
}
}
// determine transaction type
if (split.action() == MyMoneySplit::ActionAddShares) {
transactionType = (!split.shares().isNegative()) ? MyMoneySplit::AddShares : MyMoneySplit::RemoveShares;
} else if (split.action() == MyMoneySplit::ActionBuyShares) {
transactionType = (!split.value().isNegative()) ? MyMoneySplit::BuyShares : MyMoneySplit::SellShares;
} else if (split.action() == MyMoneySplit::ActionDividend) {
transactionType = MyMoneySplit::Dividend;
} else if (split.action() == MyMoneySplit::ActionReinvestDividend) {
transactionType = MyMoneySplit::ReinvestDividend;
} else if (split.action() == MyMoneySplit::ActionYield) {
transactionType = MyMoneySplit::Yield;
} else if (split.action() == MyMoneySplit::ActionSplitShares) {
transactionType = MyMoneySplit::SplitShares;
} else if (split.action() == MyMoneySplit::ActionInterestIncome) {
transactionType = MyMoneySplit::InterestIncome;
} else
transactionType = MyMoneySplit::BuyShares;
currency.setTradingSymbol("???");
try {
currency = file->security(transaction.commodity());
} catch (const MyMoneyException &) {
}
}
示例7: writeSplitEntry
void MyMoneyQifWriter::writeSplitEntry(QTextStream& s, const MyMoneySplit& split)
{
MyMoneyFile* file = MyMoneyFile::instance();
s << "S";
MyMoneyAccount acc = file->account(split.accountId());
if(acc.accountGroup() != MyMoneyAccount::Income
&& acc.accountGroup() != MyMoneyAccount::Expense) {
s << m_qifProfile.accountDelimiter()[0]
<< file->accountToCategory(split.accountId())
<< m_qifProfile.accountDelimiter()[1];
} else {
s << file->accountToCategory(split.accountId());
}
s << endl;
if(split.memo().length() > 0) {
QString m = split.memo();
m.replace('\n', "\\n");
s << "E" << m << endl;
}
s << "$" << m_qifProfile.value('$', -split.value()) << endl;
}
示例8: exec
int KSplitTransactionDlg::exec()
{
// for deposits, we invert the sign of all splits.
// don't forget to revert when we're done ;-)
if (m_isDeposit) {
for (int i = 0; i < m_transaction.splits().count(); ++i) {
MyMoneySplit split = m_transaction.splits()[i];
split.setValue(-split.value());
split.setShares(-split.shares());
m_transaction.modifySplit(split);
}
}
int rc;
do {
transactionsTable->setFocus();
// initialize the display
transactionsTable->setTransaction(m_transaction, m_split, m_account);
updateSums();
rc = KSplitTransactionDlgDecl::exec();
if (rc == Accepted) {
if (!diffAmount().isZero()) {
KSplitCorrectionDlgDecl* corrDlg = new KSplitCorrectionDlgDecl(this);
QVBoxLayout *mainLayout = new QVBoxLayout;
corrDlg->setLayout(mainLayout);
mainLayout->addWidget(corrDlg->findChild<QWidget*>("verticalLayout"));
QDialogButtonBox *buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok|QDialogButtonBox::Cancel);
connect(buttonBox, SIGNAL(accepted()), corrDlg, SLOT(accept()));
connect(buttonBox, SIGNAL(rejected()), corrDlg, SLOT(reject()));
mainLayout->addWidget(buttonBox);
corrDlg->buttonGroup->setId(corrDlg->continueBtn, 0);
corrDlg->buttonGroup->setId(corrDlg->changeBtn, 1);
corrDlg->buttonGroup->setId(corrDlg->distributeBtn, 2);
corrDlg->buttonGroup->setId(corrDlg->leaveBtn, 3);
corrDlg->setModal(true);
MyMoneySplit split = m_transaction.splits()[0];
QString total = (-split.value()).formatMoney("", m_precision);
QString sums = splitsValue().formatMoney("", m_precision);
QString diff = diffAmount().formatMoney("", m_precision);
// now modify the text items of the dialog to contain the correct values
QString q = i18n("The total amount of this transaction is %1 while "
"the sum of the splits is %2. The remaining %3 are "
"unassigned.", total, sums, diff);
corrDlg->explanation->setText(q);
q = i18n("Change &total amount of transaction to %1.", sums);
corrDlg->changeBtn->setText(q);
q = i18n("&Distribute difference of %1 among all splits.", diff);
corrDlg->distributeBtn->setText(q);
// FIXME remove the following line once distribution among
// all splits is implemented
corrDlg->distributeBtn->hide();
// if we have only two splits left, we don't allow leaving sth. unassigned.
if (m_transaction.splitCount() < 3) {
q = i18n("&Leave total amount of transaction at %1.", total);
} else {
q = i18n("&Leave %1 unassigned.", diff);
}
corrDlg->leaveBtn->setText(q);
if ((rc = corrDlg->exec()) == Accepted) {
switch (corrDlg->buttonGroup->checkedId()) {
case 0: // continue to edit
rc = Rejected;
break;
case 1: // modify total
split.setValue(-splitsValue());
split.setShares(-splitsValue());
m_transaction.modifySplit(split);
break;
case 2: // distribute difference
qDebug("distribution of difference not yet supported in KSplitTransactionDlg::slotFinishClicked()");
break;
case 3: // leave unassigned
break;
}
}
delete corrDlg;
}
} else
break;
} while (rc != Accepted);
// for deposits, we inverted the sign of all splits.
// now we revert it back, so that things are left correct
if (m_isDeposit) {
for (int i = 0; i < m_transaction.splits().count(); ++i) {
//.........这里部分代码省略.........
示例9: match
void TransactionMatcher::match(MyMoneyTransaction tm, MyMoneySplit sm, MyMoneyTransaction ti, MyMoneySplit si, bool allowImportedTransactions)
{
const MyMoneySecurity& sec = MyMoneyFile::instance()->security(m_account.currencyId());
// Now match the transactions.
//
// 'Matching' the transactions entails DELETING the end transaction,
// and MODIFYING the start transaction as needed.
//
// There are a variety of ways that a transaction can conflict.
// Post date, splits, amount are the ones that seem to matter.
// TODO: Handle these conflicts intelligently, at least warning
// the user, or better yet letting the user choose which to use.
//
// For now, we will just use the transaction details from the start
// transaction. The only thing we'll take from the end transaction
// are the bank ID's.
//
// What we have to do here is iterate over the splits in the end
// transaction, and find the corresponding split in the start
// transaction. If there is a bankID in the end split but not the
// start split, add it to the start split. If there is a bankID
// in BOTH, then this transaction cannot be merged (both transactions
// were imported!!) If the corresponding start split cannot be
// found and the end split has a bankID, we should probably just fail.
// Although we could ADD it to the transaction.
// ipwizard: Don't know if iterating over the transactions is a good idea.
// In case of a split transaction recorded with KMyMoney and the transaction
// data being imported consisting only of a single category assignment, this
// does not make much sense. The same applies for investment transactions
// stored in KMyMoney against imported transactions. I think a better solution
// is to just base the match on the splits referencing the same (currently
// selected) account.
// verify, that tm is a manually (non-matched) transaction and ti an imported one
if(sm.isMatched() || (!allowImportedTransactions && tm.isImported()))
throw new MYMONEYEXCEPTION(i18n("First transaction does not match requirement for matching"));
if(!ti.isImported())
throw new MYMONEYEXCEPTION(i18n("Second transaction does not match requirement for matching"));
// verify that the amounts are the same, otherwise we should not be matching!
if(sm.shares() != si.shares()) {
throw new MYMONEYEXCEPTION(i18n("Splits for %1 have conflicting values (%2,%3)").arg(m_account.name()).arg(sm.shares().formatMoney(m_account, sec), si.shares().formatMoney(m_account, sec)));
}
// ipwizard: I took over the code to keep the bank id found in the endMatchTransaction
// This might not work for QIF imports as they don't setup this information. It sure
// makes sense for OFX and HBCI.
const QString& bankID = si.bankID();
if (!bankID.isEmpty()) {
try {
if (sm.bankID().isEmpty() ) {
sm.setBankID( bankID );
tm.modifySplit(sm);
} else if(sm.bankID() != bankID) {
throw new MYMONEYEXCEPTION(i18n("Both of these transactions have been imported into %1. Therefore they cannot be matched. Matching works with one imported transaction and one non-imported transaction.").arg(m_account.name()));
}
} catch(MyMoneyException *e) {
QString estr = e->what();
delete e;
throw new MYMONEYEXCEPTION(i18n("Unable to match all splits (%1)").arg(estr));
}
}
#if 0 // Ace's original code
// TODO (Ace) Add in another error to catch the case where a user
// tries to match two hand-entered transactions.
QValueList<MyMoneySplit> endSplits = endMatchTransaction.splits();
QValueList<MyMoneySplit>::const_iterator it_split = endSplits.begin();
while (it_split != endSplits.end())
{
// find the corresponding split in the start transaction
MyMoneySplit startSplit;
QString accountid = (*it_split).accountId();
try
{
startSplit = startMatchTransaction.splitByAccount( accountid );
}
// only exception is thrown if we cannot find a split like this
catch(MyMoneyException *e)
{
delete e;
startSplit = (*it_split);
startSplit.clearId();
startMatchTransaction.addSplit(startSplit);
}
// verify that the amounts are the same, otherwise we should not be
// matching!
if ( (*it_split).value() != startSplit.value() )
{
QString accountname = MyMoneyFile::instance()->account(accountid).name();
throw new MYMONEYEXCEPTION(i18n("Splits for %1 have conflicting values (%2,%3)").arg(accountname).arg((*it_split).value().formatMoney(),startSplit.value().formatMoney()));
}
QString bankID = (*it_split).bankID();
if ( ! bankID.isEmpty() )
{
try
//.........这里部分代码省略.........
示例10: transaction
MyMoneyTransaction KNewLoanWizard::transaction() const
{
MyMoneyTransaction t;
bool hasInterest = !field("interestRateEdit").value<MyMoneyMoney>().isZero();
MyMoneySplit sPayment, sInterest, sAmortization;
// setup accounts. at this point, we cannot fill in the id of the
// account that the amortization will be performed on, because we
// create the account. So the id is yet unknown.
sPayment.setAccountId(field("paymentAccountEdit").toStringList().first());
//Only create the interest split if not zero
if (hasInterest) {
sInterest.setAccountId(field("interestAccountEdit").toStringList().first());
sInterest.setValue(MyMoneyMoney::autoCalc);
sInterest.setShares(sInterest.value());
sInterest.setAction(MyMoneySplit::ActionInterest);
}
// values
if (field("borrowButton").toBool()) {
sPayment.setValue(-field("paymentEdit").value<MyMoneyMoney>());
} else {
sPayment.setValue(field("paymentEdit").value<MyMoneyMoney>());
}
sAmortization.setValue(MyMoneyMoney::autoCalc);
// don't forget the shares
sPayment.setShares(sPayment.value());
sAmortization.setShares(sAmortization.value());
// setup the commodity
MyMoneyAccount acc = MyMoneyFile::instance()->account(sPayment.accountId());
t.setCommodity(acc.currencyId());
// actions
sPayment.setAction(MyMoneySplit::ActionAmortization);
sAmortization.setAction(MyMoneySplit::ActionAmortization);
// payee
QString payeeId = field("payeeEdit").toString();
sPayment.setPayeeId(payeeId);
sAmortization.setPayeeId(payeeId);
MyMoneyAccount account("Phony-ID", MyMoneyAccount());
sAmortization.setAccountId(account.id());
// IMPORTANT: Payment split must be the first one, because
// the schedule view expects it this way during display
t.addSplit(sPayment);
t.addSplit(sAmortization);
if (hasInterest) {
t.addSplit(sInterest);
}
// copy the splits from the other costs and update the payment split
foreach (const MyMoneySplit& it, m_transaction.splits()) {
if (it.accountId() != account.id()) {
MyMoneySplit sp = it;
sp.clearId();
t.addSplit(sp);
sPayment.setValue(sPayment.value() - sp.value());
sPayment.setShares(sPayment.value());
t.modifySplit(sPayment);
}
}
return t;
}