gint gsb_data_mix_get_mother_transaction_number ( gint transaction_number, gboolean is_transaction ) { if ( is_transaction ) return ( gsb_data_transaction_get_mother_transaction_number ( transaction_number ) ); else return ( gsb_data_scheduled_get_mother_scheduled_number ( transaction_number ) ); }
/** * set the scheduler part of the form from the scheduled transaction given in param * * \param scheduled_number * * \return FALSE * */ gboolean gsb_form_scheduler_set ( gint scheduled_number ) { devel_debug_int (scheduled_number); gsb_form_scheduler_sensitive_buttons (TRUE); /* if we are on a white split line, set all as the mother */ if (scheduled_number < -1) scheduled_number = gsb_data_scheduled_get_mother_scheduled_number (scheduled_number); gsb_form_scheduler_set_account ( gsb_data_scheduled_get_account_number (scheduled_number)); gsb_form_scheduler_set_auto ( gsb_data_scheduled_get_automatic_scheduled (scheduled_number)); gsb_form_scheduler_set_frequency ( gsb_data_scheduled_get_frequency (scheduled_number)); gsb_form_scheduler_set_limit_date ( gsb_data_scheduled_get_limit_date (scheduled_number)); gsb_form_scheduler_set_frequency_user ( gsb_data_scheduled_get_user_entry (scheduled_number)); gsb_form_scheduler_set_frequency_user_button ( gsb_data_scheduled_get_user_interval (scheduled_number)); return FALSE; }
/** * Clone the children of a splitted transaction to add the to the new splitted scheduled * * \param scheduled_transaction the splitted scheduled transaction we want to add the children * \param transaction_number the splitted transaction we want to clone the children * * \return FALSE * */ gboolean gsb_form_scheduler_recover_splits_of_transaction ( gint scheduled_transaction, gint transaction_number ) { GSList *tmp_list; /* first clone the transactions */ gsb_transactions_list_splitted_to_scheduled (transaction_number, scheduled_transaction); /* add the children to the list */ tmp_list = gsb_data_scheduled_get_scheduled_list (); while (tmp_list) { gint scheduled_number = gsb_data_scheduled_get_scheduled_number (tmp_list -> data); if (gsb_data_scheduled_get_mother_scheduled_number (scheduled_number) == scheduled_transaction) gsb_scheduler_list_append_new_scheduled (scheduled_number, NULL); tmp_list = tmp_list -> next; } return FALSE; }
/** * check the scheduled transactions if the are in time limit * and record the automatic transactions * * \param * * \return * */ void gsb_scheduler_check_scheduled_transactions_time_limit ( void ) { GDate *date; GSList *tmp_list; gboolean automatic_transactions_taken = FALSE; devel_debug (NULL); /* the scheduled transactions to take will be check here, * but the scheduled transactions taken will be add to the already appended ones */ scheduled_transactions_to_take = NULL; /* get the date today + nb_days_before_scheduled */ /* the date untill we execute the scheduled transactions is : * - either today + nb_days_before_scheduled if warn n days before the scheduled * - either the end of the month in nb_days_before_scheduled days (so current month or next month) * */ date = gdate_today (); g_date_add_days ( date, nb_days_before_scheduled ); /* now date is in nb_days_before_scheduled, if we want the transactions of the month, * we change date to the end of its month */ if (execute_scheduled_of_month) { gint last_day; last_day = g_date_get_days_in_month ( g_date_get_month (date), g_date_get_year (date)); g_date_set_day (date, last_day); } /* check all the scheduled transactions, * if automatic, it's taken * if manual, appended into scheduled_transactions_to_take */ tmp_list = gsb_data_scheduled_get_scheduled_list (); while ( tmp_list ) { gint scheduled_number; scheduled_number = gsb_data_scheduled_get_scheduled_number (tmp_list -> data); /* we check that scheduled transaction only if it's not a child of a split */ if ( !gsb_data_scheduled_get_mother_scheduled_number (scheduled_number) && gsb_data_scheduled_get_date (scheduled_number) && g_date_compare ( gsb_data_scheduled_get_date (scheduled_number), date ) <= 0 ) { if ( gsb_data_scheduled_get_automatic_scheduled (scheduled_number)) { /* this is an automatic scheduled, we get it */ gint transaction_number; /* take automatically the scheduled transaction untill today */ transaction_number = gsb_scheduler_create_transaction_from_scheduled_transaction (scheduled_number, 0 ); if ( gsb_data_scheduled_get_split_of_scheduled (scheduled_number)) gsb_scheduler_execute_children_of_scheduled_transaction ( scheduled_number, transaction_number ); scheduled_transactions_taken = g_slist_append ( scheduled_transactions_taken, GINT_TO_POINTER (transaction_number)); automatic_transactions_taken = TRUE; /* set the scheduled transaction to the next date, * if it's not finished, we check them again if it need to be * executed more than one time (the easiest way is to check * all again, i don't think it will have thousand of scheduled transactions, * so no much waste of time...) */ if (gsb_scheduler_increase_scheduled (scheduled_number)) { scheduled_transactions_to_take = NULL; tmp_list = gsb_data_scheduled_get_scheduled_list (); } else /* the scheduled is finish, so we needn't to check it again ... */ tmp_list = tmp_list -> next; } else { /* it's a manual scheduled transaction, we put it in the slist */ scheduled_transactions_to_take = g_slist_append ( scheduled_transactions_to_take , GINT_TO_POINTER (scheduled_number)); tmp_list = tmp_list -> next; } } else tmp_list = tmp_list -> next; } if ( automatic_transactions_taken ) { mise_a_jour_liste_echeances_auto_accueil = 1; gsb_file_set_modified ( TRUE ); } if ( scheduled_transactions_to_take ) mise_a_jour_liste_echeances_manuelles_accueil = 1; g_date_free ( date ); }