diff options
author | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-07-04 22:38:03 +0000 |
---|---|---|
committer | tpearson <tpearson@283d02a7-25f6-0310-bc7c-ecb5cbfe19da> | 2011-07-04 22:38:03 +0000 |
commit | dadc34655c3ab961b0b0b94a10eaaba710f0b5e8 (patch) | |
tree | 99e72842fe687baea16376a147619b6048d7e441 /kmymoney2/mymoney/mymoneybudget.h | |
download | kmymoney-dadc34655c3ab961b0b0b94a10eaaba710f0b5e8.tar.gz kmymoney-dadc34655c3ab961b0b0b94a10eaaba710f0b5e8.zip |
Added kmymoney
git-svn-id: svn://anonsvn.kde.org/home/kde/branches/trinity/applications/kmymoney@1239792 283d02a7-25f6-0310-bc7c-ecb5cbfe19da
Diffstat (limited to 'kmymoney2/mymoney/mymoneybudget.h')
-rw-r--r-- | kmymoney2/mymoney/mymoneybudget.h | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/kmymoney2/mymoney/mymoneybudget.h b/kmymoney2/mymoney/mymoneybudget.h new file mode 100644 index 0000000..a2eea02 --- /dev/null +++ b/kmymoney2/mymoney/mymoneybudget.h @@ -0,0 +1,269 @@ +/*************************************************************************** + mymoneybudget.h + ------------------- + begin : Sun Jan 22 2006 + copyright : (C) 2006 by Darren Gould + email : darren_gould@gmx.de + ***************************************************************************/ + +/*************************************************************************** + * * + * 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. * + * * + ***************************************************************************/ + +#ifndef MYMONEYBUDGET_H +#define MYMONEYBUDGET_H + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +// ---------------------------------------------------------------------------- +// QT Includes + +#include <qmap.h> +#include <qvaluelist.h> +#include <qstring.h> +class QDomElement; +class QDomDocument; + +// ---------------------------------------------------------------------------- +// Project Includes + +#include <kmymoney/mymoneyobject.h> +#include <kmymoney/mymoneyaccount.h> +#include <kmymoney/mymoneymoney.h> +#include <kmymoney/export.h> + +/** + * This class defines a Budget within the MyMoneyEngine. The Budget class + * contains all the configuration parameters needed to run a Budget, plus + * XML serialization. + * + * As noted above, this class only provides a Budget DEFINITION. The + * generation and presentation of the Budget itself are left to higher + * level classes. + * + * @author Darren Gould <darren_gould@gmx.de> + */ +class KMYMONEY_EXPORT MyMoneyBudget: public MyMoneyObject +{ +public: + MyMoneyBudget(void); + ~MyMoneyBudget(); + MyMoneyBudget(const QString& _name); + /** + * This constructor creates an object based on the data found in the + * QDomElement referenced by @p node. If problems arise, the @p id of + * the object is cleared (see MyMoneyObject::clearId()). + */ + MyMoneyBudget(const QDomElement& node); + + /** + * This constructor creates an object based on the data found in the + * MyMoneyBudget budget object. + */ + MyMoneyBudget(const QString& id, const MyMoneyBudget& budget); + + /** + * Helper class for MyMoneyBudget + * + * This is an abstraction of the PERIOD stored in the BUDGET/ACCOUNT tag in XML + * + * @author Darren Gould + */ + class PeriodGroup + { + public: + // get functions + const QDate& startDate ( void ) const { return m_start; } + const MyMoneyMoney& amount( void ) const { return m_amount; } + + // set functions + void setStartDate ( const QDate& _start ) { m_start = _start; } + void setAmount( const MyMoneyMoney& _amount ) { m_amount = _amount;} + + bool operator == (const PeriodGroup &r) const { return (m_start == r.m_start && m_amount == r.m_amount); } + + private: + QDate m_start; + MyMoneyMoney m_amount; + }; + + /** + * Helper class for MyMoneyBudget + * + * This is an abstraction of the Account Data stored in the BUDGET tag in XML + * + * @author Darren Gould + */ + class AccountGroup + { + public: + typedef enum + { + eNone = 0, + eMonthly, + eMonthByMonth, + eYearly, + eMax + } eBudgetLevel; + + static const QStringList kBudgetLevelText; + + public: + AccountGroup() : m_budgetlevel(eNone), m_budgetsubaccounts(false) {} + + // get functions + const QString& id( void ) const { return m_id; } + bool budgetSubaccounts( void ) const { return m_budgetsubaccounts; } + eBudgetLevel budgetLevel( void ) const { return m_budgetlevel; } + const PeriodGroup& period( const QDate &_date ) const { return m_periods[_date]; } + const QMap<QDate, PeriodGroup>& getPeriods( void ) const { return m_periods; } + void clearPeriods(void) { m_periods.clear(); } + const MyMoneyMoney balance( void ) const + { + MyMoneyMoney balance; + + QMap<QDate, PeriodGroup>::const_iterator it; + for(it = m_periods.begin(); it != m_periods.end(); ++it) + { + balance += (*it).amount(); + } + return balance; + }; + + const MyMoneyMoney totalBalance(void) const + { + MyMoneyMoney bal = balance(); + switch(m_budgetlevel) { + default: + break; + case eMonthly: + bal = bal * 12; + break; + } + return bal; + } + + // set functions + void setId( QString _id ) { m_id = _id; } + void setBudgetLevel( eBudgetLevel _level ) { m_budgetlevel = _level; } + void setBudgetSubaccounts( bool _b ) { m_budgetsubaccounts = _b; } + void addPeriod( const QDate& _date, PeriodGroup &period ) { m_periods[_date] = period; } + + // This member adds the value of another account group + // m_budgetlevel is adjusted to the larger one of both + // m_budgetsubaccounts remains unaffected + AccountGroup operator += (const AccountGroup& r); + + bool operator == (const AccountGroup &r) const; + + bool isZero(void) const; + + protected: + void convertToMonthly(void); + void convertToYearly(void); + void convertToMonthByMonth(void); + + private: + QString m_id; + + eBudgetLevel m_budgetlevel; + bool m_budgetsubaccounts; + QMap<QDate, PeriodGroup> m_periods; + }; + + /** + * This operator tests for equality of two MyMoneyBudget objects + */ + bool operator == (const MyMoneyBudget &) const; + + // Simple get operations + const QString& name(void) const { return m_name; } + const QDate& budgetStart(void) const { return m_start; } + QString id(void) const { return m_id; } + const AccountGroup & account(const QString _id) const; + bool contains(const QString _id) const { return m_accounts.contains(_id); } + QValueList<AccountGroup> getaccounts(void) const { return m_accounts.values(); } + + // Simple set operations + void setName(const QString& _name) { m_name = _name; } + void setBudgetStart(const QDate& _start); + void setAccount(const AccountGroup &_account, const QString _id); + + /** + * This method writes this Budget to the DOM element @p e, + * within the DOM document @p doc. + * + * @param e The element which should be populated with info from this Budget + * @param doc The document which we can use to create new sub-elements + * if needed + */ + void write(QDomElement& e, QDomDocument *doc) const; + + /** + * This method reads a Budget from the DOM element @p e, and + * populates this Budget with the results. + * + * @param e The element from which the Budget should be read + * + * @return bool True if a Budget was successfully loaded from the + * element @p e. If false is returned, the contents of this Budget + * object are undefined. + */ + bool read(const QDomElement& e); + + /** + * This method creates a QDomElement for the @p document + * under the parent node @p parent. (This version overwrites the + * MMObject base class.) + * + * @param document reference to QDomDocument + * @param parent reference to QDomElement parent node + */ + virtual void writeXML(QDomDocument& document, QDomElement& parent) const; + + /** + * This method checks if a reference to the given object exists. It returns, + * a @p true if the object is referencing the one requested by the + * parameter @p id and the balance() returned is zero. + * If it does not, this method returns @p false. + * + * @param id id of the object to be checked for references + * @retval true This object references object with id @p id. + * @retval false This object does not reference the object with id @p id. + */ + virtual bool hasReferenceTo(const QString& id) const; + + /** + * This member removes all references to object identified by @p id. Used + * to remove objects which are about to be removed from the engine. + */ + void removeReference(const QString& id); + +private: + /** + * The user-assigned name of the Budget + */ + QString m_name; + + /** + * The user-assigned year of the Budget + */ + QDate m_start; + + /** + * Map the budgeted accounts + * + * Each account Id is stored against the AccountGroup information + */ + QMap<QString, AccountGroup> m_accounts; +}; + +#endif // MYMONEYBudget_H +// vim:cin:si:ai:et:ts=2:sw=2: |