|
|
|
/***************************************************************************
|
|
|
|
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 <tqmap.h>
|
|
|
|
#include <tqvaluelist.h>
|
|
|
|
#include <tqstring.h>
|
|
|
|
class TQDomElement;
|
|
|
|
class TQDomDocument;
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// 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 TQString& _name);
|
|
|
|
/**
|
|
|
|
* This constructor creates an object based on the data found in the
|
|
|
|
* TQDomElement referenced by @p node. If problems arise, the @p id of
|
|
|
|
* the object is cleared (see MyMoneyObject::clearId()).
|
|
|
|
*/
|
|
|
|
MyMoneyBudget(const TQDomElement& node);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This constructor creates an object based on the data found in the
|
|
|
|
* MyMoneyBudget budget object.
|
|
|
|
*/
|
|
|
|
MyMoneyBudget(const TQString& 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 TQDate& startDate ( void ) const { return m_start; }
|
|
|
|
const MyMoneyMoney& amount( void ) const { return m_amount; }
|
|
|
|
|
|
|
|
// set functions
|
|
|
|
void setStartDate ( const TQDate& _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:
|
|
|
|
TQDate 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 TQStringList kBudgetLevelText;
|
|
|
|
|
|
|
|
public:
|
|
|
|
AccountGroup() : m_budgetlevel(eNone), m_budgetsubaccounts(false) {}
|
|
|
|
|
|
|
|
// get functions
|
|
|
|
const TQString& id( void ) const { return m_id; }
|
|
|
|
bool budgetSubaccounts( void ) const { return m_budgetsubaccounts; }
|
|
|
|
eBudgetLevel budgetLevel( void ) const { return m_budgetlevel; }
|
|
|
|
const PeriodGroup& period( const TQDate &_date ) const { return m_periods[_date]; }
|
|
|
|
const TQMap<TQDate, PeriodGroup>& getPeriods( void ) const { return m_periods; }
|
|
|
|
void clearPeriods(void) { m_periods.clear(); }
|
|
|
|
const MyMoneyMoney balance( void ) const
|
|
|
|
{
|
|
|
|
MyMoneyMoney balance;
|
|
|
|
|
|
|
|
TQMap<TQDate, 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( TQString _id ) { m_id = _id; }
|
|
|
|
void setBudgetLevel( eBudgetLevel _level ) { m_budgetlevel = _level; }
|
|
|
|
void setBudgetSubaccounts( bool _b ) { m_budgetsubaccounts = _b; }
|
|
|
|
void addPeriod( const TQDate& _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:
|
|
|
|
TQString m_id;
|
|
|
|
|
|
|
|
eBudgetLevel m_budgetlevel;
|
|
|
|
bool m_budgetsubaccounts;
|
|
|
|
TQMap<TQDate, PeriodGroup> m_periods;
|
|
|
|
};
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This operator tests for equality of two MyMoneyBudget objects
|
|
|
|
*/
|
|
|
|
bool operator == (const MyMoneyBudget &) const;
|
|
|
|
|
|
|
|
// Simple get operations
|
|
|
|
const TQString& name(void) const { return m_name; }
|
|
|
|
const TQDate& budgetStart(void) const { return m_start; }
|
|
|
|
TQString id(void) const { return m_id; }
|
|
|
|
const AccountGroup & account(const TQString _id) const;
|
|
|
|
bool contains(const TQString _id) const { return m_accounts.contains(_id); }
|
|
|
|
TQValueList<AccountGroup> getaccounts(void) const { return m_accounts.values(); }
|
|
|
|
|
|
|
|
// Simple set operations
|
|
|
|
void setName(const TQString& _name) { m_name = _name; }
|
|
|
|
void setBudgetStart(const TQDate& _start);
|
|
|
|
void setAccount(const AccountGroup &_account, const TQString _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(TQDomElement& e, TQDomDocument *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 TQDomElement& e);
|
|
|
|
|
|
|
|
/**
|
|
|
|
* This method creates a TQDomElement for the @p document
|
|
|
|
* under the parent node @p parent. (This version overwrites the
|
|
|
|
* MMObject base class.)
|
|
|
|
*
|
|
|
|
* @param document reference to TQDomDocument
|
|
|
|
* @param parent reference to TQDomElement parent node
|
|
|
|
*/
|
|
|
|
virtual void writeXML(TQDomDocument& document, TQDomElement& 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 TQString& 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 TQString& id);
|
|
|
|
|
|
|
|
private:
|
|
|
|
/**
|
|
|
|
* The user-assigned name of the Budget
|
|
|
|
*/
|
|
|
|
TQString m_name;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* The user-assigned year of the Budget
|
|
|
|
*/
|
|
|
|
TQDate m_start;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Map the budgeted accounts
|
|
|
|
*
|
|
|
|
* Each account Id is stored against the AccountGroup information
|
|
|
|
*/
|
|
|
|
TQMap<TQString, AccountGroup> m_accounts;
|
|
|
|
};
|
|
|
|
|
|
|
|
#endif // MYMONEYBudget_H
|
|
|
|
// vim:cin:si:ai:et:ts=2:sw=2:
|