mymoneytransaction.h

Go to the documentation of this file.
00001 /***************************************************************************
00002                           mymoneytransaction.h
00003                              -------------------
00004     copyright            : (C) 2000 by Michael Edwardes
00005                            (C) 2002 by Thomas Baumgart
00006     email                : mte@users.sourceforge.net
00007                            ipwizard@users.sourceforge.net
00008  ***************************************************************************/
00009 
00010 /***************************************************************************
00011  *                                                                         *
00012  *   This program is free software; you can redistribute it and/or modify  *
00013  *   it under the terms of the GNU General Public License as published by  *
00014  *   the Free Software Foundation; either version 2 of the License, or     *
00015  *   (at your option) any later version.                                   *
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 // QT Includes
00028 
00029 #include <qstring.h>
00030 #include <qdatetime.h>
00031 #include <qptrlist.h>
00032 #include <qstringlist.h>
00033 
00034 // ----------------------------------------------------------------------------
00035 // Project Includes
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   // Simple get operations
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 /*__attribute__ ((deprecated))*/ { return m_bankID; };
00077 
00078   // Simple set operations
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) /*__attribute__ ((deprecated))*/ { 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

Generated on Wed Jan 26 13:03:18 2011 for KMyMoney by  doxygen 1.5.6