You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
kmymoney/kmymoney2/mymoney/mymoneyprice.h

159 lines
5.8 KiB

/***************************************************************************
mymoneyprice - description
-------------------
begin : Sun Nov 21 2004
copyright : (C) 2000-2004 by Michael Edwardes
email : mte@users.sourceforge.net
Javier Campos Morales <javi_c@users.sourceforge.net>
Felix Rodriguez <frodriguez@users.sourceforge.net>
John C <thetacoturtle@users.sourceforge.net>
Thomas Baumgart <ipwizard@users.sourceforge.net>
Kevin Tambascio <ktambascio@users.sourceforge.net>
***************************************************************************/
/***************************************************************************
* *
* 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 MYMONEYPRICE_H
#define MYMONEYPRICE_H
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
// ----------------------------------------------------------------------------
// QT Includes
#include <tqstring.h>
#include <tqdatetime.h>
#include <tqpair.h>
#include <tqmap.h>
#include <tqdom.h>
// ----------------------------------------------------------------------------
// KDE Includes
// ----------------------------------------------------------------------------
// Project Includes
#include <kmymoney/mymoneymoney.h>
#include <kmymoney/export.h>
/**
* @author Thomas Baumgart
*/
/**
* This class represents an exchange rate of a security, currency or commodity
* based on another security, currency or commodity for a specific date.
* The term security is used in this class as a placeholder for all
* those previously mentioned items.
* In general, the other security is a currency.
*
* The securities and the rate form the following equation:
*
* @code
*
* toSecurity = rate * fromSecurity
*
* @endcode
*
* Using the @p rate() member function, one can retrieve the conversion rate based
* upon the @p toSecurity or the @p fromSecurity.
*/
class KMYMONEY_EXPORT MyMoneyPrice
{
public:
MyMoneyPrice();
MyMoneyPrice(const TQString& from, const TQString& to, const TQDomElement& node);
MyMoneyPrice(const TQString& from, const TQString& to, const TQDate& date, const MyMoneyMoney& rate, const TQString& source = TQString());
virtual ~MyMoneyPrice();
/**
* This method returns the price information based on the
* security referenced by @p id. If @p id is empty (default), the
* price is returned based on the toSecurity. If this price
* object is invalid (see isValid()) MyMoneyMoney(1,1) is returned.
*
* @param id return price to be the factor to be used to convert a value into
* the correcponding value in security @p id.
*
* @return returns the exchange rate (price) as MyMoneyMoney object.
*
* If @p id is not empty and does not match either security ids of this price
* an exception will be thrown.
*
* Example:
* Assume the following code, where you have a price object and
* and you wish to convert from an amount in GBP (@p valGBP) to ADF (@p valADF).
* Then your code will look like this:
*
* @code
*
* MyMoneyPrice price("ADF", "GBP", TQDate(2005,9,20), MyMoneyMoney(1,3), "User");
* MyMoneyMoney valADF, valGBP(100,1);
*
* valADF = valGBP * price.rate("ADF");
*
* @endcode
*
* valADF will contain the value 300 after the assignment operation, because @p price.rate("ADF") returned
* @p 3/1 even though the price information kept with the object was @p 1/3, but based on the other
* conversion direction (from ADF to GBP).
*/
const MyMoneyMoney rate(const TQString& id) const;
const TQDate& date(void) const { return m_date; };
const TQString& source(void) const { return m_source; };
const TQString& from(void) const { return m_fromSecurity; };
const TQString& to(void) const { return m_toSecurity; };
/**
* Check whether the object is valid or not. A MyMoneyPrice object
* is valid if the date is valid and both security ids are set. In case
* of an invalid object, price() always returns 1.
*
* @retval true if price object is valid
* @retval false if price object is not valid
*/
bool isValid(void) const;
// Equality operator
bool operator == (const MyMoneyPrice &) const;
// Inequality operator
bool operator != (const MyMoneyPrice &right) const { return !(operator == (right)); };
/**
* 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. 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.
*/
bool hasReferenceTo(const TQString& id) const;
private:
TQString m_fromSecurity;
TQString m_toSecurity;
TQDate m_date;
MyMoneyMoney m_rate;
MyMoneyMoney m_invRate;
TQString m_source;
};
typedef TQPair<TQString, TQString> MyMoneySecurityPair;
typedef TQMap<TQDate, MyMoneyPrice> MyMoneyPriceEntries;
typedef TQMap<MyMoneySecurityPair, MyMoneyPriceEntries> MyMoneyPriceList;
#endif