00001 #include "editpositionsdialog.h"
00002 #include "../Data/datadefinitions.h"
00003 #include "../Mainwindow/costtypetab.h"
00004
00005 EditPositionsDialog::EditPositionsDialog(CostPositionModel *model, QString oldPos, QString oldCat, bool enablePosition, QWidget *parent) : QDialog(parent)
00006 {
00007 setupUi(this);
00008 setAttribute(Qt::WA_DeleteOnClose, true);
00009
00010
00011
00012
00013
00014 costpositionmodel = model;
00015 editPosition = enablePosition;
00016
00017 oldPositionName = oldPos;
00018 oldCategoryName = oldCat;
00019
00020 oldActionId = comboBoxActions->currentIndex();
00021 oldcosttype = (radioButtonDirectCosts->isChecked()?0:1);
00022 textName->setText(oldPositionName);
00023 textName->setEnabled(enablePosition);
00024 comboBoxActions->setEnabled(enablePosition);
00025 radioButtonDirectCosts->setEnabled(enablePosition);
00026 radioButtonFixedCosts->setEnabled(enablePosition);
00027
00028 connect(buttonBox, SIGNAL(accepted()), this, SLOT(ok()));
00029 connect(buttonBox, SIGNAL(rejected()), this, SLOT(cancel()));
00030
00031
00032 CostPositionItem* root = costpositionmodel->getRootItem();
00033 for(int i=0; i!=root->childCount(); i++)
00034 {
00035 CostPositionItem *child = root->child(i);
00036 comboBoxCategory->addItem(child->data(0).toString());
00037 }
00038 comboBoxCategory->setCurrentIndex(comboBoxCategory->findText(oldCategoryName));
00039 }
00040
00041 void EditPositionsDialog::setOld()
00042 {
00043
00044 textName->setText(oldPositionName);
00045 comboBoxActions->setCurrentIndex(oldActionId);
00046 comboBoxCategory->setCurrentIndex(comboBoxCategory->findText(oldCategoryName));
00047 if(oldcosttype == 0)
00048 {
00049 radioButtonDirectCosts->setChecked(true);
00050 radioButtonFixedCosts->setChecked(false);
00051 }
00052 else
00053 {
00054 radioButtonDirectCosts->setChecked(false);
00055 radioButtonFixedCosts->setChecked(true);
00056 }
00057 }
00058
00059 void EditPositionsDialog::ok()
00060 {
00061 if(!forEdit)
00062 {
00063 if(textName->text() != "")
00064 {
00065 if(comboBoxCategory->currentText() != "")
00066 {
00067 if(!positionNameExists(textName->text(), comboBoxCategory->currentText()))
00068 {
00069 QString positionName = textName->text();
00070 QString action = comboBoxActions->itemText(comboBoxActions->currentIndex());
00071 QString category = comboBoxCategory->currentText();
00072 QString direct = (radioButtonDirectCosts->isChecked()?"0":"1");
00073 addPosition(positionName, action, category, direct, true);
00074 done(0);
00075 }
00076 else
00077 {
00078 QMessageBox::information(this, tr("Fehler"), tr("Geben Sie bitte eine Position ein die noch nicht existiert"));
00079 }
00080 }
00081 else
00082 {
00083 QMessageBox::information(this, tr("Fehler"), tr("Sie müssen eine Kategorie eingeben oder auswählen"));
00084 }
00085 }
00086 else
00087 {
00088 QMessageBox::information(this, tr("Fehler"), tr("Geben Sie bitte einen Positionsnamen ein"));
00089 }
00090 }
00091 else
00092 {
00093 if(editPosition)
00094 {
00095 QMap<QString, QVariant> *changes = new QMap<QString, QVariant>();
00096 changes->insert("oldPositionName", oldPositionName);
00097 changes->insert("oldCategoryName", oldCategoryName);
00098 changes->insert("oldActionId", oldActionId);
00099 changes->insert("oldCosttype", oldcosttype);
00100 changes->insert("newPositionName" , textName->text());
00101 changes->insert("newCategoryName", comboBoxCategory->currentText());
00102 changes->insert("newActionId", comboBoxActions->currentIndex());
00103 changes->insert("newCosttype", (radioButtonDirectCosts->isChecked()?0:1));
00104
00105 costpositionmodel->editPosition(changes);
00106 done(0);
00107 }
00108 else
00109 {
00110 if(!(comboBoxCategory->currentText().isEmpty()))
00111 {
00112 if(!costpositionmodel->existsCategory(comboBoxCategory->currentText()))
00113 {
00114 costpositionmodel->editCategory(oldCategoryName, comboBoxCategory->currentText());
00115 done(0);
00116 }
00117 else
00118 {
00119 QMessageBox::information(this, tr("Fehler"), tr("Bitte geben Sie eine Kategorie ein die noch nicht exisitert"));
00120 }
00121 }
00122 else
00123 {
00124 QMessageBox::information(this, tr("Fehler"), tr("Bitte geben Sie eine Kategorie ein!"));
00125 }
00126 }
00127 }
00128 }
00129
00130 bool EditPositionsDialog::positionNameExists(QString pos, QString cat)
00131 {
00132 CostPositionItem* root = costpositionmodel->getRootItem();
00133 for(int i=0; i!=root->childCount(); i++)
00134 {
00135 CostPositionItem *child = root->child(i);
00136 for(int j=0; j!=child->childCount(); j++)
00137 {
00138 CostPositionItem *c = child->child(j);
00139
00140 if(c->data(0).toString() == pos && child->data(0).toString() == cat)
00141 {
00142 return true;
00143 }
00144 }
00145 }
00146 return false;
00147 }
00148
00149 bool EditPositionsDialog::isEditable(QString p, QString c)
00150 {
00151 if(costpositionmodel->isCategoryEditable(costpositionmodel->getSectionId(c)) && costpositionmodel->isPositionEditable(p, costpositionmodel->getSectionId(c)))
00152 return true;
00153 else
00154 return false;
00155 }
00156
00157 void EditPositionsDialog::addPosition(QString positionName, QString action, QString category, QString costtype, bool editable)
00158 {
00159 int aid = 0;
00160 QVariantList list;
00161 QMap<QString, QVariant> data;
00162
00163 list<<positionName;
00164
00165 CostTypeActions *types = new CostTypeActions();
00166 if(action == types->action(CostTypeActions::DelimitAmount))
00167 {
00168 aid = (int)CostTypeActions::DelimitAmount;
00169 }
00170 else if(action == types->action(CostTypeActions::AcceptCosts))
00171 {
00172 aid = (int)CostTypeActions::AcceptCosts;
00173 }
00174 else if(action == types->action(CostTypeActions::Reassess))
00175 {
00176 aid = (int)CostTypeActions::Reassess;
00177 }
00178 else if(action == types->action(CostTypeActions::Normalize))
00179 {
00180 aid = (int)CostTypeActions::Normalize;
00181 }
00182 else if(action == types->action(CostTypeActions::CompleteCostsInterests))
00183 {
00184 aid = (int)CostTypeActions::CompleteCostsInterests;
00185 }
00186 else if(action == types->action(CostTypeActions::CompleteCostsEmployerSalary))
00187 {
00188 aid = (int)CostTypeActions::CompleteCostsEmployerSalary;
00189 }
00190 else if(action == types->action(CostTypeActions::Wages))
00191 {
00192 aid = (int)CostTypeActions::Wages;
00193 }
00194
00195 costpositionmodel->addCostPosition(positionName, QVariant("de").toString(), aid, costtype.toInt(), category, true);
00196 }
00197
00198 void EditPositionsDialog::cancel()
00199 {
00200 done(1);
00201 }