|
|
|
/***************************************************************************
|
|
|
|
querytable.h
|
|
|
|
-------------------
|
|
|
|
begin : Fri Jul 23 2004
|
|
|
|
copyright : (C) 2004-2005 by Ace Jones
|
|
|
|
(C) 2007 Sascha Pfau
|
|
|
|
email : acejones@users.sourceforge.net
|
|
|
|
MrPeacock@gmail.com
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
Contains code from the func_xirr and related methods of financial.cpp
|
|
|
|
- KOffice 1.6 by Sascha Pfau. Sascha agreed to relicense those methods under
|
|
|
|
GPLv2 or later.
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
/***************************************************************************
|
|
|
|
* *
|
|
|
|
* 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 QUERYTABLE_H
|
|
|
|
#define QUERYTABLE_H
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// TQt Includes
|
|
|
|
|
|
|
|
#include <tqstringlist.h>
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// TDE Includes
|
|
|
|
|
|
|
|
// ----------------------------------------------------------------------------
|
|
|
|
// Project Includes
|
|
|
|
|
|
|
|
#include "../mymoney/mymoneyreport.h"
|
|
|
|
#include "listtable.h"
|
|
|
|
|
|
|
|
namespace reports {
|
|
|
|
|
|
|
|
class ReportAccount;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Calculates a query of information about the transaction database.
|
|
|
|
*
|
|
|
|
* This is a middle-layer class, between the UI and the engine. The
|
|
|
|
* MyMoneyReport class holds only the CONFIGURATION parameters. This
|
|
|
|
* class actually does the work of retrieving the data from the engine
|
|
|
|
* and formatting it for the user.
|
|
|
|
*
|
|
|
|
* @author Ace Jones
|
|
|
|
*
|
|
|
|
* @short
|
|
|
|
**/
|
|
|
|
|
|
|
|
class QueryTable : public ListTable
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
QueryTable(const MyMoneyReport&);
|
|
|
|
void init(void);
|
|
|
|
|
|
|
|
protected:
|
|
|
|
void constructAccountTable(void);
|
|
|
|
void constructTransactionTable(void);
|
|
|
|
void constructPerformanceRow( const ReportAccount& account, TableRow& result ) const;
|
|
|
|
void constructSplitsTable(void);
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
//
|
|
|
|
// Cash Flow analysis tools for investment reports
|
|
|
|
//
|
|
|
|
|
|
|
|
class CashFlowListItem
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CashFlowListItem(void) {}
|
|
|
|
CashFlowListItem( const TQDate& _date, const MyMoneyMoney& _value ): m_date(_date), m_value(_value) {}
|
|
|
|
bool operator<( const CashFlowListItem _second ) const { return m_date < _second.m_date; }
|
|
|
|
bool operator<=( const CashFlowListItem _second ) const { return m_date <= _second.m_date; }
|
|
|
|
bool operator>( const CashFlowListItem _second ) const { return m_date > _second.m_date; }
|
|
|
|
const TQDate& date( void ) const { return m_date; }
|
|
|
|
const MyMoneyMoney& value( void ) const { return m_value; }
|
|
|
|
MyMoneyMoney NPV( double _rate ) const;
|
|
|
|
|
|
|
|
static void setToday( const TQDate& _today ) { m_sToday = _today; }
|
|
|
|
const TQDate& today( void ) const { return m_sToday; }
|
|
|
|
|
|
|
|
private:
|
|
|
|
TQDate m_date;
|
|
|
|
MyMoneyMoney m_value;
|
|
|
|
|
|
|
|
static TQDate m_sToday;
|
|
|
|
};
|
|
|
|
|
|
|
|
class CashFlowList: public TQValueList<CashFlowListItem>
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
CashFlowList(void) {}
|
|
|
|
MyMoneyMoney NPV(double rate) const;
|
|
|
|
double IRR(void) const;
|
|
|
|
MyMoneyMoney total(void) const;
|
|
|
|
void dumpDebug(void) const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Function: XIRR
|
|
|
|
*
|
|
|
|
* Compute the internal rate of return for a non-periodic series of cash flows.
|
|
|
|
*
|
|
|
|
* XIRR ( Values; Dates; [ Guess = 0.1 ] )
|
|
|
|
**/
|
|
|
|
double calculateXIRR ( void ) const;
|
|
|
|
|
|
|
|
protected:
|
|
|
|
CashFlowListItem mostRecent(void) const;
|
|
|
|
|
|
|
|
private:
|
|
|
|
/**
|
|
|
|
* helper: xirrResult
|
|
|
|
*
|
|
|
|
* args[0] = values
|
|
|
|
* args[1] = dates
|
|
|
|
**/
|
|
|
|
double xirrResult ( double& rate ) const;
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* helper: xirrResultDerive
|
|
|
|
*
|
|
|
|
* args[0] = values
|
|
|
|
* args[1] = dates
|
|
|
|
**/
|
|
|
|
double xirrResultDerive ( double& rate ) const;
|
|
|
|
};
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
#endif // QUERYREPORT_H
|