00001 #include "owncapitalcalculationmodel.h"
00002 #include "../Data/datadefinitions.h"
00003 #include <QDebug>
00004
00005 OwnCapitalCalculationModel::OwnCapitalCalculationModel(QObject *parent) : QAbstractTableModel(parent)
00006 {
00007 }
00008
00009 QDomElement OwnCapitalCalculationModel::dataNode()
00010 {
00011 QDomDocument doc;
00012
00013 QDomElement owncapital = doc.createElement("owncapital");
00014
00015 for(int i = 0; i < entries.count(); i++)
00016 {
00017 QDomElement asset = doc.createElement("asset");
00018 asset.setAttribute("name", entries.value(i).value(OwnCapitalDialogColumns::AssetName));
00019 asset.setAttribute("result", entries.value(i).value(OwnCapitalDialogColumns::Result));
00020 asset.setAttribute("replacement", entries.value(i).value(OwnCapitalDialogColumns::ReplacementValue));
00021 asset.setAttribute("revenues", entries.value(i).value(OwnCapitalDialogColumns::Revenues));
00022 asset.setAttribute("usefullife", entries.value(i).value(OwnCapitalDialogColumns::UseFulLife));
00023 asset.setAttribute("lifetime", entries.value(i).value(OwnCapitalDialogColumns::LifeTime));
00024 owncapital.appendChild(asset);
00025 }
00026
00027 return owncapital;
00028 }
00029
00030 void OwnCapitalCalculationModel::loadDataNode(const QDomElement element)
00031 {
00032 qDebug()<<"loadDataNode -- owncapital";
00033 QDomNode assets = element.firstChild();
00034 while(!assets.isNull())
00035 {
00036 QDomElement asset = assets.toElement();
00037 qDebug()<<asset.tagName();
00038
00039 addRow(asset.attribute("name", ""), asset.attribute("result", "0"), asset.attribute("replacement", "0"), asset.attribute("revenues", "0"), asset.attribute("usefullife", "0"), asset.attribute("lifetime", "0"));
00040
00041 assets = assets.nextSibling();
00042 }
00043 }
00044
00045 int OwnCapitalCalculationModel::rowCount(const QModelIndex &parent) const
00046 {
00047 Q_UNUSED(parent);
00048 return entries.size();
00049 }
00050
00051 int OwnCapitalCalculationModel::columnCount(const QModelIndex &parent) const
00052 {
00053 Q_UNUSED(parent);
00054 return 6;
00055 }
00056
00057 QVariant OwnCapitalCalculationModel::headerData(int section, Qt::Orientation orientation, int role) const
00058 {
00059 if(role != Qt::DisplayRole)
00060 {
00061 return QVariant();
00062 }
00063
00064 if(orientation == Qt::Horizontal)
00065 {
00066 OwnCapitalDialogColumns *columns = new OwnCapitalDialogColumns();
00067
00068 switch(section)
00069 {
00070 case OwnCapitalDialogColumns::AssetName:
00071 {
00072 return columns->columnNames(OwnCapitalDialogColumns::AssetName);
00073 }
00074 case OwnCapitalDialogColumns::Result:
00075 {
00076 return columns->columnNames(OwnCapitalDialogColumns::Result);
00077 }
00078 case OwnCapitalDialogColumns::ReplacementValue:
00079 {
00080 return columns->columnNames(OwnCapitalDialogColumns::ReplacementValue);
00081 }
00082 case OwnCapitalDialogColumns::Revenues:
00083 {
00084 return columns->columnNames(OwnCapitalDialogColumns::Revenues);
00085 }
00086 case OwnCapitalDialogColumns::UseFulLife:
00087 {
00088 return columns->columnNames(OwnCapitalDialogColumns::UseFulLife);
00089 }
00090 case OwnCapitalDialogColumns::LifeTime:
00091 {
00092 return columns->columnNames(OwnCapitalDialogColumns::LifeTime);
00093 }
00094 default:
00095 {
00096 return QVariant();
00097 }
00098 }
00099 }
00100 return QVariant();
00101 }
00102
00103 QVariant OwnCapitalCalculationModel::data(const QModelIndex &index, int role) const
00104 {
00105 if(!index.isValid())
00106 {
00107 return QVariant();
00108 }
00109
00110 if(index.row() >= entries.size() || index.row() < 0)
00111 {
00112 return QVariant();
00113 }
00114
00115 if(role == Qt::DisplayRole)
00116 {
00117 QStringList pair = entries.value(index.row());
00118
00119 switch(index.column())
00120 {
00121 case OwnCapitalDialogColumns::AssetName:
00122 {
00123 return pair.value(OwnCapitalDialogColumns::AssetName);
00124 }
00125 case OwnCapitalDialogColumns::Result:
00126 {
00127 return pair.value(OwnCapitalDialogColumns::Result);
00128 }
00129 case OwnCapitalDialogColumns::ReplacementValue:
00130 {
00131 return pair.value(OwnCapitalDialogColumns::ReplacementValue);
00132 }
00133 case OwnCapitalDialogColumns::Revenues:
00134 {
00135 return pair.value(OwnCapitalDialogColumns::Revenues);
00136 }
00137 case OwnCapitalDialogColumns::UseFulLife:
00138 {
00139 return pair.value(OwnCapitalDialogColumns::UseFulLife);
00140 }
00141 case OwnCapitalDialogColumns::LifeTime:
00142 {
00143 return pair.value(OwnCapitalDialogColumns::LifeTime);
00144 }
00145 default:
00146 {
00147 return QVariant();
00148 }
00149 }
00150 }
00151 return QVariant();
00152 }
00153
00154 bool OwnCapitalCalculationModel::insertRows(int position, int rows, const QModelIndex &index)
00155 {
00156 Q_UNUSED(index);
00157 beginInsertRows(QModelIndex(), position, position+rows-1);
00158
00159 for (int row = 0; row < rows; row++)
00160 {
00161 QStringList pair;
00162 pair<<""<<""<<""<<""<<""<<"";
00163 entries.insert(position, pair);
00164 }
00165
00166 endInsertRows();
00167
00168 return true;
00169 }
00170
00171 bool OwnCapitalCalculationModel::removeRows(int position, int rows, const QModelIndex &index)
00172 {
00173 Q_UNUSED(index);
00174 beginRemoveRows(QModelIndex(), position, position+rows-1);
00175
00176 for (int row = 0; row < rows; ++row)
00177 {
00178 entries.removeAt(position);
00179 }
00180
00181 endRemoveRows();
00182
00183 refreshSums();
00184
00185 return true;
00186 }
00187
00188 bool OwnCapitalCalculationModel::setData(const QModelIndex &index, const QVariant &value, int role)
00189 {
00190 if(index.isValid() && role == Qt::EditRole)
00191 {
00192 int row = index.row();
00193 QStringList p = entries.value(row);
00194
00195 p.replace(index.column(), value.toString());
00196
00197 entries.replace(row, p);
00198
00199 emit(dataChanged(index, index));
00200
00201 refreshSums();
00202
00203 return true;
00204 }
00205 return false;
00206 }
00207
00208 void OwnCapitalCalculationModel::addRow(QString positionname, QString result, QString replacementvalue, QString revenues, QString usefullife, QString lifetime)
00209 {
00210 insertRows(0, 1, QModelIndex());
00211
00212 QModelIndex i = index(0, OwnCapitalDialogColumns::AssetName, QModelIndex());
00213 setData(i, positionname, Qt::EditRole);
00214
00215 i = index(0, OwnCapitalDialogColumns::Result, QModelIndex());
00216 setData(i, result, Qt::EditRole);
00217
00218 i = index(0, OwnCapitalDialogColumns::ReplacementValue, QModelIndex());
00219 setData(i, replacementvalue, Qt::EditRole);
00220
00221 i = index(0, OwnCapitalDialogColumns::Revenues, QModelIndex());
00222 setData(i, revenues, Qt::EditRole);
00223
00224 i = index(0, OwnCapitalDialogColumns::UseFulLife, QModelIndex());
00225 setData(i, usefullife, Qt::EditRole);
00226
00227 i = index(0, OwnCapitalDialogColumns::LifeTime, QModelIndex());
00228 setData(i, lifetime, Qt::EditRole);
00229
00230 refreshSums();
00231 }
00232
00233 void OwnCapitalCalculationModel::refreshSums()
00234 {
00235 double sum = 0;
00236 for(int i = 0; i < entries.count(); i++)
00237 {
00238 sum += entries.value(i).value(1).toDouble();
00239 }
00240 emit newTotalAvailable(QString::number(sum));
00241 }
00242
00243 Qt::ItemFlags OwnCapitalCalculationModel::flags(const QModelIndex &index) const
00244 {
00245 if(!index.isValid())
00246 {
00247 return Qt::ItemIsEnabled;
00248 }
00249 return QAbstractTableModel::flags(index) | Qt::ItemIsEditable;
00250 }
00251
00252 QList<QStringList> OwnCapitalCalculationModel::getList()
00253 {
00254 return entries;
00255 }