summaryrefslogtreecommitdiff
authorallenforsythe <allenforsythe>2003-05-13 21:14:56 (UTC)
committer allenforsythe <allenforsythe>2003-05-13 21:14:56 (UTC)
commitf08e51ae62bf814b4cbf8873afd0e44b167cb9b4 (patch) (unidiff)
treebab48138189f471aa8f18dd53dd57b4d0bfd156b
parentf31e2ecd95aba951dc77d98f02b45cb1297046ac (diff)
downloadopie-f08e51ae62bf814b4cbf8873afd0e44b167cb9b4.zip
opie-f08e51ae62bf814b4cbf8873afd0e44b167cb9b4.tar.gz
opie-f08e51ae62bf814b4cbf8873afd0e44b167cb9b4.tar.bz2
Initial revision
Diffstat (more/less context) (ignore whitespace changes)
-rwxr-xr-xnoncore/apps/qashmoney/CHANGES24
-rwxr-xr-xnoncore/apps/qashmoney/account.h100
-rwxr-xr-xnoncore/apps/qashmoney/accountdisplay.cpp432
-rwxr-xr-xnoncore/apps/qashmoney/budget.cpp221
-rwxr-xr-xnoncore/apps/qashmoney/budget.h45
-rwxr-xr-xnoncore/apps/qashmoney/memory.cpp62
-rwxr-xr-xnoncore/apps/qashmoney/memory.h45
-rwxr-xr-xnoncore/apps/qashmoney/preferences.h50
-rwxr-xr-xnoncore/apps/qashmoney/qashmoney.cpp356
-rwxr-xr-xnoncore/apps/qashmoney/transaction.cpp274
-rwxr-xr-xnoncore/apps/qashmoney/transaction.h69
-rwxr-xr-xnoncore/apps/qashmoney/transactiondisplay.h79
-rwxr-xr-xnoncore/apps/qashmoney/transfer.cpp253
-rwxr-xr-xnoncore/apps/qashmoney/transfer.h51
14 files changed, 2061 insertions, 0 deletions
diff --git a/noncore/apps/qashmoney/CHANGES b/noncore/apps/qashmoney/CHANGES
new file mode 100755
index 0000000..f17035b
--- a/dev/null
+++ b/noncore/apps/qashmoney/CHANGES
@@ -0,0 +1,24 @@
1QashMoney - Budget Software for the Sharp Zaurus
2
3CHANGES
4
511/1/02 - Initial release of 0.2 version. Considered stable beta version.
611/16/02 - Release of version 0.3. This is a stable version adding function to
7 transfer money between accounts. Several bugs fixes and speed enhancements
8 have been done.
911/21/02 - 0.31 news tabs working but not yet displaying accounts
1012/15/02 - QashMoney gets a complete face lift and now has a date picker.
1112/29/02 - Version 0.41 released. This release fixes more bugs and adds a
12 function to manage transaction memory items.
1312/31/02 - Version 0.42 released. Maintenance release fixing soem rather nasty
14 bugs that screw up account, transaction, and transfer displays.
1503/03/03 - Version 0.60 released. QashMoney has undergone quite a transformation.
16 A new GUI that incorporates all of Qts excellent layout capabilities should
17 display nicely in all formats. A new embedded SQL database should make QashMoney
18very extensible.
194/25/03 - Version 0.70 released. This version includes many new features over 0.60 including
20currency support for accounts, a function to limit transaction views, and an all new budgeting
21tab that allows multiple budgets and currency support.
225/7/03 - Version 0.73 released. Few minor bugfixes and feature enhancements. QashMoney now
23right justifies all numbers and remembers the sate in which you leave the account window. So, if you
24collapse a parent account, it will stay collapsed (even between QashMoney restarts).
diff --git a/noncore/apps/qashmoney/account.h b/noncore/apps/qashmoney/account.h
new file mode 100755
index 0000000..f77f400
--- a/dev/null
+++ b/noncore/apps/qashmoney/account.h
@@ -0,0 +1,100 @@
1#ifndef ACCOUNT_H
2#define ACCOUNT_H
3
4#include <qstring.h>
5#include <qlistview.h>
6#include <qcombobox.h>
7#include <sqlite.h>
8
9class Account
10 {
11 public:
12
13 Account ();
14 ~Account ();
15
16 // This function adds a new account to the database. It takes the account name, parent,
17 // initial balance and the account type, description, credit limit, statementbalancedate
18 // as three integers, and the statementbalance amount
19 // The parent is an integer account id. Its -1 if there is no parent
20 // The account types (so far) are 0=not defined 1=parent checking 2=child checking
21 void addAccount ( QString, int, float, int, QString, float, int, int, int, float, const char * );
22
23 // updates certain parts of an account
24 void updateAccount ( QString name, QString description, QString currencycode, int accountid );
25
26 void setAccountExpanded ( int expanded, int accountid );
27 int getAccountExpanded ( int id );
28
29 // Deletes an account
30 // Takes the accountid as its parameter
31 void deleteAccount ( int );
32
33 // Returns the number of accounts
34 int getNumberOfAccounts ();
35
36 // returns number of child accounts for a given parent
37 // this function is useless for child accounts. It will
38 // always return 0
39 int getNumberOfChildAccounts ( int );
40
41 // This function retrieves all transactions for an account and updates the
42 // account balance based on the transactions
43 void updateAccountBalance ( int accountid );
44 //void changeAccountBalance ( int accountid, float amount );
45
46 // updates a parent account
47 void changeParentAccountBalance ( int parentid );
48
49 // Returns the parent account ID for an account
50 // Takes the account name as its parameter or the account id
51 int getParentAccountID ( QString accountname );
52 int getParentAccountID ( int id );
53
54 // This takes a QListView and puts parents and children memorys
55 // into the list view
56 void displayAccounts ( QListView * );
57
58 // This function displays a sorted list of account names in a combobox
59 // Takes the combobox address for its parameter
60 int displayParentAccountNames ( QComboBox *, QString );
61
62 int getAccountType ( int ); // returns account type for given account id
63
64 // The next three collectively return a date or balance
65 // They take the accountid as their parameters
66 int getStatementDay ( int );
67 int getStatementMonth ( int );
68 int getStatementYear ( int );
69 float getStatementBalance ( int );
70
71 // Returns account description and name
72 QString getAccountDescription ( int accountid );
73 QString getCurrencyCode ( int accountid );
74 QString getAccountName ( int accountid );
75 QStringList getAccountNames ();
76 QStringList getAccountIDs ();
77 QString getAccountBalance ( int accountid );
78
79 // returns account credit limit
80 float getAccountCreditLimit ( int );
81
82 // The primary database that stores all our data
83 sqlite *adb;
84 };
85
86class GreyBackgroundItem : public QListViewItem
87 {
88 public:
89
90 GreyBackgroundItem ( QListView *parent );
91 GreyBackgroundItem ( QListView *parent, QString label1, QString label2, QString label3 );
92 GreyBackgroundItem ( QListView *parent, QString label1, QString label2, QString label3, QString label4 );
93 GreyBackgroundItem ( QListView *parent, QString label1, QString label2, QString label3, QString label4, QString label5 );
94
95 virtual void paintCell ( QPainter *p, const QColorGroup &cg, int column, int width, int alignment );
96
97 };
98
99#endif
100
diff --git a/noncore/apps/qashmoney/accountdisplay.cpp b/noncore/apps/qashmoney/accountdisplay.cpp
new file mode 100755
index 0000000..46ab1db
--- a/dev/null
+++ b/noncore/apps/qashmoney/accountdisplay.cpp
@@ -0,0 +1,432 @@
1#include <qdatetime.h>
2#include <qmessagebox.h>
3#include <qheader.h>
4
5#include "accountdisplay.h"
6#include "newaccount.h"
7#include "transaction.h"
8#include "transferdialog.h"
9#include "preferences.h"
10#include "transfer.h"
11
12extern Account *account;
13extern Transaction *transaction;
14extern Transfer *transfer;
15extern Preferences *preferences;
16
17AccountDisplay::AccountDisplay ( QWidget *parent ) : QWidget ( parent )
18 {
19 cleared = 0;
20
21 firstline = new QHBox ( this );
22 firstline->setSpacing ( 2 );
23
24 newaccount = new QPushButton ( firstline );
25 newaccount->setPixmap ( QPixmap ("/opt/QtPalmtop/pics/new.png") );
26 connect ( newaccount, SIGNAL ( released () ), this, SLOT ( addAccount () ) );
27
28 editaccount = new QPushButton ( firstline );
29 editaccount->setPixmap ( QPixmap ("/opt/QtPalmtop/pics/edit.png") );
30 connect ( editaccount, SIGNAL ( released () ), this, SLOT ( editAccount () ) );
31
32 deleteaccount = new QPushButton ( firstline );
33 deleteaccount->setPixmap( QPixmap ( "/opt/QtPalmtop/pics/delete.png") );
34 connect ( deleteaccount, SIGNAL ( released () ), this, SLOT ( deleteAccount () ) );
35
36 transferbutton = new QPushButton ( firstline );
37 transferbutton->setPixmap( QPixmap ( "/opt/QtPalmtop/pics/transfer.png") );
38 transferbutton->setToggleButton ( TRUE );
39 connect ( transferbutton, SIGNAL ( toggled ( bool ) ), this, SLOT ( accountTransfer ( bool ) ) );
40
41 listview = new QListView ( this );
42 listview->setAllColumnsShowFocus ( TRUE );
43 listview->setShowSortIndicator ( TRUE );
44 listview->setRootIsDecorated ( TRUE );
45 listview->setMultiSelection ( FALSE );
46 connect ( listview, SIGNAL ( expanded ( QListViewItem * ) ), this, SLOT ( setAccountExpanded ( QListViewItem * ) ) );
47 connect ( listview, SIGNAL ( collapsed ( QListViewItem * ) ), this, SLOT ( setAccountCollapsed ( QListViewItem * ) ) );
48
49 listview->header()->setTracking ( FALSE );
50 connect ( listview->header(), SIGNAL ( sizeChange ( int, int, int ) ), this, SLOT ( saveColumnSize ( int, int, int ) ) );
51
52 layout = new QVBoxLayout ( this, 2, 5 );
53 layout->addWidget ( firstline );
54 layout->addWidget ( listview );
55 }
56
57void AccountDisplay::setTabs ( QWidget *newtab2, QTabWidget *newtabs )
58 {
59 tab2 = newtab2;
60 maintabs = newtabs;
61 }
62
63void AccountDisplay::addAccount ()
64 {
65 // initialize local variables
66 int parentid = 0;
67 type = 0;
68 QString parentlist [ listview->childCount() + 1 ] [ 3 ] ;
69
70 // create new account window for entering data
71 NewAccount *newaccount = new NewAccount ( this );
72 int width = this->width();
73 newaccount->accountbox->setMaximumWidth ( ( int ) ( width * 0.5 ) );
74 newaccount->datebox->setMaximumWidth ( ( int ) ( width * 0.4 ) );
75 newaccount->childbox->setMaximumWidth ( ( int ) ( width * 0.5 ) );
76 newaccount->balancebox->setMaximumWidth ( ( int ) ( width * 0.4 ) );
77 newaccount->creditlimitbox->setMaximumWidth ( ( int ) ( width * 0.4 ) );
78
79 // if there are no accounts, disable the child check box
80 if ( account->getNumberOfAccounts () == 0 )
81 newaccount->childcheckbox->setEnabled ( FALSE );
82
83 // if there are accounts, fill up the pulldown menu for
84 // selecting a parent account. We should only add those parents without transactions
85 else
86 {
87 int c = 0;
88 QListViewItemIterator it ( listview );
89 for ( ; it.current(); ++it )
90 {
91 int id = it.current()->text ( getIDColumn() ).toInt();
92 // iterate through accountdisplay listview and add parents with no transactions
93 // add this item to the list box only if it is a parent and has no transactions
94 if ( transfer->getNumberOfTransfers ( id ) == 0 && transaction->getNumberOfTransactions ( id ) == 0 && it.current()->parent() == 0 )
95 {
96 newaccount->childbox->insertItem ( it.current()->text ( 0 ) );
97 parentlist [ c ] [ 0 ] = it.current()->text ( 0 );
98 parentlist [ c ] [ 1 ] = it.current()->text ( getIDColumn() );
99 parentlist [ c ] [ 2 ] = QString::number ( c );
100 c++;
101 }
102 }
103 }
104
105 if ( preferences->getPreference ( 4 ) == 0 )
106 newaccount->currencybox->setEnabled ( FALSE );
107
108 // enter today's date in the date box as default
109 QDate today = QDate::currentDate ();
110 int defaultday = today.day();
111 int defaultmonth = today.month();
112 int defaultyear = today.year();
113 newaccount->startdate->setText ( preferences->getDate ( defaultyear, defaultmonth, defaultday ) );
114
115 //add account information if user pushes OK button
116 if ( newaccount->exec() == QDialog::Accepted )
117 {
118 if ( newaccount->childcheckbox->isChecked () == TRUE ) // set a parent id and type for a child account
119 {
120 // go through the parentlist we created and determine the parent accountid
121 // we can't use the name of the account because there may be two accounts
122 // with the same name. This function does it all by accountid
123 int counter;
124 for ( counter = 0; counter < listview->childCount() + 1; counter++ )
125 if ( ( parentlist [ counter ] [ 2 ].toInt() ) == newaccount->childbox->currentItem() )
126 {
127 parentid = parentlist [ counter ] [ 1 ].toInt();
128 break;
129 }
130 type = ( newaccount->accounttype->currentItem() ) + 6; // sets account ids for child accounts. See accountdisplay.h for types
131 }
132 else
133 {
134 parentid = -1;
135 type = newaccount->accounttype->currentItem(); // sets account ids for parent accounts
136 }
137
138 // add the new account
139 if ( newaccount->getDateEdited () == TRUE )
140 account->addAccount ( newaccount->accountname->text(), parentid, newaccount->accountbalance->text().toFloat(), type,
141 newaccount->getDescription(), newaccount->creditlimit->text().toFloat(), newaccount->getYear(),
142 newaccount->getMonth(), newaccount->getDay(), newaccount->accountbalance->text().toFloat(), newaccount->currencybox->currencybox->currentText() );
143 else
144 account->addAccount ( newaccount->accountname->text (), parentid, newaccount->accountbalance->text().toFloat(), type,
145 newaccount->getDescription(), newaccount->creditlimit->text().toFloat(), defaultyear,
146 defaultmonth, defaultday, newaccount->accountbalance->text().toFloat(), newaccount->currencybox->currencybox->currentText() );
147
148 if ( parentid != -1 )
149 account->changeParentAccountBalance ( parentid );
150
151 // redisplay accounts
152 // this function clears the account display first
153 account->displayAccounts ( listview );
154 setToggleButton();
155 }
156 maintabs->setTabEnabled ( tab2, FALSE );
157 }
158
159void AccountDisplay::deleteAccount ()
160 {
161 if ( listview->selectedItem() == 0 )
162 QMessageBox::warning ( this, "QashMoney", "Please select an account\nto delete.");
163 else if ( listview->selectedItem()->parent() == 0 && listview->selectedItem()->childCount() != 0 )
164 QMessageBox::warning ( this, "QashMoney", "Can't delete parent accounts\nwith children");
165 else
166 {
167 QMessageBox mb ( "Delete Account", "This will delete all transactions\nand transfers for this account.", QMessageBox::Information, QMessageBox::Ok, QMessageBox::Cancel, QMessageBox::NoButton );
168 if ( mb.exec() == QMessageBox::Ok )
169 {
170 int accountid = listview->selectedItem()->text ( getIDColumn() ).toInt ();
171 int parentid = account->getParentAccountID ( accountid );
172
173 // delete all the transactions and transfers for the account
174 transaction->deleteAllTransactions ( accountid );
175 transfer->deleteAllTransfers ( accountid );
176
177 // delete the account
178 account->deleteAccount ( accountid );
179
180 // update account balances
181 if ( parentid != -1 )
182 account->changeParentAccountBalance ( parentid );
183
184 //redisplay accounts
185 account->displayAccounts ( listview );
186
187 //remove all the columns from the accountdisplay if there are not any accounts
188 if ( account->getNumberOfAccounts() == 0 )
189 {
190 int columns = listview->columns();
191 int counter;
192 for ( counter = 0; counter <= columns; counter++ )
193 listview->removeColumn ( 0 );
194 }
195
196 setToggleButton();
197 }
198 }
199 maintabs->setTabEnabled ( tab2, FALSE );
200 }
201
202void AccountDisplay::setToggleButton ()
203 {
204 // iterate through account display and determine how many "transferable" accounts we have
205 // if there are less than two, disable the transfer button
206 QListViewItemIterator it ( listview );
207 int counter = 0;
208 for ( ; it.current(); ++it )
209 {
210 // add one to counter if we find a transferable account
211 if ( it.current()->parent() != 0 || ( it.current()->childCount() ) == 0 )
212 counter++;
213 }
214 if ( counter > 1 )
215 transferbutton->show();
216 else
217 transferbutton->hide();
218 }
219
220void AccountDisplay::accountTransfer ( bool state )
221 {
222 if ( state == TRUE )
223 {
224 firstaccountid = -1;
225 secondaccountid = -1;
226 listview->clearSelection ();
227 listview->setMultiSelection ( TRUE );
228 disableParentsWithChildren ();
229 connect ( listview, SIGNAL ( clicked ( QListViewItem * ) ), this, SLOT ( getTransferAccounts ( QListViewItem * ) ) );
230 }
231 else
232 {
233 firstaccountid = -1;
234 secondaccountid = -1;
235 listview->clearSelection ();
236 listview->setMultiSelection ( FALSE );
237 enableAccounts ();
238 disconnect ( listview, SIGNAL ( clicked ( QListViewItem * ) ), this, SLOT ( getTransferAccounts ( QListViewItem * ) ) );
239 }
240 }
241
242void AccountDisplay::getTransferAccounts ( QListViewItem * item )
243 {
244 if ( item->parent() != 0 || item->childCount() == 0 ) // only set an account for transfer if its a child or parent with no children
245 {
246 if ( firstaccountid == -1 )
247 firstaccountid = item->text ( getIDColumn() ).toInt(); // set first account if we've selected a valid account
248 else
249 if ( item->text ( getIDColumn() ).toInt() != firstaccountid ) // set the second account if its not equal to the first
250 secondaccountid = item->text ( getIDColumn() ).toInt();
251 }
252
253 // open transfer window if both accounts are set
254 if ( firstaccountid != -1 && secondaccountid != -1 )
255 {
256 // construct the transferdialog window
257 TransferDialog *td = new TransferDialog ( this, firstaccountid, secondaccountid );
258
259 // enter today's date in the date box as default
260 QDate today = QDate::currentDate ();
261 int defaultday = today.day();
262 int defaultmonth = today.month();
263 int defaultyear = today.year();
264 td->date->setText ( preferences->getDate ( defaultyear, defaultmonth, defaultday ) );
265
266 if ( td->exec() == QDialog::Accepted )
267 {
268 // set the cleared integer if the checkbox is checked
269 if ( td->clearedcheckbox->isChecked() == TRUE )
270 cleared = 1;
271
272 // add the transfer with a new date if its been edited or use the default date
273 if ( td->getDateEdited () == TRUE )
274 transfer->addTransfer ( firstaccountid, account->getParentAccountID ( firstaccountid ), secondaccountid,
275 account->getParentAccountID ( secondaccountid ), td->getDay(), td->getMonth(), td->getYear(), td->amount->text().toFloat(), cleared );
276 else
277 transfer->addTransfer ( firstaccountid, account->getParentAccountID ( firstaccountid ), secondaccountid,
278 account->getParentAccountID ( secondaccountid ), defaultday, defaultmonth, defaultyear, td->amount->text().toFloat(), cleared );
279
280 // update account balances of both accounts and parents if necessary
281 account->updateAccountBalance ( firstaccountid );
282 if ( account->getParentAccountID ( firstaccountid ) != -1 )
283 account->changeParentAccountBalance ( account->getParentAccountID ( firstaccountid ) );
284 account->updateAccountBalance ( secondaccountid );
285 if ( account->getParentAccountID ( secondaccountid ) != -1 )
286 account->changeParentAccountBalance ( account->getParentAccountID ( secondaccountid ) );
287
288 // redisplay accounts
289 account->displayAccounts ( listview );
290 }
291 else
292 {
293 firstaccountid = -1;
294 secondaccountid = -1;
295 listview->clearSelection ();
296 listview->setMultiSelection ( FALSE );
297 disconnect ( listview, SIGNAL ( clicked ( QListViewItem * ) ), this, SLOT ( getTransferAccounts ( QListViewItem * ) ) );
298 }
299
300 // reset the accounts display window
301 transferbutton->toggle(); // toggling this button with clear the window as well
302
303 // reenable all the accounts so the transaction tab will be properly set
304 enableAccounts ();
305 }
306 }
307
308void AccountDisplay::disableParentsWithChildren ()
309 {
310 // iterate through accountdisplay listview and disable all the parents that have children
311 QListViewItemIterator it ( listview );
312 for ( ; it.current(); ++it )
313 {
314 if ( it.current()->parent() == 0 && it.current()->childCount() != 0 )
315 it.current()->setSelectable ( FALSE );
316 }
317 }
318
319void AccountDisplay::enableAccounts ()
320 {
321 // iterate through accountdisplay listview and enable all accounts
322 QListViewItemIterator it ( listview );
323 for ( ; it.current(); ++it )
324 it.current()->setSelectable ( TRUE );
325 }
326
327void AccountDisplay::saveColumnSize ( int column, int oldsize, int newsize )
328 {
329 switch ( column )
330 {
331 case 0:
332 if ( listview->columns() == 3 )
333 preferences->changeColumnPreference ( 1, newsize );
334 else
335 preferences->changeColumnPreference ( 10, newsize );
336 break;
337 case 1:
338 if ( listview->columns() == 3 )
339 preferences->changeColumnPreference ( 2, newsize );
340 else
341 preferences->changeColumnPreference ( 11, newsize );
342 break;
343 case 2:
344 preferences->changeColumnPreference ( 12, newsize );
345 break;
346 }
347
348 }
349
350int AccountDisplay::getIDColumn ()
351 {
352 int counter;
353 int columns = listview->columns();
354 for ( counter = 0; counter <= columns; counter++ )
355 if ( listview->header()->label ( counter ).length() == 0 )
356 return counter;
357 }
358
359void AccountDisplay::editAccount ()
360 {
361 if ( listview->selectedItem() == 0 )
362 QMessageBox::warning ( this, "QashMoney", "Please select an account\nto edit.");
363 else
364 {
365 // set the accountid
366 int accountid = listview->selectedItem()->text ( getIDColumn() ).toInt();
367
368 //construct new dialog box
369 QDialog *editaccountwindow = new QDialog ( this, 0, TRUE );
370 editaccountwindow->setCaption ( "Edit Account" );
371
372 // construct the items which will go in the dialog bix
373 QLabel *namelabel = new QLabel ( "Account Name", editaccountwindow );
374 QLineEdit *accountname = new QLineEdit ( editaccountwindow );
375 QLabel *descriptionlabel = new QLabel ( "Account Description", editaccountwindow );
376 QLineEdit *accountdescription = new QLineEdit ( editaccountwindow );
377 Currency *currencybox = new Currency ( editaccountwindow );
378
379 QVBoxLayout *layout = new QVBoxLayout ( editaccountwindow, 5, 2 );
380 layout->addWidget ( namelabel );
381 layout->addWidget ( accountname );
382 layout->addWidget ( descriptionlabel );
383 layout->addWidget ( accountdescription );
384 layout->addWidget ( currencybox );
385
386 //set the account name
387 accountname->setText ( listview->selectedItem()->text ( 0 ) );
388
389 //set the account description
390 accountdescription->setText ( account->getAccountDescription ( accountid ) );
391
392 if ( preferences->getPreference ( 4 ) == 1 )
393 {
394 // get currency code for this account then iterate through the currency box
395 // to find the one we want
396 int count = currencybox->currencybox->count();
397 QString code = account->getCurrencyCode ( accountid );
398 for ( int counter = 0; count - 1; counter++ )
399 {
400 if ( QString::compare ( currencybox->currencybox->text ( counter ), code ) == 0 )
401 {
402 currencybox->currencybox->setCurrentItem ( counter );
403 break;
404 }
405 }
406 }
407 else
408 currencybox->setEnabled ( FALSE );
409
410 //execute the dialog box
411 int response = editaccountwindow->exec();
412 if ( response == 1 )
413 {
414 account->updateAccount ( accountname->text(), accountdescription->text(), currencybox->currencybox->currentText(), accountid );
415 account->displayAccounts ( listview );
416 }
417 }
418 }
419
420void AccountDisplay::setAccountExpanded ( QListViewItem *item )
421 {
422 int accountid = item->text ( getIDColumn() ).toInt();
423 account->setAccountExpanded ( 1, accountid );
424 }
425
426void AccountDisplay::setAccountCollapsed ( QListViewItem *item )
427 {
428 int accountid = item->text ( getIDColumn() ).toInt();
429 account->setAccountExpanded ( 0, accountid );
430 }
431
432
diff --git a/noncore/apps/qashmoney/budget.cpp b/noncore/apps/qashmoney/budget.cpp
new file mode 100755
index 0000000..42f7eca
--- a/dev/null
+++ b/noncore/apps/qashmoney/budget.cpp
@@ -0,0 +1,221 @@
1#include "budget.h"
2#include "transaction.h"
3#include <stdlib.h>
4
5extern Transaction *transaction;
6
7Budget::Budget ()
8 {
9 bdb = sqlite_open ( "qmbudgets.db", 0, NULL );
10 }
11
12Budget::~Budget ()
13 {
14 sqlite_close ( bdb );
15 }
16
17int Budget::addBudget ( QString name, int type, QString description, QString currency, int startday, int startmonth, int startyear, int endday, int endmonth, int endyear, int defaultview )
18 {
19 sqlite_exec_printf ( bdb, "insert into budgets values ( '%q', %i, '%q', '%q', %i, %i, %i, %i, %i, %i, %i, NULL );", 0, 0, 0, ( const char * ) name, type, ( const char * ) description, ( const char * ) currency, startday, startmonth, startyear, endday, endmonth, endyear, defaultview );
20 char **results;
21 sqlite_get_table ( bdb, "select last_insert_rowid() from budgets;", &results, NULL, NULL, NULL );
22 QString tablename = "table";
23 tablename.append ( results [ 1 ] );
24 sqlite_exec_printf ( bdb, "create table '%q' ( name, lineitemamount, type, lineitemid integer primary key );", 0, 0, 0, ( const char* ) tablename );
25 return atoi ( results [ 1 ] );
26 }
27
28void Budget::updateBudget ( QString name, QString description, QString currency, int budgetid )
29 {
30 sqlite_exec_printf ( bdb, "update budgets set name = '%q', description = '%q', currency = '%q' where budgetid = %i;", 0, 0, 0, ( const char * ) name, ( const char * ) description, ( const char * ) currency, budgetid );
31 }
32
33void Budget::deleteBudget ( int budgetid )
34 {
35 if ( getNumberOfBudgets() != 0 )
36 {
37 QString tablename = "table";
38 tablename.append ( QString::number ( budgetid ) );
39 sqlite_exec_printf ( bdb, "delete from budgets where budgetid = %i;", 0, 0, 0, budgetid );
40 sqlite_exec_printf ( bdb, "drop table '%q';", 0, 0, 0, ( const char* ) tablename );
41 }
42 }
43
44int Budget::getNumberOfBudgets ()
45 {
46 char **results;
47 sqlite_get_table ( bdb, "select count() from budgets;", &results, NULL, NULL, NULL );
48 return atoi ( results [ 1 ] );
49 }
50
51int Budget::getNumberOfLineItems ( int budgetid )
52 {
53 QString tablename = "table";
54 tablename.append ( QString::number ( budgetid ) );
55 char **results;
56 sqlite_get_table_printf ( bdb, "select count() from '%q';", &results, NULL, NULL, NULL, ( const char * ) tablename );
57 return atoi ( results [ 1 ] );
58 }
59
60QStringList* Budget::getBudgetNames ()
61 {
62 QStringList *names = new QStringList ();
63 char **results;
64 int rows, counter;
65 sqlite_get_table ( bdb, "select name from budgets order by name asc;", &results, &rows, NULL, NULL );
66 names->append ( "None" );
67 for ( counter = 0; counter < rows; counter++ )
68 names->append ( results [ counter+1 ] );
69 return names;
70 }
71
72QString Budget::getBudgetName ( int budgetid )
73 {
74 char **results;
75 sqlite_get_table_printf ( bdb, "select name from budgets where budgetid= %i;", &results, NULL, NULL, NULL, budgetid );
76 return ( QString ) results [ 1 ];
77 }
78
79QString Budget::getBudgetDescription ( int budgetid )
80 {
81 char **results;
82 sqlite_get_table_printf ( bdb, "select description from budgets where budgetid= %i;", &results, NULL, NULL, NULL, budgetid );
83 return ( QString ) results [ 1 ];
84 }
85
86QString Budget::getCurrency ( int budgetid )
87 {
88 char **results;
89 sqlite_get_table_printf ( bdb, "select currency from budgets where budgetid= %i;", &results, NULL, NULL, NULL, budgetid );
90 return ( QString ) results [ 1 ];
91 }
92
93QStringList* Budget::getBudgetIDs ()
94 {
95 QStringList *ids = new QStringList ();
96 char **results;
97 int rows, counter;
98 sqlite_get_table ( bdb, "select budgetid from budgets;", &results, &rows, NULL, NULL );
99 for ( counter = 0; counter < rows; counter++ )
100 ids->append ( results [ counter+1 ] );
101 return ids;
102 }
103
104int Budget::addLineItem ( int budgetid, QString lineitemname, float lineitemamount, int lineitemtype )
105 {
106 QString tablename = "table";
107 tablename.append ( QString::number ( budgetid ) );
108 sqlite_exec_printf ( bdb, "insert into '%q' values ( '%q', %.2f, %i, NULL );", 0, 0, 0, ( const char* ) tablename, ( const char* ) lineitemname, lineitemamount, lineitemtype );
109 char **results;
110 sqlite_get_table_printf ( bdb, "select last_insert_rowid() from '%q';", &results, NULL, NULL, NULL, ( const char* ) tablename );
111 return atoi ( results [ 1 ] );
112 }
113
114void Budget::updateLineItem ( QString lineitemname, float lineitemamount, int lineitemtype, int budgetid, int lineitemid )
115 {
116 QString tablename = "table";
117 tablename.append ( QString::number ( budgetid ) );
118 sqlite_exec_printf ( bdb, "update '%q' set name = '%q', lineitemamount = %f, type = %i where lineitemid = %i;", 0, 0, 0, ( const char* ) tablename, ( const char * ) lineitemname, lineitemamount, lineitemtype, lineitemid );
119 }
120
121void Budget::deleteLineItem ( int budgetid, int lineitemid )
122 {
123 QString tablename = "table";
124 tablename.append ( QString::number ( budgetid ) );
125 sqlite_exec_printf ( bdb, "delete from '%q' where lineitemid = %i;", 0, 0, 0, ( const char * ) tablename, lineitemid );
126 }
127
128void Budget::displayLineItems ( int budgetid, QListView *listview, int month, int year, int viewtype )
129 {
130 QString tablename = "table";
131 tablename.append ( QString::number ( budgetid ) );
132 char **results;
133 int rows, columns, counter;
134 sqlite_get_table_printf ( bdb, "select name, lineitemamount, lineitemid from '%q';", &results, &rows, &columns, NULL, ( const char * ) tablename );
135 int total = ( ( rows + 1 ) * columns );
136 for ( counter = 3; counter < total; counter = counter + 3 )
137 {
138 float amount = 0;
139 if ( viewtype == 0 )
140 {
141 QString lineitemamount = results [ counter + 1 ];
142 amount = lineitemamount.toFloat() / 12;
143 }
144 else
145 {
146 QString lineitemamount = results [ counter + 1 ];
147 amount = lineitemamount.toFloat();
148 }
149 QListViewItem *item = new QListViewItem ( listview, results [ counter ], QString::number ( amount, 'f', 2 ), transaction->getBudgetTotal ( budgetid, atoi ( results [ counter + 2 ] ), year, month, viewtype ), results [ counter + 2 ] );
150 }
151 }
152
153QStringList Budget::getLineItems ( int budgetid )
154 {
155 QString tablename = "table";
156 tablename.append ( QString::number ( budgetid ) );
157 QStringList lineitems;
158 char **results;
159 int rows, counter;
160 sqlite_get_table_printf ( bdb, "select name from '%q';", &results, &rows, NULL, NULL, (const char*) tablename );
161 for ( counter = 0; counter < rows; counter++ )
162 lineitems.append ( results [ counter + 1 ] );
163 return lineitems;
164 }
165
166QStringList Budget::getLineItemIDs ( int budgetid )
167 {
168 QString tablename = "table";
169 tablename.append ( QString::number ( budgetid ) );
170 QStringList lineitemids;
171 char **results;
172 int rows, counter;
173 sqlite_get_table_printf ( bdb, "select lineitemid from '%q';", &results, &rows, NULL, NULL, (const char*) tablename );
174 for ( counter = 0; counter < rows; counter++ )
175 lineitemids.append ( results [ counter + 1 ] );
176 return lineitemids;
177 }
178
179int Budget::getLineItemTime ( int budgetid, int lineitemid )
180 {
181 QString tablename = "table";
182 tablename.append ( QString::number ( budgetid ) );
183 char **results;
184 sqlite_get_table_printf ( bdb, "select type from '%q' where lineitemid= %i;", &results, NULL, NULL, NULL, ( const char * ) tablename, lineitemid );
185 return atoi ( results [ 1 ] );
186 }
187
188float Budget::getLineItemAmount ( int budgetid, int lineitemid )
189 {
190 QString tablename = "table";
191 tablename.append ( QString::number ( budgetid ) );
192 char **results;
193 sqlite_get_table_printf ( bdb, "select lineitemamount from '%q' where lineitemid= %i;", &results, NULL, NULL, NULL, ( const char* ) tablename, lineitemid );
194 return strtod ( results [ 1 ], 0 );
195 }
196
197QString Budget::getBudgetTotal ( int budgetid, int viewtype )
198 {
199 QString tablename = "table";
200 tablename.append ( QString::number ( budgetid ) );
201 // determine if we are viewing a years, months, or days budget
202 // we have to pick a different sum for each
203 char **results;
204 sqlite_get_table_printf ( bdb, "select sum ( lineitemamount ) from '%q';", &results, NULL, NULL, NULL, ( const char * ) tablename );
205 QString amount = results [ 1 ];
206 float total = amount.toFloat();
207 if ( viewtype == 0 )
208 total = total / 12;
209 amount.setNum ( total, 'f', 2 );
210 return amount;
211 }
212
213int Budget::getLastAdded ()
214 {
215 char **results;
216 sqlite_get_table ( bdb, "select last_insert_rowid() from budgets;", &results, NULL, NULL, NULL );
217 return atoi ( results [ 1 ] );
218 }
219
220
221
diff --git a/noncore/apps/qashmoney/budget.h b/noncore/apps/qashmoney/budget.h
new file mode 100755
index 0000000..16af26a
--- a/dev/null
+++ b/noncore/apps/qashmoney/budget.h
@@ -0,0 +1,45 @@
1#ifndef BUDGET_H
2#define BUDGET_H
3
4#include <qstring.h>
5#include <qstringlist.h>
6#include <qlistview.h>
7#include <sqlite.h>
8
9class Budget
10 {
11 public:
12
13 Budget ();
14 ~Budget ();
15
16 int addBudget ( QString name, int type, QString description, QString currency, int startday, int startmonth, int startyear, int endday, int endmonth, int endyear, int defaultview );
17 void updateBudget ( QString name, QString description, QString currency, int budgetid );
18 void deleteBudget ( int budgetid );
19 int getNumberOfBudgets ();
20 int getNumberOfLineItems ( int budgetid );
21
22 QStringList* getBudgetNames ();
23 QStringList* getBudgetIDs ();
24 QStringList getLineItems ( int budgetid );
25 QStringList getLineItemIDs ( int budgetid );
26 QString getBudgetName ( int budgetid );
27 QString getBudgetDescription ( int budgetid );
28 QString getCurrency ( int budgetid );
29 QString getBudgetTotal ( int budgetid, int viewtype );
30
31 int getLastAdded ();
32
33 int addLineItem ( int budgetid, QString lineitemname, float lineitemamount, int lineitemtype );
34 void updateLineItem ( QString lineitemname, float lineitemamount, int lineitemtype, int budgetid, int lineitemid );
35 void displayLineItems ( int budgetid, QListView *listview, int month, int year, int viewtype );
36 void deleteLineItem ( int budgetid, int lineitemid );
37 int getLineItemTime ( int budgetid, int lineitemid );
38 float getLineItemAmount ( int budgetid, int lineitemid );
39
40 private:
41 sqlite *bdb;
42 };
43
44#endif
45
diff --git a/noncore/apps/qashmoney/memory.cpp b/noncore/apps/qashmoney/memory.cpp
new file mode 100755
index 0000000..b5155b3
--- a/dev/null
+++ b/noncore/apps/qashmoney/memory.cpp
@@ -0,0 +1,62 @@
1#include "memory.h"
2
3#include <stdlib.h>
4
5Memory::Memory ()
6 {
7 db = sqlite_open ( "qmmemory.db", 0, NULL );
8 }
9
10Memory::~Memory ()
11 {
12 sqlite_close ( db );
13 }
14
15void Memory::addMemoryItem ( QString item )
16 {
17 sqlite_exec_printf ( db, "insert into memory values ( '%q', 0, 0 );", 0, 0, 0, ( const char * ) item );
18 }
19
20void Memory::deleteMemoryItem ( QString item )
21 {
22 sqlite_exec_printf ( db, "delete from memory where item = '%q';", 0, 0, 0, ( const char * ) item );
23 }
24
25int Memory::getNumberOfMemoryItems ()
26 {
27 char **results;
28 sqlite_get_table ( db, "select count() from memory;", &results, NULL, NULL, NULL );
29 return atoi ( results [ 1 ] );
30 }
31
32void Memory::changeMemoryName ( QString item )
33 {
34 sqlite_exec_printf ( db, "update memory set item = '%q' where item = '%q';", 0, 0, 0, ( const char * ) item );
35 }
36
37void Memory::displayMemoryItems ( QListBox *listbox )
38 {
39 char **results;
40 int rows;
41 sqlite_get_table ( db, "select item from memory order by item asc;", &results, &rows, NULL, NULL );
42 int counter = 1;
43 while ( counter < ( rows + 1 ) )
44 {
45 listbox->insertItem ( results [ counter ] );
46 counter ++;
47 }
48 }
49
50void Memory::displayMemoryItems ( QComboBox *box )
51 {
52 char **results;
53 int rows;
54 sqlite_get_table ( db, "select item from memory order by item asc;", &results, &rows, NULL, NULL );
55 int counter = 1;
56 while ( counter < ( rows + 1 ) )
57 {
58 box->insertItem ( results [ counter ] );
59 counter ++;
60 }
61 }
62
diff --git a/noncore/apps/qashmoney/memory.h b/noncore/apps/qashmoney/memory.h
new file mode 100755
index 0000000..6f3f100
--- a/dev/null
+++ b/noncore/apps/qashmoney/memory.h
@@ -0,0 +1,45 @@
1#ifndef MEMORY_H
2#define MEMORY_H
3
4#include <qstring.h>
5#include <qlistbox.h>
6#include <qcombobox.h>
7#include <sqlite.h>
8
9class Memory : public QObject
10 {
11
12 Q_OBJECT
13
14 public:
15
16 Memory ();
17 ~Memory ();
18
19 // This function adds a new memory to the database. It takes the memory name, parent,
20 // initial balance, a displayed variable, and the memory type
21 // The parent is an integer memory id. Its -1 if there is not parent
22 // The memory types are 0=not defined 1=parent 2=child
23 void addMemoryItem ( QString );
24
25 // Returns the number of checking memorys
26 int getNumberOfMemoryItems ();
27
28 void changeMemoryName ( QString );
29
30 // This takes a QListView and puts parents and children memorys
31 // into the list view
32 void displayMemoryItems ( QListBox * );
33 void displayMemoryItems ( QComboBox * );
34
35 // The primary database that stores all our data
36 sqlite *db;
37
38 public slots:
39
40 // Deletes a memory item. Takes the memoryid as its parameter
41 void deleteMemoryItem ( QString );
42 };
43
44#endif
45
diff --git a/noncore/apps/qashmoney/preferences.h b/noncore/apps/qashmoney/preferences.h
new file mode 100755
index 0000000..4a3e058
--- a/dev/null
+++ b/noncore/apps/qashmoney/preferences.h
@@ -0,0 +1,50 @@
1#include <sqlite.h>
2#include <qstring.h>
3
4#ifndef PREFERENCES_H
5#define PREFERENCES_H
6
7class Preferences
8 {
9 public:
10 Preferences ();
11 ~Preferences ();
12
13 void addPreferences ();
14 void initializeColumnPreferences ();
15
16 // Returns a preference value for the given preferences ID
17 int getPreference ( int );
18 int getColumnPreference ( int id );
19
20 // Convenience for getting date separator with one function
21 // call. Takes the preference id as its argument
22 QString getSeparator ( );
23
24 // Changes a preference for the given ID
25 void changePreference ( int , int );
26 void changeColumnPreference ( int id, int width );
27
28 // The primary database that stores all our data
29 sqlite *db;
30
31 // This function returns a Qstring for the year first date formats
32 // for displaying. It takes the date numbers
33 QString getDate ( int, int, int );
34 QString getDate ( int y, int m );
35
36 void setDefaultDatePreferences ();
37 };
38
39#endif
40
41
42
43
44
45
46
47
48
49
50
diff --git a/noncore/apps/qashmoney/qashmoney.cpp b/noncore/apps/qashmoney/qashmoney.cpp
new file mode 100755
index 0000000..1ea358c
--- a/dev/null
+++ b/noncore/apps/qashmoney/qashmoney.cpp
@@ -0,0 +1,356 @@
1#include "qashmoney.h"
2#include "preferencedialogs.h"
3#include "memorydialog.h"
4
5#include <qheader.h>
6#include <iostream.h>
7
8Budget *budget = new Budget ();
9Preferences *preferences = new Preferences ();
10Account *account = new Account ();
11Transaction *transaction = new Transaction ();
12Transfer *transfer = new Transfer ();
13Memory *memory = new Memory ();
14
15QashMoney::QashMoney () : QWidget ()
16 {
17 preferences->addPreferences();
18 preferences->initializeColumnPreferences ();
19
20 // set the text in the upper part of the frame
21 setCaption ( tr ( "QashMoney" ) );
22
23 // Create new menubar for our mainwindow
24 // and add menu items
25 mainmenu = new QPEMenuBar ( this );
26 mainmenu->setFrameStyle ( QFrame::PopupPanel | QFrame::Raised );
27 preferencesmenu = new QPopupMenu ( this );
28 utilitiesmenu = new QPopupMenu ( this );
29 mainmenu->insertItem ( "Preferences", preferencesmenu );
30 mainmenu->insertItem ( "Utilities", utilitiesmenu );
31 preferencesmenu->insertItem ( "Date", this, SLOT ( displayDatePreferencesDialog () ) );
32 preferencesmenu->insertItem ( "Account", this, SLOT ( displayAccountPreferencesDialog () ) );
33 preferencesmenu->insertItem ( "Transaction", this, SLOT ( displayTransactionPreferencesDialog () ) );
34 utilitiesmenu->insertItem ( "Memory", this, SLOT ( displayMemoryDialog () ) );
35
36 // create the main tabwidget for displaying accounts and transactions
37 maintabs = new QTabWidget ( this );
38 tab = new QWidget ( this );
39 tab_2 = new QWidget ( this );
40 tab_3 = new QWidget ( this );
41 maintabs->addTab ( tab, "Accounts" );
42 maintabs->addTab ( tab_2, "Transactions" );
43 maintabs->addTab ( tab_3, "Budgets" );
44 tabheight = tab->height();
45 maintabs->setTabEnabled ( tab_2, FALSE );
46
47 // create a new account display object
48 accountdisplay = new AccountDisplay ( maintabs );
49 accountdisplay->setTabs ( tab_2, maintabs );
50 connect ( accountdisplay->listview, SIGNAL ( selectionChanged () ), this, SLOT ( setTransactionTab () ) );
51
52 // set the connection to disable the one touch account viewing if we are transfering money
53 connect ( accountdisplay->transferbutton, SIGNAL ( toggled ( bool ) ), this, SLOT ( toggleOneTouchViewing ( bool ) ) );
54
55 // create a new transactiondisplay object
56 transactiondisplay = new TransactionDisplay ( maintabs );
57 transactiondisplay->hide();
58
59 // create new budgetdisplay object
60 budgetdisplay = new BudgetDisplay ( maintabs );
61 budgetdisplay->hide();
62
63 tabslayout = new QVBoxLayout ( maintabs, 4, 2 );
64 tabslayout->addSpacing ( tabheight );
65 tabslayout->addWidget ( accountdisplay );
66 tabslayout->addWidget ( transactiondisplay );
67 tabslayout->addWidget ( budgetdisplay );
68
69 // connect a change in the maintabs with changing the tab display
70 connect ( maintabs, SIGNAL ( currentChanged ( QWidget * ) ), this, SLOT ( changeTabDisplay () ) );
71
72 // create layout that will contain the menubar and the maintabs
73 layout = new QVBoxLayout ( this, 2, 2 );
74 layout->setMenuBar ( mainmenu );
75 layout->addWidget ( maintabs );
76 }
77
78QashMoney::~QashMoney ()
79 {
80 delete budget;
81 delete preferences;
82 delete account;
83 delete transaction;
84 delete transfer;
85 delete memory;
86 }
87
88void QashMoney::changeTabDisplay ()
89 {
90 // if the user pressed the transactions tab, hide the account display
91 // object and create a new transaction display
92 if ( maintabs->currentPageIndex() == 1 )
93 {
94 // initialize variables
95 bool children = FALSE;
96
97 // hide the account display and define accountid
98 int accountid = accountdisplay->listview->selectedItem()->text ( accountdisplay->getIDColumn() ).toInt();
99
100 //remove all the columns from the transactiondisplay
101 int columns = transactiondisplay->listview->columns();
102 int counter;
103 for ( counter = 0; counter <= columns; counter++ )
104 transactiondisplay->listview->removeColumn ( 0 );
105
106 // set the account name and account balance
107 QString name = account->getAccountName ( accountid );
108 QString balance = account->getAccountBalance ( accountid );
109 transactiondisplay->name->setText ( name );
110 transactiondisplay->balance->setText ( balance );
111
112 // clear the limitbox
113 transactiondisplay->limitbox->clear();
114
115 // get parent account id
116 int parentaccountid = account->getParentAccountID ( accountid );
117
118 // add columns based on which account is selected
119 // this first if determines if we selected a parent with no children or a child
120 // in these cases, we add standard three columns for date, transaction, amount
121 transactiondisplay->listview->addColumn ( "Date", 0 );
122 transactiondisplay->listview->addColumn ( "Transaction", 0 );
123 transactiondisplay->listview->addColumn ( "Amt", 0);
124 transactiondisplay->listview->setColumnAlignment ( 2, Qt::AlignRight );
125 transactiondisplay->listview->addColumn ( "", 0 );
126
127 if ( accountdisplay->listview->selectedItem()->parent() == 0 && accountdisplay->listview->selectedItem()->childCount() != 0 ) // we selected a parent with children
128 {
129 // add an extra column for the account name for eac child transaction
130 transactiondisplay->listview->addColumn ( "Acct", 0 );
131 children = TRUE;
132
133 // hide the new transaction button
134 transactiondisplay->newtransaction->setEnabled ( FALSE );
135 }
136 else //we selected a parent without children or a child
137 transactiondisplay->newtransaction->setEnabled ( TRUE );
138
139 // disable the transactionid column so it can't be red
140 transactiondisplay->listview->header()->setResizeEnabled ( FALSE, 3 );
141
142 // set the accountid and children variables
143 transactiondisplay->setChildren ( children );
144 transactiondisplay->setAccountID ( accountid );
145
146 // display transactions
147 transactiondisplay->listview->clear();
148 QString displaytext = "%";
149 displaytext.prepend ( transactiondisplay->limitbox->text() );
150 if ( transaction->getNumberOfTransactions() > 0 )
151 transaction->displayTransactions ( transactiondisplay->listview, accountid, children, displaytext );
152
153 // display transfers
154 transfer->displayTransfers ( transactiondisplay->listview, accountid, children );
155
156 // open a new preferences object and resize the transaction display columns
157 // each column will have a different size based on whether we are looking at a child
158 // account or children through a parent
159 if ( parentaccountid != -1 || accountdisplay->listview->selectedItem()->childCount() == 0 ) // a parent with no children or a child - three columns
160 {
161 transactiondisplay->listview->setColumnWidth ( 0, preferences->getColumnPreference ( 3 ) ); // normal transaction date width
162 transactiondisplay->listview->setColumnWidthMode ( 0, QListView::Manual );
163 transactiondisplay->listview->setColumnWidth ( 1, preferences->getColumnPreference ( 4 ) ); // normal transaction name width
164 transactiondisplay->listview->setColumnWidthMode ( 1, QListView::Manual );
165 transactiondisplay->listview->setColumnWidth ( 2, preferences->getColumnPreference ( 5 ) ); // normal transaction amount width
166 transactiondisplay->listview->setColumnWidthMode ( 2, QListView::Manual );
167 }
168 else
169 {
170 transactiondisplay->listview->setColumnWidth ( 0, preferences->getColumnPreference ( 6 ) ); // extended transaction date width
171 transactiondisplay->listview->setColumnWidthMode ( 0, QListView::Manual );
172 transactiondisplay->listview->setColumnWidth ( 1, preferences->getColumnPreference ( 7 ) ); // extended transaction name width
173 transactiondisplay->listview->setColumnWidthMode ( 1, QListView::Manual );
174 transactiondisplay->listview->setColumnWidth ( 2, preferences->getColumnPreference ( 8 ) ); // extended transaction amount width
175 transactiondisplay->listview->setColumnWidthMode ( 2, QListView::Manual );
176 transactiondisplay->listview->setColumnWidth ( 4, preferences->getColumnPreference ( 9 ) ); // transaction account width
177 transactiondisplay->listview->setColumnWidthMode ( 4, QListView::Manual );
178 }
179
180 // show the window
181 transactiondisplay->show();
182 // hide the account display and define accountid
183 accountdisplay->hide();
184 // hide the budget display
185 budgetdisplay->hide();
186 }
187 else if ( maintabs->currentPageIndex() == 0 )
188 {
189 disableOneTouchViewing();
190
191 // clear the account display selection
192 accountdisplay->listview->clearSelection();
193
194 // resize the account display columns
195 accountdisplay->listview->setColumnWidth ( 0, preferences->getColumnPreference ( 1 ) );
196 accountdisplay->listview->setColumnWidth ( 1, preferences->getColumnPreference ( 2 ) );
197
198 // display the accounts
199 if ( account->getNumberOfAccounts() != 0 )
200 account->displayAccounts ( accountdisplay->listview );
201 maintabs->setTabEnabled ( tab_2, FALSE );
202
203 // set the toggle button
204 accountdisplay->setToggleButton ();
205
206 // show the account display
207 accountdisplay->show();
208
209 // hide the transaction display
210 transactiondisplay->hide();
211
212 // hide the budget display
213 budgetdisplay->hide();
214
215
216 enableOneTouchViewing ();
217 }
218 else
219 {
220 budgetdisplay->displayLineItems();
221 budgetdisplay->show();
222 transactiondisplay->hide();
223 accountdisplay->hide();
224 }
225 }
226
227void QashMoney::setTransactionTab ()
228 {
229 if ( accountdisplay->listview->selectedItem() == 0 )
230 maintabs->setTabEnabled ( tab_2, FALSE );
231 else
232 maintabs->setTabEnabled ( tab_2, TRUE );
233 }
234
235void QashMoney::displayDatePreferencesDialog ()
236 {
237 // this shows a dialog to set preferences for formatting the date
238 DatePreferences *pd = new DatePreferences ( this );
239 pd->exec ();
240 if ( transactiondisplay->isVisible() )
241 {
242 // set the account id
243 int accountid = accountdisplay->listview->selectedItem()->text ( accountdisplay->getIDColumn() ).toInt();
244
245 // set children so we can let displayTransfers know if there are children for the selected account
246 bool children;
247 if ( accountdisplay->listview->selectedItem()->parent() == 0 && accountdisplay->listview->selectedItem()->childCount() != 0 )
248 children = TRUE;
249 else
250 children = FALSE;
251
252 // redisplay transactions if they are visible incorporating
253 // any changes to the date format
254 transactiondisplay->listview->clear();
255 QString displaytext = "%";
256 displaytext.prepend ( transactiondisplay->limitbox->text() );
257 if ( transaction->getNumberOfTransactions() > 0 )
258 transaction->displayTransactions ( transactiondisplay->listview, accountid, children, displaytext );
259
260 if ( transfer->getNumberOfTransfers() != 0 )
261 transfer->displayTransfers ( transactiondisplay->listview, accountid, children );
262 }
263 else if ( accountdisplay->isVisible() )
264 {
265 accountdisplay->listview->clearSelection();
266 maintabs->setTabEnabled ( tab_2, FALSE );
267 }
268 else
269 budgetdisplay->updateBudgetInformation();
270 }
271
272void QashMoney::displayTransactionPreferencesDialog ()
273 {
274 // display a dialog for setting preferences for transactions
275 TransactionPreferences *td = new TransactionPreferences ( this );
276 td->exec ();
277 if ( transactiondisplay->isVisible() )
278 {
279 // set the account id
280 int accountid = accountdisplay->listview->selectedItem()->text ( accountdisplay->getIDColumn() ).toInt();
281
282 // set children so we can let displayTransfers know if there are children for the selected account
283 bool children;
284 if ( accountdisplay->listview->selectedItem()->parent() == 0 && accountdisplay->listview->selectedItem()->childCount() != 0 )
285 children = TRUE;
286 else
287 children = FALSE;
288
289 // redisplay transactions incorporating any transaction preference changes
290 transactiondisplay->listview->clear();
291 QString displaytext = "%";
292 displaytext.prepend ( transactiondisplay->limitbox->text() );
293 if ( transaction->getNumberOfTransactions() > 0 )
294 transaction->displayTransactions ( transactiondisplay->listview, accountid, children, displaytext );
295
296 if ( transfer->getNumberOfTransfers() != 0 )
297 transfer->displayTransfers ( transactiondisplay->listview, accountid, children );
298 }
299 else
300 {
301 accountdisplay->listview->clearSelection();
302 maintabs->setTabEnabled ( tab_2, FALSE );
303 }
304 }
305
306void QashMoney::displayAccountPreferencesDialog ()
307 {
308 // display a dialog for setting preferences for accounts
309 AccountPreferences *ap = new AccountPreferences ( this );
310 ap->exec ();
311
312 if ( accountdisplay->isVisible() && account->getNumberOfAccounts() != 0 )
313 {
314 accountdisplay->listview->clear();
315 account->displayAccounts ( accountdisplay->listview );
316 accountdisplay->listview->clearSelection();
317 maintabs->setTabEnabled ( tab_2, FALSE );
318 }
319 changeTabDisplay();
320 }
321
322void QashMoney::displayMemoryDialog ()
323 {
324 // opens a dialog to add, edit and delete memory items
325 MemoryDialog *md = new MemoryDialog ();
326 md->exec();
327 }
328
329void QashMoney::showTransactions ()
330 {
331 maintabs->setCurrentPage ( 1 );
332 }
333
334void QashMoney::enableOneTouchViewing ()
335 {
336 if ( preferences->getPreference ( 5 ) == 1 )
337 connect ( accountdisplay->listview, SIGNAL ( selectionChanged () ), this, SLOT ( showTransactions () ) );
338 else
339 disconnect ( accountdisplay->listview, SIGNAL ( selectionChanged () ), this, SLOT ( showTransactions () ) );
340 }
341
342void QashMoney::disableOneTouchViewing ()
343 {
344 disconnect ( accountdisplay->listview, SIGNAL ( selectionChanged () ), this, SLOT ( showTransactions () ) );
345 }
346
347void QashMoney::toggleOneTouchViewing ( bool state )
348 {
349 if ( state == TRUE )
350 disableOneTouchViewing();
351 else
352 enableOneTouchViewing();
353 }
354
355
356
diff --git a/noncore/apps/qashmoney/transaction.cpp b/noncore/apps/qashmoney/transaction.cpp
new file mode 100755
index 0000000..af7d18f
--- a/dev/null
+++ b/noncore/apps/qashmoney/transaction.cpp
@@ -0,0 +1,274 @@
1// RESERVEDONE COLUMN NAME REPRESENTS THE LINEITEMID AND SHOULD BE CHANGED IN
2// FUTURE VERSIONS OF QASHMONEY
3
4// RESERVEDTWO REPRESENTS THE TRANSACTION DESCRIPTION
5
6#include "transaction.h"
7#include "account.h"
8#include "transactiondisplay.h"
9
10#include <stdlib.h>
11
12extern Account *account;
13extern Preferences *preferences;
14
15Transaction::Transaction ()
16 {
17 tdb = sqlite_open ( "qmtransactions.db", 0, NULL );
18 }
19
20Transaction::~Transaction ()
21 {
22 sqlite_close ( tdb );
23 }
24
25void Transaction::addTransaction ( QString description, QString payee, int accountid, int parentid, int number, int day, int month, int year, float amount, int cleared, int budgetid, int lineitemid )
26 {
27 sqlite_exec_printf ( tdb, "insert into transactions values ( '%q', %i, %i, %i, %i, %i, %i, %.2f, %i, %i, 0, 0, 0, 0, 0, 0, %i, '%q', 0,
28 0, 0, 0, NULL );", 0, 0, 0, ( const char * ) payee, accountid, parentid, number, day, month, year, amount, cleared, budgetid, lineitemid, ( const char * ) description );
29 }
30
31void Transaction::updateTransaction ( QString description, QString payee, int number, int day, int month, int year, float amount, int cleared, int budgetid, int lineitemid, int transactionid )
32 {
33 sqlite_exec_printf ( tdb, "update transactions set reservedtwo = '%q', payee = '%q', number = %i, day = %i, month = %i, year = %i, amount = %.2f,
34 cleared = %i, budgetid = %i, reservedone = %i where transid = %i;", 0, 0, 0, ( const char * ) description, ( const char * ) payee, number, day, month, year,
35 amount, cleared, budgetid, lineitemid, transactionid );
36 }
37
38void Transaction::deleteTransaction ( int transid )
39 {
40 sqlite_exec_printf ( tdb, "delete from transactions where transid = %i;", 0, 0, 0, transid );
41 }
42
43void Transaction::deleteAllTransactions ( int accountid )
44 {
45 sqlite_exec_printf ( tdb, "delete from transactions where accountid = %i;", 0, 0, 0, accountid );
46 }
47
48int Transaction::getAccountID ( int id )
49 {
50 char **results;
51 sqlite_get_table_printf ( tdb, "select accountid from transactions where transid= %i;", &results, NULL, NULL, NULL, id );
52 return atol ( results [ 1 ] );
53 }
54
55int Transaction::getNumberOfTransactions ()
56 {
57 char **results;
58 sqlite_get_table ( tdb, "select count() from transactions;", &results, NULL, NULL, NULL );
59 return atoi ( results [ 1 ] );
60 }
61
62int Transaction::getNumberOfTransactions ( int accountid )
63 {
64 char **results;
65 sqlite_get_table_printf ( tdb, "select count() from transactions where accountid = %i;", &results, NULL, NULL, NULL, accountid );
66 return atol ( results [ 1 ] );
67 }
68
69QString Transaction::getPayee ( int id )
70 {
71 char **results;
72 sqlite_get_table_printf ( tdb, "select payee from transactions where transid= %i;", &results, NULL, NULL, NULL, id );
73 return results [ 1 ];
74 }
75
76QString Transaction::getTransactionDescription ( int id )
77 {
78 char **results;
79 sqlite_get_table_printf ( tdb, "select reservedtwo from transactions where transid= %i;", &results, NULL, NULL, NULL, id );
80 return results [ 1 ];
81 }
82
83QString Transaction::getNumber ( int id )
84 {
85 char **results;
86 sqlite_get_table_printf ( tdb, "select number from transactions where transid= %i;", &results, NULL, NULL, NULL, id );
87 return results [ 1 ];
88 }
89
90QString Transaction::getAmount ( int id )
91 {
92 char **results;
93 sqlite_get_table_printf ( tdb, "select amount from transactions where transid= %i;", &results, NULL, NULL, NULL, id );
94 return results [ 1 ];
95 }
96
97QString Transaction::getAbsoluteAmount ( int id )
98 {
99 char **results;
100 sqlite_get_table_printf ( tdb, "select abs ( amount ) from transactions where transid= %i;", &results, NULL, NULL, NULL, id );
101 return results [ 1 ];
102 }
103
104int Transaction::getCleared ( int id )
105 {
106 char **results;
107 sqlite_get_table_printf ( tdb, "select cleared from transactions where transid= %i;", &results, NULL, NULL, NULL, id );
108 QString cleared = results [ 1 ];
109 return cleared.toInt();
110 }
111
112void Transaction::setCleared ( int id, int cleared )
113 {
114 sqlite_exec_printf ( tdb, "update transactions set cleared = %i where transid = %i;", 0, 0, 0, cleared, id );
115 }
116
117int Transaction::getBudgetID ( int id )
118 {
119 char **results;
120 sqlite_get_table_printf ( tdb, "select budgetid from transactions where transid = %i;", &results, NULL, NULL, NULL, id );
121 QString budgetid = results [ 1 ];
122 return budgetid.toInt();
123 }
124
125int Transaction::getLineItemID ( int id )
126 {
127 char **results;
128 sqlite_get_table_printf ( tdb, "select reservedone from transactions where transid = %i;", &results, NULL, NULL, NULL, id );
129 QString lineitemid = results [ 1 ];
130 return lineitemid.toInt();
131 }
132
133int Transaction::getDay ( int id )
134 {
135 char **results;
136 sqlite_get_table_printf ( tdb, "select day from transactions where transid= %i;", &results, NULL, NULL, NULL, id );
137 QString daystring = results [ 1 ];
138 return daystring.toInt();
139 }
140
141int Transaction::getMonth ( int id )
142 {
143 char **results;
144 sqlite_get_table_printf ( tdb, "select month from transactions where transid= %i;", &results, NULL, NULL, NULL, id );
145 QString monthstring = results [ 1 ];
146 return monthstring.toInt();
147 }
148
149int Transaction::getYear ( int id )
150 {
151 char **results;
152 sqlite_get_table_printf ( tdb, "select year from transactions where transid= %i;", &results, NULL, NULL, NULL, id );
153 QString yearstring = results [ 1 ];
154 return yearstring.toInt();
155 }
156
157void Transaction::displayTransactions ( QListView *listview, int id, bool children, const char *limit )
158 {
159 int showcleared = preferences->getPreference ( 3 );
160
161 // select the transactions to display
162 // two different statements are used based on
163 // whether we are showing cleared transactions
164 char **results;
165 int rows, columns;
166 if ( showcleared == 0 )
167 {
168 if ( account->getParentAccountID ( id ) == -1 && children == TRUE )
169 sqlite_get_table_printf ( tdb, "select day, month, year, payee, amount, transid, accountid from transactions where cleared = 0 and parentid = %i and payee like '%q';", &results, &rows, &columns, NULL, id, limit );
170 else
171 sqlite_get_table_printf ( tdb, "select day, month, year, payee, amount, transid, accountid from transactions where cleared = 0 and accountid = %i and payee like '%q';", &results, &rows, &columns, NULL, id, limit );
172 }
173 else
174 {
175 if ( account->getParentAccountID ( id ) == -1 && children == TRUE )
176 sqlite_get_table_printf ( tdb, "select day, month, year, payee, amount, transid, accountid from transactions where parentid = %i and payee like '%q';", &results, &rows, &columns, NULL, id, limit );
177 else
178 sqlite_get_table_printf ( tdb, "select day, month, year, payee, amount, transid, accountid from transactions where accountid = %i and payee like '%q';", &results, &rows, &columns, NULL, id, limit );
179 }
180
181 // iterate through the result list and display each item
182 int counter = 7;
183 while ( counter < ( ( rows + 1 ) * columns ) )
184 {
185 // construct the date
186 //QString daystring = results [ counter ];
187 //int day = results [ counter ].toInt ();
188 //QString monthstring = results [ counter + 1 ];
189 //int month = results [ counter + 1 ].toInt ();
190 //QString yearstring = results [ counter + 2 ];
191 //int year = results [ counter + 2 ].toInt ();
192 QString date = preferences->getDate ( atoi ( results [ counter + 2 ] ), atoi ( results [ counter + 1 ] ), atoi ( results [ counter ] ) );
193
194 // construct transaction name, amount, id
195 QString payee = results [ counter + 3 ];
196 QString amount = results [ counter + 4 ];
197 QString transferid = results [ counter + 5 ];
198
199 //determine the account name of the child accounts that we're displaying
200 QString accountname = account->getAccountName ( atoi ( results [ counter + 6 ] ) );
201
202 // fill in values
203 if ( account->getParentAccountID ( id ) != -1 ) // use these constructors if we're showing a child account
204 {
205 if ( showcleared == 1 && getCleared ( transferid.toInt() ) == 1 )
206 ColorListItem *item = new ColorListItem ( listview, date, payee, amount, transferid);
207 else
208 QListViewItem *item = new QListViewItem ( listview, date, payee, amount, transferid );
209 }
210 else
211 {
212 if ( showcleared == 1 && getCleared ( transferid.toInt() ) == 1 )
213 ColorListItem *item = new ColorListItem ( listview, date, payee, amount, transferid, accountname );
214 else
215 QListViewItem *item = new QListViewItem ( listview, date, payee, amount, transferid, accountname );
216 }
217
218 // advance counter
219 counter = counter + 7;
220 }
221 }
222
223QString Transaction::getBudgetTotal ( int budgetid, int lineitemid, int year, int month, int viewtype )
224 {
225 // determine if we are viewing a years, months, or days budget
226 // we have to pick a different sum for each
227 char **results;
228 switch ( viewtype )
229 {
230 case 1: // we are viewing a year
231 sqlite_get_table_printf ( tdb, "select abs ( sum ( amount ) ) from transactions where year = %i and amount < 0 and budgetid = %i and reservedone = %i;", &results, NULL, NULL, NULL, year, budgetid, lineitemid );
232 break;
233
234 case 0: // we are viewing a month
235 sqlite_get_table_printf ( tdb, "select abs ( sum ( amount ) ) from transactions where year = %i and month = %i and amount < 0 and budgetid = %i and reservedone = %i;", &results, NULL, NULL, NULL, year, month, budgetid, lineitemid );
236 break;
237 }
238 QString amount = results [ 1 ];
239 float total = amount.toFloat();
240 amount.setNum ( total, 'f', 2 );
241 return amount;
242 }
243
244QString Transaction::getActualTotal ( int budgetid, int year, int month, int viewtype )
245 {
246 // determine if we are viewing a years, months, or days budget
247 // we have to pick a different sum for each
248 char **results;
249 switch ( viewtype )
250 {
251 case 1: // we are viewing a year
252 sqlite_get_table_printf ( tdb, "select abs ( sum ( amount ) ) from transactions where year = %i and amount < 0 and budgetid = %i;", &results, NULL, NULL, NULL, year, budgetid );
253 break;
254
255 case 0: // we are viewing a month
256 sqlite_get_table_printf ( tdb, "select abs ( sum ( amount ) ) from transactions where year = %i and month = %i and amount < 0 and budgetid = %i;", &results, NULL, NULL, NULL, year, month, budgetid );
257 break;
258 }
259 QString amount = results [ 1 ];
260 float total = amount.toFloat();
261 amount.setNum ( total, 'f', 2 );
262 return amount;
263 }
264
265void Transaction::clearBudgetIDs ( int budgetid, int lineitemid )
266 {
267 sqlite_exec_printf ( tdb, "update transactions set budgetid = -1 where budgetid = %i and reservedone = %i;", 0, 0, 0, budgetid, lineitemid );
268 }
269
270void Transaction::clearBudgetIDs ( int budgetid )
271 {
272 sqlite_exec_printf ( tdb, "update transactions set budgetid = -1 where budgetid = %i;", 0, 0, 0, budgetid );
273 }
274
diff --git a/noncore/apps/qashmoney/transaction.h b/noncore/apps/qashmoney/transaction.h
new file mode 100755
index 0000000..5db011c
--- a/dev/null
+++ b/noncore/apps/qashmoney/transaction.h
@@ -0,0 +1,69 @@
1#ifndef TRANSACTION_H
2#define TRANSACTION_H
3
4#include <qstring.h>
5#include <qlistview.h>
6#include <sqlite.h>
7
8#include "preferences.h"
9
10class Transaction
11 {
12 public:
13
14 Transaction ();
15 ~Transaction ();
16
17 // This function adds a new transaction to the database. It takes the payee, accountid,
18 // budgetid, number, day, month, year, amount, cleared
19 void addTransaction ( QString description, QString payee, int accountid, int parentid, int number, int day, int month, int year, float amount, int cleared, int budgetid, int lineitemid );
20
21 // This updates an already existing transaction
22 void updateTransaction ( QString, QString, int, int, int, int, float, int, int, int, int );
23
24 // Deletes a transaction. Takes the transid as its parameter
25 void deleteTransaction ( int );
26
27 // Returns the number of transactions
28 int getNumberOfTransactions ();
29
30 // this is an overloaded function that returns the number of
31 // transactions for an account
32 int getNumberOfTransactions ( int );
33
34 // deletes all transactions for the provided accountid
35 void deleteAllTransactions ( int accountid );
36
37 QString getBudgetTotal ( int budgetid, int lineitemid, int year, int month, int viewtype );
38 QString getActualTotal ( int budgetid, int year, int month, int viewtype );
39
40 // These two functions clear budget ids is either a line item or an entire budget is deleted
41 void clearBudgetIDs ( int, int );
42 void clearBudgetIDs ( int );
43
44 public slots:
45
46 void displayTransactions ( QListView *, int, bool, const char * );
47 QString getPayee ( int );
48 QString getTransactionDescription ( int );
49 QString getNumber ( int );
50 QString getAmount ( int );
51 QString getAbsoluteAmount ( int );
52 int getCleared ( int );
53 void setCleared ( int id, int cleared );
54 int getBudgetID ( int id );
55 int getLineItemID ( int id );
56 int getDay ( int );
57 int getMonth ( int );
58 int getYear ( int );
59 int getAccountID ( int id );
60
61 private:
62
63 sqlite *tdb;
64 };
65
66#endif
67
68
69
diff --git a/noncore/apps/qashmoney/transactiondisplay.h b/noncore/apps/qashmoney/transactiondisplay.h
new file mode 100755
index 0000000..79f20ba
--- a/dev/null
+++ b/noncore/apps/qashmoney/transactiondisplay.h
@@ -0,0 +1,79 @@
1#ifndef TRANSACTIONDISPLAY_H
2#define TRANSACTIONDISPLAY_H
3
4#include <qlayout.h>
5#include <qhbox.h>
6#include <qlistview.h>
7#include <qpushbutton.h>
8#include <qlabel.h>
9#include <qlineedit.h>
10
11class TransactionDisplay : public QWidget
12 {
13 Q_OBJECT
14
15 public:
16 TransactionDisplay ( QWidget* parent );
17
18 QListView* listview;
19 QPushButton* newtransaction;
20 QPushButton* edittransaction;
21 QPushButton* deletetransaction;
22 QPushButton* toggletransaction;
23 QPushButton* viewtransactionnotes;
24
25 QLabel *name;
26 QLabel *balance;
27 QLineEdit *limitbox;
28 QLineEdit *amount;
29 QLineEdit *date;
30
31 int getIDColumn ();
32
33 public slots:
34 void setChildren ( bool );
35 void setAccountID ( int );
36 void showTransactionNotes ();
37
38 private slots:
39 void addTransaction ();
40 void editTransaction ();
41 void editTransfer ();
42 void deleteTransaction ();
43 void toggleTransaction ();
44 void checkListViewDelete ();
45 void checkListViewEdit ();
46 void checkListViewToggle ();
47 void saveColumnSize ( int column, int oldsize, int newsize );
48 void limitDisplay ( const QString & );
49 void showCalculator ();
50 void showCalendar ();
51
52 private:
53 int accountid, fromaccount, fromparent, toaccount, toparent, day, month, year, transferid;
54 bool children;
55 QBoxLayout *layout;
56 QHBox *firstline;
57 QHBox *secondline;
58 void redisplayAccountBalance ();
59 void updateAndDisplay ( int accountid );
60 };
61
62#endif
63
64#ifndef COLORLISTITEM_H
65#define COLORLISTITEM_H
66
67class ColorListItem : public QListViewItem
68 {
69 public:
70
71 ColorListItem ( QListView *parent );
72 ColorListItem ( QListView *parent, QString label1, QString label2, QString label3, QString label4 );
73 ColorListItem ( QListView *parent, QString label1, QString label2, QString label3, QString label4, QString label5 );
74
75 virtual void paintCell ( QPainter *p, const QColorGroup &cg, int column, int width, int alignment );
76 };
77
78#endif
79
diff --git a/noncore/apps/qashmoney/transfer.cpp b/noncore/apps/qashmoney/transfer.cpp
new file mode 100755
index 0000000..77cbb4e
--- a/dev/null
+++ b/noncore/apps/qashmoney/transfer.cpp
@@ -0,0 +1,253 @@
1#include "transfer.h"
2#include "account.h"
3#include "transactiondisplay.h"
4#include <stdlib.h>
5#include <iostream.h>
6
7extern Account *account;
8extern Preferences *preferences;
9
10Transfer::Transfer ()
11 {
12 db = sqlite_open ( "qmtransfers.db", 0, 0 );
13 }
14
15Transfer::~Transfer ()
16 {
17 sqlite_close ( db );
18 }
19
20void Transfer::addTransfer ( int fromaccount, int fromparent, int toaccount, int toparent, int day, int month, int year, float amount, int cleared )
21 {
22 int nextrowid = -1;
23 char **results;
24 sqlite_get_table ( db, "select count() from transfers;", &results, 0, 0, 0 );
25 if ( atoi ( results [ 1 ] ) != 0 )
26 {
27 char **results;
28 sqlite_get_table ( db, "select min ( rowid ) from transfers;", &results, 0, 0, 0 );
29 nextrowid = ( atoi ( results [ 1 ] ) ) - 1;
30 }
31 sqlite_exec_printf ( db, "insert into transfers values ( %i, %i, %i, %i, %i, %i, %i, 0, 0, %.2f, %i, 0, 0, 0, 0, 0, %i );", 0, 0, 0, fromaccount, fromparent, toaccount, toparent, day, month, year, amount, cleared, nextrowid );
32 }
33
34void Transfer::updateTransfer ( int fromaccount, int fromparent, int toaccount, int toparent, int day, int month, int year, float amount, int cleared, int transferid )
35 {
36 sqlite_exec_printf ( db, "update transfers set fromaccount = %i, fromparent = %i, toaccount = %i, toparent = %i, day = %i, month = %i, year = %i,
37 amount = %.2f, cleared = %i where transferid = %i;", 0, 0, 0, fromaccount, fromparent, toaccount, toparent, day, month, year, amount, cleared, transferid );
38 }
39
40void Transfer::deleteTransfer ( int transferid )
41 {
42 sqlite_exec_printf ( db, "delete from transfers where transferid = %i;", 0, 0, 0, transferid );
43 }
44
45void Transfer::deleteAllTransfers ( int accountid )
46 {
47 sqlite_exec_printf ( db, "delete from transfers where fromaccount = %i;", 0, 0, 0, accountid );
48 sqlite_exec_printf ( db, "delete from transfers where toaccount = %i;", 0, 0, 0, accountid );
49 }
50
51int Transfer::getNumberOfTransfers ()
52 {
53 char **results;
54 sqlite_get_table ( db, "select count() from transfers;", &results, 0, 0, 0 );
55 return atoi ( results [ 1 ] );
56 }
57
58int Transfer::getNumberOfTransfers ( int accountid )
59 {
60 char **results;
61 sqlite_get_table_printf ( db, "select count() from transfers where fromaccount = %i;", &results, 0, 0, 0, accountid );
62 int transfers = atoi ( results [ 1 ] );
63 sqlite_get_table_printf ( db, "select count() from transfers where toaccount = %i;", &results, 0, 0, 0, accountid );
64 transfers = transfers + atoi ( results [ 1 ] );
65 return transfers;
66 }
67
68void Transfer::displayTransfers ( QListView *listview, int accountid, bool children )
69 {
70 int showcleared = preferences->getPreference ( 3 );
71
72 // select the from transfers to display
73 char **results;
74 int rows, columns;
75 if ( account->getParentAccountID ( accountid ) == -1 && children == TRUE )
76 {
77 if ( showcleared == 0 )
78 sqlite_get_table_printf ( db, "select day, month, year, amount, transferid, fromaccount, toaccount from transfers where cleared = 0 and toparent = %i;", &results, &rows, &columns, 0, accountid );
79 else
80 sqlite_get_table_printf ( db, "select day, month, year, amount, transferid, fromaccount, toaccount from transfers where toparent = %i;", &results, &rows, &columns, 0, accountid );
81 }
82 else
83 {
84 if ( showcleared == 0 )
85 sqlite_get_table_printf ( db, "select day, month, year, amount, transferid, fromaccount, toaccount from transfers where cleared = 0 and toaccount = %i;", &results, &rows, &columns, 0, accountid );
86 else
87 sqlite_get_table_printf ( db, "select day, month, year, amount, transferid, fromaccount, toaccount from transfers where toaccount = %i;", &results, &rows, &columns, 0, accountid );
88 }
89
90 // iterate through the list and display the from items
91 int counter = 7;
92 int position = 0;
93 while ( counter < ( ( rows + 1 ) * columns ) )
94 {
95 // construct the date
96 QString daystring = results [ counter ];
97 int day = daystring.toInt ();
98 QString monthstring = results [ counter + 1 ];
99 int month = monthstring.toInt ();
100 QString yearstring = results [ counter + 2 ];
101 int year = yearstring.toInt ();
102 QString date = preferences->getDate ( year, month, day );
103
104 //construct the amount and id strings
105 QString amount = results [ counter + 3 ];
106 QString id = results [ counter + 4 ];
107
108 // construct the transaction name
109 QString transactionname = "FROM: ";
110 QString temp1 = results [ counter + 5 ];
111 transactionname.append ( account->getAccountName ( temp1.toInt() ) );
112
113 QString toaccount = account->getAccountName ( atol ( results [ counter + 6 ] ) );
114
115 // display this transfer
116 if ( account->getParentAccountID ( accountid ) == -1 )
117 {
118 if ( showcleared == 1 && getCleared ( id.toInt() ) == 1 )
119 ColorListItem *item = new ColorListItem ( listview, date, transactionname, amount, id, toaccount );
120 else
121 QListViewItem *item = new QListViewItem ( listview, date, transactionname, amount, id, toaccount );
122 }
123 else
124 {
125 if ( showcleared == 1 && getCleared ( id.toInt() ) == 1 )
126 ColorListItem *item = new ColorListItem ( listview, date, transactionname, amount, id );
127 else
128 QListViewItem *item = new QListViewItem ( listview, date, transactionname, amount, id );
129 }
130
131 counter = counter + 7;
132 }
133
134 // select the to transfers to display
135 char **toresults;
136 rows = 0;
137 columns = 0;
138 if ( account->getParentAccountID ( accountid ) == -1 && children == TRUE )
139 {
140 if ( showcleared == 0 )
141 sqlite_get_table_printf ( db, "select day, month, year, amount, transferid, fromaccount, toaccount from transfers where cleared = 0 and fromparent = %i;", &toresults, &rows, &columns, 0, accountid );
142 else
143 sqlite_get_table_printf ( db, "select day, month, year, amount, transferid, fromaccount, toaccount from transfers where fromparent = %i;", &toresults, &rows, &columns, 0, accountid );
144 }
145 else
146 {
147 if ( showcleared == 0 )
148 sqlite_get_table_printf ( db, "select day, month, year, amount, transferid, fromaccount, toaccount from transfers where cleared = 0 and fromaccount = %i;", &toresults, &rows, &columns, 0, accountid );
149 else
150 sqlite_get_table_printf ( db, "select day, month, year, amount, transferid, fromaccount, toaccount from transfers where fromaccount = %i;", &toresults, &rows, &columns, 0, accountid );
151 }
152
153 // iterate through the list and display the from items
154 counter = 7;
155 position = 0;
156 while ( counter < ( ( rows + 1 ) * columns ) )
157 {
158 // construct the date
159 QString daystring = toresults [ counter ];
160 int day = daystring.toInt ();
161 QString monthstring = toresults [ counter + 1 ];
162 int month = monthstring.toInt ();
163 QString yearstring = toresults [ counter + 2 ];
164 int year = yearstring.toInt ();
165 QString date = preferences->getDate ( year, month, day );
166
167 //construct the amount and id strings
168 QString amount = toresults [ counter + 3 ];
169 amount.prepend ( "-" );
170 QString id = toresults [ counter + 4 ];
171
172 // construct the transaction name
173 QString transactionname = "TO: ";
174 QString temp1 = toresults [ counter + 6 ];
175 transactionname.append ( account->getAccountName ( temp1.toInt() ) );
176
177 QString fromaccount = account->getAccountName ( atol ( toresults [ counter + 5 ] ) );
178
179 // display this transfer
180 if ( account->getParentAccountID ( accountid ) == -1 )
181 {
182 if ( showcleared == 1 && getCleared ( id.toInt() ) == 1 )
183 ColorListItem *item = new ColorListItem ( listview, date, transactionname, amount, id, fromaccount );
184 else
185 QListViewItem *item = new QListViewItem ( listview, date, transactionname, amount, id, fromaccount );
186 }
187 else
188 {
189 if ( showcleared == 1 && getCleared ( id.toInt() ) == 1 )
190 ColorListItem *item = new ColorListItem ( listview, date, transactionname, amount, id );
191 else
192 QListViewItem *item = new QListViewItem ( listview, date, transactionname, amount, id );
193 }
194
195 counter = counter + 7;
196 }
197 }
198
199int Transfer::getCleared ( int id )
200 {
201 char **results;
202 sqlite_get_table_printf ( db, "select cleared from transfers where transferid= %i;", &results, 0, 0, 0, id );
203 return atoi ( results [ 1 ] );
204 }
205
206void Transfer::setCleared ( int id, int cleared )
207 {
208 sqlite_exec_printf ( db, "update transfers set cleared = %i where transferid = %i;", 0, 0, 0, cleared, id );
209 }
210
211int Transfer::getFromAccountID ( int id )
212 {
213 char **results;
214 sqlite_get_table_printf ( db, "select fromaccount from transfers where transferid= %i;", &results, 0, 0, 0, id );
215 return atoi ( results [ 1 ] );
216 }
217
218int Transfer::getToAccountID ( int id )
219 {
220 char **results;
221 sqlite_get_table_printf ( db, "select toaccount from transfers where transferid= %i;", &results, 0, 0, 0, id );
222 return atoi ( results [ 1 ] );
223 }
224
225int Transfer::getDay ( int id )
226 {
227 char **results;
228 sqlite_get_table_printf ( db, "select day from transfers where transferid= %i;", &results, 0, 0, 0, id );
229 return atoi ( results [ 1 ] );
230 }
231
232int Transfer::getMonth ( int id )
233 {
234 char **results;
235 sqlite_get_table_printf ( db, "select month from transfers where transferid= %i;", &results, 0, 0, 0, id );
236 return atoi ( results [ 1 ] );
237 }
238
239int Transfer::getYear ( int id )
240 {
241 char **results;
242 sqlite_get_table_printf ( db, "select year from transfers where transferid= %i;", &results, 0, 0, 0, id );
243 return atoi ( results [ 1 ] );
244 }
245
246QString Transfer::getAmount ( int id )
247 {
248 char **results;
249 sqlite_get_table_printf ( db, "select amount from transfers where transferid= %i;", &results, 0, 0, 0, id );
250 return results [ 1 ];
251 }
252
253
diff --git a/noncore/apps/qashmoney/transfer.h b/noncore/apps/qashmoney/transfer.h
new file mode 100755
index 0000000..33dedf4
--- a/dev/null
+++ b/noncore/apps/qashmoney/transfer.h
@@ -0,0 +1,51 @@
1#ifndef TRANSFER_H
2#define TRANSFER_H
3
4#include <qlistview.h>
5#include <qstring.h>
6#include <sqlite.h>
7
8#include "preferences.h"
9
10class Transfer
11 {
12 public:
13
14 Transfer ();
15 ~Transfer ();
16
17 // This function adds a new transfer to the database. It takes the fromaccount, toaccount,
18 // number, frombudget, tobudget, day, month, year, amount, cleared
19 void addTransfer ( int fromaccount, int fromparent, int toaccount, int toparent, int day, int month, int year, float amount, int cleared );
20 void updateTransfer ( int fromaccount, int fromparent, int toaccount, int toparent, int day, int month, int year, float amount, int cleared, int transferid );
21
22 // Deletes a transfer. Takes the transferid as its parameter
23 void deleteTransfer ( int );
24
25 // Deletes all transfers for a given accountid
26 void deleteAllTransfers ( int accountid );
27
28 // Returns the number of checking transfers
29 int getNumberOfTransfers ();
30 int getNumberOfTransfers ( int accountid );
31
32 void displayTransfers ( QListView *listview, int accountid, bool children );
33 int getCleared ( int id );
34 void setCleared ( int id, int cleared );
35 int getFromAccountID ( int id );
36 int getToAccountID ( int id );
37
38 int getDay ( int id );
39 int getMonth ( int id );
40 int getYear ( int id );
41 QString getAmount ( int id );
42
43 private:
44
45 sqlite *db;
46 };
47
48#endif
49
50
51