rem: remplit_ligne_operation ( nouvelle_ope_2, NULL );
add: gsb_transactions_list_append_transaction ( nouvelle_ope_2, nouvelle_ope_2 -> no_compte );
context: void validation_ope_de_ventilation ( struct structure_operation *operation ){    GSList *liste_struct_ventilations;    /* récupération de la liste de ventilations */    liste_struct_ventilations = gtk_object_get_data ( GTK_OBJECT ( formulaire ),						      "liste_adr_ventilation" );    /*   si cette liste est à -1, c'est qu'elle est null, donc rien à faire */    if ( liste_struct_ventilations == GINT_TO_POINTER ( -1 ))	return;    while ( liste_struct_ventilations )    {	struct struct_ope_ventil *ope_ventil;	ope_ventil = liste_struct_ventilations -> data;	/*       si cette opé est supprimée, c'est ici */	/* cela sous entend qu'elle existait déjà */	/* et si c'était un virement, l'autre va être automatiquement supprimée */	if ( ope_ventil -> supprime )	{	    /* petite protection quand même, normalement le texte ne devrait jamais apparaitre */	    if ( !ope_ventil -> no_operation )		dialogue_warning ( _("A breakdown line is to be deleted though it is not yet registered."));	    else		supprime_operation  ( operation_par_no ( ope_ventil -> no_operation,							 compte_courant ));	}	else	{	    /* l'opération ne doit pas être supprimée, c'est qu'elle doit être créée ou modifiée */	    /* 	  on n'a pas à s'embêter avec des changements de virements ou autres trucs bizarres, dans */	    /* ce cas il y aura eu une suppression puis une nouvelle opération */	    if ( ope_ventil -> no_operation )	    {		/* c'est une modif d'opération */		struct structure_operation *ope_modifiee;		ope_modifiee = operation_par_no ( ope_ventil -> no_operation,						  compte_courant );		if ( ope_modifiee )		{		    /* on récupère d'abord les modifs de l'opé de ventil */		    ope_modifiee -> montant = ope_ventil -> montant;		    ope_modifiee -> categorie = ope_ventil -> categorie;		    ope_modifiee -> sous_categorie = ope_ventil -> sous_categorie;		    if ( ope_ventil -> notes )			ope_modifiee -> notes = g_strdup ( ope_ventil -> notes );		    ope_modifiee -> no_exercice = ope_ventil -> no_exercice;		    ope_modifiee -> imputation = ope_ventil -> imputation;		    ope_modifiee -> sous_imputation = ope_ventil -> sous_imputation;		    if ( ope_ventil -> no_piece_comptable )			ope_modifiee -> no_piece_comptable = g_strdup ( ope_ventil -> no_piece_comptable );		    /* on récupère ensuite les modifs de la ventilation */		    ope_modifiee -> jour = operation -> jour;		    ope_modifiee -> mois = operation -> mois;		    ope_modifiee -> annee = operation -> annee;		    ope_modifiee -> date = g_date_new_dmy ( operation -> jour,							    operation -> mois,							    operation -> annee );		    ope_modifiee -> jour_bancaire = operation -> jour_bancaire;		    ope_modifiee -> mois_bancaire = operation -> mois_bancaire;		    ope_modifiee -> annee_bancaire = operation -> annee_bancaire;		    if ( operation -> jour_bancaire )			ope_modifiee -> date_bancaire = g_date_new_dmy ( operation -> jour_bancaire,									 operation -> mois_bancaire,									 operation -> annee_bancaire );		    ope_modifiee -> no_compte = operation -> no_compte;		    ope_modifiee -> devise = operation -> devise;		    ope_modifiee -> une_devise_compte_egale_x_devise_ope = operation -> une_devise_compte_egale_x_devise_ope;		    ope_modifiee -> taux_change = operation -> taux_change;		    ope_modifiee -> frais_change = operation -> frais_change;		    ope_modifiee -> tiers = operation -> tiers;		    ope_modifiee -> type_ope = operation -> type_ope;		    ope_modifiee -> pointe = operation -> pointe;		    ope_modifiee -> auto_man = operation -> auto_man;		    ope_modifiee -> no_rapprochement = operation -> no_rapprochement;		    /* théoriquement, cette ligne n'est pas nécessaire vu que c'est une modif d'opé de ventil */		    ope_modifiee -> no_operation_ventilee_associee = operation -> no_operation;		    /* si cette opé de ventil est un virement, on met à jour la contre opération */		    if ( ope_ventil -> relation_no_operation &&			 ope_ventil -> relation_no_compte != -1 )		    {			/*  soit c'était un virement, et on modifie l'opé associée */			/* soit c'est un nouveau virement, et on crée l'opé associée */			gsb_account_set_update_list ( ope_ventil -> relation_no_compte,						      1 );			if ( ope_ventil -> relation_no_operation != -1 )			{			    /* c'était déjà un virement vers ce compte */			    struct structure_operation *ope_modifiee_2;			    ope_modifiee_2 = operation_par_no ( ope_ventil -> relation_no_operation,								ope_ventil -> relation_no_compte );			    if ( ope_modifiee_2 )			    {				/* on commence par mettre le type choisi */				ope_modifiee_2 -> type_ope = ope_ventil -> no_type_associe;				ope_modifiee_2 -> montant = -ope_modifiee -> montant;				ope_modifiee_2 -> categorie = ope_modifiee -> categorie;				ope_modifiee_2 -> sous_categorie = ope_modifiee -> sous_categorie;				if ( ope_modifiee -> notes )				    ope_modifiee_2 -> notes = g_strdup ( ope_modifiee -> notes );				ope_modifiee_2 -> imputation = ope_modifiee -> imputation;				ope_modifiee_2 -> sous_imputation = ope_modifiee -> sous_imputation;				if ( ope_modifiee -> no_piece_comptable )				    ope_modifiee_2 -> no_piece_comptable = g_strdup ( ope_modifiee -> no_piece_comptable );				ope_modifiee_2 -> jour = ope_modifiee -> jour;				ope_modifiee_2 -> mois = ope_modifiee -> mois;				ope_modifiee_2 -> annee = ope_modifiee -> annee;				ope_modifiee_2 -> date = g_date_new_dmy ( operation -> jour,									  operation -> mois,									  operation -> annee );				ope_modifiee_2 -> jour_bancaire = ope_modifiee -> jour_bancaire;				ope_modifiee_2 -> mois_bancaire = ope_modifiee -> mois_bancaire;				ope_modifiee_2 -> annee_bancaire = ope_modifiee -> annee_bancaire;				if ( operation -> jour_bancaire )				    ope_modifiee_2 -> date_bancaire = g_date_new_dmy ( operation -> jour_bancaire,										       operation -> mois_bancaire,										       operation -> annee_bancaire );				if ( ope_modifiee_2 -> devise != ope_modifiee -> devise)				{				    struct struct_devise *devise_compte_1;				    struct struct_devise *devise_compte_2;				    ope_modifiee_2 -> devise = ope_modifiee -> devise;				    ope_modifiee_2 -> une_devise_compte_egale_x_devise_ope = ope_modifiee -> une_devise_compte_egale_x_devise_ope;				    devise_compte_1 = devise_par_no ( ope_modifiee -> devise );				    devise_compte_2 = devise_par_no ( gsb_account_get_currency (ope_ventil -> relation_no_compte));				    if ( !( ope_modifiee -> devise == gsb_account_get_currency (ope_ventil -> relation_no_compte)					    ||					    ( devise_compte_2 -> passage_euro && !strcmp ( devise_compte_1 -> nom_devise, _("Euro") ))					    ||					    ( !strcmp ( devise_compte_2 -> nom_devise, _("Euro") ) && devise_compte_1 -> 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_2,								 devise_compte_1,								 1,								 (gdouble ) 0,								 (gdouble ) 0,								 FALSE );					ope_modifiee_2 -> taux_change = taux_de_change[0];					ope_modifiee_2 -> frais_change = taux_de_change[1];					if ( ope_modifiee_2 -> taux_change < 0 )					{					    ope_modifiee_2 -> taux_change = -ope_modifiee_2 -> taux_change;					    ope_modifiee_2 -> une_devise_compte_egale_x_devise_ope = 1;					}				    }				}				/* 			      ope_modifiee_2 -> une_devise_compte_egale_x_devise_ope = ope_modifiee -> une_devise_compte_egale_x_devise_ope; */				/* 			      ope_modifiee_2 -> taux_change = ope_modifiee -> taux_change; */				/* 			      ope_modifiee_2 -> frais_change = ope_modifiee -> frais_change; */				ope_modifiee_2 -> tiers = ope_modifiee -> tiers;				ope_modifiee_2 -> auto_man = ope_modifiee -> auto_man;				ope_modifiee_2 -> no_exercice = ope_modifiee -> no_exercice;			    }			}			else			{			    /* c'est un nouveau virement, on doit créer l'opé associée */			    struct structure_operation *nouvelle_ope_2;			    nouvelle_ope_2 = calloc ( 1,						      sizeof ( struct structure_operation ));			    /* on commence par mettre le type choisi */			    nouvelle_ope_2 -> type_ope = ope_ventil -> no_type_associe;			    nouvelle_ope_2 -> no_compte = ope_ventil -> relation_no_compte;			    nouvelle_ope_2 -> montant = -ope_modifiee ->  montant;			    nouvelle_ope_2 -> categorie = ope_modifiee ->  categorie;			    nouvelle_ope_2 -> sous_categorie = ope_modifiee ->  sous_categorie;			    if ( ope_modifiee -> notes )				nouvelle_ope_2 -> notes = g_strdup ( ope_modifiee ->  notes );			    nouvelle_ope_2 -> imputation = ope_modifiee ->  imputation;			    nouvelle_ope_2 -> sous_imputation = ope_modifiee ->  sous_imputation;			    if ( ope_modifiee -> no_piece_comptable )				nouvelle_ope_2 -> no_piece_comptable = g_strdup ( ope_modifiee ->  no_piece_comptable );			    nouvelle_ope_2 -> jour = ope_modifiee ->  jour;			    nouvelle_ope_2 -> mois = ope_modifiee ->  mois;			    nouvelle_ope_2 -> annee = ope_modifiee ->  annee;			    nouvelle_ope_2 -> date = g_date_new_dmy ( operation -> jour,								      operation -> mois,								      operation -> annee );			    nouvelle_ope_2 -> jour_bancaire = ope_modifiee ->  jour_bancaire;			    nouvelle_ope_2 -> mois_bancaire = ope_modifiee ->  mois_bancaire;			    nouvelle_ope_2 -> annee_bancaire = ope_modifiee ->  annee_bancaire;			    if ( operation -> jour_bancaire )				nouvelle_ope_2 -> date_bancaire = g_date_new_dmy ( operation -> jour_bancaire,										   operation -> mois_bancaire,										   operation -> annee_bancaire );			    nouvelle_ope_2 -> devise = ope_modifiee ->  devise;			    nouvelle_ope_2 -> une_devise_compte_egale_x_devise_ope = ope_modifiee ->  une_devise_compte_egale_x_devise_ope;			    nouvelle_ope_2 -> taux_change = ope_modifiee ->  taux_change;			    nouvelle_ope_2 -> frais_change = ope_modifiee ->  frais_change;			    nouvelle_ope_2 -> tiers = ope_modifiee ->  tiers;			    nouvelle_ope_2 -> auto_man = ope_modifiee ->  auto_man;			    nouvelle_ope_2 -> no_exercice = ope_modifiee ->  no_exercice;			    ajout_operation ( nouvelle_ope_2 );			    /* on met les relations */			    ope_modifiee -> relation_no_operation = nouvelle_ope_2 -> no_operation;			    ope_modifiee -> relation_no_compte = nouvelle_ope_2 -> no_compte;			    nouvelle_ope_2 -> relation_no_operation = ope_modifiee ->  no_operation;			    nouvelle_ope_2 -> relation_no_compte = ope_modifiee ->  no_compte;			    /* 		    on réaffiche la contre opération pour faire apparaitre la catég */			    remplit_ligne_operation ( nouvelle_ope_2,						      NULL );			}		    }		}	    }	    else	    {		/* c'est une nouvelle opération */		/*  on la crée, l'ajoute et si c'est un virement on crée la contre opération */		struct structure_operation *nouvelle_ope;		nouvelle_ope = calloc ( 1,					sizeof ( struct structure_operation ));		/* on récupère d'abord les modifs de l'opé de ventil */		nouvelle_ope -> montant = ope_ventil -> montant;		nouvelle_ope -> categorie = ope_ventil -> categorie;		nouvelle_ope -> sous_categorie = ope_ventil -> sous_categorie;		if ( ope_ventil -> notes )		    nouvelle_ope -> notes = g_strdup ( ope_ventil -> notes );		nouvelle_ope -> imputation = ope_ventil -> imputation;		nouvelle_ope -> sous_imputation = ope_ventil -> sous_imputation;		if ( ope_ventil -> no_piece_comptable )		    nouvelle_ope -> no_piece_comptable = g_strdup ( ope_ventil -> no_piece_comptable );		nouvelle_ope -> no_exercice = ope_ventil -> no_exercice;		/* on récupère ensuite les modifs de la ventilation */		nouvelle_ope -> jour = operation -> jour;		nouvelle_ope -> mois = operation -> mois;		nouvelle_ope -> annee = operation -> annee;		nouvelle_ope -> date = g_date_new_dmy ( operation -> jour,							operation -> mois,							operation -> annee );		nouvelle_ope -> jour_bancaire = operation -> jour_bancaire;		nouvelle_ope -> mois_bancaire = operation -> mois_bancaire;		nouvelle_ope -> annee_bancaire = operation -> annee_bancaire;		if ( operation -> jour_bancaire )		    nouvelle_ope -> date_bancaire = g_date_new_dmy ( operation -> jour_bancaire,								     operation -> mois_bancaire,								     operation -> annee_bancaire );		nouvelle_ope -> no_compte = operation -> no_compte;		nouvelle_ope -> devise = operation -> devise;		nouvelle_ope -> une_devise_compte_egale_x_devise_ope = operation -> une_devise_compte_egale_x_devise_ope;		nouvelle_ope -> taux_change = operation -> taux_change;		nouvelle_ope -> frais_change = operation -> frais_change;		nouvelle_ope -> tiers = operation -> tiers;		nouvelle_ope -> type_ope = operation -> type_ope;		nouvelle_ope -> pointe = operation -> pointe;		nouvelle_ope -> auto_man = operation -> auto_man;		nouvelle_ope -> no_rapprochement = operation -> no_rapprochement;		nouvelle_ope -> no_operation_ventilee_associee = operation -> no_operation;		/* on ajoute cette opé à la liste */		ajout_operation ( nouvelle_ope );		/* si cette opé de ventil est un virement, on crée la contre opération */		if ( ope_ventil -> relation_no_operation &&		     ope_ventil -> relation_no_compte != -1 )		{		    struct structure_operation *nouvelle_ope_2;		    struct struct_devise *devise_compte_1;		    struct struct_devise *devise_compte_2;		    nouvelle_ope_2 = calloc ( 1,					      sizeof ( struct structure_operation ));		    /* on commence par mettre le type choisi */		    nouvelle_ope_2 -> type_ope = ope_ventil -> no_type_associe;		    nouvelle_ope_2 -> no_compte = ope_ventil -> relation_no_compte;		    nouvelle_ope_2 -> montant = -nouvelle_ope -> montant;		    nouvelle_ope_2 -> categorie = nouvelle_ope -> categorie;		    nouvelle_ope_2 -> sous_categorie = nouvelle_ope -> sous_categorie;		    if ( nouvelle_ope -> notes )			nouvelle_ope_2 -> notes = g_strdup ( nouvelle_ope -> notes );		    nouvelle_ope_2 -> imputation = nouvelle_ope -> imputation;		    nouvelle_ope_2 -> sous_imputation = nouvelle_ope -> sous_imputation;		    if ( nouvelle_ope -> no_piece_comptable )			nouvelle_ope_2 -> no_piece_comptable = g_strdup ( nouvelle_ope -> no_piece_comptable );		    nouvelle_ope_2 -> jour = nouvelle_ope -> jour;		    nouvelle_ope_2 -> mois = nouvelle_ope -> mois;		    nouvelle_ope_2 -> annee = nouvelle_ope -> annee;		    nouvelle_ope_2 -> date = g_date_new_dmy ( operation -> jour,							      operation -> mois,							      operation -> annee );		    nouvelle_ope_2 -> jour_bancaire = nouvelle_ope -> jour_bancaire;		    nouvelle_ope_2 -> mois_bancaire = nouvelle_ope -> mois_bancaire;		    nouvelle_ope_2 -> annee_bancaire = nouvelle_ope -> annee_bancaire;		    nouvelle_ope_2 -> devise = nouvelle_ope -> devise;		    if ( operation -> jour_bancaire )			nouvelle_ope_2 -> date_bancaire = g_date_new_dmy ( operation -> jour_bancaire,									   operation -> mois_bancaire,									   operation -> annee_bancaire );		    nouvelle_ope_2 -> une_devise_compte_egale_x_devise_ope = nouvelle_ope -> une_devise_compte_egale_x_devise_ope;		    devise_compte_1 = devise_par_no ( nouvelle_ope -> devise );		    devise_compte_2 = devise_par_no ( gsb_account_get_currency (nouvelle_ope_2 -> no_compte) );		    if ( !( nouvelle_ope -> devise == gsb_account_get_currency (nouvelle_ope_2 -> no_compte)			    ||			    ( devise_compte_2 -> passage_euro && !strcmp ( devise_compte_1 -> nom_devise, _("Euro") ))			    ||			    ( !strcmp ( devise_compte_2 -> nom_devise, _("Euro") ) && devise_compte_1 -> 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_2, devise_compte_1, 1,						 (gdouble ) 0, (gdouble ) 0, FALSE );			nouvelle_ope_2 -> taux_change = taux_de_change[0];			nouvelle_ope_2 -> frais_change = taux_de_change[1];			if ( nouvelle_ope_2 -> taux_change < 0 )			{			    nouvelle_ope_2 -> taux_change = -nouvelle_ope_2 -> taux_change;			    nouvelle_ope_2 -> une_devise_compte_egale_x_devise_ope = 1;			}		    }		    /* 		  nouvelle_ope_2 -> taux_change = nouvelle_ope -> taux_change; */		    /* 		  nouvelle_ope_2 -> frais_change = nouvelle_ope -> frais_change; */		    nouvelle_ope_2 -> tiers = nouvelle_ope -> tiers;		    nouvelle_ope_2 -> auto_man = nouvelle_ope -> auto_man;		    nouvelle_ope_2 -> no_exercice = nouvelle_ope -> no_exercice;		    ajout_operation ( nouvelle_ope_2 );		    /* on met les relations */		    nouvelle_ope -> relation_no_operation = nouvelle_ope_2 -> no_operation;		    nouvelle_ope -> relation_no_compte = nouvelle_ope_2 -> no_compte;		    nouvelle_ope_2 -> relation_no_operation = nouvelle_ope -> no_operation;		    nouvelle_ope_2 -> relation_no_compte = nouvelle_ope -> no_compte;		    /* 		    on réaffiche la contre opération pour faire apparaitre la catég */		    remplit_ligne_operation ( nouvelle_ope_2,					      NULL );		}	    }	}	liste_struct_ventilations = liste_struct_ventilations -> next;    }}