rem: operation -> date ) > 0 )
add: operation -> date ) < 0 )
context: GSList *recupere_opes_etat ( struct struct_etat *etat ){  GSList *liste_operations_etat;  gint i;  gint no_exercice_recherche;  GSList *liste_tmp;  liste_operations_etat = NULL;  /* si on utilise l'exercice courant ou prcdent, on cherche ici */  /* le numro de l'exercice correspondant */  no_exercice_recherche = 0;  if ( etat -> exo_date )    {      GDate *date_jour;      struct struct_exercice *exo;      struct struct_exercice *exo_courant;      struct struct_exercice *exo_precedent;      liste_tmp = liste_struct_exercices;      date_jour = g_date_new ();      g_date_set_time ( date_jour,			time ( NULL ));      exo_courant = NULL;      exo_precedent = NULL;      switch ( etat -> utilise_detail_exo )	{	case 1:	  /* on recherche l'exo courant */	  while ( liste_tmp )	    {	      exo = liste_tmp -> data;	      if ( g_date_compare ( date_jour,				    exo -> date_debut ) >= 0		   &&		   g_date_compare ( date_jour,				    exo -> date_fin ) <= 0 )		{		  no_exercice_recherche = exo -> no_exercice;		  liste_tmp = NULL;		}	      else		liste_tmp = liste_tmp -> next;	    }	  break;	case 2:	  /* on recherche l'exo prcdent */	  while ( liste_tmp )	    {	      struct struct_exercice *exo;	      exo = liste_tmp -> data;	      if ( exo_courant )		{		  /* exo_courant est forcemment aprs exo_precedent */		  /* si l'exo en court est aprs exo_courant, on met exo_courant */		  /* dans exo_precedent, et l'exo en court dans exo_courant */		  /*   sinon, on compare avec exo_precedent */		  if ( g_date_compare ( exo -> date_debut,					exo_courant -> date_fin ) >= 0 )		    {		      exo_precedent = exo_courant;		      exo_courant = exo;		    }		  else		    {		      /* l'exo en cours est avant exo_courant, on le compare  exo_precedent */		      if ( !exo_precedent			   ||			   g_date_compare ( exo -> date_debut,					    exo_precedent -> date_fin ) >= 0 )			exo_precedent = exo;		    }		}	      else		exo_courant = exo;	      liste_tmp = liste_tmp -> next;	    }	  if ( exo_precedent )	    no_exercice_recherche = exo_precedent -> no_exercice;	  break;	default:	}    }  for ( i=0 ; i<nb_comptes ; i++ )    {      /* on commence par vrifier que le compte fait partie de l'tat */      p_tab_nom_de_compte_variable = p_tab_nom_de_compte + i;      if ( !etat -> utilise_detail_comptes	   ||	   g_slist_index ( etat -> no_comptes,			   GINT_TO_POINTER ( i )) != -1 )	{	  /* 	  le compte est bon, passe  la suite de la slection */	  /* on va faire le tour de toutes les ops du compte */	  GSList *pointeur_tmp;	  pointeur_tmp = LISTE_OPERATIONS;	  while ( pointeur_tmp )	    {	      struct structure_operation *operation;	      operation = pointeur_tmp -> data;	      /* si c'est une op ventile, dpend de la conf */	      if ( operation -> operation_ventilee		   &&		   !etat -> pas_detailler_ventilation )		goto operation_refusee;	      if ( operation -> no_operation_ventilee_associee		   &&		   etat -> pas_detailler_ventilation )		goto operation_refusee;	      /* on vrifie ensuite si un texte est recherch */	      if ( etat -> utilise_texte )		{		  gint garde_ope;		  		  liste_tmp = etat -> liste_struct_comparaison_textes;		  garde_ope = 0;		  while ( liste_tmp )		    {		      gchar *texte;		      struct struct_comparaison_textes_etat *comp_textes;		      gint ope_dans_test;		      comp_textes = liste_tmp -> data;		      /* on commence par rcuprer le texte du champs recherch */		      texte = recupere_texte_test_etat ( operation,							 comp_textes -> champ );		      /*  ce niveau, texte est soit null, soit contient le texte dans lequel on effectue la recherche */		      /* on vrifie maintenant en fontion de l'oprateur */		      /* si c'est un chq ou une pc et que utilise_txt, on utilise leur no */		      if ( ( comp_textes -> champ == 8			     ||			     comp_textes -> champ == 9			     ||			     comp_textes -> champ == 10 )			   &&			   !comp_textes -> utilise_txt )			{			  if ( texte )			    ope_dans_test = verifie_chq_test_etat ( comp_textes,								    texte );			  else			    ope_dans_test = 0;			}		      else			ope_dans_test = verifie_texte_test_etat ( comp_textes,								  texte );		      /*  ce niveau, ope_dans_test=1 si l'op a pass ce test */		      /* il faut qu'on fasse le lien avec la ligne prcdente */			   		      switch ( comp_textes -> lien_struct_precedente )			{			case -1:			  /* 1re ligne  */			  garde_ope = ope_dans_test;			  break;			case 0:			  /* et  */			  garde_ope = garde_ope && ope_dans_test;			  break;			case 1:			  /* ou  */			  garde_ope = garde_ope || ope_dans_test;			  break;			case 2:			  /* sauf  */			  garde_ope = garde_ope && (!ope_dans_test);			  break;			}		      liste_tmp = liste_tmp -> next;		    }		  /* on ne garde l'opration que si garde_ope = 1 */		  if ( !garde_ope )		    goto operation_refusee;		}	      /* on vrifie les R */	      if ( etat -> afficher_r )		{		  if ( ( etat -> afficher_r == 1			 &&			 operation -> pointe == 2 )		       ||		       ( etat -> afficher_r == 2			 &&			 operation -> pointe != 2 ))		    goto operation_refusee;		}	      /* vrification des montants */	      if ( etat -> utilise_montant )		{		  gint garde_ope;		  		  liste_tmp = etat -> liste_struct_comparaison_montants;		  garde_ope = 0;		  while ( liste_tmp )		    {		      gdouble montant;		      gint ope_dans_premier_test;		      gint ope_dans_second_test;		      struct struct_comparaison_montants_etat *comp_montants;		      gint ope_dans_test;		      comp_montants = liste_tmp -> data;		      montant = calcule_montant_devise_renvoi ( operation -> montant,								etat -> choix_devise_montant,								operation -> devise,								operation -> une_devise_compte_egale_x_devise_ope,								operation -> taux_change,								operation -> frais_change );		      /* on vrifie maintenant en fonction de la ligne de test si on garde cette op */		      ope_dans_premier_test = compare_montants_etat ( montant,								      comp_montants -> montant_1,								      comp_montants -> comparateur_1 );		      if ( comp_montants -> lien_1_2 != 3 )			   ope_dans_second_test = compare_montants_etat ( montant,									  comp_montants -> montant_2,									  comp_montants -> comparateur_2 );		      else			/* pour viter les warning lors de la compil */			ope_dans_second_test = 0;					      switch ( comp_montants -> lien_1_2 )			{			case 0:			  /* et  */			  ope_dans_test = ope_dans_premier_test && ope_dans_second_test;			  break;			case 1:			  /*  ou */			  ope_dans_test = ope_dans_premier_test || ope_dans_second_test;			  break;			case 2:			  /* sauf  */			  ope_dans_test = ope_dans_premier_test && (!ope_dans_second_test);			  break;			case 3:			  /* aucun  */			  ope_dans_test = ope_dans_premier_test;			  break;			default:			  ope_dans_test = 0;			}		      /*  ce niveau, ope_dans_test=1 si l'op a pass ce test */		      /* il faut qu'on fasse le lien avec la ligne prcdente */			   		      switch ( comp_montants -> lien_struct_precedente )			{			case -1:			  /* 1re ligne  */			  garde_ope = ope_dans_test;			  break;			case 0:			  /* et  */			  garde_ope = garde_ope && ope_dans_test;			  break;			case 1:			  /* ou  */			  garde_ope = garde_ope || ope_dans_test;			  break;			case 2:			  /* sauf  */			  garde_ope = garde_ope && (!ope_dans_test);			  break;			}		      liste_tmp = liste_tmp -> next;		    }		  /* on ne garde l'opration que si garde_ope = 1 */		  if ( !garde_ope )		    goto operation_refusee;		}	      /* 	      on vrifie les virements */	      if ( operation -> relation_no_operation )		{		  if ( !etat -> type_virement )		    goto operation_refusee;		  if ( etat -> type_virement == 1 )		    {		      /* on inclue l'op que si le compte de virement */		      /* est un compte de passif ou d'actif */		      p_tab_nom_de_compte_variable = p_tab_nom_de_compte + operation -> relation_no_compte;		      /* pour l'instant on n'a que le compte passif */		      if ( TYPE_DE_COMPTE != 2 )			goto operation_refusee;		      p_tab_nom_de_compte_variable = p_tab_nom_de_compte + i; 		    }		  else		    {		      if ( etat -> type_virement == 2 )			{			  /* on inclut l'op que si le compte de virement n'est */			  /* pas prsent dans l'tat */			  			  if ( g_slist_index ( etat -> no_comptes,					       GINT_TO_POINTER ( operation -> relation_no_compte )) != -1 )			    goto operation_refusee;			}		      else			{			  /* on inclut l'op que si le compte de virement est dans la liste */			  if ( g_slist_index ( etat -> no_comptes_virements,					       GINT_TO_POINTER ( operation -> relation_no_compte )) == -1 )			    goto operation_refusee;			}		    }		}	      else		{		  /* 		  l'op n'est pas un virement, si on doit exclure les non virement, c'est ici */		  if ( etat -> type_virement		       &&		       etat -> exclure_ope_non_virement )		    goto operation_refusee;		}	      if ( etat -> utilise_categ )		{		  /* on va maintenant vrifier que les catg sont bonnes */		  /* si on exclut les ops sans categ, on vrifie que c'est pas un virement ni une ventilation */		  if ((( etat -> utilise_detail_categ			 &&			 g_slist_index ( etat -> no_categ,					 GINT_TO_POINTER ( operation -> categorie )) == -1 )		       ||		       ( etat -> exclure_ope_sans_categ			 &&			 !operation -> categorie ))		      &&		      !operation -> operation_ventilee		      &&		      !operation -> relation_no_operation )		    goto operation_refusee;		}	      /* vrification de l'imputation budgtaire */	      if (( etat -> utilise_ib		    &&		    etat -> utilise_detail_ib		    &&		    g_slist_index ( etat -> no_ib,				    GINT_TO_POINTER ( operation -> imputation )) == -1 )		  ||		  ( etat -> exclure_ope_sans_ib		    &&		    !operation -> imputation ))		goto operation_refusee;	      /* vrification du tiers */	      if ( etat -> utilise_tiers		   &&		   etat -> utilise_detail_tiers		   &&		   g_slist_index ( etat -> no_tiers,				   GINT_TO_POINTER ( operation -> tiers )) == -1 )		goto operation_refusee;	      /* vrifie la plage de date */	      if ( etat -> exo_date )		{		  /* on utilise l'exercice */		  if ( (( etat -> utilise_detail_exo == 1			  ||			  etat -> utilise_detail_exo == 2 )			&&			( operation -> no_exercice != no_exercice_recherche			  ||			  !operation -> no_exercice ))		       ||		       ( etat -> utilise_detail_exo == 3			 &&			 ( g_slist_index ( etat -> no_exercices,					   GINT_TO_POINTER ( operation -> no_exercice )) == -1			   ||			   !operation -> no_exercice )))		    goto operation_refusee;		}	      else		{		  /* on utilise une plage de dates */		  GDate *date_jour;		  GDate *date_tmp;		  date_jour = g_date_new ();		  g_date_set_time ( date_jour,				    time ( NULL ));		  switch ( etat -> no_plage_date )		    {		    case 0:		      /* toutes */		      break;		    case 1:		      /* plage perso */		      if ( !etat -> date_perso_debut			   ||			   !etat -> date_perso_fin			   ||			   g_date_compare ( etat -> date_perso_debut,					    operation -> date ) > 0			   ||			   g_date_compare ( etat -> date_perso_fin,					    operation -> date ) < 0 )			goto operation_refusee;		      break;		    case 2:		      /* cumul  ce jour */		      if ( g_date_compare ( date_jour,					    operation -> date ) > 0 )			goto operation_refusee;		      break;		    case 3:		      /* mois en cours */		      if ( g_date_month ( date_jour ) != g_date_month ( operation -> date )			   ||			   g_date_year ( date_jour ) != g_date_year ( operation -> date ))			goto operation_refusee;		      break;		    case 4:		      /* anne en cours */		      if ( g_date_year ( date_jour ) != g_date_year ( operation -> date ))			goto operation_refusee;		      break;		    case 5:		      /* cumul mensuel */		      if ( g_date_month ( date_jour ) != g_date_month ( operation -> date )			   ||			   g_date_year ( date_jour ) != g_date_year ( operation -> date )			   ||			   g_date_compare ( date_jour,					    operation -> date ) < 0 )			goto operation_refusee;		      break;		    case 6:		      /* cumul annuel */		      if ( g_date_year ( date_jour ) != g_date_year ( operation -> date )			   ||			   g_date_compare ( date_jour,					    operation -> date ) < 0 )			goto operation_refusee;		      break;		    case 7:		      /* mois prcdent */		      g_date_subtract_months ( date_jour,					       1 );		      if ( g_date_month ( date_jour ) != g_date_month ( operation -> date )			   ||			   g_date_year ( date_jour ) != g_date_year ( operation -> date ))			goto operation_refusee;		      break;		    case 8:		      /* anne prcdente */		      g_date_subtract_years ( date_jour,					      1 );		      if ( g_date_year ( date_jour ) != g_date_year ( operation -> date ))			goto operation_refusee;		      break;		    case 9:		      /* 30 derniers jours */		      date_tmp = g_date_new_dmy ( g_date_day ( date_jour ),						  g_date_month ( date_jour ),						  g_date_year ( date_jour ) );		      g_date_subtract_days ( date_tmp,					     30 );		      if ( g_date_compare ( date_tmp,					    operation -> date ) > 0			   ||			   g_date_compare ( date_jour,					    operation -> date ) < 0 )			goto operation_refusee;		      break;		    case 10:		      /* 3 derniers mois */		      date_tmp = g_date_new_dmy ( g_date_day ( date_jour ),						  g_date_month ( date_jour ),						  g_date_year ( date_jour ) );		      g_date_subtract_months ( date_tmp,					       3 );		      g_date_subtract_months ( date_jour,					       1 );		      if ( g_date_compare ( date_tmp,					    operation -> date ) > 0			   ||			   g_date_compare ( date_jour,					    operation -> date ) < 0 )			goto operation_refusee;		      break;		    case 11:		      /* 6 derniers mois */		      date_tmp = g_date_new_dmy ( g_date_day ( date_jour ),						  g_date_month ( date_jour ),						  g_date_year ( date_jour ) );		      g_date_subtract_months ( date_tmp,					       6 );		      g_date_subtract_months ( date_jour,					       1 );		      if ( g_date_compare ( date_tmp,					    operation -> date ) > 0			   ||			   g_date_compare ( date_jour,					    operation -> date ) < 0 )			goto operation_refusee;		      break;		    case 12:		      /* 12 derniers mois */		      date_tmp = g_date_new_dmy ( g_date_day ( date_jour ),						  g_date_month ( date_jour ),						  g_date_year ( date_jour ) );		      g_date_subtract_months ( date_tmp,					       12 );		      g_date_subtract_months ( date_jour,					       1 );		      if ( g_date_compare ( date_tmp,					    operation -> date ) > 0			   ||			   g_date_compare ( date_jour,					    operation -> date ) < 0 )			goto operation_refusee;		      break;		    }		}	      liste_operations_etat = g_slist_append ( liste_operations_etat,						       operation );	    operation_refusee:	      pointeur_tmp = pointeur_tmp -> next;	    }	}    }  return ( liste_operations_etat );}