Skip to content
Snippets Groups Projects
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;
}