00001 #include "costcentrefiltermodel.h" 00002 #include "../Data/datadefinitions.h" 00003 #include <QDebug> 00004 #include <QStringList> 00005 #include <QList> 00006 00007 CostCentreFilterModel::CostCentreFilterModel(QObject *parent) : QSortFilterProxyModel(parent) 00008 { 00009 } 00010 00011 bool CostCentreFilterModel::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const 00012 { 00013 return true; 00014 } 00015 00016 bool CostCentreFilterModel::filterAcceptsColumn(int sourceColumn, const QModelIndex &sourceParent) const 00017 { 00018 return true; 00019 } 00020 00021 bool CostCentreFilterModel::lessThan(const QModelIndex &left, const QModelIndex &right) const 00022 { 00023 //qDebug()<<""; 00024 QVariant leftData = sourceModel()->data(left); 00025 QVariant rightData = sourceModel()->data(right); 00026 00027 QString leftString = leftData.toString(); 00028 QString rightString = rightData.toString(); 00029 00030 // TODO: depending on the order direction invert the return value (for the sum entries) 00031 // for now just disabled all sorting by the user :p 00032 00033 bool ret = false; 00034 if(right.column() == 0 && left.column() == 0) 00035 { 00036 CostCentreRows *rows = new CostCentreRows(); 00037 00038 if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00039 { 00040 if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00041 ret = false; 00042 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00043 ret = true; 00044 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00045 ret = true; 00046 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00047 ret = true; 00048 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00049 ret = true; 00050 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00051 ret = true; 00052 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00053 ret = true; 00054 else 00055 ret = false; 00056 00057 //qDebug()<<"costcentretype left filter: " <<ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00058 } 00059 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00060 { 00061 if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00062 ret = false; 00063 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00064 ret = false; 00065 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00066 ret = true; 00067 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00068 ret = true; 00069 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00070 ret = true; 00071 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00072 ret = true; 00073 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00074 ret = true; 00075 else 00076 ret = true; 00077 00078 //qDebug()<<"sum left filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00079 } 00080 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00081 { 00082 if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00083 ret = false; 00084 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00085 ret = false; 00086 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00087 ret = false; 00088 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00089 ret = true; 00090 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00091 ret = true; 00092 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00093 ret = true; 00094 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00095 ret = true; 00096 else 00097 ret = true; 00098 00099 //qDebug()<<"directcosts left filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00100 } 00101 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00102 { 00103 if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00104 ret = false; 00105 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00106 ret = false; 00107 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00108 ret = false; 00109 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00110 ret = false; 00111 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00112 ret = true; 00113 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00114 ret = true; 00115 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00116 ret = true; 00117 else 00118 ret = true; 00119 00120 //qDebug()<<"fixedcosts left filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00121 } 00122 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00123 { 00124 if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00125 ret = false; 00126 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00127 ret = false; 00128 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00129 ret = false; 00130 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00131 ret = false; 00132 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00133 ret = false; 00134 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00135 ret = true; 00136 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00137 ret = true; 00138 else 00139 ret = true; 00140 00141 //qDebug()<<"base left filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00142 } 00143 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00144 { 00145 if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00146 ret = false; 00147 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00148 ret = false; 00149 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00150 ret = false; 00151 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00152 ret = false; 00153 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00154 ret = false; 00155 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00156 ret = false; 00157 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00158 ret = true; 00159 else 00160 ret = true; 00161 00162 //qDebug()<<"overhead left filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00163 } 00164 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00165 { 00166 if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00167 ret = false; 00168 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00169 ret = false; 00170 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00171 ret = false; 00172 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00173 ret = false; 00174 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00175 ret = false; 00176 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00177 ret = false; 00178 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00179 ret = false; 00180 else 00181 ret = true; 00182 00183 //qDebug()<<"edit left filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00184 } 00185 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00186 { 00187 if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00188 ret = false; 00189 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00190 ret = true; 00191 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00192 ret = true; 00193 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00194 ret = true; 00195 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00196 ret = true; 00197 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00198 ret = true; 00199 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00200 ret = true; 00201 else 00202 ret = false; 00203 00204 //qDebug()<<"costcentretype right filter: " <<ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00205 } 00206 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00207 { 00208 if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00209 ret = false; 00210 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00211 ret = false; 00212 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00213 ret = true; 00214 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00215 ret = true; 00216 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00217 ret = true; 00218 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00219 ret = true; 00220 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00221 ret = true; 00222 else 00223 ret = true; 00224 00225 //qDebug()<<"sum right filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00226 } 00227 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00228 { 00229 if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00230 ret = false; 00231 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00232 ret = false; 00233 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00234 ret = false; 00235 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00236 ret = true; 00237 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00238 ret = true; 00239 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00240 ret = true; 00241 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00242 ret = true; 00243 else 00244 ret = true; 00245 00246 //qDebug()<<"directcosts right filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00247 } 00248 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00249 { 00250 if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00251 ret = false; 00252 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00253 ret = false; 00254 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00255 ret = false; 00256 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00257 ret = false; 00258 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00259 ret = true; 00260 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00261 ret = true; 00262 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00263 ret = true; 00264 else 00265 ret = true; 00266 00267 //qDebug()<<"fixedcosts right filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00268 } 00269 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00270 { 00271 if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00272 ret = false; 00273 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00274 ret = false; 00275 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00276 ret = false; 00277 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00278 ret = false; 00279 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00280 ret = false; 00281 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00282 ret = true; 00283 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00284 ret = true; 00285 else 00286 ret = true; 00287 00288 //qDebug()<<"base right filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00289 } 00290 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00291 { 00292 if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00293 ret = false; 00294 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00295 ret = false; 00296 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00297 ret = false; 00298 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00299 ret = false; 00300 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00301 ret = false; 00302 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00303 ret = false; 00304 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00305 ret = true; 00306 else 00307 ret = true; 00308 00309 //qDebug()<<"overhead right filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00310 } 00311 else if(right.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00312 { 00313 if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::CostCentreType)) 00314 ret = false; 00315 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Sum)) 00316 ret = false; 00317 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::DirectCosts)) 00318 ret = false; 00319 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::FixedCosts)) 00320 ret = false; 00321 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Base)) 00322 ret = false; 00323 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::Overhead)) 00324 ret = false; 00325 else if(left.data(Qt::DisplayRole) == rows->costcentrerows(CostCentreRows::EditInformation)) 00326 ret = false; 00327 else 00328 ret = true; 00329 00330 //qDebug()<<"edit right filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00331 } 00332 00333 else 00334 { 00335 if(leftString == "" || rightString == "") 00336 { 00337 ret = false; 00338 } 00339 else 00340 { 00341 ret = QString::localeAwareCompare(leftString, rightString) < 0; 00342 } 00343 //qDebug()<<"misc filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00344 } 00345 } 00346 00347 //qDebug()<<"misc2 filter: " << ret << " " << left.data(Qt::DisplayRole) << " " << right.data(Qt::DisplayRole); 00348 //qDebug()<<""; 00349 00350 return ret; // value is coming either from the if statements or from the variable intizialiation (false) 00351 }