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/reports/pivotgrid.cpp

161 lines
5.0 KiB

/***************************************************************************
pivotgrid.cpp
-------------------
begin : Mon May 17 2004
copyright : (C) 2004-2005 by Ace Jones
email : <ace.j@hotpop.com>
Thomas Baumgart <ipwizard@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. *
* *
***************************************************************************/
// ----------------------------------------------------------------------------
// QT Includes
#include <tqlayout.h>
#include <tqdatetime.h>
#include <tqregexp.h>
#include <tqdragobject.h>
#include <tqclipboard.h>
#include <tqapplication.h>
#include <tqprinter.h>
#include <tqpainter.h>
#include <tqfile.h>
#include <tqdom.h>
// ----------------------------------------------------------------------------
// 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 <tdeglobal.h>
#include <tdelocale.h>
#include <kdebug.h>
#include <kcalendarsystem.h>
// ----------------------------------------------------------------------------
// Project Includes
#include "pivottable.h"
#include "reportdebug.h"
#include "kreportchartview.h"
#include "../kmymoneyglobalsettings.h"
#include <kmymoney/kmymoneyutils.h>
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<const MyMoneyMoney&>(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 TQString PivotCell::formatMoney(int fraction, bool showThousandSeparator) const
{
return formatMoney("", MyMoneyMoney::denomToPrec(fraction), showThousandSeparator);
}
const TQString PivotCell::formatMoney(const TQString& 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(TQString 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