/** * @RDE_HEADER@ * AreaEffectManangement - N Contamination Overview Dialog Model * $Id$ * $HeadURL$ * $Author$ * * Created by Malte Diers, SLSE, 2017-02-21 */ #include "aes_charge_administration_model.h" #include #include #include #include #include #include #include #include #include namespace AreaEffectSimulation { // // ChargeAdministrationSortFilterProxyModel // void ChargeAdministrationSortFilterProxyModel::setSourceModel(QAbstractItemModel *model) { m_sourceModel = qobject_cast(model); LtsWidgets::LtsColumnFilterProxyModel::setSourceModel(model); } bool ChargeAdministrationSortFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex &source_parent) const { if (!m_sourceModel || source_parent.isValid() || source_row < 0 || source_row >= m_sourceModel->rowCount()) return LtsWidgets::LtsColumnFilterProxyModel::filterAcceptsRow(source_row, source_parent); const ChargeAdministration &item = m_sourceModel->m_vecData.at(source_row); if (item.partyId() != m_party) return false; return LtsWidgets::LtsColumnFilterProxyModel::filterAcceptsRow(source_row, source_parent); } int ChargeAdministrationSortFilterProxyModel::party() const { return m_party; } void ChargeAdministrationSortFilterProxyModel::setParty(int party) { m_party = party; invalidateFilter(); } // // ChargeAdministrationModel // ChargeAdministrationModel::ChargeAdministrationModel(QObject *parent) : LtsWidgets::LtsAbstractTableModel({tr("Id"), tr("Charge Type Id"), tr("Changed"), tr("Charge Type Name"), tr("Total Stock"), tr("Planned"), tr("Available"), tr("Used"), tr("Gear Class")}, parent) , m_logger(getLogger("ChargeAdministration")) { } bool ChargeAdministrationModel::initModel(LtsSession::LtsSession *session, QVector &reqs) { if (m_aesDtc) { ERROR_LOG(m_logger) << "double init()!"; return false; } if (!session->getDtc(m_aesDtc)) return false; std::shared_ptr ppmDtc; if (!session->getDtc(m_pdmDtc)) return false; if (!session->getDtc(ppmDtc)) return false; m_chargeTypeMap = m_pdmDtc->chargeTypes(); connect(m_aesDtc.get(), &Interface::Dtc::chargeAdministrationChanged, this, &ChargeAdministrationModel::onChargeAdministrationChanged); QVector> chargesInserted; auto cb = [this, &chargesInserted](const ChargeAdministration &item) { // skip ADLER charges const int chargeTypeId = item.chargeTypeId(); if (m_pdmDtc->isAdlerChargeType(chargeTypeId)) return; insertRow(item); chargesInserted.append(qMakePair(item.chargeTypeId(), item.partyId())); }; m_aesDtc->chargeAdministrations(cb); QMap parties; if (!ppmDtc->visibleParties(parties, LtsSessionData::LtsSessionData::getInstance()->getVisibleParties(session->exerciseId()))) { ERROR_LOG(m_logger) << "Could not retrieve visible Parties!"; return false; } QVector chargesForGearClass = m_pdmDtc->chargesForGearClass(ProjectDataManagement::GearClass_def::Artillery) + m_pdmDtc->chargesForGearClass(ProjectDataManagement::GearClass_def::Mortar); LtsUtils::ProjectSettings *ps = LtsUtils::ProjectSettings::getInstance(); const bool enableRocket = ps->value(QStringLiteral("aes"), QStringLiteral("enableRocket"), false).toBool(); if (enableRocket) chargesForGearClass += m_pdmDtc->chargesForGearClass(ProjectDataManagement::GearClass_def::Rocket); for (const ParticipantManagement::Party &p : qAsConst(parties)) { for (const ProjectDataManagement::ChargeType &ct : qAsConst(chargesForGearClass)) { if (chargesInserted.contains(qMakePair(ct.id(), p.id())) || isDummy(ct) || m_pdmDtc->isAdlerChargeType(ct.id())) continue; reqs << ChargeAdministrationModifyRequest(0, ct.id(), p.id(), ProjectDataManagement::EffectSource::ES_Internal, 0, true); // amountChangedByOperator=true } } return true; } bool ChargeAdministrationModel::isDummy(const ProjectDataManagement::ChargeType &ct) { return LtsUtils::JsonObject::fromJson(ct.properties()).valueOr("isDummy", false); } QVariant ChargeAdministrationModel::data(const QModelIndex &index, int role) const { if (role != Qt::DisplayRole || !indexIsValid(index)) return QVariant(); const ChargeAdministration &item = m_vecData.at(index.row()); switch (index.column()) { case ColId: return item.id(); case ColTypeId: return item.chargeTypeId(); case ColChanged: return QDateTime::fromMSecsSinceEpoch(item.sampleTime()); case ColTypeName: return m_pdmDtc->trChargeTypeShortName(item.chargeTypeId(), true); case ColStock: return item.amount(); case ColAvailable: return item.amount() - item.planned(); case ColPlanned: return item.planned(); case ColUsed: return item.used(); case ColGearClass: return ProjectDataManagement::toString(m_pdmDtc->gearClassFromChargeTypeId(item.chargeTypeId())); } return QVariant(); } void ChargeAdministrationModel::onChargeAdministrationChanged(const ChargeAdministration &data, DataModification modType) { // skip ADLER charges if (m_pdmDtc->isAdlerChargeType(data.chargeTypeId())) return; onDataChanged(data, modType); } } // namespace AreaEffectSimulation