rem: struct operation_echeance *scheduled_transaction;
add: gint scheduled_number;
context: void gsb_scheduler_validate_form ( void ){    struct operation_echeance *scheduled_transaction;    gchar **tab_char;    gchar *char_ptr;    gint compte_virement;    compte_virement = 0;    if ( !gsb_scheduler_check_form ())	return;    /* get the scheduled_transaction, will be NULL if it's a new one */    scheduled_transaction = gtk_object_get_data ( GTK_OBJECT ( formulaire_echeancier ),						  "adr_echeance" );    /* if the label label_saisie_modif is Input, it's a modification or new scheduled_transaction,     * else we want to create a transaction from that scheduled transaction */    if ( strcmp ( GTK_LABEL ( label_saisie_modif ) -> label,		  _("Input") ) )    {	/* it's a modification/new scheduled transaction */	/* si c'est une nouvelle échéance, on la crée */	/* et on lui met son numéro tout de suite */	if ( !scheduled_transaction )	{	    scheduled_transaction = calloc ( 1,					     sizeof ( struct operation_echeance ));	    scheduled_transaction -> no_operation = ++no_derniere_echeance;	    nb_echeances++;	}	/* récupère la date */	char_ptr = g_strstrip ( (gchar *) gtk_entry_get_text ( GTK_ENTRY (widget_formulaire_echeancier[SCHEDULER_FORM_DATE] )));	scheduled_transaction -> date = gsb_parse_date_string ( char_ptr );	if ( scheduled_transaction -> date )	{	    scheduled_transaction -> jour = scheduled_transaction -> date -> day;	    scheduled_transaction -> mois = scheduled_transaction -> date -> month;	    scheduled_transaction -> annee = scheduled_transaction -> date -> year;	}	/* récupération du tiers, s'il n'existe pas, on le crée */	if ( gtk_widget_get_style ( GTK_COMBOFIX ( widget_formulaire_echeancier[SCHEDULER_FORM_PARTY] ) -> entry ) == style_entree_formulaire[ENCLAIR] )	{	    char_ptr = gtk_combofix_get_text ( GTK_COMBOFIX ( widget_formulaire_echeancier[SCHEDULER_FORM_PARTY] ));	    scheduled_transaction -> tiers  = gsb_data_payee_get_number_by_name (char_ptr,									    TRUE );	}	/* récupération du montant */	if ( gtk_widget_get_style ( widget_formulaire_echeancier[SCHEDULER_FORM_DEBIT] ) == style_entree_formulaire[ENCLAIR] )	    scheduled_transaction -> montant = -calcule_total_entree (widget_formulaire_echeancier[SCHEDULER_FORM_DEBIT] );	else	    scheduled_transaction -> montant = calcule_total_entree (widget_formulaire_echeancier[SCHEDULER_FORM_CREDIT] );	/* récupération de la devise */	scheduled_transaction -> devise = ((struct struct_devise *)( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget_formulaire_echeancier[SCHEDULER_FORM_DEVISE] ) -> menu_item ),											   "adr_devise" ))) -> no_devise;	/* récupération du no de compte */	scheduled_transaction -> compte = recupere_no_compte ( widget_formulaire_echeancier[SCHEDULER_FORM_ACCOUNT] );	/*   récupération des catégories / sous-catég, s'ils n'existent pas, on les crée */	/* s'il n'y a pas de catég, ce n'es pas un virement non plus, donc on met compte_virement à -1 */	if ( gtk_widget_get_style ( GTK_COMBOFIX ( widget_formulaire_echeancier[SCHEDULER_FORM_CATEGORY] ) -> entry ) == style_entree_formulaire[ENCLAIR] )	{	    tab_char = g_strsplit ( gtk_combofix_get_text ( GTK_COMBOFIX ( widget_formulaire_echeancier[SCHEDULER_FORM_CATEGORY] )),				    ":",				    2 );	    tab_char[0] = g_strstrip ( tab_char[0] );	    if ( tab_char[1] )		tab_char[1] = g_strstrip ( tab_char[1] );	    if ( strlen ( tab_char[0] ) )	    {		if ( !strcmp ( tab_char[0],			       _("Transfer") )		     && tab_char[1]		     && strlen ( tab_char[1]) )		{		    /* c'est un virement, il n'y a donc aucune catégorie */		    scheduled_transaction -> categorie = 0;		    scheduled_transaction -> sous_categorie = 0;		    scheduled_transaction -> operation_ventilee = 0;		    /* recherche le no de compte du virement */		    scheduled_transaction -> compte_virement = gsb_data_account_get_no_account_by_name ( tab_char[1] );		}		else		{		    /* 		    si c'est une opération ventilée, c'est ici que ça se passe ! */		    if ( !strcmp ( tab_char[0],				   _("Breakdown of transaction") ))		    {			/* c'est une ventilation, il n'y a donc aucune catégorie */			/* on va appeler la fonction validation_ope_de_ventilation */			/* qui va créer les nouvelles opé*/			validation_ope_de_ventilation_echeances ( scheduled_transaction );			scheduled_transaction -> categorie = 0;			scheduled_transaction -> sous_categorie = 0;			scheduled_transaction -> operation_ventilee = 1;			scheduled_transaction -> compte_virement = 0;		    }		    else		    {			/* it's a normal category */			scheduled_transaction -> categorie = gsb_data_category_get_number_by_name ( tab_char[0],												    TRUE,												    scheduled_transaction -> montant < 0);			scheduled_transaction -> sous_categorie = gsb_data_category_get_sub_category_number_by_name ( scheduled_transaction -> categorie,														      tab_char[1],														      TRUE );			scheduled_transaction -> compte_virement = 0;			scheduled_transaction -> operation_ventilee = 0;		    }		}	    }	    g_strfreev ( tab_char );	}	else	    scheduled_transaction -> compte_virement = -1;	/* récupération du type d'opération */	if ( GTK_WIDGET_VISIBLE ( widget_formulaire_echeancier[SCHEDULER_FORM_TYPE] ))	{	    scheduled_transaction -> type_ope = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget_formulaire_echeancier[SCHEDULER_FORM_TYPE] ) -> menu_item ),											"no_type" ));	    if ( GTK_WIDGET_VISIBLE ( widget_formulaire_echeancier[SCHEDULER_FORM_CHEQUE] )		 &&		 gtk_widget_get_style ( widget_formulaire_echeancier[SCHEDULER_FORM_CHEQUE] ) == style_entree_formulaire[ENCLAIR] )		scheduled_transaction -> contenu_type = g_strdup ( g_strstrip ( (gchar *) gtk_entry_get_text ( GTK_ENTRY ( widget_formulaire_echeancier[SCHEDULER_FORM_CHEQUE] ))));	}	/* récupération du no d'exercice */	scheduled_transaction -> no_exercice = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget_formulaire_echeancier[SCHEDULER_FORM_EXERCICE] ) -> menu_item ),										       "no_exercice" ));	/* récupération de l'imputation budgétaire */	if ( gtk_widget_get_style ( GTK_COMBOFIX ( widget_formulaire_echeancier[SCHEDULER_FORM_BUDGETARY] ) -> entry ) == style_entree_formulaire[ENCLAIR] )	{	    tab_char = g_strsplit ( gtk_combofix_get_text ( GTK_COMBOFIX ( widget_formulaire_echeancier[SCHEDULER_FORM_BUDGETARY] )),				    ":",				    2 );	    tab_char[0] = g_strstrip ( tab_char[0] );	    if ( tab_char[1] )		tab_char[1] = g_strstrip ( tab_char[1] );	    if ( strlen ( tab_char[0] ) )	    {		scheduled_transaction -> imputation = gsb_data_budget_get_number_by_name ( tab_char[0],											   TRUE,											   scheduled_transaction -> montant < 0);		scheduled_transaction -> sous_imputation = gsb_data_budget_get_sub_budget_number_by_name ( scheduled_transaction -> imputation,													   tab_char[1],													   TRUE );	    }	    g_strfreev ( tab_char );	}	/*       récupération de auto_man */	scheduled_transaction -> auto_man = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget_formulaire_echeancier[SCHEDULER_FORM_MODE]  ) -> menu_item ),										    "auto_man" ) );	/* récupération des notes */	if ( gtk_widget_get_style ( widget_formulaire_echeancier[SCHEDULER_FORM_NOTES] ) == style_entree_formulaire[ENCLAIR] )	    scheduled_transaction -> notes = g_strdup ( g_strstrip ( (gchar *) gtk_entry_get_text ( GTK_ENTRY ( widget_formulaire_echeancier[SCHEDULER_FORM_NOTES] ))));	/* récupération de la fréquence */	scheduled_transaction -> periodicite = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget_formulaire_echeancier[SCHEDULER_FORM_FREQUENCY]  ) -> menu_item ),										       "periodicite" ) );	if ( scheduled_transaction -> periodicite == 4 )	{	    scheduled_transaction -> intervalle_periodicite_personnalisee = GPOINTER_TO_INT ( gtk_object_get_data ( GTK_OBJECT ( GTK_OPTION_MENU ( widget_formulaire_echeancier[SCHEDULER_FORM_FREQ_CUSTOM_MENU]  ) -> menu_item ),														    "intervalle_perso" ) );	    scheduled_transaction -> periodicite_personnalisee = my_strtod ( (gchar *) gtk_entry_get_text ( GTK_ENTRY ( widget_formulaire_echeancier[SCHEDULER_FORM_FREQ_CUSTOM_NB] )),									     NULL );	}	if ( scheduled_transaction -> periodicite	     &&	     gtk_widget_get_style ( widget_formulaire_echeancier[SCHEDULER_FORM_FINAL_DATE] ) == style_entree_formulaire[ENCLAIR] )	{	    /* traitement de la date limite */	    	    scheduled_transaction -> date_limite = gsb_parse_date_string ( g_strstrip ( (gchar *) gtk_entry_get_text ( GTK_ENTRY ( widget_formulaire_echeancier[SCHEDULER_FORM_FINAL_DATE] ) ) ) );	    if ( scheduled_transaction -> date_limite )	    {		scheduled_transaction -> jour_limite = scheduled_transaction -> date_limite -> day;		scheduled_transaction -> mois_limite = scheduled_transaction -> date_limite -> month;		scheduled_transaction -> annee_limite = scheduled_transaction -> date_limite -> year;	    }	}	    	/* si c'est une nouvelle opé,  on l'ajoute à la liste */	if ( !gtk_object_get_data ( GTK_OBJECT ( formulaire_echeancier ),				    "adr_echeance" ) )	    liste_struct_echeances = g_slist_insert_sorted ( liste_struct_echeances,							     scheduled_transaction,							     (GCompareFunc) classement_sliste_echeance_par_date );    }    else    {	gint transaction_number;	transaction_number = gsb_scheduler_create_transaction_from_scheduled_form ();	/* the scheduled transaction goes to the next date */	gsb_scheduler_increase_scheduled_transaction ( scheduled_transaction );	/* réaffiche les option menu de la périodicité, des banques et de l'automatisme, effacés pour une saisie d'opé */	gtk_widget_show ( widget_formulaire_echeancier[SCHEDULER_FORM_MODE] );	gtk_widget_show ( widget_formulaire_echeancier[SCHEDULER_FORM_FREQUENCY] );	gtk_widget_show ( widget_formulaire_echeancier[SCHEDULER_FORM_FREQUENCY] );	update_transaction_in_trees (gsb_data_transaction_get_pointer_to_transaction (transaction_number));        }    if ( mise_a_jour_combofix_categ_necessaire )	mise_a_jour_combofix_categ ();    formulaire_echeancier_a_zero ();    if ( !etat.formulaire_echeancier_toujours_affiche )	gtk_expander_set_expanded ( GTK_EXPANDER(frame_formulaire_echeancier), FALSE );    mise_a_jour_liste_echeances_manuelles_accueil = 1;    mise_a_jour_liste_echeances_auto_accueil = 1;    remplissage_liste_echeance ();    gtk_widget_grab_focus ( tree_view_liste_echeances );    mise_a_jour_accueil();    modification_fichier ( TRUE );}