summaryrefslogtreecommitdiff
path: root/noncore/apps/qashmoney/transaction.cpp
Unidiff
Diffstat (limited to 'noncore/apps/qashmoney/transaction.cpp') (more/less context) (ignore whitespace changes)
-rwxr-xr-xnoncore/apps/qashmoney/transaction.cpp122
1 files changed, 99 insertions, 23 deletions
diff --git a/noncore/apps/qashmoney/transaction.cpp b/noncore/apps/qashmoney/transaction.cpp
index 5ecc7ed..a3bd9e7 100755
--- a/noncore/apps/qashmoney/transaction.cpp
+++ b/noncore/apps/qashmoney/transaction.cpp
@@ -152,67 +152,143 @@ int Transaction::getYear ( int id )
152 char **results; 152 char **results;
153 sqlite_get_table_printf ( tdb, "select year from transactions where transid= %i;", &results, NULL, NULL, NULL, id ); 153 sqlite_get_table_printf ( tdb, "select year from transactions where transid= %i;", &results, NULL, NULL, NULL, id );
154 QString yearstring = results [ 1 ]; 154 QString yearstring = results [ 1 ];
155 return yearstring.toInt(); 155 return yearstring.toInt();
156 } 156 }
157 157
158void Transaction::displayTransactions ( QListView *listview, int id, bool children, const char *limit, QDate displaydate ) 158char ** Transaction::selectAllTransactions ( QDate fromdate, bool children, const char *limit, int id )
159 { 159 {
160 // initialize variables
161 char **results;
160 int showcleared = preferences->getPreference ( 3 ); 162 int showcleared = preferences->getPreference ( 3 );
161 int year = ( displaydate.year() ) - 1; 163 QDate today = QDate::currentDate();
164 int fromyear = fromdate.year();
165 int toyear = today.year();
166 int frommonth = fromdate.month();
167 int tomonth = today.month();
168 int fromday = fromdate.day();
162 169
163 // select the transactions to display 170 // construct the first part of the string
164 // two different statements are used based on 171 QString query = "select day, month, year, payee, amount, transid, accountid from transactions where";
165 // whether we are showing cleared transactions 172
166 char **results; 173 if ( frommonth == tomonth && fromyear == toyear ) // our dates cross neither a month nor a year
167 int rows, columns;
168 if ( showcleared == 0 )
169 { 174 {
170 if ( account->getParentAccountID ( id ) == -1 && children == TRUE ) 175 query.append ( " year = " );
171 sqlite_get_table_printf ( tdb, "select day, month, year, payee, amount, transid, accountid from transactions where cleared = 0 and year >= %i parentid = %i and payee like '%q';", &results, &rows, &columns, NULL, year, id, limit ); 176 query.append ( QString::number ( toyear ) );
172 else 177 query.append ( " and month = " );
173 sqlite_get_table_printf ( tdb, "select day, month, year, payee, amount, transid, accountid from transactions where cleared = 0 year >= %i accountid = %i and payee like '%q';", &results, &rows, &columns, NULL, year, id, limit ); 178 query.append ( QString::number ( tomonth ) );
179 query.append ( " and day >= " );
180 query.append ( QString::number ( fromday ) );
181 query.append ( " and" );
174 } 182 }
175 else 183 else if ( frommonth != tomonth && fromyear == toyear ) // our dates cross a month within the same year
176 { 184 {
177 if ( account->getParentAccountID ( id ) == -1 && children == TRUE ) 185 query.append ( " year = " );
178 sqlite_get_table_printf ( tdb, "select day, month, year, payee, amount, transid, accountid from transactions where year >= %i and parentid = %i and payee like '%q';", &results, &rows, &columns, NULL, year, id, limit ); 186 query.append ( QString::number ( toyear ) );
179 else 187 query.append ( " and ( ( month <= " );
180 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 ); 188 query.append ( QString::number ( tomonth ) );
189 query.append ( " and month > " );
190 query.append ( QString::number ( frommonth ) );
191 query.append ( " ) or ( month = " );
192 query.append ( QString::number ( frommonth ) );
193 query.append ( " and day >= " );
194 query.append ( QString::number ( fromday ) );
195 query.append ( " ) ) and " );
181 } 196 }
197 else if ( fromyear != toyear && fromyear != 1900 ) // here we are showing transactions from an entire year
198 {
199 // divide this taks into two parts - get the transactions from the prior and then the current year
200 // current year part
201 int tmpfrommonth = 1; // set temporary from months and days to Jan. 1
202 int tmpfromday = 1;
203 query.append ( " ( year >= " );
204 query.append ( QString::number ( fromyear ) );
205 query.append ( " and ( month <= " );
206 query.append ( QString::number ( tomonth ) );
207 query.append ( " and month > " );
208 query.append ( QString::number ( tmpfrommonth ) );
209 query.append ( " ) or ( month = " );
210 query.append ( QString::number ( tmpfrommonth ) );
211 query.append ( " and day >= " );
212 query.append ( QString::number ( tmpfromday ) );
213 query.append ( " ) ) or" );
214
215 // prior year part
216 int tmptomonth = 12;
217 query.append ( " ( year = " );
218 query.append ( QString::number ( fromyear ) );
219 query.append ( " and ( ( month <= " );
220 query.append ( QString::number ( tmptomonth ) );
221 query.append ( " and month > " );
222 query.append ( QString::number ( frommonth ) );
223 query.append ( " ) or ( month = " );
224 query.append ( QString::number ( frommonth ) );
225 query.append ( " and day >= " );
226 query.append ( QString::number ( fromday ) );
227 query.append ( " ) ) ) and " );
228 }
229
230 if ( account->getParentAccountID ( id ) == -1 && children == TRUE )
231 query.append ( " parentid = %i and payee like '%q';" );
232 else
233 query.append ( " accountid = %i and payee like '%q';" );
234
235 sqlite_get_table_printf ( tdb, query, &results, &rows, &columns, NULL, id, limit );
236 return results;
237 }
238
239char ** Transaction::selectNonClearedTransactions ( QDate fromdate, bool children, const char *limit, int id )
240 {
241 char **results;
242 if ( account->getParentAccountID ( id ) == -1 && children == TRUE )
243 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 );
244 else
245 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 );
246 return results;
247 }
248
249void Transaction::displayTransactions ( QListView *listview, int id, bool children, const char *limit, QDate displaydate )
250 {
251 int showcleared = preferences->getPreference ( 3 );
252
253 char **results;
254 if ( showcleared == 0 )
255 results = selectNonClearedTransactions ( displaydate, children, limit, id );
256 else
257 results = selectAllTransactions ( displaydate, children, limit, id );
182 258
183 // iterate through the result list and display each item 259 // iterate through the result list and display each item
184 int counter = 7; 260 int counter = 7;
185 while ( counter < ( ( rows + 1 ) * columns ) ) 261 while ( counter < ( ( rows + 1 ) * columns ) )
186 { 262 {
187 QDate displaydate ( atoi ( results [ counter + 2 ] ), atoi ( results [ counter + 1 ] ), atoi ( results [ counter ] ) ); 263 //QDate testdate ( atoi ( results [ counter + 2 ] ), atoi ( results [ counter + 1 ] ), atoi ( results [ counter ] ) );
188 QString date = preferences->getDate ( atoi ( results [ counter + 2 ] ), atoi ( results [ counter + 1 ] ), atoi ( results [ counter ] ) ); 264 QString date = preferences->getDate ( atoi ( results [ counter + 2 ] ), atoi ( results [ counter + 1 ] ), atoi ( results [ counter ] ) );
189 265
190 // construct transaction name, amount, id 266 // construct transaction name, amount, id
191 QString payee = results [ counter + 3 ]; 267 QString payee = results [ counter + 3 ];
192 QString amount = results [ counter + 4 ]; 268 QString amount = results [ counter + 4 ];
193 QString transferid = results [ counter + 5 ]; 269 QString transferid = results [ counter + 5 ];
194 270
195 //determine the account name of the child accounts that we're displaying 271 //determine the account name of the child accounts that we're displaying
196 QString accountname = account->getAccountName ( atoi ( results [ counter + 6 ] ) ); 272 QString accountname = account->getAccountName ( atoi ( results [ counter + 6 ] ) );
197 273
198 // fill in values 274 // fill in values
199 if ( account->getParentAccountID ( id ) != -1 ) // use these constructors if we're showing a child account 275 if ( account->getParentAccountID ( id ) != -1 ) // use these constructors if we're showing a child account
200 { 276 {
201 if ( showcleared == 1 && getCleared ( transferid.toInt() ) == 1 ) 277 if ( showcleared == 1 && getCleared ( transferid.toInt() ) == 1 )
202 ColorListItem *item = new ColorListItem ( listview, date, payee, amount, transferid); 278 ColorListItem *item = new ColorListItem ( listview, date, payee, amount, transferid );
203 else 279 else
204 QListViewItem *item = new QListViewItem ( listview, date, payee, amount, transferid ); 280 QListViewItem *item = new QListViewItem ( listview, date, payee, amount, transferid );
205 } 281 }
206 else 282 else
207 { 283 {
208 if ( showcleared == 1 && getCleared ( transferid.toInt() ) == 1 ) 284 if ( showcleared == 1 && getCleared ( transferid.toInt() ) == 1 )
209 ColorListItem *item = new ColorListItem ( listview, date, payee, amount, transferid, accountname ); 285 ColorListItem *item = new ColorListItem ( listview, date, payee, amount, transferid, accountname );
210 else 286 else
211 QListViewItem *item = new QListViewItem ( listview, date, payee, amount, transferid, accountname ); 287 QListViewItem *item = new QListViewItem ( listview, date, payee, amount, transferid, accountname );
212 } 288 }
213 289
214 // advance counter 290 // advance counter
215 counter = counter + 7; 291 counter = counter + 7;
216 } 292 }
217 } 293 }
218 294