[kde-doc-english] [kmymoney] kmymoney: Eliminate usage of opening date for categories
Thomas Baumgart
thb at net-bembel.de
Sat May 16 06:30:56 UTC 2015
Git commit 7a4901c668871882bba75068bf1256f2bf00dba0 by Thomas Baumgart.
Committed on 16/05/2015 at 06:20.
Pushed by tbaumgart into branch 'master'.
Eliminate usage of opening date for categories
Set the opening date for newly created categories to 1900-01-01 and fix
existing ones to have that date during the consistency check. Since the
opening date of an income/expense account (aka category) is not used
throughout the application, it should not interfer with the check that
the opening dates of all accounts referenced in a transaction are prior
to the transaction's post date. Setting the opening date of a category
to the above mentioned value makes sure that a category is always
'opened' before the transaction took place.
The UI elements for the opening date have been removed from the
account/category edit dialog as they are not used anymore.
BUG: 313793
GUI:
M +8 -2 kmymoney/dialogs/knewaccountdlg.cpp
M +1 -0 kmymoney/dialogs/knewaccountdlg.h
M +16 -16 kmymoney/dialogs/knewaccountdlgdecl.ui
M +2 -0 kmymoney/kmymoney.cpp
M +13 -0 kmymoney/mymoney/mymoneyfile.cpp
M +71 -0 kmymoney/mymoney/mymoneyfiletest.cpp
M +1 -0 kmymoney/mymoney/mymoneyfiletest.h
http://commits.kde.org/kmymoney/7a4901c668871882bba75068bf1256f2bf00dba0
diff --git a/kmymoney/dialogs/knewaccountdlg.cpp b/kmymoney/dialogs/knewaccountdlg.cpp
index e294624..fe36a18 100644
--- a/kmymoney/dialogs/knewaccountdlg.cpp
+++ b/kmymoney/dialogs/knewaccountdlg.cpp
@@ -217,7 +217,7 @@ KNewAccountDlg::KNewAccountDlg(const MyMoneyAccount& account, bool isEditing, bo
if (!m_account.openingDate().isValid()) {
m_account.setOpeningDate(KMyMoneyGlobalSettings::firstFiscalDate());
}
- startDateEdit->setDate(m_account.openingDate());
+ m_openingDateEdit->setDate(m_account.openingDate());
if (categoryEditor) {
// get rid of the tabs that are not used for categories
@@ -494,6 +494,12 @@ void KNewAccountDlg::setOpeningBalanceShown(bool shown)
m_openingBalanceEdit->setVisible(shown);
}
+void KNewAccountDlg::setOpeningDateShown(bool shown)
+{
+ m_openingDateLabel->setVisible(shown);
+ m_openingDateEdit->setVisible(shown);
+}
+
void KNewAccountDlg::okClicked()
{
MyMoneyFile* file = MyMoneyFile::instance();
@@ -578,7 +584,7 @@ void KNewAccountDlg::okClicked()
m_account.setDescription(descriptionEdit->toPlainText());
- m_account.setOpeningDate(startDateEdit->date());
+ m_account.setOpeningDate(m_openingDateEdit->date());
if (!m_categoryEditor) {
m_account.setCurrencyId(m_currency->security().id());
diff --git a/kmymoney/dialogs/knewaccountdlg.h b/kmymoney/dialogs/knewaccountdlg.h
index be62c4b..962dee4 100644
--- a/kmymoney/dialogs/knewaccountdlg.h
+++ b/kmymoney/dialogs/knewaccountdlg.h
@@ -129,6 +129,7 @@ public:
};
void setOpeningBalanceShown(bool shown);
+ void setOpeningDateShown(bool shown);
/**
* This method adds an additional tab pointed to with @a w to the tab widget.
diff --git a/kmymoney/dialogs/knewaccountdlgdecl.ui b/kmymoney/dialogs/knewaccountdlgdecl.ui
index ef76e8b..bee638d 100644
--- a/kmymoney/dialogs/knewaccountdlgdecl.ui
+++ b/kmymoney/dialogs/knewaccountdlgdecl.ui
@@ -105,7 +105,7 @@
</widget>
</item>
<item row="0" column="2">
- <widget class="QLabel" name="TextLabel1_2">
+ <widget class="QLabel" name="m_openingDateLabel">
<property name="minimumSize">
<size>
<width>0</width>
@@ -121,7 +121,7 @@
</widget>
</item>
<item row="0" column="3">
- <widget class="kMyMoneyDateInput" name="startDateEdit"/>
+ <widget class="kMyMoneyDateInput" name="m_openingDateEdit"/>
</item>
<item row="1" column="2">
<widget class="QLabel" name="m_openingBalanceLabel">
@@ -691,7 +691,7 @@
<bool>true</bool>
</property>
<attribute name="buttonGroup">
- <string>m_amountGroup</string>
+ <string notr="true">m_amountGroup</string>
</attribute>
</widget>
</item>
@@ -701,7 +701,7 @@
<string>Net amount</string>
</property>
<attribute name="buttonGroup">
- <string>m_amountGroup</string>
+ <string notr="true">m_amountGroup</string>
</attribute>
</widget>
</item>
@@ -813,9 +813,9 @@
<layoutdefault spacing="6" margin="11"/>
<customwidgets>
<customwidget>
- <class>KPushButton</class>
- <extends>QPushButton</extends>
- <header>kpushbutton.h</header>
+ <class>KComboBox</class>
+ <extends>QComboBox</extends>
+ <header>kcombobox.h</header>
</customwidget>
<customwidget>
<class>KLineEdit</class>
@@ -823,9 +823,14 @@
<header>klineedit.h</header>
</customwidget>
<customwidget>
- <class>KComboBox</class>
- <extends>QComboBox</extends>
- <header>kcombobox.h</header>
+ <class>KPushButton</class>
+ <extends>QPushButton</extends>
+ <header>kpushbutton.h</header>
+ </customwidget>
+ <customwidget>
+ <class>KTextEdit</class>
+ <extends>QTextEdit</extends>
+ <header>ktextedit.h</header>
</customwidget>
<customwidget>
<class>KTabWidget</class>
@@ -834,11 +839,6 @@
<container>1</container>
</customwidget>
<customwidget>
- <class>KTextEdit</class>
- <extends>QTextEdit</extends>
- <header>ktextedit.h</header>
- </customwidget>
- <customwidget>
<class>kMyMoneyDateInput</class>
<extends>QFrame</extends>
<header>kmymoneydateinput.h</header>
@@ -877,8 +877,8 @@
<tabstop>m_tab</tabstop>
<tabstop>accountNameEdit</tabstop>
<tabstop>typeCombo</tabstop>
- <tabstop>startDateEdit</tabstop>
<tabstop>m_currency</tabstop>
+ <tabstop>m_openingDateEdit</tabstop>
<tabstop>m_openingBalanceEdit</tabstop>
<tabstop>m_lastCheckNumberUsed</tabstop>
<tabstop>descriptionEdit</tabstop>
diff --git a/kmymoney/kmymoney.cpp b/kmymoney/kmymoney.cpp
index d095992..522fe1a 100644
--- a/kmymoney/kmymoney.cpp
+++ b/kmymoney/kmymoney.cpp
@@ -3137,6 +3137,7 @@ void KMyMoneyApp::createCategory(MyMoneyAccount& account, const MyMoneyAccount&
new KNewAccountDlg(account, false, true, 0, i18n("Create a new Category"));
dialog->setOpeningBalanceShown(false);
+ dialog->setOpeningDateShown(false);
if (dialog->exec() == QDialog::Accepted && dialog != 0) {
MyMoneyAccount parentAccount, brokerageAccount;
@@ -3618,6 +3619,7 @@ void KMyMoneyApp::slotAccountEdit(void)
if (category || d->m_selectedAccount.accountType() == MyMoneyAccount::Investment) {
dlg->setOpeningBalanceShown(false);
+ dlg->setOpeningDateShown(false);
tid.clear();
} else {
if (!tid.isEmpty()) {
diff --git a/kmymoney/mymoney/mymoneyfile.cpp b/kmymoney/mymoney/mymoneyfile.cpp
index aca8d4a..9df0059 100644
--- a/kmymoney/mymoney/mymoneyfile.cpp
+++ b/kmymoney/mymoney/mymoneyfile.cpp
@@ -947,6 +947,12 @@ void MyMoneyFile::addAccount(MyMoneyAccount& account, MyMoneyAccount& parent)
account.setOpeningDate(QDate::currentDate());
}
+ // make sure to set the opening date for categories to a
+ // fixed date (1900-1-1). See #313793 on b.k.o for details
+ if(account.isIncomeExpense()) {
+ account.setOpeningDate(QDate(1900,1,1));
+ }
+
// if we don't have a currency assigned use the base currency
if (account.currencyId().isEmpty()) {
account.setCurrencyId(baseCurrency().id());
@@ -1964,6 +1970,13 @@ const QStringList MyMoneyFile::consistencyCheck(void)
}
}
+ // check if it is a category and set the date to 1900-01-01 if different
+ if ((*it_a).isIncomeExpense()) {
+ if(((*it_a).openingDate().isValid() == false) || ((*it_a).openingDate() != QDate(1900,1,1))) {
+ (*it_a).setOpeningDate(QDate(1900,1,1));
+ }
+ }
+
// check for clear text online password in the online settings
if (!(*it_a).onlineBankingSettings().value("password").isEmpty()) {
if (problemAccount != (*it_a).name()) {
diff --git a/kmymoney/mymoney/mymoneyfiletest.cpp b/kmymoney/mymoney/mymoneyfiletest.cpp
index b69f600..fc90e3d 100644
--- a/kmymoney/mymoney/mymoneyfiletest.cpp
+++ b/kmymoney/mymoney/mymoneyfiletest.cpp
@@ -579,6 +579,77 @@ void MyMoneyFileTest::testAddAccounts()
QCOMPARE(p.currencyId(), QLatin1String("EUR"));
}
+void MyMoneyFileTest::testAddCategories()
+{
+ MyMoneyAccount a, b, c;
+ a.setAccountType(MyMoneyAccount::Income);
+ a.setOpeningDate(QDate::currentDate());
+ b.setAccountType(MyMoneyAccount::Expense);
+
+ storage->m_dirty = false;
+
+ QCOMPARE(m->accountCount(), static_cast<unsigned>(5));
+ QCOMPARE(a.openingDate(), QDate::currentDate());
+ QVERIFY(!b.openingDate().isValid());
+
+ a.setName("Account1");
+ a.setCurrencyId("EUR");
+
+ clearObjectLists();
+ MyMoneyFileTransaction ft;
+ try {
+ MyMoneyAccount parent = m->income();
+ m->addAccount(a, parent);
+ ft.commit();
+ QCOMPARE(m->accountCount(), static_cast<unsigned>(6));
+ QCOMPARE(a.parentAccountId(), QLatin1String("AStd::Income"));
+ QCOMPARE(a.id(), QLatin1String("A000001"));
+ QCOMPARE(a.institutionId(), QString());
+ QCOMPARE(a.currencyId(), QLatin1String("EUR"));
+ QCOMPARE(a.openingDate(), QDate(1900,1,1));
+ QCOMPARE(m->dirty(), true);
+ QCOMPARE(m->income().accountList().count(), 1);
+ QCOMPARE(m->income().accountList()[0], QLatin1String("A000001"));
+
+ } catch (const MyMoneyException &) {
+ QFAIL("Unexpected exception!");
+ }
+
+ // add a second category, expense this time
+ b.setName("Account2");
+ b.setCurrencyId("EUR");
+ clearObjectLists();
+ ft.restart();
+ try {
+ MyMoneyAccount parent = m->expense();
+ m->addAccount(b, parent);
+ ft.commit();
+ QCOMPARE(m->dirty(), true);
+ QCOMPARE(b.id(), QLatin1String("A000002"));
+ QCOMPARE(a.institutionId(), QString());
+ QCOMPARE(b.currencyId(), QLatin1String("EUR"));
+ QCOMPARE(b.openingDate(), QDate(1900,1,1));
+ QCOMPARE(b.parentAccountId(), QLatin1String("AStd::Expense"));
+ QCOMPARE(m->accountCount(), static_cast<unsigned>(7));
+
+ QCOMPARE(m->income().accountList().count(), 1);
+ QCOMPARE(m->expense().accountList().count(), 1);
+ QCOMPARE(m->income().accountList()[0], QLatin1String("A000001"));
+ QCOMPARE(m->expense().accountList()[0], QLatin1String("A000002"));
+
+ QCOMPARE(m_objectsRemoved.count(), 0);
+ QCOMPARE(m_objectsAdded.count(), 1);
+ QCOMPARE(m_objectsModified.count(), 1);
+ QCOMPARE(m_balanceChanged.count(), 0);
+ QCOMPARE(m_valueChanged.count(), 0);
+ QVERIFY(m_objectsAdded.contains(QLatin1String("A000002")));
+ QVERIFY(m_objectsModified.contains(QLatin1String("AStd::Expense")));
+
+ } catch (const MyMoneyException &) {
+ QFAIL("Unexpected exception!");
+ }
+}
+
void MyMoneyFileTest::testModifyAccount()
{
testAddAccounts();
diff --git a/kmymoney/mymoney/mymoneyfiletest.h b/kmymoney/mymoney/mymoneyfiletest.h
index 4a91731..d98625a 100644
--- a/kmymoney/mymoney/mymoneyfiletest.h
+++ b/kmymoney/mymoney/mymoneyfiletest.h
@@ -46,6 +46,7 @@ private slots:
void testInstitutionModify();
void testSetFunctions();
void testAddAccounts();
+ void testAddCategories();
void testModifyAccount();
void testModifyStdAccount();
void testReparentAccount();
More information about the kde-doc-english
mailing list