00001 #include "openingstockwidget.h"
00002
00003 OpeningStockWidget::OpeningStockWidget(QWidget *parent) : QWidget(parent)
00004 {
00005 p_openingStocks = new QList<AccountingInformation>();
00006 }
00007
00008 void OpeningStockWidget::createOpeningStockRow(DataAccount *account)
00009 {
00010 AComboBox *box;
00011 ALineEdit *debit;
00012 ALineEdit *credit;
00013
00014 if(account)
00015 {
00016 QString value = p_model->getFullNameByNumber(account->accountNumber());
00017
00018 box = new AComboBox("Konto", p_model, value , this);
00019 connect(box, SIGNAL(currentIndexChanged(int)), this, SLOT(addNewRow(int)));
00020 box->setEditable(true);
00021
00022 debit = new ALineEdit("Soll", QString::number(account->openingStockDebit()), this);
00023 connect(debit, SIGNAL(editingFinished()), this, SLOT(checkAmounts()));
00024 connect(debit, SIGNAL(editingFinished()), this, SLOT(saveIntoExercise()));
00025
00026 credit = new ALineEdit("Haben",QString::number(account->openingStockCredit()), this);
00027 connect(credit, SIGNAL(editingFinished()), this, SLOT(checkAmounts()));
00028 connect(credit, SIGNAL(editingFinished()), this, SLOT(saveIntoExercise()));
00029 }
00030 else
00031 {
00032 box = new AComboBox("Konto", p_model, this);
00033 connect(box, SIGNAL(currentIndexChanged(int)), this, SLOT(addNewRow(int)));
00034 box->setEditable(true);
00035
00036 debit = new ALineEdit("Soll", this);
00037 connect(debit, SIGNAL(editingFinished()), this, SLOT(checkAmounts()));
00038 connect(debit, SIGNAL(editingFinished()), this, SLOT(saveIntoExercise()));
00039 debit->setEnabled(false);
00040
00041 credit = new ALineEdit("Haben", this);
00042 connect(credit, SIGNAL(editingFinished()), this, SLOT(checkAmounts()));
00043 connect(credit, SIGNAL(editingFinished()), this, SLOT(saveIntoExercise()));
00044 credit->setEnabled(false);
00045 }
00046
00047 AccountingInformation info;
00048 info.insert("account", box);
00049 info.insert("debit", debit);
00050 info.insert("credit", credit);
00051
00052 p_openingStocks->append(info);
00053
00054 QHBoxLayout *layout = new QHBoxLayout();
00055 layout->addSpacerItem(new QSpacerItem(10, 0, QSizePolicy::Fixed, QSizePolicy::Fixed));
00056 layout->addWidget(box);
00057 layout->addWidget(debit);
00058 layout->addWidget(credit);
00059 layout->addSpacerItem(new QSpacerItem(80, 0, QSizePolicy::Expanding, QSizePolicy::Expanding));
00060 p_layout->addLayout(layout);
00061 }
00062
00063 void OpeningStockWidget::createDateRow()
00064 {
00065 p_date = new ALineEdit("Datum", "31.12.2009", this);
00066 QHBoxLayout *layout = new QHBoxLayout();
00067 layout->addSpacerItem(new QSpacerItem(10, 0, QSizePolicy::Fixed, QSizePolicy::Fixed));
00068 layout->addWidget(new QLabel("Eröffnungsdatum: "));
00069 layout->addWidget(p_date);
00070 layout->addSpacerItem(new QSpacerItem(0, 0, QSizePolicy::Expanding, QSizePolicy::Expanding));
00071 p_layout->addLayout(layout);
00072 }
00073
00074 void OpeningStockWidget::createWidget(DataExercise *exercise, AccountModel *model)
00075 {
00076 if(layout())
00077 {
00078 deleteWidget();
00079 delete layout();
00080 }
00081 p_exercise = exercise;
00082 p_model = model;
00083 p_openingStocks->clear();
00084
00085 p_layout = new QVBoxLayout();
00086
00087 createDateRow();
00088 if(p_exercise->accounts()->size() > 0)
00089 {
00090 for(int i = 0; i < p_exercise->accounts()->size(); i++)
00091 {
00092 createOpeningStockRow(p_exercise->accounts()->value(i));
00093 }
00094 }
00095
00096 createOpeningStockRow();
00097 this->setLayout(p_layout);
00098
00099 }
00100
00101 void OpeningStockWidget::checkAmounts()
00102 {
00103 QRegExp check;
00104 QRegExp check2;
00105 check.setPattern("^[0-9]*,[0-9]{1,2}$");
00106 check2.setPattern("^[0-9]*$");
00107
00108 for(int i = 0; i < p_openingStocks->size()-1; i++)
00109 {
00110 ALineEdit *lineDebit = qobject_cast<ALineEdit*>(p_openingStocks->value(i).value("debit"));
00111 ALineEdit *lineCredit = qobject_cast<ALineEdit*>(p_openingStocks->value(i).value("credit"));
00112 AComboBox *comboAccount = qobject_cast<AComboBox*>(p_openingStocks->value(i).value("account"));
00113
00114 double debit = lineDebit->text().toDouble();
00115 double credit = lineCredit->text().toDouble();
00116
00117 if(debit != 0 && credit > 0 || debit > 0 && credit != 0)
00118 {
00119
00120
00121 QString message = "Das Konto """;
00122 message += qobject_cast<AComboBox*>(p_openingStocks->value(i).value("account"))->currentText();
00123 message += """ hat einen Anfangsbestand im Soll und im Haben";
00124
00125 lineDebit->setText("");
00126 lineCredit->setText("");
00127
00128 emit printErrorMessage(message);
00129 }
00130 else
00131 {
00132
00133
00134 if(check.exactMatch(lineDebit->text()) || check2.exactMatch(lineDebit->text()) || lineDebit->text() == "Soll")
00135 {
00136
00137 }
00138 else
00139 {
00140 QString message = "Der Soll-Anfangsbestand beim Konto """;
00141 message += comboAccount->currentText();
00142 message += """ ist ungültig";
00143
00144 lineDebit->setText("");
00145
00146 emit printErrorMessage(message);
00147 }
00148
00149 if(check.exactMatch(lineCredit->text()) || check2.exactMatch(lineCredit->text()) || lineCredit->text() == "Haben")
00150 {
00151
00152 }
00153 else
00154 {
00155 QString message = "Der Haben-Anfangsbestand beim Konto """;
00156 message += comboAccount->currentText();
00157 message += """ ist ungültig";
00158
00159 lineCredit->setText("");
00160
00161 emit printErrorMessage(message);
00162 }
00163 }
00164 }
00165 }
00166
00167 void OpeningStockWidget::addNewRow(int index)
00168 {
00169
00170 int comboBoxNr = 0;
00171 int howOftenFound = 0;
00172 int lastFalseAccountNr = 0;
00173
00174
00175
00176
00177
00178
00179
00180 if(index == 0)
00181 {
00182
00183 for(int i = 0; i < p_openingStocks->size(); i++)
00184 {
00185 if(qobject_cast<AComboBox*>(p_openingStocks->value(i).value("account"))->currentIndex() == index)
00186 {
00187 comboBoxNr = i;
00188 i = p_openingStocks->size();
00189 }
00190 }
00191 if(comboBoxNr+1 < p_openingStocks->size())
00192 {
00193 QLayoutItem *item = p_layout->takeAt(comboBoxNr+1);
00194
00195 qobject_cast<AComboBox*>(p_openingStocks->value(comboBoxNr).value("account"))->deleteLater();
00196 delete qobject_cast<ALineEdit*>(p_openingStocks->value(comboBoxNr).value("debit"));
00197 delete qobject_cast<ALineEdit*>(p_openingStocks->value(comboBoxNr).value("credit"));
00198
00199 p_layout->removeItem(item);
00200 delete item;
00201 p_openingStocks->removeAt(comboBoxNr);
00202 }
00203 }
00204 else
00205 {
00206
00207 for(int i = 0; i < p_openingStocks->size(); i++)
00208 {
00209 if(qobject_cast<AComboBox*>(p_openingStocks->value(i).value("account"))->currentIndex() == index)
00210 {
00211 howOftenFound++;
00212 lastFalseAccountNr = i;
00213 }
00214 }
00215
00216
00217 if(howOftenFound < 2)
00218 {
00219
00220 for(int i = 0; i < p_openingStocks->size(); i++)
00221 {
00222 if(qobject_cast<AComboBox*>(p_openingStocks->value(i).value("account"))->currentIndex() == index)
00223 {
00224 comboBoxNr = i;
00225 i = p_openingStocks->size();
00226 }
00227 }
00228
00229 if(comboBoxNr + 1 == p_openingStocks->size())
00230 {
00231
00232 qobject_cast<ALineEdit*>(p_openingStocks->value(comboBoxNr).value("debit"))->setEnabled(true);
00233 qobject_cast<ALineEdit*>(p_openingStocks->value(comboBoxNr).value("credit"))->setEnabled(true);
00234 createOpeningStockRow();
00235 }
00236
00237 }
00238 else
00239 {
00240
00241
00242 if(lastFalseAccountNr+1 == p_openingStocks->size())
00243 {
00244 QString message = "Das Konto """;
00245 message += qobject_cast<AComboBox*>(p_openingStocks->value(lastFalseAccountNr).value("account"))->currentText();
00246 message += """ gibt es schon";
00247
00248 emit printErrorMessage(message);
00249
00250 AComboBox *combo = qobject_cast<AComboBox*>(p_openingStocks->value(lastFalseAccountNr).value("account"));
00251 combo->setEditText("");
00252 }
00253 else
00254 {
00255 QString message = "Das Konto """;
00256 message += qobject_cast<AComboBox*>(p_openingStocks->value(lastFalseAccountNr).value("account"))->currentText();
00257 message += """ gibt es schon";
00258
00259 emit printErrorMessage(message);
00260
00261
00262 QLayoutItem *item = p_layout->takeAt(lastFalseAccountNr+1);
00263
00264 qobject_cast<AComboBox*>(p_openingStocks->value(lastFalseAccountNr).value("account"))->deleteLater();
00265 delete qobject_cast<ALineEdit*>(p_openingStocks->value(lastFalseAccountNr).value("debit"));
00266 delete qobject_cast<ALineEdit*>(p_openingStocks->value(lastFalseAccountNr).value("credit"));
00267
00268 p_layout->removeItem(item);
00269 delete item;
00270 p_openingStocks->removeAt(lastFalseAccountNr);
00271 }
00272 }
00273 }
00274 }
00275
00276 void OpeningStockWidget::saveIntoExercise()
00277 {
00278 if(p_exercise)
00279 {
00280 if(p_openingStocks->size() > 0)
00281 {
00282 QList<DataAccount*> *accounts = p_exercise->accounts();
00283 accounts->clear();
00284 for(int i = 0; i < p_openingStocks->size() - 1; i++)
00285 {
00286 DataAccount *account = new DataAccount();
00287
00288 QStringList accountParts = qobject_cast<AComboBox*>(p_openingStocks->value(i).value("account"))->currentText().split(" ");
00289 account->setAccountNumber(accountParts.value(0).toInt());
00290 QString name;
00291 for(int j = 1; j < accountParts.size()-1; j++)
00292 {
00293 name += accountParts.value(j) + " ";
00294 }
00295 name += accountParts.value(accountParts.size()-1);
00296
00297 account->setName(name);
00298 account->setOpeningDate(p_date->text());
00299
00300 if(qobject_cast<ALineEdit*>(p_openingStocks->value(i).value("debit"))->text() != "Soll")
00301 {
00302 account->setOpeningStockDebit(qobject_cast<ALineEdit*>(p_openingStocks->value(i).value("debit"))->text().toDouble());
00303 }
00304 else
00305 {
00306 account->setOpeningStockDebit(0.00);
00307 }
00308
00309 if(qobject_cast<ALineEdit*>(p_openingStocks->value(i).value("credit"))->text() != "Haben")
00310 {
00311 account->setOpeningStockCredit(qobject_cast<ALineEdit*>(p_openingStocks->value(i).value("credit"))->text().toDouble());
00312 }
00313 else
00314 {
00315 account->setOpeningStockCredit(0.00);
00316 }
00317
00318 accounts->append(account);
00319 }
00320 }
00321 }
00322 }
00323
00324 void OpeningStockWidget::makeConnect()
00325 {
00326 for(int i = 0; i < p_openingStocks->size(); i++)
00327 {
00328 ALineEdit *debit = qobject_cast<ALineEdit*>(p_openingStocks->value(i).value("debit"));
00329 disconnect(debit, SIGNAL(editingFinished()), 0, 0);
00330
00331 ALineEdit *credit = qobject_cast<ALineEdit*>(p_openingStocks->value(i).value("credit"));
00332 disconnect(credit, SIGNAL(editingFinished()), 0, 0);
00333
00334 connect(debit, SIGNAL(editingFinished()), this, SLOT(saveIntoExercise()));
00335 connect(credit, SIGNAL(editingFinished()), this, SLOT(saveIntoExercise()));
00336 }
00337 }
00338
00339 void OpeningStockWidget::deleteWidget()
00340 {
00341 QLayoutItem *item;
00342 while(item = layout()->takeAt(0))
00343 {
00344 if((item->widget()) != 0)
00345 {
00346 layout()->removeWidget(item->widget());
00347 delete item->widget();
00348 }
00349 else if((item->layout()) != 0)
00350 {
00351 QLayout *layout = item->layout();
00352 while(item = layout->takeAt(0))
00353 {
00354 if((item->widget()) != 0)
00355 {
00356 layout->removeWidget(item->widget());
00357 delete item->widget();
00358 }
00359 else if((item->spacerItem()) != 0)
00360 {
00361 layout->removeItem(item);
00362 delete item->spacerItem();
00363 }
00364 }
00365 delete layout;
00366 }
00367 delete item;
00368 }
00369 delete layout();
00370 }