Initial commit

This commit is contained in:
torsten committed 2026-08-13 18:33:10 +02:00
commit b7d90b9afe
16245 files changed
+3396666

No files matched your search

@@ -0,0 +1,165 @@
/**
* Handler for report charge administration
* $Id$
* $HeadURL$
* $Author$
* Created by Hanna E. Rathje, SLSE, 2016-12-20
*/
#include "handler_report_data.h"
#include <ngldb/dbtransaction.h>
#include <ngldb/nsqlquery.h>
#include <QVariant>
using namespace ReportManagement;
// ------------------------------------------------------------------------------------------------------------------
bool HandlerReportData::generateChargeAdminResult(const CreateModifyReportRequest &request, int reportId)
{
INFO_LOG(m_logger) << "Start generateChargeAdminResult ";
DBTransaction trans(m_db->database());
NSqlQuery q(m_db->database());
q.prepare(QLatin1String("INSERT INTO rep_charge_administration (report_id, effect_source_id, charge_type_id ) VALUES (:reportId, :effectSourceId, :chargeTypeId )"));
q.bindValue(QLatin1String(":reportId"), reportId);
for (auto it1 = request.effectSources().begin(); it1 != request.effectSources().end(); ++it1)
{
ProjectDataManagement::EffectSource effectSourceId = *it1;
q.bindValue(QLatin1String(":effectSourceId"), effectSourceId.underlying());
for (auto it2 = request.chargeTypeIds().begin(); it2 != request.chargeTypeIds().end(); ++it2)
{
int chargeTypeId = *it2;
if (chargeTypeId == 0)
continue; // skip 0
q.bindValue(QLatin1String(":chargeTypeId"), chargeTypeId);
DEBUG_LOG(m_logger) << " Inserting chargeTypeId " << chargeTypeId;
if (!q.exec())
{
ERROR_LOG(m_logger) << "Error inserting report id, effectSourceId, chargeTypeId = " << reportId << " , " << effectSourceId << " , " << chargeTypeId;
return false;
}
if (!calculateStock(chargeTypeId, effectSourceId, request.startTime(), request.endTime(), request.partyId(), reportId))
return false;
}
}
trans.commit();
INFO_LOG(m_logger) << " END generateChargeAdminResult";
return true;
}
// ------------------------------------------------------------------------------------------------------------------
bool HandlerReportData::calculateStock(int chargeTypeId, const ProjectDataManagement::EffectSource &es, qint64 startTime, qint64 endTime, int partyId, int reportId)
{
ChargeTypeData chargeData;
chargeData.chargeTypeId = chargeTypeId;
chargeData.effectSourceId = es;
NSqlQuery qSelect(m_db->database());
NSqlQuery qInit(m_db->database());
NSqlQuery qUpdate(m_db->database());
QString stmt = QLatin1String("SELECT amount, planned, used, sample_time, charge_type_id "
" FROM rec_charge_administration "
" WHERE effect_source_id = ")
+ QString::number(es.underlying()) + QLatin1String(" AND sample_time > 0 AND sample_time < ") + QString::number(startTime)
+ QLatin1String(" AND party_id = ") + QString::number(partyId) + QLatin1String(" AND charge_type_id = ") + QString::number(chargeTypeId)
+ QLatin1String(" ORDER BY sample_time DESC LIMIT 1");
DEBUG_LOG(m_logger) << "Start Statement: " << stmt;
if (!qInit.exec(stmt))
{
ERROR_LOG(m_logger) << "Error while selecting start-data for chargeTypeId " << chargeTypeId << ", stmt='" << stmt << "'";
return false;
}
if (!qInit.next()) // not found a valid record
{
INFO_LOG(m_logger) << "No start entry for chargeTypeId " << chargeTypeId << ", assuming 0";
// return true;
chargeData.chargeQuantity = 0;
chargeData.chargeQuantityStart = 0;
chargeData.usedCharge = 0;
chargeData.usedChargeStart = 0;
chargeData.chargeAddition = 0;
chargeData.chargePlanned = 0;
// chargeData.chargeAvailable = 0;
}
else
{
qInit.first();
chargeData.chargeQuantity = qInit.value(0).toInt(); // + qInit.value(1).toInt();
chargeData.chargeQuantityStart = chargeData.chargeQuantity;
chargeData.usedCharge = qInit.value(2).toInt();
chargeData.chargePlanned = qInit.value(1).toInt();
chargeData.usedChargeStart = chargeData.usedCharge;
chargeData.chargeAddition = 0;
// chargeData.chargeAvailable = chargeData.chargeQuantityStart - chargeData.usedChargeStart;
}
DEBUG_LOG(m_logger) << "START chargeTypeId = " << QString::number(chargeTypeId) << " , "
<< " effectSourceId = " << es << "chargeQuantityStart = " << chargeData.chargeQuantityStart << " , "
<< "usedChargeStart = " << chargeData.usedChargeStart;
stmt = QLatin1String("SELECT charge_type_id, amount, planned, used, amount_changed_by_operator "
" FROM rec_charge_administration "
" WHERE sample_time >= ")
+ QString::number(startTime) + QLatin1String(" AND sample_time <= ") + QString::number(endTime) + QLatin1String(" AND party_id = ") + QString::number(partyId)
+ QLatin1String(" AND charge_type_id = ") + QString::number(chargeTypeId) + QLatin1String(" AND effect_source_id = ") + QString::number(es.underlying())
+ QLatin1String(" ORDER BY sample_time ");
if (!qSelect.exec(stmt))
{
ERROR_LOG(m_logger) << "Error while selecting charge-data for chargeTypeId " << chargeTypeId;
return false;
}
DEBUG_LOG(m_logger) << "Select statement: " << stmt;
while (qSelect.next())
{
int quantity = qSelect.value(1).toInt(); // + qSelect.value(2).toInt();
chargeData.chargeQuantity = quantity;
chargeData.usedCharge = qSelect.value(3).toInt();
chargeData.chargePlanned = qSelect.value(2).toInt();
chargeData.chargeAddition = chargeData.chargeQuantity + chargeData.usedCharge - chargeData.chargeQuantityStart;
DEBUG_LOG(m_logger) << "CALCULATING for chargeTypeId = " << QString::number(chargeData.chargeTypeId) << " quantity = " << quantity << " , "
<< " munQuantity = " << chargeData.chargeQuantity << " , "
<< " munAddition = " << chargeData.chargeAddition << " , "
<< " usedMunition = " << chargeData.usedCharge << " , "
<< " planned = " << chargeData.chargePlanned;
}
DEBUG_LOG(m_logger) << "UPDATING stock for chargeTypeId: " << chargeData.chargeTypeId << " values: " << chargeData.chargeQuantityStart << " , "
<< chargeData.chargeAddition << " , " << chargeData.chargeQuantity << " , " << chargeData.usedCharge - chargeData.usedChargeStart << " , "
<< chargeData.chargePlanned << " , " << chargeData.chargeQuantity - chargeData.chargePlanned;
stmt = QLatin1String("UPDATE rep_charge_administration SET "
" charge_start = ")
+ QString::number(chargeData.chargeQuantityStart) + QLatin1String(", ") + QLatin1String(" charge_resupplied = ") + QString::number(chargeData.chargeAddition)
+ QLatin1String(", ") + QLatin1String(" charge_end = ") + QString::number(chargeData.chargeQuantity) + QLatin1String(", ") + QLatin1String(" charge_fired = ")
+ QString::number(chargeData.usedCharge - chargeData.usedChargeStart) + QLatin1String(", ") + QLatin1String(" charge_planned = ")
+ QString::number(chargeData.chargePlanned) + QLatin1String(", ") + QLatin1String(" charge_available = ")
+ QString::number(chargeData.chargeQuantity - chargeData.chargePlanned) + QLatin1String(" WHERE report_id = ") + QString::number(reportId)
+ QLatin1String(" AND charge_type_id = ") + QString::number(chargeData.chargeTypeId) + QLatin1String(" AND effect_source_id = ")
+ QString::number(es.underlying());
DEBUG_LOG(m_logger) << "Update statement: " << stmt;
if (!qUpdate.exec(stmt))
{
ERROR_LOG(m_logger) << "Error while updating stock for chargeTypeId " << chargeTypeId;
return false;
}
return true;
}