00001 #include "costtypefiltermodel.h" 00002 #include "../Data/datadefinitions.h" 00003 #include <QDebug> 00004 #include <QStringList> 00005 #include <QList> 00006 #include "../Models/costtypemodel.h" 00007 00008 CostTypeFilterModel::CostTypeFilterModel(bool sums, bool costs, bool existing, bool editcolumns, CostCentreModel *model, QObject *parent) : QSortFilterProxyModel(parent), filterSums(sums), filterCostsEqualZero(costs), filterAddedCosts(existing), filterEditColumns(editcolumns), existingRows(model) 00009 { 00010 } 00011 00012 bool CostTypeFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const 00013 { 00014 QString typeColumn = sourceModel()->index(sourceRow, CostTypeColumns::Type, sourceParent).data(Qt::DisplayRole).toString(); 00015 QString rowColumn = sourceModel()->index(sourceRow, CostTypeColumns::RowID, sourceParent).data(Qt::DisplayRole).toString(); 00016 QString costsColumn = sourceModel()->index(sourceRow, CostTypeColumns::Costs, sourceParent).data(Qt::DisplayRole).toString(); 00017 00018 bool retval = true; 00019 00020 if(filterCostsEqualZero) 00021 { 00022 retval = filterForZeroCosts(costsColumn); 00023 } 00024 if(filterAddedCosts) 00025 { 00026 retval = (retval && filterAlreadyAddedCosts(rowColumn)); 00027 } 00028 if(filterSums) 00029 { 00030 retval = (retval && filterSumsEntries(typeColumn)); 00031 } 00032 00033 return retval; 00034 } 00035 00036 bool CostTypeFilterModel::filterForZeroCosts(QString costsColumn) const 00037 { 00038 if(costsColumn.toDouble() == 0) 00039 { 00040 return false; 00041 } 00042 return true; 00043 } 00044 00045 bool CostTypeFilterModel::filterAlreadyAddedCosts(QString rowColumn) const 00046 { 00047 if(existingRows != NULL) 00048 { 00049 QList<QStringList> entries = existingRows->entries(); 00050 QList<int> rows; 00051 00052 for(int i = 0; i < entries.count(); i++) 00053 { 00054 CostCentreColumns *columns = new CostCentreColumns(); 00055 rows<<entries.value(i).value(existingRows->columnIdIndex(columns->costcentrecolumns(CostCentreColumns::FileAssociatedRow))).toInt(); 00056 } 00057 00058 if(rows.contains(rowColumn.toInt())) 00059 { 00060 return false; 00061 } 00062 } 00063 return true; 00064 } 00065 00066 bool CostTypeFilterModel::filterSumsEntries(QString typeColumn) const 00067 { 00068 if(typeColumn == "sum1" || typeColumn == "sum2" || typeColumn == "sum3") 00069 { 00070 return false; 00071 } 00072 return true; 00073 } 00074 00075 bool CostTypeFilterModel::filterAcceptsColumn(int sourceColumn, const QModelIndex &sourceParent) const 00076 { 00077 if(filterEditColumns) 00078 { 00079 if(sourceColumn == CostTypeColumns::AssociationID || 00080 sourceColumn == CostTypeColumns::RowID || 00081 sourceColumn == CostTypeColumns::EditInformation || 00082 sourceColumn == CostTypeColumns::Type || 00083 sourceColumn == CostTypeColumns::CostType) 00084 { 00085 return false; 00086 } 00087 } 00088 return true; 00089 } 00090 00091 bool CostTypeFilterModel::lessThan(const QModelIndex &left, const QModelIndex &right) const 00092 { 00093 QVariant leftData = sourceModel()->data(left); 00094 QVariant rightData = sourceModel()->data(right); 00095 00096 QString leftString = leftData.toString(); 00097 QString rightString = rightData.toString(); 00098 00099 if(right.column() == 0 && left.column() == 0) 00100 { 00101 CostTypeRows *rows = new CostTypeRows(); 00102 00103 if((right.data(Qt::DisplayRole) == rows->costtyperows(CostTypeRows::Sum)) || 00104 (right.data(Qt::DisplayRole) == rows->costtyperows(CostTypeRows::Revenues)) || 00105 (right.data(Qt::DisplayRole) == rows->costtyperows(CostTypeRows::Result)) || 00106 (left.data(Qt::DisplayRole) == rows->costtyperows(CostTypeRows::Sum)) || 00107 (left.data(Qt::DisplayRole) == rows->costtyperows(CostTypeRows::Revenues)) || 00108 (left.data(Qt::DisplayRole) == rows->costtyperows(CostTypeRows::Result))) 00109 { 00110 return false; 00111 } 00112 return QString::localeAwareCompare(leftString, rightString) < 0; 00113 } 00114 return false; 00115 }