/*************************************************************************** pivotgrid.cpp ------------------- begin : Mon May 17 2004 copyright : (C) 2004-2005 by Ace Jones email : Thomas Baumgart ***************************************************************************/ /*************************************************************************** * * * 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. * * * ***************************************************************************/ // ---------------------------------------------------------------------------- // QT Includes #include #include #include #include #include #include #include #include #include #include // ---------------------------------------------------------------------------- // KDE Includes // This is just needed for i18n() and weekStartDay(). // Once I figure out how to handle i18n // without using this macro directly, I'll be freed of KDE dependency. This // is a minor problem because we use these terms when rendering to HTML, // and a more major problem because we need it to translate account types // (e.g. MyMoneyAccount::Checkings) into their text representation. We also // use that text representation in the core data structure of the report. (Ace) #include #include #include #include // ---------------------------------------------------------------------------- // Project Includes #include "pivottable.h" #include "reportdebug.h" #include "kreportchartview.h" #include "../kmymoneyglobalsettings.h" #include namespace reports { const unsigned PivotOuterGroup::m_kDefaultSortOrder = 100; PivotCell::PivotCell(const MyMoneyMoney& value) : MyMoneyMoney(value), m_stockSplit(MyMoneyMoney(1,1)) { m_cellUsed |= !value.isZero(); } PivotCell PivotCell::operator += (const PivotCell& right) { const MyMoneyMoney& r = static_cast(right); *this += r; m_postSplit = m_postSplit * right.m_stockSplit; m_stockSplit = m_stockSplit * right.m_stockSplit; m_postSplit += right.m_postSplit; m_cellUsed |= right.m_cellUsed; return *this; } PivotCell PivotCell::operator += (const MyMoneyMoney& value) { m_cellUsed |= !value.isZero(); if(m_stockSplit != MyMoneyMoney(1,1)) m_postSplit += value; else MyMoneyMoney::operator += (value); return *this; } PivotCell PivotCell::stockSplit(const MyMoneyMoney& factor) { PivotCell s; s.m_stockSplit = factor; return s; } const QString PivotCell::formatMoney(int fraction, bool showThousandSeparator) const { return formatMoney("", MyMoneyMoney::denomToPrec(fraction), showThousandSeparator); } const QString PivotCell::formatMoney(const QString& currency, const int prec, bool showThousandSeparator) const { // construct the result MyMoneyMoney res = (*this * m_stockSplit) + m_postSplit; return res.formatMoney(currency, prec, showThousandSeparator); } MyMoneyMoney PivotCell::calculateRunningSum(const MyMoneyMoney& runningSum) { MyMoneyMoney::operator += (runningSum); MyMoneyMoney::operator = ((*this * m_stockSplit) + m_postSplit); m_postSplit = MyMoneyMoney(0,1); m_stockSplit = MyMoneyMoney(1,1); return *this; } MyMoneyMoney PivotCell::cellBalance(const MyMoneyMoney& _balance) { MyMoneyMoney balance(_balance); balance += *this; balance = (balance * m_stockSplit) + m_postSplit; return balance; } PivotGridRowSet::PivotGridRowSet( unsigned _numcolumns ) { insert(eActual, PivotGridRow(_numcolumns)); insert(eBudget, PivotGridRow(_numcolumns)); insert(eBudgetDiff, PivotGridRow(_numcolumns)); insert(eForecast, PivotGridRow(_numcolumns)); insert(eAverage, PivotGridRow(_numcolumns)); insert(ePrice, PivotGridRow(_numcolumns)); } PivotGridRowSet PivotGrid::rowSet(QString id) { //go through the data and get the row that matches the id PivotGrid::iterator it_outergroup = begin(); while ( it_outergroup != end() ) { PivotOuterGroup::iterator it_innergroup = (*it_outergroup).begin(); while ( it_innergroup != (*it_outergroup).end() ) { PivotInnerGroup::iterator it_row = (*it_innergroup).begin(); while ( it_row != (*it_innergroup).end() ) { if(it_row.key().id() == id) return it_row.data(); ++it_row; } ++it_innergroup; } ++it_outergroup; } return PivotGridRowSet(); } } // namespace // vim:cin:si:ai:et:ts=2:sw=2: