-
Evgenii Tagiltsev authoredae769405
DapScreenHistoryFilterModel.cpp 2.06 KiB
#include "DapScreenHistoryFilterModel.h"
DapScreenHistoryFilterModel::DapScreenHistoryFilterModel(QObject *parent) :
QSortFilterProxyModel(parent),
m_status(-1)
{
sort(0, Qt::DescendingOrder);
}
DapScreenHistoryFilterModel& DapScreenHistoryFilterModel::getInstance()
{
static DapScreenHistoryFilterModel instance;
return instance;
}
void DapScreenHistoryFilterModel::setFilterWallet(const QString& aWalletNumber)
{
if(m_walletNumber == aWalletNumber) return;
m_walletNumber = aWalletNumber;
setFilterKeyColumn(0);
}
void DapScreenHistoryFilterModel::setFilterDate(const QDate& aDateLeft, const QDate& aDateRight)
{
if(m_dateLeft == aDateLeft || m_dateRight == aDateRight) return;
m_dateLeft = aDateLeft;
m_dateRight = aDateRight;
setFilterKeyColumn(0);
}
void DapScreenHistoryFilterModel::setFilterStatus(const DapTransactionStatus aStatus)
{
if(m_status == aStatus) return;
m_status = aStatus;
setFilterKeyColumn(0);
}
bool DapScreenHistoryFilterModel::lessThan(const QModelIndex& source_left, const QModelIndex& source_right) const
{
QDateTime first = source_left.data(DapScreenHistoryModel::DateRole).toDateTime();
QDateTime second = source_right.data(DapScreenHistoryModel::DateRole).toDateTime();
return first < second;
}
bool DapScreenHistoryFilterModel::filterAcceptsRow(int source_row, const QModelIndex& source_parent) const
{
QModelIndex index = sourceModel()->index(source_row, 0, source_parent);
QDateTime time = index.data(DapScreenHistoryModel::DateRole).toDateTime();
bool result = true;
bool filterByWalletNumber = !m_walletNumber.isEmpty();
bool filterByDate = m_dateLeft.isValid() && m_dateRight.isValid();
bool filterByStatus = m_status > -1;
if(filterByDate) result &= (time.date() >= m_dateLeft && time.date() <= m_dateRight);
if(filterByStatus) result &= (index.data(DapScreenHistoryModel::StatusRole).toInt() == m_status);
if(filterByWalletNumber) result &= (index.data(DapScreenHistoryModel::DisplayNumberWalletRole).toString() == m_walletNumber);
return result;
}