summaryrefslogtreecommitdiffstats
path: root/kmymoney2/reports/querytable.h
diff options
context:
space:
mode:
Diffstat (limited to 'kmymoney2/reports/querytable.h')
-rw-r--r--kmymoney2/reports/querytable.h142
1 files changed, 142 insertions, 0 deletions
diff --git a/kmymoney2/reports/querytable.h b/kmymoney2/reports/querytable.h
new file mode 100644
index 0000000..7beb3d4
--- /dev/null
+++ b/kmymoney2/reports/querytable.h
@@ -0,0 +1,142 @@
+/***************************************************************************
+ 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
+
+// ----------------------------------------------------------------------------
+// QT Includes
+
+#include <qstringlist.h>
+
+// ----------------------------------------------------------------------------
+// KDE 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 QDate& _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 QDate& date( void ) const { return m_date; }
+ const MyMoneyMoney& value( void ) const { return m_value; }
+ MyMoneyMoney NPV( double _rate ) const;
+
+ static void setToday( const QDate& _today ) { m_sToday = _today; }
+ const QDate& today( void ) const { return m_sToday; }
+
+private:
+ QDate m_date;
+ MyMoneyMoney m_value;
+
+ static QDate m_sToday;
+};
+
+class CashFlowList: public QValueList<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