rem: insere_operation_dans_liste ( operation_fille );
add: gsb_transactions_append_transaction ( operation_fille );
context: void verification_echeances_a_terme ( void ){    GDate *pGDateCurrent;    GSList *pointeur_liste;    GSList *ancien_pointeur;    struct struct_devise *devise;    if ( DEBUG )	printf ( "verification_echeances_a_terme\n" );    /* les échÃ©ances à saisir sont revérifiées à chaque fois. Par contre, les       échéances saisies sont ajoutées à la liste de celles déjà saisies */    echeances_a_saisir = NULL;    /* récupère la date du jour et la met en format gdate */    pGDateCurrent = g_date_new ();    g_date_set_time ( pGDateCurrent,		      time ( NULL ));    /* on y ajoute le décalage de l'échéance */    g_date_add_days ( pGDateCurrent,		      decalage_echeance );    /* on fait le tour des échéances : si elle est auto, elle est enregistrée,       sinon elle est juste répertoriée */    pointeur_liste = liste_struct_echeances;    ancien_pointeur = NULL;    while ( pointeur_liste )    {	if ( ECHEANCE_COURANTE -> auto_man &&	     ! ECHEANCE_COURANTE -> no_operation_ventilee_associee )	{	    /* tant que cette échéance auto n'est pas arrivée à aujourd'hui, on recommence */	    while ( pointeur_liste != ancien_pointeur		    &&		    g_date_compare ( ECHEANCE_COURANTE -> date, pGDateCurrent ) <= 0 )	    {		struct structure_operation *operation;		gint virement;		GSList *pointeur_liste_ventil;		/* crée l'opÃ©ration */		operation = calloc ( 1,				     sizeof ( struct structure_operation ) ); 		/* remplit l'opération */		operation -> jour = ECHEANCE_COURANTE -> jour;		operation -> mois = ECHEANCE_COURANTE -> mois;		operation -> annee = ECHEANCE_COURANTE -> annee;		operation ->date = g_date_new_dmy ( operation ->jour,						    operation ->mois,						    operation ->annee);		operation -> no_compte = ECHEANCE_COURANTE -> compte;		operation -> tiers = ECHEANCE_COURANTE -> tiers;		operation -> montant = ECHEANCE_COURANTE -> montant;		operation -> devise = ECHEANCE_COURANTE -> devise;		/* demande si nécessaire la valeur de la devise et du change */		/* récupération des devises de l'opé et du compte */		devise = devise_par_no ( operation -> devise );		if ( !devise_compte		     ||		     devise_compte -> no_devise != gsb_account_get_currency (operation -> no_compte) )		    devise_compte = devise_par_no ( gsb_account_get_currency (operation -> no_compte) );		if ( !( operation -> no_operation			||			devise -> no_devise == gsb_account_get_currency (operation -> no_compte)			||			( devise_compte -> passage_euro && !strcmp ( devise -> nom_devise, _("Euro") ))			||			( !strcmp ( devise_compte -> nom_devise, _("Euro") ) && devise -> passage_euro )))		{		    /* c'est une devise étrangère, on demande le taux de change et les frais de change */		    demande_taux_de_change ( devise_compte, devise, 1,					     (gdouble ) 0, (gdouble ) 0, FALSE );		    operation -> taux_change = taux_de_change[0];		    operation -> frais_change = taux_de_change[1];		    if ( operation -> taux_change < 0 )		    {			operation -> taux_change = -operation -> taux_change;			operation -> une_devise_compte_egale_x_devise_ope = 1;		    }		}		else		{		    operation -> taux_change = 0;		    operation -> frais_change = 0;		}		operation -> categorie = ECHEANCE_COURANTE -> categorie;		operation -> sous_categorie = ECHEANCE_COURANTE -> sous_categorie;		if ( !ECHEANCE_COURANTE -> categorie		     &&		     ECHEANCE_COURANTE -> compte_virement != -1		     &&		     !ECHEANCE_COURANTE -> operation_ventilee )		    virement = 1;		else		    virement = 0;		if ( ECHEANCE_COURANTE -> notes )		    operation -> notes = g_strdup ( ECHEANCE_COURANTE -> notes );		operation -> type_ope = ECHEANCE_COURANTE -> type_ope;		if ( ECHEANCE_COURANTE -> contenu_type )		    operation -> contenu_type = ECHEANCE_COURANTE -> contenu_type;		operation -> auto_man = ECHEANCE_COURANTE -> auto_man;		operation -> imputation = ECHEANCE_COURANTE -> imputation;		operation -> sous_imputation = ECHEANCE_COURANTE -> sous_imputation;		/* si l'exo est automatique (-2), c'est ici qu'on va le chercher */		if ( ECHEANCE_COURANTE -> no_exercice == -2 )		    operation -> no_exercice = recherche_exo_correspondant ( operation -> date );		else		    operation -> no_exercice = ECHEANCE_COURANTE -> no_exercice;		/*   on a fini de remplir l'opé, on peut l'ajouter à la liste */		insere_operation_dans_liste ( operation );		/*   si c'était un virement, on crée une copie de l'opé, on l'ajoute à la liste puis on remplit les relations */		/* FIXME : le jour où on choisira le type de la contre opération dans les échéances, il faudra changer ici */		/* cette opé de ventil est un virement */		if ( virement )		    ajoute_contre_operation_echeance_dans_liste ( operation,								  ECHEANCE_COURANTE -> compte_virement,								  operation -> type_ope );		/* 	si c'était une échéance ventilée, c'est ici qu'on fait joujou */		pointeur_liste_ventil = creation_liste_ope_de_ventil_echeances ( ECHEANCE_COURANTE );		while ( pointeur_liste_ventil			&&			pointeur_liste_ventil != GINT_TO_POINTER ( -1 ))		{		    struct struct_ope_ventil *ope_ventil;		    struct structure_operation *operation_fille;		    /* 	    la mère est donc une ventil */		    operation -> operation_ventilee = 1;		    ope_ventil = pointeur_liste_ventil -> data;		    operation_fille = calloc ( 1,					       sizeof ( struct structure_operation ));		    operation_fille -> montant = ope_ventil -> montant;		    operation_fille -> categorie = ope_ventil -> categorie;		    operation_fille -> sous_categorie = ope_ventil -> sous_categorie;		    if ( ope_ventil -> notes )			operation_fille -> notes = g_strdup ( ope_ventil -> notes );		    operation_fille -> imputation = ope_ventil -> imputation;		    operation_fille -> sous_imputation = ope_ventil -> sous_imputation;		    if ( ope_ventil -> no_piece_comptable )			operation_fille -> no_piece_comptable = g_strdup ( ope_ventil -> no_piece_comptable);		    operation_fille -> no_exercice = ope_ventil -> no_exercice;		    /* 	    le reste est identique à la mère */		    operation_fille -> jour = operation -> jour;		    operation_fille -> mois = operation -> mois;		    operation_fille -> annee = operation -> annee;		    operation_fille -> date = g_date_new_dmy ( operation_fille -> jour,							       operation_fille -> mois,							       operation_fille -> annee );		    if ( operation -> jour_bancaire )		    {			operation_fille -> jour_bancaire = operation -> jour_bancaire;			operation_fille -> mois_bancaire = operation -> mois_bancaire;			operation_fille -> annee_bancaire = operation -> annee_bancaire;			operation_fille -> date_bancaire = g_date_new_dmy ( operation_fille -> jour_bancaire,									    operation_fille -> mois_bancaire,									    operation_fille -> annee_bancaire );		    }		    operation_fille -> no_compte = operation -> no_compte;		    operation_fille -> devise = operation -> devise;		    operation_fille -> une_devise_compte_egale_x_devise_ope = operation -> une_devise_compte_egale_x_devise_ope;		    operation_fille -> taux_change = operation -> taux_change;		    operation_fille -> frais_change = operation -> frais_change;		    operation_fille -> tiers = operation -> tiers;		    operation_fille -> pointe = operation -> pointe;		    operation_fille -> auto_man = operation -> auto_man;		    operation_fille -> no_operation_ventilee_associee = operation -> no_operation;		    /*   on a fini de remplir l'opé, on peut l'ajouter à la liste */		    insere_operation_dans_liste ( operation_fille );		    /* 	    on vérifie maintenant si c'est un virement */		    if ( ope_ventil -> relation_no_operation == -1 )		    {			/* cette opé de ventil est un virement */			ajoute_contre_operation_echeance_dans_liste ( operation_fille,							 ope_ventil -> relation_no_compte,							 ope_ventil -> no_type_associe );		    }		    pointeur_liste_ventil = pointeur_liste_ventil -> next;		}		echeances_saisies = g_slist_append ( echeances_saisies,						     operation );		/* passe l'échéance à la prochaine date */		incrementation_echeance ( ECHEANCE_COURANTE );		if ( !g_slist_find ( liste_struct_echeances,				     ECHEANCE_COURANTE ) )		{		    if ( !ancien_pointeur )			ancien_pointeur = liste_struct_echeances;		    pointeur_liste = ancien_pointeur;		}	    }	}	else if ( ! ECHEANCE_COURANTE -> no_operation_ventilee_associee )	    /* ce n'est pas une échéance automatique, on la répertorie dans la liste des échéances à saisir */	    if ( g_date_compare ( ECHEANCE_COURANTE -> date,				  pGDateCurrent ) <= 0		 &&		 !ECHEANCE_COURANTE -> no_operation_ventilee_associee )		echeances_a_saisir = g_slist_append ( echeances_a_saisir ,						      ECHEANCE_COURANTE );	if ( ancien_pointeur == liste_struct_echeances && pointeur_liste == ancien_pointeur )	    ancien_pointeur = NULL;	else	{	    ancien_pointeur = pointeur_liste;	    pointeur_liste = pointeur_liste -> next;	}    }    if ( echeances_saisies )    {	mise_a_jour_liste_echeances_auto_accueil = 1;	modification_fichier ( TRUE );    }    if ( echeances_a_saisir )	mise_a_jour_liste_echeances_manuelles_accueil = 1;}