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.
159 lines
5.8 KiB
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
|