summaryrefslogtreecommitdiff
path: root/noncore/apps/checkbook/qcheckentry.cpp
Side-by-side diff
Diffstat (limited to 'noncore/apps/checkbook/qcheckentry.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--noncore/apps/checkbook/qcheckentry.cpp256
1 files changed, 256 insertions, 0 deletions
diff --git a/noncore/apps/checkbook/qcheckentry.cpp b/noncore/apps/checkbook/qcheckentry.cpp
new file mode 100644
index 0000000..2e8da1c
--- a/dev/null
+++ b/noncore/apps/checkbook/qcheckentry.cpp
@@ -0,0 +1,256 @@
+#include "qcheckentry.h"
+
+QCheckEntry::QCheckEntry()
+ : QCheckEntryBase()
+{
+ connect(transAmount, SIGNAL(textChanged(const QString &)), this, SLOT(amountChanged(const QString &)));
+ connect(transFee, SIGNAL(textChanged(const QString &)), this, SLOT(transFeeChanged(const QString &)));
+ connect(payment, SIGNAL(clicked()), this, SLOT(paymentClicked()));
+ connect(deposit, SIGNAL(clicked()), this, SLOT(depositClicked()));
+
+ QString todaysdate = QString::number(QDate::currentDate().month());
+ todaysdate.append("/");
+ todaysdate.append(QString::number(QDate::currentDate().day()));
+ todaysdate.append("/");
+ todaysdate.append(QString::number(QDate::currentDate().year()));
+ dateEdit->setText(todaysdate);
+
+ descriptionCombo->setFocus();
+
+ dateEdit->setValidChars("0123456789./-");
+ dateEdit->setMaxLength(10);
+
+ descriptionCombo->lineEdit()->setMaxLength(30);
+
+ checkNumber->setValidChars("0123456789-");
+ checkNumber->setMaxLength(10);
+
+ transAmount->setValidChars("0123456789.");
+
+ transFee->setMaxLength(5);
+ transFee->setValidChars("0123456789.");
+ setTabOrder(transType,checkNumber);
+ setTabOrder(checkNumber,transAmount);
+ setTabOrder(transAmount,transFee);
+ setTabOrder(transFee,dateEdit);
+ setTabOrder(dateEdit, additionalNotes );
+}
+
+void QCheckEntry::paymentClicked()
+{
+ cmbCategory->clear();
+ cmbCategory->insertItem( tr( "Automobile" ) );
+ cmbCategory->insertItem( tr( "Bills" ) );
+ cmbCategory->insertItem( tr( "CDs" ) );
+ cmbCategory->insertItem( tr( "Clothing" ) );
+ cmbCategory->insertItem( tr( "Computer" ) );
+ cmbCategory->insertItem( tr( "DVDs" ) );
+ cmbCategory->insertItem( tr( "Eletronics" ) );
+ cmbCategory->insertItem( tr( "Entertainment" ) );
+ cmbCategory->insertItem( tr( "Food" ) );
+ cmbCategory->insertItem( tr( "Gasoline" ) );
+ cmbCategory->insertItem( tr( "Misc" ) );
+ cmbCategory->insertItem( tr( "Movies" ) );
+ cmbCategory->insertItem( tr( "Rent" ) );
+ cmbCategory->insertItem( tr( "Travel" ) );
+ cmbCategory->setCurrentItem( 0 );
+ transType->clear();
+ transType->insertItem( tr( "Debit Charge" ) );
+ transType->insertItem( tr( "Written Check" ) );
+ transType->insertItem( tr( "Transfer" ) );
+ transType->insertItem( tr( "Credit Card" ) );
+}
+
+void QCheckEntry::depositClicked()
+{
+ cmbCategory->clear();
+ cmbCategory->insertItem( tr( "Work" ) );
+ cmbCategory->insertItem( tr( "Family Member" ) );
+ cmbCategory->insertItem( tr( "Misc. Credit" ) );
+ cmbCategory->setCurrentItem( 0 );
+ transType->clear();
+ transType->insertItem( tr( "Written Check" ) );
+ transType->insertItem( tr( "Automatic Payment" ) );
+ transType->insertItem( tr( "Transfer" ) );
+ transType->insertItem( tr( "Cash" ) );
+}
+
+QStringList QCheckEntry::popupEntry(const QStringList &originaldata)
+{
+ QCheckEntry qce;
+
+ // This is how the list looks:
+ // 0: true or false, true == payment, false == deposit
+ // 1: description of the transaction
+ // 2: category name
+ // 3: transaction type (stores the integer value of the index of the combobox)
+ // 4: check number of the transaction (if any)
+ // 5: transaction amount
+ // 6: transaction fee (e.g. service charge, or ATM charge).
+ // 7: date of the transaction
+ // 8: additional notes
+ // 9: recently used descriptions
+ if (originaldata.count() > 1)
+ {
+ if (originaldata[0] == "true")
+ {
+ qce.payment->setChecked(true);
+ qce.paymentClicked();
+ } else {
+ if (originaldata[0] == "false")
+ {
+ qce.deposit->setChecked(true);
+ qce.depositClicked();
+ }
+ }
+ qce.descriptionCombo->lineEdit()->setText(originaldata[1]);
+ qce.cmbCategory->lineEdit()->setText(originaldata[2]);
+ qce.transType->setCurrentItem(originaldata[3].toInt());
+ qce.checkNumber->setText(originaldata[4]);
+ qce.transAmount->setText(originaldata[5]);
+ qce.transFee->setText(originaldata[6]);
+ qce.dateEdit->setText(originaldata[7]);
+ qce.additionalNotes->setText(originaldata[8]);
+ QStringList recentlist;
+ if (!originaldata[9].isEmpty())
+ {
+ recentlist = QStringList::split(',', originaldata[9], false);
+ }
+ if (!recentlist.isEmpty())
+ {
+ qce.descriptionCombo->insertStringList(recentlist);
+ }
+ } else {
+ QStringList recentlist;
+ if (!originaldata[0].isEmpty())
+ {
+ recentlist = QStringList::split(',', originaldata[0], false);
+ }
+ if (!recentlist.isEmpty())
+ {
+ qce.descriptionCombo->insertStringList(recentlist);
+ }
+ }
+
+ qce.setWFlags(Qt::WType_Modal);
+ qce.showMaximized();
+
+ qce.descriptionCombo->lineEdit()->clear();
+
+ if (qce.exec() == QDialog::Accepted)
+ {
+ // Validate that the user has inputed a valid dollar amount
+ if (qce.transFee->text().contains('.') == 0)
+ {
+ QString text = qce.transFee->text();
+ text.append(".00");
+ qce.transFee->setText(text);
+ } else {
+ QString tmp = qce.transFee->text();
+ if (tmp.mid(tmp.find('.'), tmp.length()).length() == 1)
+ {
+ tmp.append("00");
+ qce.transFee->setText(tmp);
+ } else {
+ if (tmp.mid(tmp.find('.'), tmp.length()).length() == 2)
+ {
+ tmp.append("0");
+ qce.transFee->setText(tmp);
+ }
+ }
+ }
+ if (qce.transAmount->text().contains('.') == 0)
+ {
+ QString text = qce.transAmount->text();
+ text.append(".00");
+ qce.transAmount->setText(text);
+ } else {
+ QString tmp = qce.transAmount->text();
+ if (tmp.mid(tmp.find('.'), tmp.length()).length() == 1)
+ {
+ tmp.append("00");
+ qce.transAmount->setText(tmp);
+ } else {
+ if (tmp.mid(tmp.find('.'), tmp.length()).length() == 2)
+ {
+ tmp.append("0");
+ qce.transAmount->setText(tmp);
+ }
+ }
+ }
+
+ QString recent;
+ if (qce.descriptionCombo->count() != 0)
+ {
+ QStringList recentlist = QStringList::split(',', originaldata[9], false);
+ if (recentlist.count() >= 10)
+ {
+ recentlist.remove(recentlist.last());
+ }
+ recentlist.prepend(qce.descriptionCombo->lineEdit()->text());
+ recent = recentlist.join(",");
+ } else {
+ recent = qce.descriptionCombo->lineEdit()->text();
+ }
+
+ QString checkNumberString = qce.checkNumber->text();
+ if (checkNumberString.isEmpty() == true)
+ {
+ checkNumberString = "0";
+ }
+
+ QString paymentChecked = "true";
+ if (qce.payment->isChecked() == false)
+ {
+ paymentChecked = "false";
+ }
+ QStringList returnvalue;
+ returnvalue << paymentChecked << qce.descriptionCombo->lineEdit()->text() << qce.cmbCategory->lineEdit()->text() << QString::number(qce.transType->currentItem()) << checkNumberString << qce.transAmount->text() << qce.transFee->text() << qce.dateEdit->text() << qce.additionalNotes->text() << recent;
+ return returnvalue;
+ } else {
+ QStringList blank;
+ return blank;
+ }
+}
+
+void QCheckEntry::transFeeChanged(const QString &input)
+{
+ QString tmpinput = input;
+ if (tmpinput.contains('.') > 1)
+ {
+ int first = tmpinput.find('.');
+ tmpinput = tmpinput.remove(tmpinput.find('.', (first + 1)), 1);
+ }
+ if (tmpinput.contains(QRegExp("\\.[0-9][0-9]{2}$")) >= 1)
+ {
+ tmpinput = tmpinput.remove((tmpinput.length() - 1), 1);
+ }
+ transFee->setText(tmpinput);
+}
+
+void QCheckEntry::amountChanged(const QString &input)
+{
+ QString tmpinput = input;
+ if (tmpinput.contains('.') > 1)
+ {
+ int first = tmpinput.find('.');
+ tmpinput = tmpinput.remove(tmpinput.find('.', (first + 1)), 1);
+ }
+ if (tmpinput.contains(QRegExp("\\.[0-9][0-9]{2}$")) >= 1)
+ {
+ tmpinput = tmpinput.remove((tmpinput.length() - 1), 1);
+ }
+ transAmount->setText(tmpinput);
+}
+
+void QCheckEntry::accept()
+{
+ // Does the description combo not have any text in it? Do something if it doesn't!
+ if (descriptionCombo->lineEdit()->text().isEmpty() == true)
+ {
+ QMessageBox::critical(this, "Field Missing.", "<qt>You didn't enter a description for this transaction. Please fill out the \"Transaction Description\" field and try again.</qt>");
+ descriptionCombo->setFocus();
+ return;
+ }
+ QDialog::accept();
+}