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