File indexing completed on 2024-05-19 05:06:58
0001 /* 0002 SPDX-FileCopyrightText: 2019 Thomas Baumgart <tbaumgart@kde.org> 0003 SPDX-License-Identifier: GPL-2.0-or-later 0004 */ 0005 0006 0007 #include "onlinebalanceproxymodel.h" 0008 #include "accountsmodel.h" 0009 #include "mymoneyfile.h" 0010 #include "securitiesmodel.h" 0011 0012 // ---------------------------------------------------------------------------- 0013 // QT Includes 0014 0015 #include <QDate> 0016 0017 // ---------------------------------------------------------------------------- 0018 // KDE Includes 0019 0020 #include <KLocalizedString> 0021 0022 // ---------------------------------------------------------------------------- 0023 // Project Includes 0024 0025 #include "mymoneymoney.h" 0026 #include "journalmodel.h" 0027 #include "accountsmodel.h" 0028 #include "mymoneyenums.h" 0029 0030 class OnlineBalanceProxyModelPrivate 0031 { 0032 Q_DECLARE_PUBLIC(OnlineBalanceProxyModel); 0033 OnlineBalanceProxyModel* q_ptr; 0034 0035 public: 0036 OnlineBalanceProxyModelPrivate(OnlineBalanceProxyModel* qq) 0037 : q_ptr(qq) 0038 { 0039 } 0040 0041 ~OnlineBalanceProxyModelPrivate() {} 0042 }; 0043 0044 OnlineBalanceProxyModel::OnlineBalanceProxyModel(QObject *parent) 0045 : QSortFilterProxyModel(parent) 0046 , d_ptr(new OnlineBalanceProxyModelPrivate(this)) 0047 { 0048 } 0049 0050 OnlineBalanceProxyModel::~OnlineBalanceProxyModel() 0051 { 0052 Q_D(OnlineBalanceProxyModel); 0053 delete d; 0054 } 0055 0056 void OnlineBalanceProxyModel::setSourceModel(QAbstractItemModel* sourceModel) 0057 { 0058 QSortFilterProxyModel::setSourceModel(sourceModel); 0059 0060 // make sure that data changes in the source model invalidate our filter 0061 connect(sourceModel, &QAbstractItemModel::dataChanged, this, [&]() { 0062 invalidateFilter(); 0063 }); 0064 } 0065 0066 int OnlineBalanceProxyModel::columnCount(const QModelIndex& parent) const 0067 { 0068 Q_UNUSED(parent); 0069 return MyMoneyFile::instance()->journalModel()->columnCount(); 0070 } 0071 0072 QModelIndex OnlineBalanceProxyModel::index(int row, int column, const QModelIndex& parent) const 0073 { 0074 switch(column) { 0075 case JournalModel::Column::Balance: 0076 column = AccountsModel::Column::Balance; 0077 break; 0078 default: 0079 break; 0080 } 0081 return QSortFilterProxyModel::index(row, column, parent); 0082 } 0083 0084 QVariant OnlineBalanceProxyModel::data(const QModelIndex& idx, int role) const 0085 { 0086 if (role == eMyMoney::Model::BaseModelRole) { 0087 return eMyMoney::Model::OnlineBalanceEntryRole; 0088 } 0089 0090 if (idx.isValid()) { 0091 switch(role) { 0092 case eMyMoney::Model::DelegateRole: 0093 return static_cast<int>(eMyMoney::Delegates::Types::OnlineBalanceDelegate); 0094 0095 case Qt::DisplayRole: 0096 switch (idx.column()) { 0097 case JournalModel::Column::EntryDate: 0098 case JournalModel::Column::Date: 0099 return QSortFilterProxyModel::data(idx, eMyMoney::Model::AccountOnlineBalanceDateRole); 0100 case JournalModel::Column::Balance: 0101 return QSortFilterProxyModel::data(idx, eMyMoney::Model::AccountBalanceRole); 0102 } 0103 break; 0104 0105 case eMyMoney::Model::JournalSplitIdRole: 0106 case eMyMoney::Model::SplitAccountIdRole: 0107 return QSortFilterProxyModel::data(idx, eMyMoney::Model::IdRole); 0108 0109 case eMyMoney::Model::TransactionPostDateRole: 0110 case eMyMoney::Model::TransactionEntryDateRole: 0111 return QSortFilterProxyModel::data(idx, eMyMoney::Model::AccountOnlineBalanceDateRole); 0112 0113 case Qt::ForegroundRole: 0114 return QVariant(); 0115 0116 case Qt::FontRole: 0117 return QVariant(); 0118 0119 case Qt::TextAlignmentRole: 0120 switch(idx.column()) { 0121 case AccountsModel::Column::Balance: 0122 return QVariant(Qt::AlignRight | Qt::AlignVCenter); 0123 0124 default: 0125 return QVariant(Qt::AlignLeft | Qt::AlignVCenter); 0126 } 0127 break; 0128 } 0129 } 0130 0131 return QSortFilterProxyModel::data(idx, role); 0132 } 0133 0134 Qt::ItemFlags OnlineBalanceProxyModel::flags(const QModelIndex& idx) const 0135 { 0136 Q_UNUSED(idx) 0137 return Qt::NoItemFlags; 0138 } 0139 0140 bool OnlineBalanceProxyModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const 0141 { 0142 // never show a favorite entry 0143 auto idx = sourceModel()->index(source_row, 0, source_parent); 0144 if (idx.data(eMyMoney::Model::AccountIsFavoriteIndexRole).toBool() == true) 0145 return false; 0146 0147 // don't show an online balance if there isn't any for the account 0148 const auto dateValue = idx.data(eMyMoney::Model::AccountOnlineBalanceDateRole); 0149 if (!dateValue.isValid()) { 0150 return false; 0151 } 0152 0153 return dateValue.toDate().isValid(); 0154 }