mymoneytransaction.h
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef MYMONEYTRANSACTION_H
00020 #define MYMONEYTRANSACTION_H
00021
00022 #ifdef HAVE_CONFIG_H
00023 #include <config.h>
00024 #endif
00025
00026
00027
00028
00029 #include <qstring.h>
00030 #include <qdatetime.h>
00031 #include <qptrlist.h>
00032 #include <qstringlist.h>
00033
00034
00035
00036
00037 #include "mymoneyutils.h"
00038 #include "mymoneymoney.h"
00039 #include "mymoneykeyvaluecontainer.h"
00040 #include "mymoneysplit.h"
00041 #include <kmymoney/export.h>
00042
00051 class KMYMONEY_EXPORT MyMoneyTransaction : public MyMoneyObject, public MyMoneyKeyValueContainer
00052 {
00053 public:
00054 MyMoneyTransaction();
00055 MyMoneyTransaction(const QString id,
00056 const MyMoneyTransaction& transaction);
00061 MyMoneyTransaction(const QDomElement& node, const bool forceId = true);
00062 ~MyMoneyTransaction();
00063
00064 public:
00065 friend QDataStream &operator<<(QDataStream &, MyMoneyTransaction &);
00066 friend QDataStream &operator>>(QDataStream &, MyMoneyTransaction &);
00067
00068
00069 const QDate& entryDate(void) const { return m_entryDate; };
00070 const QDate& postDate(void) const { return m_postDate; };
00071 const QString& memo(void) const { return m_memo; };
00072 const QValueList<MyMoneySplit>& splits(void) const { return m_splits; };
00073 QValueList<MyMoneySplit>& splits(void) { return m_splits; };
00074 unsigned int splitCount(void) const { return m_splits.count(); };
00075 const QString& commodity(void) const { return m_commodity; };
00076 const QString& bankID(void) const { return m_bankID; };
00077
00078
00079 void setPostDate(const QDate& date);
00080 void setEntryDate(const QDate& date);
00081 void setMemo(const QString& memo);
00082 void setCommodity(const QString& commodityId) { m_commodity = commodityId; };
00083 void setBankID(const QString& bankID) { m_bankID = bankID; };
00084
00085 bool operator == (const MyMoneyTransaction&) const;
00086 inline bool operator != (const MyMoneyTransaction& r) const { return !(*this == r); };
00087 bool operator< (const MyMoneyTransaction& r) const { return postDate() < r.postDate(); };
00088 bool operator<= (const MyMoneyTransaction& r) const { return postDate() <= r.postDate(); };
00089 bool operator> (const MyMoneyTransaction& r) const { return postDate() > r.postDate(); };
00090
00103 const MyMoneySplit& splitByAccount(const QString& accountId, const bool match = true) const;
00104
00115 const MyMoneySplit& splitByAccount(const QStringList& accountIds, const bool match = true) const;
00116
00124 const MyMoneySplit& splitById(const QString& splitId) const;
00125
00134 const MyMoneySplit& splitByPayee(const QString& payeeId) const;
00135
00142 bool accountReferenced(const QString& id) const;
00143
00152 void addSplit(MyMoneySplit& split);
00153
00157 void modifySplit(MyMoneySplit& split);
00158
00162 void removeSplit(const MyMoneySplit& split);
00163
00167 void removeSplits(void);
00168
00174 const MyMoneyMoney splitSum(void) const;
00175
00188 bool isLoanPayment(void) const;
00189
00194 const MyMoneySplit& amortizationSplit(void) const;
00195
00200 const MyMoneySplit& interestSplit(void) const;
00201
00216 bool isDuplicate(const MyMoneyTransaction& transaction) const;
00217
00221 bool isStockSplit(void) const;
00222
00226 bool isImported(void) const;
00227
00232 void setImported(bool state = true);
00233
00242 static const QString firstSplitID(void);
00243
00244 void writeXML(QDomDocument& document, QDomElement& parent) const;
00245
00255 virtual bool hasReferenceTo(const QString& id) const;
00256
00263 bool hasAutoCalcSplit(void) const;
00264
00280 QString accountSignature(bool includeSplitCount = false) const;
00281
00282 QString uniqueSortKey(void) const;
00283
00296 static unsigned long hash(const QString& txt, unsigned long h = 0);
00297
00298 private:
00302 const QString nextSplitID(void);
00303
00304 private:
00305 static const int SPLIT_ID_SIZE = 4;
00306
00311 QDate m_entryDate;
00312
00316 QDate m_postDate;
00317
00321 QString m_memo;
00322
00326 QValueList<MyMoneySplit> m_splits;
00327
00333 unsigned int m_nextSplitID;
00334
00338 QString m_commodity;
00339
00346 QString m_bankID;
00347
00349 static const int YEAR_SIZE = 4;
00350 static const int MONTH_SIZE = 2;
00351 static const int DAY_SIZE = 2;
00352 };
00353 #endif