1 /* ************************************************************************** */
2 /* */
3 /* Copyright (C) 2000-2007 Cédric Auger (cedric@grisbi.org) */
4 /* 2003-2007 Benjamin Drieu (bdrieu@april.org) */
5 /* https://www.grisbi.org/ */
6 /* */
7 /* This program is free software; you can redistribute it and/or modify */
8 /* it under the terms of the GNU General Public License as published by */
9 /* the Free Software Foundation; either version 2 of the License, or */
10 /* (at your option) any later version. */
11 /* */
12 /* This program is distributed in the hope that it will be useful, */
13 /* but WITHOUT ANY WARRANTY; without even the implied warranty of */
14 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the */
15 /* GNU General Public License for more details. */
16 /* */
17 /* You should have received a copy of the GNU General Public License */
18 /* along with this program; if not, write to the Free Software */
19 /* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
20 /* */
21 /* ************************************************************************** */
22
23 /**
24 * \file gsb_data_mix.c
25 * this file contains some functions used to split between transactions
26 * and scheduled transactions in mixed calls
27 * example :
28 * if a function wants to set the account number :
29 * for a transaction : gsb_data_transaction_set_account_number
30 * for a scheduled : gsb_data_scheduled_set_account_number
31 *
32 * but if the function can work with transactions and scheduled (usually a
33 * boolean is_transaction is used), it can call the function here :
34 * gsb_data_mix_set_account_number with the is_transaction param (TRUE for transaction,
35 * FALSE for scheduled transaction), which will call the directly gsb_data_mix_set_account_number
36 * or gsb_data_scheduled_set_account_number
37 *
38 * there is no description here, to see the description, go to see the description of
39 * the relative functions in transaction or scheduled transaction
40 *
41 * -2 interestings points with that functions :
42 * -reduce place of code, instead of if (is_transaction) gsb_data_... 4 lines, only one
43 * with gsb_data_mix_...
44 * -it exists also some gsb_data_mix_ which exist only for transaction. it's a good thing because avoid to fill
45 * a transaction with the number of the scheduled transaction (for example if someone succeed to fill a value date
46 * for a scheduled transaction (normally not possible), if we don't use gsb_data_mix and don't protect before against
47 * that kind of error, the transaction with the number of the scheduled transaction will have its value date changed...
48 */
49
50
51 #ifdef HAVE_CONFIG_H
52 #include "config.h"
53 #endif
54
55 #include "include.h"
56
57
58 /*START_INCLUDE*/
59 #include "gsb_data_mix.h"
60 #include "gsb_data_scheduled.h"
61 #include "gsb_data_transaction.h"
62 #include "gsb_real.h"
63 #include "gsb_scheduler_list.h"
64 #include "gsb_transactions_list.h"
65 #include "navigation.h"
66 /*END_INCLUDE*/
67
68 /*START_STATIC*/
69 /*END_STATIC*/
70
71 /*START_EXTERN*/
72 /*END_EXTERN*/
73
74
75
gsb_data_mix_new_transaction(gint account_number,gboolean is_transaction)76 gint gsb_data_mix_new_transaction ( gint account_number,
77 gboolean is_transaction )
78 {
79 if ( is_transaction )
80 return ( gsb_data_transaction_new_transaction ( account_number ) );
81 else
82 {
83 /* need to set the account number after because doesn't get in param */
84 gint number;
85
86 number = gsb_data_scheduled_new_scheduled ();
87 gsb_data_scheduled_set_account_number ( number, account_number );
88 return ( number );
89 }
90 }
91
92
gsb_data_mix_get_account_number(gint transaction_number,gboolean is_transaction)93 gint gsb_data_mix_get_account_number ( gint transaction_number,
94 gboolean is_transaction )
95 {
96 if ( is_transaction )
97 return ( gsb_data_transaction_get_account_number ( transaction_number ) );
98 else
99 return (gsb_data_scheduled_get_account_number ( transaction_number ) );
100 }
101
gsb_data_mix_get_date(gint transaction_number,gboolean is_transaction)102 const GDate *gsb_data_mix_get_date ( gint transaction_number,
103 gboolean is_transaction )
104 {
105 if ( is_transaction )
106 return ( gsb_data_transaction_get_date ( transaction_number ) );
107 else
108 return ( gsb_data_scheduled_get_date ( transaction_number ) );
109 }
110
gsb_data_mix_set_date(gint transaction_number,GDate * date,gboolean is_transaction)111 gboolean gsb_data_mix_set_date ( gint transaction_number,
112 GDate *date,
113 gboolean is_transaction )
114 {
115 if ( is_transaction )
116 return ( gsb_data_transaction_set_date ( transaction_number, date ) );
117 else
118 return ( gsb_data_scheduled_set_date ( transaction_number, date ) );
119 }
120
gsb_data_mix_set_value_date(gint transaction_number,GDate * date,gboolean is_transaction)121 gboolean gsb_data_mix_set_value_date ( gint transaction_number,
122 GDate *date,
123 gboolean is_transaction )
124 {
125 if ( is_transaction )
126 return (gsb_data_transaction_set_value_date ( transaction_number, date ) );
127
128 return FALSE;
129 }
130
gsb_data_mix_get_amount(gint transaction_number,gboolean is_transaction)131 GsbReal gsb_data_mix_get_amount ( gint transaction_number,
132 gboolean is_transaction )
133 {
134 if ( is_transaction )
135 return ( gsb_data_transaction_get_amount ( transaction_number ) );
136 else
137 return ( gsb_data_scheduled_get_amount ( transaction_number ) );
138 }
139
gsb_data_mix_set_amount(gint transaction_number,GsbReal amount,gboolean is_transaction)140 gboolean gsb_data_mix_set_amount ( gint transaction_number,
141 GsbReal amount,
142 gboolean is_transaction )
143 {
144 if ( is_transaction )
145 return ( gsb_data_transaction_set_amount ( transaction_number, amount ) );
146 else
147 return ( gsb_data_scheduled_set_amount ( transaction_number, amount ) );
148 }
149
gsb_data_mix_get_currency_number(gint transaction_number,gboolean is_transaction)150 gint gsb_data_mix_get_currency_number ( gint transaction_number,
151 gboolean is_transaction )
152 {
153 if ( is_transaction )
154 return ( gsb_data_transaction_get_currency_number ( transaction_number ) );
155 else
156 return ( gsb_data_scheduled_get_currency_number ( transaction_number ) );
157 }
158
gsb_data_mix_set_currency_number(gint transaction_number,gint no_currency,gboolean is_transaction)159 gboolean gsb_data_mix_set_currency_number ( gint transaction_number,
160 gint no_currency,
161 gboolean is_transaction )
162 {
163 if ( is_transaction )
164 return ( gsb_data_transaction_set_currency_number ( transaction_number, no_currency ) );
165 else
166 return (gsb_data_scheduled_set_currency_number ( transaction_number, no_currency ) );
167 }
168
169
gsb_data_mix_get_party_number(gint transaction_number,gboolean is_transaction)170 gint gsb_data_mix_get_party_number ( gint transaction_number,
171 gboolean is_transaction )
172 {
173 if ( is_transaction )
174 return ( gsb_data_transaction_get_party_number ( transaction_number ) );
175 else
176 return ( gsb_data_scheduled_get_party_number ( transaction_number ) );
177 }
178
gsb_data_mix_set_party_number(gint transaction_number,gint no_party,gboolean is_transaction)179 gboolean gsb_data_mix_set_party_number ( gint transaction_number,
180 gint no_party,
181 gboolean is_transaction )
182 {
183 if ( is_transaction )
184 return ( gsb_data_transaction_set_party_number ( transaction_number, no_party ) );
185 else
186 return ( gsb_data_scheduled_set_party_number ( transaction_number, no_party ) );
187 }
188
gsb_data_mix_get_category_number(gint transaction_number,gboolean is_transaction)189 gint gsb_data_mix_get_category_number ( gint transaction_number,
190 gboolean is_transaction )
191 {
192 if ( is_transaction )
193 return ( gsb_data_transaction_get_category_number ( transaction_number ) );
194 else
195 return ( gsb_data_scheduled_get_category_number ( transaction_number ) );
196 }
197
gsb_data_mix_set_category_number(gint transaction_number,gint no_category,gboolean is_transaction)198 gboolean gsb_data_mix_set_category_number ( gint transaction_number,
199 gint no_category,
200 gboolean is_transaction )
201 {
202 if ( is_transaction )
203 return ( gsb_data_transaction_set_category_number ( transaction_number, no_category ) );
204 else
205 return ( gsb_data_scheduled_set_category_number ( transaction_number, no_category ) );
206 }
207
gsb_data_mix_get_sub_category_number(gint transaction_number,gboolean is_transaction)208 gint gsb_data_mix_get_sub_category_number ( gint transaction_number,
209 gboolean is_transaction )
210 {
211 if ( is_transaction )
212 return ( gsb_data_transaction_get_sub_category_number ( transaction_number ) );
213 else
214 return (gsb_data_scheduled_get_sub_category_number ( transaction_number ) );
215 }
216
gsb_data_mix_set_sub_category_number(gint transaction_number,gint no_sub_category,gboolean is_transaction)217 gboolean gsb_data_mix_set_sub_category_number ( gint transaction_number,
218 gint no_sub_category,
219 gboolean is_transaction )
220 {
221 if ( is_transaction )
222 return (gsb_data_transaction_set_sub_category_number ( transaction_number,
223 no_sub_category ) );
224 else
225 return (gsb_data_scheduled_set_sub_category_number ( transaction_number,
226 no_sub_category ) );
227 }
228
gsb_data_mix_get_split_of_transaction(gint transaction_number,gboolean is_transaction)229 gint gsb_data_mix_get_split_of_transaction ( gint transaction_number,
230 gboolean is_transaction )
231 {
232 if ( is_transaction )
233 return ( gsb_data_transaction_get_split_of_transaction ( transaction_number ) );
234 else
235 return ( gsb_data_scheduled_get_split_of_scheduled ( transaction_number ) );
236 }
237
gsb_data_mix_set_split_of_transaction(gint transaction_number,gint is_split,gboolean is_transaction)238 gboolean gsb_data_mix_set_split_of_transaction ( gint transaction_number,
239 gint is_split,
240 gboolean is_transaction )
241 {
242 if ( is_transaction )
243 return ( gsb_data_transaction_set_split_of_transaction ( transaction_number, is_split ) );
244 else
245 return ( gsb_data_scheduled_set_split_of_scheduled ( transaction_number, is_split ) );
246 }
247
gsb_data_mix_get_notes(gint transaction_number,gboolean is_transaction)248 const gchar *gsb_data_mix_get_notes ( gint transaction_number,
249 gboolean is_transaction )
250 {
251 if ( is_transaction )
252 return ( gsb_data_transaction_get_notes ( transaction_number ) );
253 else
254 return ( gsb_data_scheduled_get_notes ( transaction_number ) );
255 }
256
gsb_data_mix_set_notes(gint transaction_number,const gchar * notes,gboolean is_transaction)257 gboolean gsb_data_mix_set_notes ( gint transaction_number,
258 const gchar *notes,
259 gboolean is_transaction )
260 {
261 if ( is_transaction )
262 return ( gsb_data_transaction_set_notes ( transaction_number, notes ) );
263 else
264 return ( gsb_data_scheduled_set_notes ( transaction_number, notes ) );
265 }
266
gsb_data_mix_get_method_of_payment_number(gint transaction_number,gboolean is_transaction)267 gint gsb_data_mix_get_method_of_payment_number ( gint transaction_number,
268 gboolean is_transaction )
269 {
270 if ( is_transaction )
271 return ( gsb_data_transaction_get_method_of_payment_number ( transaction_number ) );
272 else
273 return ( gsb_data_scheduled_get_method_of_payment_number ( transaction_number ) );
274 }
275
gsb_data_mix_set_method_of_payment_number(gint transaction_number,int number,gboolean is_transaction)276 gboolean gsb_data_mix_set_method_of_payment_number ( gint transaction_number,
277 int number,
278 gboolean is_transaction )
279 {
280 if ( is_transaction )
281 return ( gsb_data_transaction_set_method_of_payment_number ( transaction_number, number ) );
282 else
283 return (gsb_data_scheduled_set_method_of_payment_number ( transaction_number, number ) );
284 }
285
gsb_data_mix_set_method_of_payment_content(gint transaction_number,const gchar * method_of_payment_content,gboolean is_transaction)286 gboolean gsb_data_mix_set_method_of_payment_content ( gint transaction_number,
287 const gchar *method_of_payment_content,
288 gboolean is_transaction )
289 {
290 if ( is_transaction )
291 return ( gsb_data_transaction_set_method_of_payment_content ( transaction_number,
292 method_of_payment_content ) );
293 else
294 return ( gsb_data_scheduled_set_method_of_payment_content ( transaction_number,
295 method_of_payment_content ) );
296 }
297
gsb_data_mix_get_automatic_transaction(gint transaction_number,gboolean is_transaction)298 gint gsb_data_mix_get_automatic_transaction ( gint transaction_number,
299 gboolean is_transaction )
300 {
301 if (is_transaction)
302 return ( gsb_data_transaction_get_automatic_transaction (transaction_number));
303 else
304 return (gsb_data_scheduled_get_automatic_scheduled (transaction_number));
305
306 return 0;
307 }
308
gsb_data_mix_get_financial_year_number(gint transaction_number,gboolean is_transaction)309 gint gsb_data_mix_get_financial_year_number ( gint transaction_number,
310 gboolean is_transaction )
311 {
312 if ( is_transaction )
313 return ( gsb_data_transaction_get_financial_year_number ( transaction_number ) );
314 else
315 return ( gsb_data_scheduled_get_financial_year_number ( transaction_number ) );
316 }
317
gsb_data_mix_set_financial_year_number(gint transaction_number,gint financial_year_number,gboolean is_transaction)318 gboolean gsb_data_mix_set_financial_year_number ( gint transaction_number,
319 gint financial_year_number,
320 gboolean is_transaction )
321 {
322 if ( is_transaction )
323 return (gsb_data_transaction_set_financial_year_number ( transaction_number,
324 financial_year_number ) );
325 else
326 return (gsb_data_scheduled_set_financial_year_number ( transaction_number,
327 financial_year_number ) );
328 }
329
gsb_data_mix_get_budgetary_number(gint transaction_number,gboolean is_transaction)330 gint gsb_data_mix_get_budgetary_number ( gint transaction_number,
331 gboolean is_transaction )
332 {
333 if ( is_transaction )
334 return ( gsb_data_transaction_get_budgetary_number ( transaction_number ) );
335 else
336 return ( gsb_data_scheduled_get_budgetary_number ( transaction_number ) );
337 }
338
gsb_data_mix_set_budgetary_number(gint transaction_number,gint budgetary_number,gboolean is_transaction)339 gboolean gsb_data_mix_set_budgetary_number ( gint transaction_number,
340 gint budgetary_number,
341 gboolean is_transaction )
342 {
343 if ( is_transaction )
344 return ( gsb_data_transaction_set_budgetary_number ( transaction_number,
345 budgetary_number ) );
346 else
347 return ( gsb_data_scheduled_set_budgetary_number ( transaction_number,
348 budgetary_number ) );
349 }
350
gsb_data_mix_get_sub_budgetary_number(gint transaction_number,gboolean is_transaction)351 gint gsb_data_mix_get_sub_budgetary_number ( gint transaction_number,
352 gboolean is_transaction )
353 {
354 if ( is_transaction )
355 return ( gsb_data_transaction_get_sub_budgetary_number ( transaction_number ) );
356 else
357 return ( gsb_data_scheduled_get_sub_budgetary_number ( transaction_number ) );
358 }
359
gsb_data_mix_set_sub_budgetary_number(gint transaction_number,gint sub_budgetary_number,gboolean is_transaction)360 gboolean gsb_data_mix_set_sub_budgetary_number ( gint transaction_number,
361 gint sub_budgetary_number,
362 gboolean is_transaction )
363 {
364 if ( is_transaction )
365 return (gsb_data_transaction_set_sub_budgetary_number ( transaction_number,
366 sub_budgetary_number ) );
367 else
368 return (gsb_data_scheduled_set_sub_budgetary_number ( transaction_number,
369 sub_budgetary_number ) );
370 }
371
gsb_data_mix_get_voucher(gint transaction_number,gboolean is_transaction)372 const gchar *gsb_data_mix_get_voucher ( gint transaction_number,
373 gboolean is_transaction )
374 {
375 if ( is_transaction )
376 return (gsb_data_transaction_get_voucher ( transaction_number ) );
377
378 return NULL;
379 }
380
gsb_data_mix_set_voucher(gint transaction_number,const gchar * voucher,gboolean is_transaction)381 gboolean gsb_data_mix_set_voucher ( gint transaction_number,
382 const gchar *voucher,
383 gboolean is_transaction )
384 {
385 if ( is_transaction )
386 return (gsb_data_transaction_set_voucher ( transaction_number, voucher ) );
387
388 return FALSE;
389 }
390
gsb_data_mix_get_bank_references(gint transaction_number,gboolean is_transaction)391 const gchar *gsb_data_mix_get_bank_references ( gint transaction_number,
392 gboolean is_transaction )
393 {
394 if ( is_transaction )
395 return ( gsb_data_transaction_get_bank_references ( transaction_number ) );
396
397 return NULL;
398 }
399
gsb_data_mix_set_bank_references(gint transaction_number,const gchar * bank_references,gboolean is_transaction)400 gboolean gsb_data_mix_set_bank_references ( gint transaction_number,
401 const gchar *bank_references,
402 gboolean is_transaction )
403 {
404 if ( is_transaction )
405 return ( gsb_data_transaction_set_bank_references ( transaction_number,
406 bank_references ) );
407 return FALSE;
408 }
409
gsb_data_mix_get_transaction_number_transfer(gint transaction_number,gboolean is_transaction)410 gint gsb_data_mix_get_transaction_number_transfer ( gint transaction_number,
411 gboolean is_transaction )
412 {
413 if ( is_transaction )
414 return ( gsb_data_transaction_get_contra_transaction_number ( transaction_number ) );
415 else
416 /* if we come here for a scheduled transaction, usually it's to know if it's a transfer or not
417 * because it's like that we test for normal transactions */
418 return ( gsb_data_scheduled_is_transfer ( transaction_number ) );
419 }
420
gsb_data_mix_set_transaction_number_transfer(gint transaction_number,gint transaction_number_transfer,gboolean is_transaction)421 gboolean gsb_data_mix_set_transaction_number_transfer ( gint transaction_number,
422 gint transaction_number_transfer,
423 gboolean is_transaction )
424 {
425 if ( is_transaction )
426 return ( gsb_data_transaction_set_contra_transaction_number ( transaction_number,
427 transaction_number_transfer ) );
428 return FALSE;
429 }
430
gsb_data_mix_get_account_number_transfer(gint transaction_number,gboolean is_transaction)431 gint gsb_data_mix_get_account_number_transfer ( gint transaction_number,
432 gboolean is_transaction )
433 {
434 if ( is_transaction )
435 return ( gsb_data_transaction_get_contra_transaction_account ( transaction_number ) );
436 else
437 return ( gsb_data_scheduled_get_account_number_transfer ( transaction_number ) );
438 }
439
440
gsb_data_mix_get_mother_transaction_number(gint transaction_number,gboolean is_transaction)441 gint gsb_data_mix_get_mother_transaction_number ( gint transaction_number,
442 gboolean is_transaction )
443 {
444 if ( is_transaction )
445 return ( gsb_data_transaction_get_mother_transaction_number ( transaction_number ) );
446 else
447 return ( gsb_data_scheduled_get_mother_scheduled_number ( transaction_number ) );
448 }
449
gsb_data_mix_set_mother_transaction_number(gint transaction_number,gint mother_transaction_number,gboolean is_transaction)450 gboolean gsb_data_mix_set_mother_transaction_number ( gint transaction_number,
451 gint mother_transaction_number,
452 gboolean is_transaction )
453 {
454 if ( is_transaction )
455 return ( gsb_data_transaction_set_mother_transaction_number ( transaction_number,
456 mother_transaction_number ) );
457 else
458 return ( gsb_data_scheduled_set_mother_scheduled_number ( transaction_number,
459 mother_transaction_number ) );
460 }
461
gsb_data_mix_get_white_line(gint transaction_number,gboolean is_transaction)462 gint gsb_data_mix_get_white_line ( gint transaction_number,
463 gboolean is_transaction )
464 {
465 if ( is_transaction )
466 return ( gsb_data_transaction_get_white_line ( transaction_number ) );
467 else
468 return ( gsb_data_scheduled_get_white_line ( transaction_number ) );
469 }
470
gsb_data_mix_get_children(gint transaction_number,gboolean return_number,gboolean is_transaction)471 GSList *gsb_data_mix_get_children ( gint transaction_number,
472 gboolean return_number,
473 gboolean is_transaction )
474 {
475 if ( is_transaction )
476 return ( gsb_data_transaction_get_children ( transaction_number, return_number ) );
477 else
478 return ( gsb_data_scheduled_get_children ( transaction_number, return_number ) );
479 }
480
481
482 /**
483 * Edit l'opération courante, teste le type de page pour choisir.
484 *
485 * \param
486 *
487 * \return
488 * */
gsb_data_mix_edit_current_transaction(void)489 void gsb_data_mix_edit_current_transaction ( void )
490 {
491 gint current_page;
492
493 current_page = gsb_gui_navigation_get_current_page ( );
494
495 if ( current_page == GSB_ACCOUNT_PAGE )
496 gsb_transactions_list_edit_current_transaction ();
497 else if ( current_page == GSB_SCHEDULER_PAGE )
498 gsb_scheduler_list_edit_transaction ( 0 );
499 }
500
501
502 /**
503 * Delete l'opération courante, teste le type de page pour choisir.
504 *
505 * \param
506 *
507 * \return
508 * */
gsb_data_mix_delete_current_transaction(void)509 void gsb_data_mix_delete_current_transaction ( void )
510 {
511 gint current_page;
512
513 current_page = gsb_gui_navigation_get_current_page ( );
514
515 if ( current_page == GSB_ACCOUNT_PAGE )
516 gsb_transactions_list_remove_transaction ();
517 else if ( current_page == GSB_SCHEDULER_PAGE )
518 gsb_scheduler_list_delete_scheduled_transaction ( 0, TRUE );
519 }
520
521
522 /**
523 * Clone l'opération courante, teste le type de page pour choisir.
524 *
525 * \param
526 *
527 * \return
528 * */
gsb_data_mix_clone_current_transaction(void)529 void gsb_data_mix_clone_current_transaction ( void )
530 {
531 gint current_page;
532
533 current_page = gsb_gui_navigation_get_current_page ( );
534
535 if ( current_page == GSB_ACCOUNT_PAGE )
536 gsb_transactions_list_clone_selected_transaction ( NULL, NULL );
537 else if ( current_page == GSB_SCHEDULER_PAGE )
538 gsb_scheduler_list_clone_selected_scheduled ( NULL, NULL );
539 }
540
541
542 /**
543 * selectionne une nouvelle transaction, teste le type de page pour choisir.
544 *
545 * \param
546 *
547 * \return
548 * */
gsb_data_mix_new_transaction_by_menu(void)549 void gsb_data_mix_new_transaction_by_menu ( void )
550 {
551 gint current_page;
552
553 current_page = gsb_gui_navigation_get_current_page ( );
554
555 if ( current_page == GSB_ACCOUNT_PAGE )
556 gsb_transactions_list_select_new_transaction ();
557 else if ( current_page == GSB_SCHEDULER_PAGE )
558 gsb_scheduler_list_edit_transaction ( -1 );
559 }
560
561
562 /**
563 *
564 *
565 * \param
566 *
567 * \return
568 * */
569 /* Local Variables: */
570 /* c-basic-offset: 4 */
571 /* End: */
572