0
0
mirror of https://github.com/fralx/LimeReport.git synced 2024-12-24 08:34:38 +03:00

Calculation of subtotals has been fixed

This commit is contained in:
Arin Alexander 2020-07-14 19:57:29 +03:00
parent 934021a182
commit 334f590efd
6 changed files with 23 additions and 2 deletions

View File

@ -133,7 +133,7 @@ RCC_DIR = $${ARCH_DIR}/$${BUILD_TYPE}/rcc
LIMEREPORT_VERSION_MAJOR = 1 LIMEREPORT_VERSION_MAJOR = 1
LIMEREPORT_VERSION_MINOR = 5 LIMEREPORT_VERSION_MINOR = 5
LIMEREPORT_VERSION_RELEASE = 58 LIMEREPORT_VERSION_RELEASE = 60
LIMEREPORT_VERSION = '$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}' LIMEREPORT_VERSION = '$${LIMEREPORT_VERSION_MAJOR}.$${LIMEREPORT_VERSION_MINOR}.$${LIMEREPORT_VERSION_RELEASE}'
DEFINES *= LIMEREPORT_VERSION_STR=\\\"$${LIMEREPORT_VERSION}\\\" DEFINES *= LIMEREPORT_VERSION_STR=\\\"$${LIMEREPORT_VERSION}\\\"

View File

@ -752,6 +752,11 @@ void BandDesignIntf::emitBandRendered(BandDesignIntf* band)
emit bandRendered(band); emit bandRendered(band);
} }
void BandDesignIntf::emitBandReRendered(BandDesignIntf *oldBand, BandDesignIntf *newBand)
{
emit bandReRendered(oldBand, newBand);
}
void BandDesignIntf::setSplittable(bool value){ void BandDesignIntf::setSplittable(bool value){
if (m_splitable!=value){ if (m_splitable!=value){
bool oldValue = m_splitable; bool oldValue = m_splitable;

View File

@ -216,6 +216,7 @@ public:
void parentObjectLoadFinished(); void parentObjectLoadFinished();
void objectLoadFinished(); void objectLoadFinished();
void emitBandRendered(BandDesignIntf *band); void emitBandRendered(BandDesignIntf *band);
void emitBandReRendered(BandDesignIntf* oldBand, BandDesignIntf* newBand);
bool isSplittable() const {return m_splitable;} bool isSplittable() const {return m_splitable;}
void setSplittable(bool value); void setSplittable(bool value);
@ -273,6 +274,7 @@ public:
signals: signals:
void bandRendered(BandDesignIntf* band); void bandRendered(BandDesignIntf* band);
void bandReRendered(BandDesignIntf* oldBand, BandDesignIntf* newBand);
void preparedForRender(); void preparedForRender();
void bandRegistred(); void bandRegistred();
protected: protected:

View File

@ -97,6 +97,14 @@ void GroupFunction::slotBandRendered(BandDesignIntf *band)
} }
} }
void GroupFunction::slotBandReRendered(BandDesignIntf *oldBand, BandDesignIntf *newBand)
{
if (m_valuesByBand.contains(oldBand)){
m_valuesByBand.insert(newBand, m_valuesByBand.value(oldBand));
m_valuesByBand.remove(oldBand);
}
}
QVariant GroupFunction::addition(QVariant value1, QVariant value2) QVariant GroupFunction::addition(QVariant value1, QVariant value2)
{ {
return value1.toDouble()+value2.toDouble(); return value1.toDouble()+value2.toDouble();

View File

@ -56,6 +56,7 @@ public:
virtual QVariant calculate(PageItemDesignIntf* page = 0)=0; virtual QVariant calculate(PageItemDesignIntf* page = 0)=0;
public slots: public slots:
void slotBandRendered(BandDesignIntf* band); void slotBandRendered(BandDesignIntf* band);
void slotBandReRendered(BandDesignIntf* oldBand, BandDesignIntf* newBand);
protected: protected:
void setName(const QString& value){m_name=value;} void setName(const QString& value){m_name=value;}
QVariant addition(QVariant value1, QVariant value2); QVariant addition(QVariant value1, QVariant value2);

View File

@ -386,7 +386,10 @@ void ReportRender::extractGroupFuntionsFromItem(ContentItemDesignIntf* contentIt
if (dataBand){ if (dataBand){
GroupFunction* gf = datasources()->addGroupFunction(functionName,captures.at(Const::VALUE_INDEX),band->objectName(),dataBand->objectName()); GroupFunction* gf = datasources()->addGroupFunction(functionName,captures.at(Const::VALUE_INDEX),band->objectName(),dataBand->objectName());
if (gf){ if (gf){
connect(dataBand,SIGNAL(bandRendered(BandDesignIntf*)),gf,SLOT(slotBandRendered(BandDesignIntf*))); connect(dataBand, SIGNAL(bandRendered(BandDesignIntf*)),
gf, SLOT(slotBandRendered(BandDesignIntf*)));
connect(dataBand, SIGNAL(bandReRendered(BandDesignIntf*, BandDesignIntf*)),
gf, SLOT(slotBandReRendered(BandDesignIntf*, BandDesignIntf*)));
} }
} else { } else {
GroupFunction* gf = datasources()->addGroupFunction(functionName,captures.at(Const::VALUE_INDEX),band->objectName(),captures.at(dsIndex)); GroupFunction* gf = datasources()->addGroupFunction(functionName,captures.at(Const::VALUE_INDEX),band->objectName(),captures.at(dsIndex));
@ -547,6 +550,7 @@ BandDesignIntf* ReportRender::renderBand(BandDesignIntf *patternBand, BandDesign
if (!bandIsSliced){ if (!bandIsSliced){
BandDesignIntf* t = renderData(patternBand); BandDesignIntf* t = renderData(patternBand);
t->copyBookmarks(bandClone); t->copyBookmarks(bandClone);
patternBand->emitBandReRendered(bandClone, t);
delete bandClone; delete bandClone;
bandClone = t; bandClone = t;
} }
@ -554,6 +558,7 @@ BandDesignIntf* ReportRender::renderBand(BandDesignIntf *patternBand, BandDesign
if (!registerBand(bandClone)) { if (!registerBand(bandClone)) {
BandDesignIntf* upperPart = dynamic_cast<BandDesignIntf*>(bandClone->cloneUpperPart(m_maxHeightByColumn[m_currentColumn])); BandDesignIntf* upperPart = dynamic_cast<BandDesignIntf*>(bandClone->cloneUpperPart(m_maxHeightByColumn[m_currentColumn]));
registerBand(upperPart); registerBand(upperPart);
patternBand->emitBandReRendered(bandClone, upperPart);
delete bandClone; delete bandClone;
bandClone = NULL; bandClone = NULL;
}; };