00001 #include "costtypetab.h"
00002 #include "../Calculations/costtypecalculation.h"
00003 #include "../Dialogs/editpositionsdialog.h"
00004 #include "../Dialogs/managepositionsdialog.h"
00005 #include "../Dialogs/addcostpositiondialog.h"
00006 #include "../Data/project.h"
00007 #include "../Data/datadefinitions.h"
00008 #include "../Childwindows/childwindow.h"
00009 #include "../Childwindows/costtypechild.h"
00010
00011 CostTypeTab::CostTypeTab(QMdiArea *mdi, QWidget *parent) : QWidget(parent)
00012 {
00013 setupUi(this);
00014 createControls();
00015 createActions();
00016
00017 mdiArea = mdi;
00018
00019 sideBarIsReservedForEditingOfExistingRows = -1;
00020 }
00021
00022 void CostTypeTab::createControls()
00023 {
00024 costpositionmodel = new CostPositionModel();
00025 connect(costpositionmodel, SIGNAL(costTypePositionsNotReadable()), this, SLOT(wrongPermissionsCostTypePositions()));
00026 connect(costpositionmodel, SIGNAL(clearCostPositions(bool)), this, SLOT(clearEntries(bool)));
00027 filter = new CostPositionFilterModel();
00028 filter->setSourceModel(costpositionmodel);
00029 treeViewCostPositions->setModel(filter);
00030
00031 filter->setDynamicSortFilter(true);
00032 filter->setFilterCaseSensitivity(Qt::CaseInsensitive);
00033
00034 treeViewCostPositions->sortByColumn(0, Qt::AscendingOrder);
00035
00036 groupBoxAcceptCosts = new WidgetAcceptCosts();
00037 groupBoxCompleteCosts = new WidgetCompleteCosts();
00038 groupBoxDelimitAmount = new WidgetDelimitAmount();
00039 groupBoxNormalize = new WidgetNormalize();
00040 groupBoxReassess = new WidgetReassess();
00041 groupBoxWages = new WidgetWages();
00042
00043 radioDirectCosts->setVisible(false);
00044 radioFixedCosts->setVisible(false);
00045 comboBoxActions->setVisible(false);
00046 labelAction->setVisible(false);
00047 buttonAddEditPositionTable->setVisible(false);
00048 seperatorLine->setVisible(false);
00049
00050 groupBoxAcceptCosts->hide();
00051 groupBoxCompleteCosts->hide();
00052 groupBoxDelimitAmount->hide();
00053 groupBoxNormalize->hide();
00054 groupBoxReassess->hide();
00055 groupBoxWages->hide();
00056
00057 ((QVBoxLayout*)layout())->insertWidget(1, groupBoxAcceptCosts);
00058 ((QVBoxLayout*)layout())->insertWidget(1, groupBoxCompleteCosts);
00059 ((QVBoxLayout*)layout())->insertWidget(1, groupBoxDelimitAmount);
00060 ((QVBoxLayout*)layout())->insertWidget(1, groupBoxNormalize);
00061 ((QVBoxLayout*)layout())->insertWidget(1, groupBoxReassess);
00062 ((QVBoxLayout*)layout())->insertWidget(1, groupBoxWages);
00063 }
00064
00065 void CostTypeTab::createActions()
00066 {
00067 connect(treeViewCostPositions, SIGNAL(clicked(QModelIndex)), this, SLOT(categoryChanged(QModelIndex)));
00068 connect(textFilterCostPositions, SIGNAL(textChanged(QString)), filter, SLOT(setFilterFixedString(QString)));
00069 connect(comboBoxActions, SIGNAL(currentIndexChanged(int)), this, SLOT(actionChanged(int)));
00070 connect(buttonAddPosition, SIGNAL(clicked()), this, SLOT(showNewPositionDialog()));
00071 connect(buttonManagePositions, SIGNAL(clicked()), this, SLOT(showManagePositionsDialog()));
00072 connect(buttonAddEditPositionTable, SIGNAL(clicked()), this, SLOT(addOrEditPositionTable()));
00073 connect(buttonSetRevenues, SIGNAL(clicked()), this, SLOT(setRevenues()));
00074 }
00075
00076 void CostTypeTab::readCostPositions()
00077 {
00078 costpositionmodel->readCategories();
00079 }
00080
00081 void CostTypeTab::addOrEditPositionTable()
00082 {
00083 if(sideBarIsReservedForEditingOfExistingRows == -1)
00084 {
00085 addPositionToTable();
00086 }
00087 else
00088 {
00089 editPosition();
00090 }
00091 }
00092
00093 QString CostTypeTab::positionName()
00094 {
00095 QModelIndex index = treeViewCostPositions->currentIndex();
00096 return index.data(Qt::DisplayRole).toString();
00097 }
00098
00099 void CostTypeTab::enterEditPositionInformation(const CostTypeModel *model, const QModelIndexList affectedRows)
00100 {
00101 qDebug()<<"affectedRows: " << affectedRows;
00102
00103
00104 QStringList positionNames;
00105 int action = -1;
00106 for(int row = 0; row < affectedRows.count(); row++)
00107 {
00108 QModelIndex index = affectedRows.value(row);
00109 QStringList row = model->data(index.row());
00110 positionNames << row.value(CostTypeColumns::PositionName);
00111 }
00112 qDebug()<<"positionNames: " << positionNames;
00113 qDebug()<<"action: " << action;
00114
00115
00116 int count = 0;
00117 QModelIndex index;
00118 while(!index.isValid() && count <= positionNames.count())
00119 {
00120 index = getIndexOfPosition(positionNames.value(count));
00121 count++;
00122 qDebug()<<"index loop: " << index;
00123 }
00124 qDebug()<<"index tries: " << count;
00125 qDebug()<<"index: " << index;
00126 if(!index.isValid())
00127 {
00128 QMessageBox::warning(this, tr("Fehler"), tr("Beim Editieren trat ein Fehler auf! Es ist ratsam die Zeile zu löschen und sie neu hin zu zufügen"));
00129 mdiArea->setEnabled(true);
00130 return;
00131 }
00132
00133
00134 treeViewCostPositions->setCurrentIndex(index);
00135 treeViewCostPositions->scrollTo(index, QAbstractItemView::PositionAtCenter);
00136
00137
00138
00139 QModelIndex indexToUse;
00140 qDebug()<<"Positionname: " << index.data(Qt::DisplayRole);
00141 for(int i = 0; i < affectedRows.count(); i++)
00142 {
00143 QModelIndex in = affectedRows.value(i);
00144 if(in.data(Qt::DisplayRole) == index.data(Qt::DisplayRole))
00145 {
00146 indexToUse = in;
00147 break;
00148 }
00149 }
00150
00151
00152 QStringList row = model->data(indexToUse.row());
00153 QString name = row.value(CostTypeColumns::PositionName);
00154 QString type = row.value(CostTypeColumns::Type);
00155 QString information = row.value(CostTypeColumns::EditInformation);
00156 QString rowid = row.value(CostTypeColumns::RowID);
00157 QString association = row.value(CostTypeColumns::AssociationID);
00158
00159 qDebug()<<"position name: " << name;
00160 qDebug()<<"position type: " << type;
00161 qDebug()<<"position index: " << index;
00162
00163 groupBoxAcceptCosts->hide();
00164 groupBoxCompleteCosts->hide();
00165 groupBoxDelimitAmount->hide();
00166 groupBoxNormalize->hide();
00167 groupBoxReassess->hide();
00168 groupBoxWages->hide();
00169
00170 groupBoxAddPosition->setEnabled(false);
00171 groupBoxSetRevenues->setEnabled(false);
00172 buttonAddEditPositionTable->setText("Position editieren");
00173 sideBarIsReservedForEditingOfExistingRows = rowid.toInt();
00174 selectedRowsForEditing = affectedRows;
00175
00176 radioDirectCosts->setVisible(true);
00177 radioFixedCosts->setVisible(true);
00178 comboBoxActions->setVisible(true);
00179 labelAction->setVisible(true);
00180 buttonAddEditPositionTable->setVisible(true);
00181 seperatorLine->setVisible(true);
00182
00183 if(QMdiSubWindow *activeSubWindow = mdiArea->activeSubWindow())
00184 {
00185 if(qobject_cast<ChildWindow*>(activeSubWindow->widget())->type() == WindowType::CostType)
00186 {
00187 CostTypeChild *window = qobject_cast<CostTypeChild*>(activeSubWindow->widget());
00188 if(window)
00189 {
00190
00191 window->deleteAction->setDisabled(true);
00192 window->editAction->setDisabled(true);
00193 }
00194 }
00195 }
00196
00197 switch(type.toInt())
00198 {
00199 case CostTypeActions::CostTypeActions::Reassess:
00200 {
00201 comboBoxActions->setCurrentIndex(CostTypeActions::Reassess);
00202
00203 QStringList reassess = information.split(";");
00204
00205 groupBoxReassess->setVisible(true);
00206
00207 groupBoxReassess->textIncomeStatement->setText(reassess.value(0));
00208 groupBoxReassess->textReplacementValue->setText(reassess.value(1));
00209 groupBoxReassess->textDecliningBalance->setText(reassess.value(2));
00210 groupBoxReassess->textUsefulLife->setText(reassess.value(3));
00211
00212 break;
00213 }
00214 case CostTypeActions::DelimitAmount:
00215 {
00216 comboBoxActions->setCurrentIndex(CostTypeActions::DelimitAmount);
00217
00218 QStringList delimitAmount = information.split(";");
00219
00220 groupBoxDelimitAmount->setVisible(true);
00221
00222 groupBoxDelimitAmount->textIncomeStatement->setText(delimitAmount.value(0));
00223 groupBoxDelimitAmount->textAmountToDelimit->setText(delimitAmount.value(1));
00224
00225 break;
00226 }
00227 case CostTypeActions::AcceptCosts:
00228 {
00229 comboBoxActions->setCurrentIndex(CostTypeActions::AcceptCosts);
00230
00231 groupBoxAcceptCosts->setVisible(true);
00232
00233 groupBoxAcceptCosts->textIncomeStatement->setText(information);
00234
00235 break;
00236 }
00237 case CostTypeActions::Normalize:
00238 {
00239 comboBoxActions->setCurrentIndex(CostTypeActions::Normalize);
00240
00241 QStringList normalize = information.split(";");
00242
00243 groupBoxNormalize->setVisible(true);
00244
00245 groupBoxNormalize->textAverageCosts->setText(normalize.value(0));
00246 groupBoxNormalize->textActualCosts->setText(normalize.value(1));
00247
00248 break;
00249 }
00250 case CostTypeActions::Wages:
00251 {
00252 comboBoxActions->setCurrentIndex(CostTypeActions::Wages);
00253
00254 QStringList wages = information.split(";");
00255
00256 groupBoxWages->setVisible(true);
00257
00258 groupBoxWages->textWages->setText(wages.value(0));
00259 groupBoxWages->textSpecialPayment->setText(wages.value(1));
00260 groupBoxWages->textLegalTaxes->setText(wages.value(2));
00261 groupBoxWages->textPaymentByResult->setText(wages.value(3));
00262 groupBoxWages->textDirectCostPart->setText(wages.value(4));
00263 groupBoxWages->textNonWageLaborCosts->setText(wages.value(5));
00264
00265 break;
00266 }
00267 case CostTypeActions::CompleteCostsEmployerSalary:
00268 {
00269 comboBoxActions->setCurrentIndex(CostTypeActions::CompleteCostsEmployerSalary);
00270
00271 QStringList completeCostsEmployerSalary = information.split(";");
00272
00273 groupBoxCompleteCosts->setVisible(true);
00274 groupBoxCompleteCosts->groupBoxEmployersSalary->setVisible(true);
00275 groupBoxCompleteCosts->groupBoxImputedInterest->setVisible(false);
00276
00277 groupBoxCompleteCosts->textSalaryWithoutTaxes->setText(completeCostsEmployerSalary.value(0));
00278 groupBoxCompleteCosts->textMonthsForCalculation->setText(completeCostsEmployerSalary.value(1));
00279 groupBoxCompleteCosts->textRiskPremium->setText(completeCostsEmployerSalary.value(2));
00280
00281 break;
00282 }
00283 case CostTypeActions::CompleteCostsInterests:
00284 {
00285 comboBoxActions->setCurrentIndex(CostTypeActions::CompleteCostsInterests);
00286
00287 groupBoxCompleteCosts->setVisible(true);
00288 groupBoxCompleteCosts->groupBoxEmployersSalary->setVisible(false);
00289 groupBoxCompleteCosts->groupBoxImputedInterest->setVisible(true);
00290
00291 groupBoxCompleteCosts->groupBoxInterestOnOwnBoundCapital->setVisible(false);
00292 groupBoxCompleteCosts->groupBoxInterestOnOperatingAssets->setVisible(false);
00293
00294 if(information.startsWith("type=0"))
00295 {
00296 groupBoxCompleteCosts->comboBoxInterestType->setCurrentIndex(InterestTypes::OnIncomeStatement);
00297
00298 QStringList incomestatement = information.split(";");
00299
00300 groupBoxCompleteCosts->textIncomeStatement->setText(incomestatement.value(1));
00301 }
00302 else if(information.startsWith("type=1"))
00303 {
00304 groupBoxCompleteCosts->comboBoxInterestType->setCurrentIndex(InterestTypes::OnOwnBoundCapital);
00305
00306 groupBoxCompleteCosts->groupBoxInterestOnOwnBoundCapital->setVisible(true);
00307
00308 QStringList boundcapital = information.split(";");
00309
00310 groupBoxCompleteCosts->textIncomeStatement->setText(boundcapital.value(1));
00311 groupBoxCompleteCosts->textInterestOnBorrowedCapital->setText(boundcapital.value(2));
00312 groupBoxCompleteCosts->textOwnCapital->setText(boundcapital.value(3));
00313 groupBoxCompleteCosts->textInterestRate->setText(boundcapital.value(4));
00314 }
00315 else if(information.startsWith("type=2"))
00316 {
00317 groupBoxCompleteCosts->comboBoxInterestType->setCurrentIndex(InterestTypes::OnOperatingAssets);
00318
00319 groupBoxCompleteCosts->groupBoxInterestOnOperatingAssets->setVisible(true);
00320
00321 QStringList operatingassets = information.split(";");
00322
00323 groupBoxCompleteCosts->textIncomeStatement->setText(operatingassets.value(1));
00324 groupBoxCompleteCosts->textInterestRateOwnBoundCapital->setText(operatingassets.value(2));
00325 groupBoxCompleteCosts->textOperatingAssets->setText(operatingassets.value(3));
00326 }
00327
00328 break;
00329 }
00330 default:
00331 {
00332 break;
00333 }
00334 }
00335 }
00336
00337 void CostTypeTab::editPosition()
00338 {
00339 if(QMdiSubWindow *activeSubWindow = mdiArea->activeSubWindow())
00340 {
00341 if(qobject_cast<ChildWindow*>(activeSubWindow->widget())->type() == WindowType::CostType)
00342 {
00343 CostTypeChild *window = qobject_cast<CostTypeChild*>(activeSubWindow->widget());
00344 if(window)
00345 {
00346 qDebug()<<"TODO: error detection needs to be done for editing (costtype)";
00347
00348
00349
00350 int rowid = sideBarIsReservedForEditingOfExistingRows;
00351
00352
00353 qDebug()<<"getting list of affected rows";
00354 QList<int> affectedRows;
00355 getAllRowsAffected(window, &affectedRows, rowid);
00356
00357 if(affectedRows.count() > 0)
00358 {
00359 QStringList row;
00360
00361 QList<QStringList> entries = window->model()->getList();
00362 for(int i = 0; i < entries.count(); i++)
00363 {
00364 QStringList r = entries.value(i);
00365 if(r.value(CostTypeColumns::RowID).toInt() == rowid)
00366 {
00367 row = r;
00368 }
00369 }
00370
00371 if(row.count() > 0 && selectedRowsForEditing.count() > 0)
00372 {
00373
00374 int calculationtype = row.value(CostTypeColumns::Type).toInt();
00375 int type = row.value(CostTypeColumns::CostType).toInt();
00376 switch(calculationtype)
00377 {
00378 case CostTypeActions::Reassess:
00379 {
00380 if(groupBoxReassess->radioValueBased->isChecked())
00381 {
00382 window->model()->reassessValueBased(row.value(0), type, groupBoxReassess->textIncomeStatement->text(), groupBoxReassess->textReplacementValue->text(), groupBoxReassess->textDecliningBalance->text(), groupBoxReassess->textUsefulLife->text(), affectedRows.value(0), selectedRowsForEditing);
00383 }
00384 else
00385 {
00386 window->model()->reassessIndexBased(row.value(0), type, groupBoxReassess->textIncomeStatement->text(), groupBoxReassess->textDecliningBalance->text(), groupBoxReassess->textUsefulLife->text(), groupBoxReassess->textPurchasePrice->text(), groupBoxReassess->textPurchaseIndex->text(), groupBoxReassess->textCurrentIndex->text(), affectedRows.value(0), selectedRowsForEditing);
00387 }
00388
00389
00390 groupBoxReassess->textIncomeStatement->setText("");
00391 groupBoxReassess->textReplacementValue->setText("");
00392 groupBoxReassess->textDecliningBalance->setText("");
00393 groupBoxReassess->textUsefulLife->setText("");
00394
00395 groupBoxReassess->textPurchasePrice->setText("");
00396 groupBoxReassess->textPurchaseIndex->setText("");
00397 groupBoxReassess->textCurrentIndex->setText("");
00398
00399 break;
00400 }
00401 case CostTypeActions::AcceptCosts:
00402 {
00403 window->model()->acceptCosts(row.value(0), type, groupBoxAcceptCosts->textIncomeStatement->text(), affectedRows.value(0), selectedRowsForEditing);
00404
00405
00406 groupBoxAcceptCosts->textIncomeStatement->setText("");
00407
00408 break;
00409 }
00410 case CostTypeActions::DelimitAmount:
00411 {
00412 window->model()->delimitAmount(row.value(0), type, groupBoxDelimitAmount->textIncomeStatement->text(), groupBoxDelimitAmount->textAmountToDelimit->text(), affectedRows.value(0), selectedRowsForEditing);
00413
00414
00415 groupBoxDelimitAmount->textIncomeStatement->setText("");
00416 groupBoxDelimitAmount->textAmountToDelimit->setText("");
00417 break;
00418 }
00419 case CostTypeActions::Normalize:
00420 {
00421 window->model()->normalize(row.value(0), type, groupBoxNormalize->textAverageCosts->text(), groupBoxNormalize->textActualCosts->text(), affectedRows.value(0), selectedRowsForEditing);
00422
00423
00424 groupBoxNormalize->textAverageCosts->setText("");
00425 groupBoxNormalize->textActualCosts->setText("");
00426
00427 break;
00428 }
00429 case CostTypeActions::CompleteCostsEmployerSalary:
00430 {
00431 window->model()->completeCostsEmployersSalary(row.value(0), type, groupBoxCompleteCosts->textSalaryWithoutTaxes->text(), groupBoxCompleteCosts->textMonthsForCalculation->text(), groupBoxCompleteCosts->textRiskPremium->text(), affectedRows.value(0), selectedRowsForEditing);
00432
00433
00434 groupBoxCompleteCosts->textSalaryWithoutTaxes->setText("");
00435 groupBoxCompleteCosts->textMonthsForCalculation->setText("");
00436 groupBoxCompleteCosts->textRiskPremium->setText("");
00437
00438 break;
00439 }
00440 case CostTypeActions::CompleteCostsInterests:
00441 {
00442 if(comboBoxActions->currentIndex() == CostTypeActions::CompleteCostsInterests)
00443 {
00444 switch(groupBoxCompleteCosts->comboBoxInterestType->currentIndex())
00445 {
00446 case InterestTypes::OnIncomeStatement:
00447 {
00448 window->model()->incidentialInterest(positionName(), type, groupBoxCompleteCosts->textIncomeStatement->text(), affectedRows.value(0), selectedRowsForEditing);
00449
00450
00451 groupBoxCompleteCosts->textIncomeStatement->setText("");
00452
00453 break;
00454 }
00455 case InterestTypes::OnOwnBoundCapital:
00456 {
00457 window->model()->interestOnOwnBoundCapital(positionName(), type, groupBoxCompleteCosts->textIncomeStatement->text(), groupBoxCompleteCosts->textInterestOnBorrowedCapital->text(), groupBoxCompleteCosts->textOwnCapital->text(), groupBoxCompleteCosts->textInterestRate->text(), affectedRows.value(0), selectedRowsForEditing);
00458
00459
00460 groupBoxCompleteCosts->textIncomeStatement->setText("");
00461 groupBoxCompleteCosts->textInterestOnBorrowedCapital->setText("");
00462 groupBoxCompleteCosts->textOwnCapital->setText("");
00463 groupBoxCompleteCosts->textInterestRate->setText("");
00464
00465 break;
00466 }
00467 case InterestTypes::OnOperatingAssets:
00468 {
00469 window->model()->interestOnOperatingAssets(positionName(), type, groupBoxCompleteCosts->textIncomeStatement->text(), groupBoxCompleteCosts->textInterestRateOwnBoundCapital->text(), groupBoxCompleteCosts->textOperatingAssets->text(), affectedRows.value(0), selectedRowsForEditing);
00470
00471
00472 groupBoxCompleteCosts->textIncomeStatement->setText("");
00473 groupBoxCompleteCosts->textInterestRateOwnBoundCapital->setText("");
00474 groupBoxCompleteCosts->textOperatingAssets->setText("");
00475 break;
00476 }
00477 }
00478 }
00479 break;
00480 }
00481 case CostTypeActions::Wages:
00482 {
00483 window->model()->wages(row.value(0), type, groupBoxWages->textWages->text(), groupBoxWages->textSpecialPayment->text(), groupBoxWages->textLegalTaxes->text(), groupBoxWages->textPaymentByResult->text(), groupBoxWages->textDirectCostPart->text(), groupBoxWages->textNonWageLaborCosts->text(), affectedRows.value(0), selectedRowsForEditing);
00484
00485
00486 groupBoxWages->textWages->setText("");
00487 groupBoxWages->textSpecialPayment->setText("");
00488 groupBoxWages->textLegalTaxes->setText("");
00489 groupBoxWages->textPaymentByResult->setText("");
00490 groupBoxWages->textDirectCostPart->setText("");
00491 groupBoxWages->textNonWageLaborCosts->setText("");
00492 break;
00493 }
00494 default:
00495 {
00496 break;
00497 }
00498 }
00499 }
00500 }
00501 else
00502 {
00503 QMessageBox::warning(this, tr("Fehler"), tr("Es trat ein Fehler auf! Möglicherweise haben Sie keine Zeilen selektiert!"));
00504 }
00505
00506
00507 mdiArea->setEnabled(true);
00508 groupBoxAddPosition->setEnabled(true);
00509 groupBoxSetRevenues->setEnabled(true);
00510 buttonAddEditPositionTable->setText("Position zu BÜB hinzufügen");
00511 sideBarIsReservedForEditingOfExistingRows = -1;
00512
00513
00514 window->deleteAction->setEnabled(true);
00515 window->editAction->setEnabled(true);
00516
00517 qDebug()<<"TODO: after editing: clean up all lineedits, ... used";
00518 }
00519 }
00520 }
00521 }
00522
00523 void CostTypeTab::getAllRowsAffected(CostTypeChild *window, QList<int> *affectedRows, int rowid)
00524 {
00525 QList<QStringList> entries = window->model()->getList();
00526
00527 for(int i = 0; i < entries.count(); i++)
00528 {
00529 QStringList row = entries.value(i);
00530 if(row.value(CostTypeColumns::RowID).toInt() == rowid)
00531 {
00532 if(!affectedRows->contains(rowid))
00533 {
00534 affectedRows->append(rowid);
00535 }
00536
00537 if(row.value(CostTypeColumns::AssociationID) == "-1" || affectedRows->contains(row.value(CostTypeColumns::AssociationID).toInt()))
00538 {
00539
00540
00541
00542 QList<int> rows;
00543 for(int row = 0; row < affectedRows->count(); row++)
00544 {
00545 int row = affectedRows->value(row);
00546 if(!rows.contains(row))
00547 {
00548 rows << row;
00549 }
00550 }
00551 affectedRows = &rows;
00552
00553 return;
00554 }
00555 else
00556 {
00557
00558 getAllRowsAffected(window, affectedRows, row.value(CostTypeColumns::AssociationID).toInt());
00559 i = 0;
00560 }
00561 }
00562 }
00563 }
00564
00565 QDomElement CostTypeTab::userCategories() const
00566 {
00567 return costpositionmodel->dataNode();
00568 }
00569
00570 void CostTypeTab::loadUserCategories(const QDomElement file)
00571 {
00572 qDebug()<<"TODO: costtypetab -- implement setting user categories";
00573 QDomNode sections = file.firstChild();
00574 while(!sections.isNull())
00575 {
00576 QDomElement section = sections.toElement();
00577 costpositionmodel->addCategory(section.toElement().attribute("sectionId").toUInt(), section.toElement().attribute("name"), (section.toElement().attribute("editable")=="true"?true:false));
00578 if(section.tagName() == "section")
00579 {
00580 QDomNode positions = section.firstChild();
00581 while(!positions.isNull())
00582 {
00583 QDomElement position = positions.toElement();
00584 qDebug()<<"position.tagName(): " << position.tagName();
00585 if(position.tagName() == "position")
00586 {
00587 qDebug()<<"Editable: " << position.attribute("editable", "true");
00588 qDebug()<<"Action: " << position.attribute("action", "0");
00589 qDebug()<<"Costtype: " << position.attribute("costtype", "0");
00590 qDebug()<<"positionname: " << position.attribute("positionName", "");
00591 qDebug()<<"lang: " << position.attribute("lang", "de");
00592 costpositionmodel->addCostPosition(position.toElement().attribute("positionName"), position.toElement().attribute("lang"), position.toElement().attribute("action").toInt(),position.toElement().attribute("costtype").toInt(), section.toElement().attribute("name"), (position.toElement().attribute("editable")=="true"?true:false));
00593 }
00594 positions = positions.nextSibling();
00595 }
00596 }
00597 sections = sections.nextSibling();
00598 }
00599 }
00600
00601 QModelIndex CostTypeTab::getIndexOfPosition(QString name)
00602 {
00603 QModelIndex category = treeViewCostPositions->model()->index(0, 0, QModelIndex());
00604
00605 int i = 0;
00606 while(category.isValid())
00607 {
00608 int j = 0;
00609 QModelIndex item = category.child(j, 0);
00610 while(item.isValid())
00611 {
00612 if(item.data(Qt::DisplayRole).toString() == name)
00613 {
00614 return item;
00615 }
00616 j++;
00617 item = category.child(j, 0);
00618 }
00619 i++;
00620 category = treeViewCostPositions->model()->index(i,0, QModelIndex());
00621 }
00622 return QModelIndex();
00623 }
00624
00625 void CostTypeTab::addPositionToTable()
00626 {
00627 if(QMdiSubWindow *activeSubWindow = mdiArea->activeSubWindow())
00628 {
00629 if(qobject_cast<ChildWindow*>(activeSubWindow->widget())->type() == WindowType::CostType)
00630 {
00631 CostTypeChild *window = qobject_cast<CostTypeChild*>(activeSubWindow->widget());
00632 if(window)
00633 {
00634 int type = CostTypes::DirectCosts;
00635 if(radioFixedCosts->isChecked())
00636 {
00637 type = CostTypes::FixedCosts;
00638 }
00639
00640 if(comboBoxActions->currentIndex() == CostTypeActions::Reassess)
00641 {
00642 if(groupBoxReassess->radioValueBased->isChecked())
00643 {
00644 window->reassessValueBased(positionName(), type, groupBoxReassess->textIncomeStatement->text(), groupBoxReassess->textReplacementValue->text(), groupBoxReassess->textDecliningBalance->text(), groupBoxReassess->textUsefulLife->text());
00645
00646 groupBoxReassess->textReplacementValue->setText("");
00647 }
00648 else
00649 {
00650 window->reassessIndexBased(positionName(), type, groupBoxReassess->textIncomeStatement->text(), groupBoxReassess->textDecliningBalance->text(), groupBoxReassess->textUsefulLife->text(), groupBoxReassess->textPurchasePrice->text(), groupBoxReassess->textPurchaseIndex->text(), groupBoxReassess->textCurrentIndex->text());
00651
00652 groupBoxReassess->textPurchasePrice->setText("");
00653 groupBoxReassess->textPurchaseIndex->setText("");
00654 groupBoxReassess->textCurrentIndex->setText("");
00655 }
00656
00657 groupBoxReassess->textUsefulLife->setText("");
00658 groupBoxReassess->textDecliningBalance->setText("");
00659 groupBoxReassess->textIncomeStatement->setText("");
00660 }
00661 else if(comboBoxActions->currentIndex() == CostTypeActions::DelimitAmount)
00662 {
00663 window->delimitAmount(positionName(), type, groupBoxDelimitAmount->textIncomeStatement->text(), groupBoxDelimitAmount->textAmountToDelimit->text());
00664
00665 groupBoxDelimitAmount->textIncomeStatement->setText("");
00666 groupBoxDelimitAmount->textAmountToDelimit->setText("");
00667 }
00668 else if(comboBoxActions->currentIndex() == CostTypeActions::AcceptCosts)
00669 {
00670 qDebug()<<"Accept costs";
00671 window->acceptCosts(positionName(), type, groupBoxAcceptCosts->textIncomeStatement->text());
00672
00673 groupBoxAcceptCosts->textIncomeStatement->setText("");
00674 }
00675 else if(comboBoxActions->currentIndex() == CostTypeActions::Normalize)
00676 {
00677 window->normalize(positionName(), type, groupBoxNormalize->textAverageCosts->text(), groupBoxNormalize->textActualCosts->text());
00678
00679 groupBoxNormalize->textAverageCosts->setText("");
00680 groupBoxNormalize->textActualCosts->setText("");
00681 }
00682 else if(comboBoxActions->currentIndex() == CostTypeActions::Wages)
00683 {
00684 window->wages(positionName(), type, groupBoxWages->textWages->text(), groupBoxWages->textSpecialPayment->text(), groupBoxWages->textLegalTaxes->text(), groupBoxWages->textPaymentByResult->text(), groupBoxWages->textDirectCostPart->text(), groupBoxWages->textNonWageLaborCosts->text());
00685
00686 groupBoxWages->textDirectCostPart->setText("");
00687 groupBoxWages->textLegalTaxes->setText("");
00688 groupBoxWages->textNonWageLaborCosts->setText("");
00689 groupBoxWages->textPaymentByResult->setText("");
00690 groupBoxWages->textSpecialPayment->setText("");
00691 groupBoxWages->textWages->setText("");
00692 }
00693 else if(comboBoxActions->currentIndex() == CostTypeActions::CompleteCostsEmployerSalary)
00694 {
00695 window->completeCosts(positionName(), type, groupBoxCompleteCosts->textSalaryWithoutTaxes->text(), groupBoxCompleteCosts->textMonthsForCalculation->text(), groupBoxCompleteCosts->textRiskPremium->text());
00696
00697 groupBoxCompleteCosts->textSalaryWithoutTaxes->setText("");
00698 groupBoxCompleteCosts->textMonthsForCalculation->setText("");
00699 groupBoxCompleteCosts->textRiskPremium->setText("");
00700 }
00701 else if(comboBoxActions->currentIndex() == CostTypeActions::CompleteCostsInterests)
00702 {
00703 switch(groupBoxCompleteCosts->comboBoxInterestType->currentIndex())
00704 {
00705 case InterestTypes::OnIncomeStatement:
00706 {
00707 window->incidentialInterest(positionName(), type, groupBoxCompleteCosts->textIncomeStatement->text());
00708 groupBoxCompleteCosts->textIncomeStatement->setText("");
00709 break;
00710 }
00711 case InterestTypes::OnOwnBoundCapital:
00712 {
00713 window->interestOnOwnBoundCapital(positionName(), type, groupBoxCompleteCosts->textIncomeStatement->text(), groupBoxCompleteCosts->textInterestOnBorrowedCapital->text(), groupBoxCompleteCosts->textOwnCapital->text(), groupBoxCompleteCosts->textInterestRate->text());
00714 groupBoxCompleteCosts->textIncomeStatement->setText("");
00715 groupBoxCompleteCosts->textInterestOnBorrowedCapital->setText("");
00716 groupBoxCompleteCosts->textOwnCapital->setText("");
00717 groupBoxCompleteCosts->textInterestRate->setText("");
00718 break;
00719 }
00720 case InterestTypes::OnOperatingAssets:
00721 {
00722 window->interestOnOperatingAssets(positionName(), type, groupBoxCompleteCosts->textIncomeStatement->text(), groupBoxCompleteCosts->textInterestRateOwnBoundCapital->text(), groupBoxCompleteCosts->textOperatingAssets->text());
00723 groupBoxCompleteCosts->textIncomeStatement->setText("");
00724 groupBoxCompleteCosts->textInterestRateOwnBoundCapital->setText("");
00725 groupBoxCompleteCosts->textOperatingAssets->setText("");
00726 break;
00727 }
00728 }
00729 }
00730 window->tableViewWidget()->resizeColumnToContents(0);
00731
00732 sideBarIsReservedForEditingOfExistingRows = -1;
00733 }
00734 }
00735 }
00736 }
00737
00738 void CostTypeTab::setRevenues()
00739 {
00740 bool ok;
00741 textRevenues->text().toDouble(&ok);
00742 if(!ok)
00743 {
00744 QMessageBox::warning(NULL, tr("Fehler"), tr("Die Eingabe beinhaltet ungültige Zeichen!"));
00745 }
00746 else
00747 {
00748 double erloese = textRevenues->text().toDouble();
00749 if(erloese >= 0)
00750 {
00751 if(QMdiSubWindow *activeSubWindow = mdiArea->activeSubWindow())
00752 {
00753 if(qobject_cast<ChildWindow*>(activeSubWindow->widget())->type() == WindowType::CostType)
00754 {
00755 CostTypeChild *child = (qobject_cast<CostTypeChild*>(activeSubWindow->widget()));
00756 child->setRevenues(erloese);
00757
00758
00759 child->tableViewWidget()->viewport()->update();
00760 }
00761 }
00762 }
00763 else
00764 {
00765 QMessageBox::warning(NULL, tr("Fehler"), tr("Die Erlöse können nicht negativ sein!"));
00766 return;
00767 }
00768 }
00769 }
00770
00771 void CostTypeTab::showNewPositionDialog()
00772 {
00773 EditPositionsDialog *dialog = new EditPositionsDialog(costpositionmodel, "", "", true, this);
00774 dialog->changeForEdit(false);
00775 dialog->show();
00776 }
00777
00778 void CostTypeTab::showManagePositionsDialog()
00779 {
00780 ManagePositionsDialog *dialog = new ManagePositionsDialog(costpositionmodel, this);
00781 dialog->show();
00782 }
00783
00784 QStringList CostTypeTab::splitUpInputString(QString input)
00785 {
00786 QStringList temp;
00787 temp = input.trimmed().split("::", QString::SkipEmptyParts);
00788 return temp;
00789 }
00790
00791 void CostTypeTab::categoryChanged(QModelIndex i)
00792 {
00793 QVariant dat = costpositionmodel->data(i, 32);
00794 qDebug()<<"categoryChanged";
00795 QVariantList itemInfo = dat.value<QVariantList>();
00796
00797 if(!itemInfo.value(1).isNull())
00798 {
00799 qDebug()<<"beginn";
00800 QVariantMap infos = itemInfo.value(1).value<QVariantMap>();
00801 qDebug()<<"end";
00802 if(infos.value("action") != QVariant())
00803 {
00804 qDebug()<<"Category changed -- Position -- Action: " + QString::number(infos.value("action").toInt());
00805 comboBoxActions->setCurrentIndex(infos.value("action").toInt());
00806 actionChanged(infos.value("action").toInt());
00807
00808 if(infos.value("costtype").toInt() == 0)
00809 {
00810 radioDirectCosts->setChecked(true);
00811 }
00812 else
00813 {
00814 radioFixedCosts->setChecked(true);
00815 }
00816 }
00817 else
00818 {
00819 qDebug()<<"Category changed -- Section";
00820 actionChanged(-1);
00821 }
00822 }
00823 else
00824 {
00825 actionChanged(-1);
00826 }
00827 }
00828
00829 void CostTypeTab::clearEntries(bool clearEntries)
00830 {
00831
00832 if(clearEntries)
00833 {
00834 costpositionmodel->clearPositions();
00835 }
00836
00837 radioDirectCosts->setChecked(true);
00838 }
00839
00840 void CostTypeTab::actionChanged(int uebergabe)
00841 {
00842 qDebug()<<"Action Changed -- Action: " + QString::number(uebergabe);
00843
00844 bool hideWidgets = true;
00845 if(uebergabe == -1)
00846 {
00847 hideWidgets = false;
00848 }
00849 radioDirectCosts->setVisible(hideWidgets);
00850 radioFixedCosts->setVisible(hideWidgets);
00851 comboBoxActions->setVisible(hideWidgets);
00852 labelAction->setVisible(hideWidgets);
00853 buttonAddEditPositionTable->setVisible(hideWidgets);
00854 seperatorLine->setVisible(hideWidgets);
00855
00856 groupBoxAcceptCosts->hide();
00857 groupBoxCompleteCosts->hide();
00858 groupBoxDelimitAmount->hide();
00859 groupBoxNormalize->hide();
00860 groupBoxReassess->hide();
00861 groupBoxWages->hide();
00862
00863 if(uebergabe == CostTypeActions::DelimitAmount)
00864 {
00865 groupBoxDelimitAmount->show();
00866 }
00867 else if(uebergabe == CostTypeActions::AcceptCosts)
00868 {
00869 groupBoxAcceptCosts->show();
00870 }
00871 else if(uebergabe == CostTypeActions::Reassess)
00872 {
00873 groupBoxReassess->show();
00874 }
00875 else if(uebergabe == CostTypeActions::Normalize)
00876 {
00877 groupBoxNormalize->show();
00878 }
00879 else if(uebergabe == CostTypeActions::CompleteCostsInterests)
00880 {
00881 groupBoxCompleteCosts->show();
00882 groupBoxCompleteCosts->groupBoxEmployersSalary->hide();
00883 groupBoxCompleteCosts->groupBoxImputedInterest->show();
00884 }
00885 else if(uebergabe == CostTypeActions::CompleteCostsEmployerSalary)
00886 {
00887 groupBoxCompleteCosts->show();
00888 groupBoxCompleteCosts->groupBoxImputedInterest->hide();
00889 groupBoxCompleteCosts->groupBoxEmployersSalary->show();
00890 }
00891 else if(uebergabe == CostTypeActions::Wages)
00892 {
00893 groupBoxWages->show();
00894 }
00895 }
00896
00897 void CostTypeTab::wrongPermissionsCostTypePositions()
00898 {
00899 QMessageBox::warning(this, "Fehler beim Laden der Positionen", "Es trat ein Fehler beim Laden der Positionen zur Kostenartenrechnung auf!\r\n\r\nDatei: data/allevo-costpositions.copo\r\n\r\nBitte überprüfen Sie ob die Datei vorhanden und lesbar ist!");
00900 }
00901
00902 WidgetAcceptCosts::WidgetAcceptCosts(QGroupBox *parent) : QGroupBox(parent)
00903 {
00904 setupUi(this);
00905 }
00906
00907 WidgetCompleteCosts::WidgetCompleteCosts(QGroupBox *parent) : QGroupBox(parent)
00908 {
00909 setupUi(this);
00910 createActions();
00911 interestTypeChanged(-1);
00912 }
00913
00914 void WidgetCompleteCosts::createActions()
00915 {
00916 connect(buttonCalculateOwnCapital, SIGNAL(clicked()), this, SIGNAL(showOwnCapitalCalculationDialog()));
00917 connect(comboBoxInterestType, SIGNAL(currentIndexChanged(int)), this, SLOT(interestTypeChanged(int)));
00918 }
00919
00920 void WidgetCompleteCosts::interestTypeChanged(int type)
00921 {
00922 groupBoxInterestOnOwnBoundCapital->hide();
00923 groupBoxInterestOnOperatingAssets->hide();
00924
00925 switch(type)
00926 {
00927 case InterestTypes::OnIncomeStatement:
00928 break;
00929 case InterestTypes::OnOwnBoundCapital:
00930 groupBoxInterestOnOwnBoundCapital->show();
00931 break;
00932 case InterestTypes::OnOperatingAssets:
00933 groupBoxInterestOnOperatingAssets->show();
00934 break;
00935 default:
00936 break;
00937 }
00938 }
00939
00940 WidgetDelimitAmount::WidgetDelimitAmount(QGroupBox *parent) : QGroupBox(parent)
00941 {
00942 setupUi(this);
00943 }
00944
00945 WidgetNormalize::WidgetNormalize(QGroupBox *parent) : QGroupBox(parent)
00946 {
00947 setupUi(this);
00948 }
00949
00950 WidgetReassess::WidgetReassess(QGroupBox *parent) : QGroupBox(parent)
00951 {
00952 setupUi(this);
00953 createActions();
00954 }
00955
00956 void WidgetReassess::createActions()
00957 {
00958 connect(radioValueBased, SIGNAL(toggled(bool)), this, SLOT(valueRadioChanged(bool)));
00959 connect(radioIndexBased, SIGNAL(toggled(bool)), this, SLOT(indexRadioChanged(bool)));
00960 }
00961
00962 void WidgetReassess::valueRadioChanged(bool s)
00963 {
00964 Q_UNUSED(s);
00965 radioIndexBased->setChecked(false);
00966 groupBoxValueBased->setEnabled(true);
00967 groupBoxIndexBased->setEnabled(false);
00968 }
00969
00970 void WidgetReassess::indexRadioChanged(bool s)
00971 {
00972 Q_UNUSED(s);
00973 radioValueBased->setChecked(false);
00974 groupBoxValueBased->setEnabled(false);
00975 groupBoxIndexBased->setEnabled(true);
00976 }
00977
00978 WidgetWages::WidgetWages(QGroupBox *parent) : QGroupBox(parent)
00979 {
00980 setupUi(this);
00981 }