File indexing completed on 2024-05-12 16:42:19

0001 /*
0002     SPDX-FileCopyrightText: 2014 Christian Dávid <christian-david@web.de>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #include "onlinebankingaccountsfilterproxymodel.h"
0007 
0008 #include "mymoney/onlinejobadministration.h"
0009 #include "modelenums.h"
0010 
0011 OnlineBankingAccountsFilterProxyModel::OnlineBankingAccountsFilterProxyModel(QObject* parent)
0012     : QSortFilterProxyModel(parent)
0013 {
0014 }
0015 
0016 bool OnlineBankingAccountsFilterProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
0017 {
0018     const QModelIndex sourceIndex = sourceModel()->index(source_row, (int)eAccountsModel::Column::Account, source_parent);
0019     const QString accountId = sourceModel()->data(sourceIndex, (int)eAccountsModel::Role::ID).toString();
0020     if (accountId.isEmpty())
0021         return false;
0022     else if (onlineJobAdministration::instance()->isAnyJobSupported(accountId))
0023         return true;
0024 
0025     return filterAcceptsParent(sourceIndex);
0026 }
0027 
0028 Qt::ItemFlags OnlineBankingAccountsFilterProxyModel::flags(const QModelIndex& index) const
0029 {
0030     const QString accountId = sourceModel()->data(mapToSource(index), (int)eAccountsModel::Role::ID).toString();
0031     if (onlineJobAdministration::instance()->isAnyJobSupported(accountId))
0032         return QSortFilterProxyModel::flags(index);
0033     return QSortFilterProxyModel::flags(index) & ~Qt::ItemIsSelectable;
0034 }
0035 
0036 
0037 bool OnlineBankingAccountsFilterProxyModel::filterAcceptsParent(const QModelIndex& index) const
0038 {
0039     auto const model = sourceModel();
0040     const auto rowCount = model->rowCount(index);
0041     for (auto i = 0; i < rowCount; ++i) {
0042         const auto childIndex = model->index(i, (int)eAccountsModel::Column::Account, index); // CAUTION! Assumption is being made that Account column number is always 0
0043         if (onlineJobAdministration::instance()->isAnyJobSupported(model->data(childIndex, (int)eAccountsModel::Role::ID).toString()))
0044             return true;
0045         if (filterAcceptsParent(childIndex))
0046             return true;
0047     }
0048     return false;
0049 }