1 /* ************************************************************************** */
2 /* Fichier qui s'occupe d'afficher les états                                  */
3 /*                                                                            */
4 /*                            etats_affiche.c                                 */
5 /*                                                                            */
6 /*     Copyright (C)	2000-2008 Cédric Auger (cedric@grisbi.org)	      */
7 /*			2004-2008 Benjamin Drieu (bdrieu@april.org)	      */
8 /*			https://www.grisbi.org				      */
9 /*                                                                            */
10 /*  This program is free software; you can redistribute it and/or modify      */
11 /*  it under the terms of the GNU General Public License as published by      */
12 /*  the Free Software Foundation; either version 2 of the License, or         */
13 /*  (at your option) any later version.                                       */
14 /*                                                                            */
15 /*  This program is distributed in the hope that it will be useful,           */
16 /*  but WITHOUT ANY WARRANTY; without even the implied warranty of            */
17 /*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the             */
18 /*  GNU General Public License for more details.                              */
19 /*                                                                            */
20 /*  You should have received a copy of the GNU General Public License         */
21 /*  along with this program; if not, write to the Free Software               */
22 /*  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
23 /*                                                                            */
24 /* ************************************************************************** */
25 
26 #ifdef HAVE_CONFIG_H
27 #include "config.h"
28 #endif
29 
30 #include "include.h"
31 #include <glib/gi18n.h>
32 
33 /*START_INCLUDE*/
34 #include "etats_affiche.h"
35 #include "etats_calculs.h"
36 #include "etats_support.h"
37 #include "grisbi_win.h"
38 #include "gsb_data_account.h"
39 #include "gsb_data_budget.h"
40 #include "gsb_data_category.h"
41 #include "gsb_data_fyear.h"
42 #include "gsb_data_payee.h"
43 #include "gsb_data_payment.h"
44 #include "gsb_data_reconcile.h"
45 #include "gsb_data_report.h"
46 #include "gsb_data_transaction.h"
47 #include "utils_dates.h"
48 #include "navigation.h"
49 #include "gsb_real.h"
50 #include "utils_real.h"
51 #include "utils_str.h"
52 #include "structures.h"
53 #include "etats_config.h"
54 #include "erreur.h"
55 /*END_INCLUDE*/
56 
57 /*START_STATIC*/
58 static void etat_affiche_attach_hsep ( int x, int x2, int y, int y2);
59 static void etat_affiche_attach_label ( gchar * text, gint properties, int x, int x2, int y, int y2,
60 									   GtkJustification align, gint transaction_number );
61 static void etat_affiche_attach_vsep ( int x, int x2, int y, int y2);
62 /*END_STATIC*/
63 
64 
65 
66 static gint titres_affiches;
67 
68 /*START_EXTERN*/
69 extern gint ancien_tiers_etat;
70 extern gint ancien_compte_etat;
71 extern gint ancienne_categ_etat;
72 extern gint ancienne_categ_speciale_etat;
73 extern gint ancienne_ib_etat;
74 extern gint ancienne_sous_categ_etat;
75 extern gint ancienne_sous_ib_etat;
76 extern gint changement_de_groupe_etat;
77 extern GDate *date_debut_periode;
78 extern gint debut_affichage_etat;
79 extern gint devise_categ_etat;
80 extern gint devise_compte_en_cours_etat;
81 extern gint devise_generale_etat;
82 extern gint devise_ib_etat;
83 extern gint devise_tiers_etat;
84 extern struct EtatAffichage * etat_affichage_output;
85 extern gint exo_en_cours_etat;
86 extern gint ligne_debut_partie;
87 extern GsbReal montant_categ_etat;
88 extern GsbReal montant_compte_etat;
89 extern GsbReal montant_exo_etat;
90 extern GsbReal montant_ib_etat;
91 extern GsbReal montant_periode_etat;
92 extern GsbReal montant_sous_categ_etat;
93 extern GsbReal montant_sous_ib_etat;
94 extern GsbReal montant_tiers_etat;
95 extern gint nb_colonnes;
96 extern gint nb_ope_categ_etat;
97 extern gint nb_ope_compte_etat;
98 extern gint nb_ope_exo_etat;
99 extern gint nb_ope_general_etat;
100 extern gint nb_ope_ib_etat;
101 extern gint nb_ope_partie_etat;
102 extern gint nb_ope_periode_etat;
103 extern gint nb_ope_sous_categ_etat;
104 extern gint nb_ope_sous_ib_etat;
105 extern gint nb_ope_tiers_etat;
106 extern const gchar *nom_categ_en_cours;
107 extern const gchar *nom_compte_en_cours;
108 extern const gchar *nom_ib_en_cours;
109 extern const gchar *nom_ss_categ_en_cours;
110 extern const gchar *nom_ss_ib_en_cours;
111 extern const gchar *nom_tiers_en_cours;
112 /*END_EXTERN*/
113 
114 
115 /*****************************************************************************************************/
etat_affiche_affiche_titre(gint ligne)116 gint etat_affiche_affiche_titre ( gint ligne )
117 {
118     gchar *titre;
119 	gint report_number;
120 
121 	report_number = gsb_gui_navigation_get_current_report ();
122     titre = etats_titre (report_number);
123 
124 	if (gsb_data_report_get_compl_name_used (report_number)
125 		&&
126 		gsb_data_report_get_compl_name_function (report_number) == 1)
127 	{
128 		gchar **tab;
129 
130 		tab = g_strsplit (titre, "\n", 2);
131 		etat_affiche_attach_label (tab[0], TEXT_BOLD | TEXT_HUGE, 0, nb_colonnes,
132 								   ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0);
133 		etat_affiche_attach_label (tab[1], TEXT_NORMAL, 0, nb_colonnes,
134 								   ligne + 1, ligne + 2, GTK_JUSTIFY_CENTER, 0);
135 		g_strfreev (tab);
136 
137 		return 2;
138 	}
139 	else
140 	{
141 		etat_affiche_attach_label (titre, TEXT_BOLD | TEXT_HUGE, 0, nb_colonnes,
142 								   ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
143 
144 		return 1;
145 	}
146 }
147 /*****************************************************************************************************/
148 
149 
150 /*****************************************************************************************************/
etat_affiche_affiche_separateur(gint ligne)151 gint etat_affiche_affiche_separateur ( gint ligne )
152 {
153     etat_affiche_attach_hsep ( 0, nb_colonnes, ligne, ligne + 1 );
154     return ligne + 1;
155 }
156 /*****************************************************************************************************/
157 
158 
159 /*****************************************************************************************************/
160 /* affiche le total à l'endroit donné de la table */
161 /* si les catégories sont affichées */
162 /* retourne la ligne suivante de la table */
163 /*****************************************************************************************************/
etat_affiche_affiche_total_categories(gint ligne)164 gint etat_affiche_affiche_total_categories ( gint ligne )
165 {
166     char * text;
167     gint current_report_number;
168 	gchar* tmpstr;
169 
170     current_report_number = gsb_gui_navigation_get_current_report ();
171 
172     if (gsb_data_report_get_category_show_category_amount (current_report_number))
173     {
174 	/* si rien n'est affiché en dessous de la catég, on */
175 	/* met le résultat sur la ligne de la catég */
176 	/* sinon on fait une barre et on met le résultat */
177 
178 	if ( gsb_data_report_get_category_show_sub_category (current_report_number)
179 	     ||
180 	     gsb_data_report_get_budget_used (current_report_number)
181 	     ||
182 	     gsb_data_report_get_account_group_reports (current_report_number)
183 	     ||
184 	     gsb_data_report_get_payee_used (current_report_number)
185 	     ||
186 	     gsb_data_report_get_show_report_transactions (current_report_number) )
187 	{
188 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
189 	    ligne++;
190 
191 	    etat_affiche_attach_hsep ( 1, nb_colonnes, ligne, ligne + 1 );
192 	    ligne++;
193 
194 	    if ( nom_categ_en_cours )
195 	    {
196 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
197 		{
198 		    gchar* fmtstr;
199 		    if ( nb_ope_categ_etat <= 1 )
200 			fmtstr = _("Total %s (%d transaction)");
201 		    else
202 			fmtstr = _("Total %s (%d transactions)");
203 		    text = g_strdup_printf ( fmtstr, nom_categ_en_cours, nb_ope_categ_etat );
204 		}
205 		else
206 		    text = g_strconcat ( _("Total "), nom_categ_en_cours, NULL );
207 	    }
208 	    else
209 	    {
210 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
211 		{
212 		    gchar* fmtstr;
213 		    if ( nb_ope_categ_etat <= 1 )
214 			fmtstr = _("Category total (%d transaction): ");
215 		    else
216 			fmtstr = _("Category total (%d transactions): ");
217 		    text = g_strdup_printf ( fmtstr, nb_ope_categ_etat);
218 		}
219 		else
220 		    text = g_strdup ( _("Category total: ") );
221 	    }
222 	    etat_affiche_attach_label ( text, TEXT_NORMAL, 1, nb_colonnes - 1,
223 					ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
224             g_free ( text );
225 
226 	    text = utils_real_get_string_with_currency (montant_categ_etat, devise_categ_etat, TRUE );
227 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes,
228 					ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
229 	    g_free ( text );
230 	    ligne++;
231 
232 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
233 
234 	    ligne++;
235 	}
236 	else
237 	{
238 	    ligne--;
239 
240 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
241 	    {
242 	        gchar* fmtstr;
243 		if ( nb_ope_categ_etat <= 1 )
244 		    fmtstr = _("%s (%d transaction)");
245 		else
246 		    fmtstr = _("%s (%d transactions)");
247 
248 		tmpstr = utils_real_get_string_with_currency ( montant_categ_etat,
249 										 devise_categ_etat, TRUE  );
250 	        text = g_strdup_printf ( fmtstr , tmpstr, nb_ope_categ_etat );
251 		g_free ( tmpstr );
252 	    }
253 	    else
254 		text = utils_real_get_string_with_currency ( montant_categ_etat,
255 							   devise_categ_etat, TRUE );
256 
257 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes,
258 					ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
259             g_free ( text );
260 
261 	    ligne++;
262 	}
263     }
264 
265     montant_categ_etat = null_real;
266     nom_categ_en_cours = NULL;
267     titres_affiches = 0;
268     nb_ope_categ_etat = 0;
269 
270     return (ligne );
271 }
272 /*****************************************************************************************************/
273 
274 
275 
276 /*****************************************************************************************************/
277 /* affiche le total à l'endroit donné de la table */
278 /* si les sous_categ sont affichées */
279 /* retourne le ligne suivante de la table */
280 /*****************************************************************************************************/
etat_affiche_affiche_total_sous_categ(gint ligne)281 gint etat_affiche_affiche_total_sous_categ ( gint ligne )
282 {
283     gchar * text;
284     gint current_report_number;
285 	gchar* tmpstr;
286 
287     current_report_number = gsb_gui_navigation_get_current_report ();
288 
289     if (gsb_data_report_get_category_show_sub_category_amount (current_report_number))
290     {
291 	/* si rien n'est affiché en dessous de la sous_categ, on */
292 	/* met le résultat sur la ligne de la ss categ */
293 	/* sinon on fait une barre et on met le résultat */
294 
295 	if ( gsb_data_report_get_budget_used (current_report_number)
296 	     ||
297 	     gsb_data_report_get_account_group_reports (current_report_number)
298 	     ||
299 	     gsb_data_report_get_payee_used (current_report_number)
300 	     ||
301 	     gsb_data_report_get_show_report_transactions (current_report_number))
302 	{
303 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
304 	    ligne++;
305 
306 	    etat_affiche_attach_hsep ( 1, nb_colonnes, ligne, ligne + 1 );
307 	    ligne++;
308 
309 	    if ( nom_categ_en_cours
310 		 &&
311 		 nom_ss_categ_en_cours )
312 	    {
313 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
314 		{
315 		    gchar* fmtstr;
316 		    if ( nb_ope_sous_categ_etat <= 1 )
317 			fmtstr = _("Total %s: %s (%d transaction): ");
318 		    else
319 			fmtstr = _("Total %s: %s (%d transactions): ");
320 		    text = g_strdup_printf ( fmtstr, nom_categ_en_cours,
321 						 nom_ss_categ_en_cours, nb_ope_sous_categ_etat );
322 		}
323 		else
324 		    text = g_strdup_printf ( _("Total %s: %s"), nom_categ_en_cours, nom_ss_categ_en_cours );
325 	    }
326 	    else
327 	    {
328 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
329 		{
330 		    gchar* fmtstr;
331 		    if ( nb_ope_sous_categ_etat <= 1 )
332 			fmtstr = _("Sub-categories total (%d transaction): ");
333 		    else
334 			fmtstr = _("Sub-categories total (%d transactions): ");
335 		    text = g_strdup_printf ( fmtstr, nb_ope_sous_categ_etat );
336 		}
337 		else
338 		    text = g_strdup( _("Sub-categories total: ") );
339 	    }
340 	    etat_affiche_attach_label ( text, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
341 	    g_free ( text );
342 
343 	    text = utils_real_get_string_with_currency (montant_sous_categ_etat, devise_categ_etat, TRUE);
344 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
345 	    g_free ( text );
346 	    ligne++;
347 
348 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
349 	    ligne++;
350 	}
351 	else
352 	{
353 	    ligne--;
354 
355 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
356 	    {
357 	        gchar* fmtstr;
358 		if ( nb_ope_sous_categ_etat <= 1 )
359 		    fmtstr = _("%s (%d transaction)");
360 		else
361 		    fmtstr = _("%s (%d transactions)");
362 		tmpstr = utils_real_get_string_with_currency ( montant_sous_categ_etat, devise_categ_etat, TRUE  );
363 	        text = g_strdup_printf ( fmtstr, tmpstr,
364 				nb_ope_sous_categ_etat );
365 	        g_free ( tmpstr );
366 	    }
367 	    else
368 		text = utils_real_get_string_with_currency ( montant_sous_categ_etat,
369 							   devise_categ_etat, TRUE );
370 
371 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
372 	    g_free ( text );
373 	    ligne++;
374 	}
375     }
376 
377     montant_sous_categ_etat = null_real;
378     nom_ss_categ_en_cours = NULL;
379     titres_affiches = 0;
380     nb_ope_sous_categ_etat = 0;
381 
382     return (ligne );
383 }
384 /*****************************************************************************************************/
385 
386 
387 
388 /*****************************************************************************************************/
389 /* affiche le total à l'endroit donné de la table */
390 /* si les ib sont affichées */
391 /* retourne le ligne suivante de la table */
392 /*****************************************************************************************************/
etat_affiche_affiche_total_ib(gint ligne)393 gint etat_affiche_affiche_total_ib ( gint ligne )
394 {
395     gchar * text;
396     gint current_report_number;
397 	gchar* tmpstr2;
398 
399     current_report_number = gsb_gui_navigation_get_current_report ();
400 
401 
402     if (gsb_data_report_get_budget_show_budget_amount (current_report_number))
403     {
404 	/* si rien n'est affiché en dessous de la ib, on */
405 	/* met le résultat sur la ligne de l'ib */
406 	/* sinon on fait une barre et on met le résultat */
407 
408 	if ( gsb_data_report_get_budget_show_sub_budget (current_report_number)
409 	     ||
410 	     gsb_data_report_get_account_group_reports (current_report_number)
411 	     ||
412 	     gsb_data_report_get_payee_used (current_report_number)
413 	     ||
414 	     gsb_data_report_get_show_report_transactions (current_report_number))
415 	{
416 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
417 	    ligne++;
418 
419 	    etat_affiche_attach_hsep ( 1, nb_colonnes, ligne, ligne + 1 );
420 	    ligne++;
421 
422 	    if ( nom_ib_en_cours )
423 	    {
424 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
425 		{
426 		    gchar* fmtstr;
427 		    if ( nb_ope_ib_etat <= 1 )
428 			fmtstr = _("Total %s (%d transaction)");
429 		    else
430 			fmtstr = _("Total %s (%d transactions)");
431 	   	    text = g_strdup_printf ( fmtstr, nom_ib_en_cours, nb_ope_ib_etat );
432 		}
433 		else
434 		    text = g_strconcat ( _("Total "), nom_ib_en_cours, NULL );
435 	    }
436 	    else
437 	    {
438 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
439 		{
440 		    gchar* fmtstr;
441 		    if ( nb_ope_ib_etat <= 1 )
442 			fmtstr = _("Budgetary lines total: (%d transaction): ");
443 		    else
444 			fmtstr = _("Budgetary lines total: (%d transactions): ");
445 		    text = g_strdup_printf ( fmtstr, nb_ope_ib_etat );
446 		}
447 		else
448 		    text = g_strdup( _("Budgetary lines total: ") );
449 	    }
450 
451 	    etat_affiche_attach_label ( text, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
452 	    g_free ( text );
453 
454 	    text = utils_real_get_string_with_currency ( montant_ib_etat, devise_ib_etat, TRUE );
455 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
456 	    g_free ( text );
457 	    ligne++;
458 
459 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
460 	    ligne++;
461 	}
462 	else
463 	{
464 	    ligne--;
465 
466 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
467 	    {
468 	        gchar* fmtstr;
469 		if ( nb_ope_ib_etat <= 1 )
470 		    fmtstr = _("%s (%d transaction)");
471 		else
472 		    fmtstr = _("%s (%d transactions)");
473 		tmpstr2 = utils_real_get_string_with_currency (montant_ib_etat, devise_ib_etat, TRUE  );
474 		text = g_strdup_printf ( fmtstr, tmpstr2 , nb_ope_ib_etat );
475 		g_free (tmpstr2);
476 	    }
477 	    else
478 		text = utils_real_get_string_with_currency ( montant_ib_etat, devise_ib_etat, TRUE );
479 
480 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
481 	    g_free ( text );
482 	    ligne++;
483 	}
484     }
485 
486     montant_ib_etat = null_real;
487     nom_ib_en_cours = NULL;
488     titres_affiches = 0;
489     nb_ope_ib_etat = 0;
490 
491     return (ligne );
492 }
493 /*****************************************************************************************************/
494 
495 
496 
497 /*****************************************************************************************************/
498 /* affiche le total à l'endroit donné de la table */
499 /* si les sous_ib sont affichées */
500 /* retourne le ligne suivante de la table */
501 /*****************************************************************************************************/
etat_affiche_affiche_total_sous_ib(gint ligne)502 gint etat_affiche_affiche_total_sous_ib ( gint ligne )
503 {
504     gchar * text;
505     gint current_report_number;
506 
507     current_report_number = gsb_gui_navigation_get_current_report ();
508 
509 
510     if (gsb_data_report_get_budget_show_sub_budget_amount (current_report_number))
511     {
512 	/* si rien n'est affiché en dessous de la sous ib, on */
513 	/* met le résultat sur la ligne de la sous ib */
514 	/* sinon on fait une barre et on met le résultat */
515 
516 	if ( gsb_data_report_get_account_group_reports (current_report_number)
517 	     ||
518 	     gsb_data_report_get_payee_used (current_report_number)
519 	     ||
520 	     gsb_data_report_get_show_report_transactions (current_report_number))
521 	{
522 
523 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
524 	    ligne++;
525 
526 	    etat_affiche_attach_hsep ( 1, nb_colonnes, ligne, ligne + 1 );
527 	    ligne++;
528 
529 	    if ( nom_ib_en_cours
530 		 &&
531 		 nom_ss_ib_en_cours )
532 	    {
533 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
534 		{
535 		    gchar* fmtstr;
536 		    if ( nb_ope_sous_ib_etat <= 1 )
537 			fmtstr = _("Total %s: %s (%d transaction): ");
538 		    else
539 			fmtstr = _("Total %s: %s (%d transactions): ");
540 		    text = g_strdup_printf ( fmtstr, nom_ib_en_cours,
541 						 nom_ss_ib_en_cours, nb_ope_sous_ib_etat );
542 		}
543 		else
544 		    text = g_strdup_printf ( _("Total %s: %s"), nom_ib_en_cours, nom_ss_ib_en_cours );
545 	    }
546 	    else
547 	    {
548 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
549 		{
550 		    gchar* fmtstr;
551 		    if ( nb_ope_sous_ib_etat <= 1 )
552 			fmtstr = _("Sub-budgetary lines total: (%d transaction): ");
553 		    else
554 			fmtstr = _("Sub-budgetary lines total: (%d transactions): ");
555 		    text = g_strdup_printf ( fmtstr, nb_ope_sous_ib_etat );
556 		}
557 		else
558 		    text = g_strdup( _("Sub-budgetary lines total: ") );
559 	    }
560 
561 	    etat_affiche_attach_label ( text, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
562 	    g_free ( text );
563 
564 	    text = utils_real_get_string_with_currency (montant_sous_ib_etat, devise_ib_etat, TRUE );
565 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
566 	    g_free ( text );
567 	    ligne++;
568 
569 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
570 	    ligne++;
571 	}
572 	else
573 	{
574 	    ligne--;
575 
576 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
577 	    {
578 	        gchar* fmtstr;
579 	        gchar* tmpstr;
580 
581 		if ( nb_ope_sous_ib_etat <= 1 )
582 		    fmtstr = _("%s (%d transaction)");
583 		else
584 		    fmtstr = _("%s (%d transactions)");
585 		tmpstr = utils_real_get_string_with_currency (montant_sous_ib_etat,
586 							    devise_ib_etat, TRUE  );
587 		text = g_strdup_printf ( fmtstr, tmpstr,
588 					 nb_ope_sous_ib_etat );
589 		g_free ( tmpstr );
590 	    }
591 	    else
592 		text = utils_real_get_string_with_currency ( montant_sous_ib_etat, devise_ib_etat, TRUE );
593 
594 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
595 	    g_free ( text );
596 	    ligne++;
597 	}
598     }
599 
600     montant_sous_ib_etat = null_real;
601     nom_ss_ib_en_cours = NULL;
602     titres_affiches = 0;
603     nb_ope_sous_ib_etat = 0;
604 
605     return (ligne );
606 }
607 /*****************************************************************************************************/
608 
609 
610 
611 /*****************************************************************************************************/
612 /* affiche le total à l'endroit donné de la table */
613 /* si les compte sont affichées */
614 /* retourne le ligne suivante de la table */
615 /*****************************************************************************************************/
etat_affiche_affiche_total_compte(gint ligne)616 gint etat_affiche_affiche_total_compte ( gint ligne )
617 {
618     gchar * text;
619     gint current_report_number;
620 	gchar* tmpstr;
621 
622     current_report_number = gsb_gui_navigation_get_current_report ();
623 
624 
625     if (gsb_data_report_get_account_show_amount (current_report_number))
626     {
627 	/* si rien n'est affiché en dessous du compte, on */
628 	/* met le résultat sur la ligne du compte */
629 	/* sinon on fait une barre et on met le résultat */
630 
631 	if ( gsb_data_report_get_payee_used (current_report_number)
632 	     ||
633 	     gsb_data_report_get_show_report_transactions (current_report_number))
634 	{
635 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
636 	    ligne++;
637 
638 	    etat_affiche_attach_hsep ( 1, nb_colonnes, ligne, ligne + 1 );
639 	    ligne++;
640 
641 	    if ( nom_compte_en_cours )
642 	    {
643 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
644 		{
645 		    gchar* fmtstr;
646 		    if ( nb_ope_compte_etat <= 1 )
647 			fmtstr = _("Total %s (%d transaction)");
648 		    else
649 			fmtstr = _("Total %s (%d transactions)");
650 		    text = g_strdup_printf ( fmtstr, nom_compte_en_cours, nb_ope_compte_etat );
651 		}
652 		else
653 		    text = g_strconcat ( _("Total "), nom_compte_en_cours, NULL );
654 	    }
655 	    else
656 	    {
657 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
658 		{
659 		    gchar* fmtstr;
660 		    if ( nb_ope_compte_etat <= 1 )
661 			fmtstr = _("Account total: (%d transaction): ");
662 		    else
663 			fmtstr = _("Account total: (%d transactions): ");
664 		    text = g_strdup_printf ( fmtstr, nb_ope_compte_etat );
665 		}
666 		else
667 		    text = g_strdup( _("Account total: ") );
668 	    }
669 
670 	    etat_affiche_attach_label ( text, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
671 	    g_free ( text );
672 
673 	    text = utils_real_get_string_with_currency (montant_compte_etat, devise_compte_en_cours_etat, TRUE );
674 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
675 	    g_free ( text );
676 	    ligne++;
677 
678 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
679 	    ligne++;
680 	}
681 	else
682 	{
683 	    ligne--;
684 
685 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
686 	    {
687 	        gchar* fmtstr;
688 		if ( nb_ope_compte_etat <= 1 )
689 		    fmtstr = _("%s (%d transaction)");
690 		else
691 		    fmtstr = _("%s (%d transactions)");
692 		tmpstr = utils_real_get_string_with_currency ( montant_compte_etat,
693 				devise_compte_en_cours_etat, TRUE  );
694 		text = g_strdup_printf ( fmtstr, tmpstr,
695 					     nb_ope_compte_etat );
696 	        g_free ( tmpstr );
697 	    }
698 	    else
699 		text = utils_real_get_string_with_currency ( montant_compte_etat, devise_compte_en_cours_etat, TRUE );
700 
701 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
702 	    g_free ( text );
703 	    ligne++;
704 	}
705     }
706 
707     montant_compte_etat = null_real;
708     nom_compte_en_cours = NULL;
709     titres_affiches = 0;
710     nb_ope_compte_etat = 0;
711 
712     return (ligne );
713 }
714 /*****************************************************************************************************/
715 
716 
717 
718 /*****************************************************************************************************/
719 /* affiche le total à l'endroit donné de la table */
720 /* si les tiers sont affichées */
721 /* retourne le ligne suivante de la table */
722 /*****************************************************************************************************/
etat_affiche_affiche_total_tiers(gint ligne)723 gint etat_affiche_affiche_total_tiers ( gint ligne )
724 {
725     gchar * text;
726     gint current_report_number;
727 	gchar* tmpstr;
728 
729     current_report_number = gsb_gui_navigation_get_current_report ();
730 
731 
732     if (gsb_data_report_get_payee_show_payee_amount (current_report_number))
733     {
734 	/* si rien n'est affiché en dessous du tiers, on */
735 	/* met le résultat sur la ligne du tiers */
736 	/* sinon on fait une barre et on met le résultat */
737 
738 	if ( gsb_data_report_get_show_report_transactions (current_report_number))
739 	{
740 
741 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
742 	    ligne++;
743 
744 	    etat_affiche_attach_hsep ( 1, nb_colonnes, ligne, ligne + 1 );
745 	    ligne++;
746 
747 	    if ( nom_tiers_en_cours )
748 	    {
749 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
750 		{
751 		    gchar* fmtstr;
752 		    if ( nb_ope_tiers_etat <= 1 )
753 			fmtstr = _("Total %s (%d transaction)");
754 		    else
755 			fmtstr = _("Total %s (%d transactions)");
756 		    text = g_strdup_printf ( fmtstr, nom_tiers_en_cours, nb_ope_tiers_etat );
757 		}
758 		else
759 		    text = g_strdup_printf ( _("Total %s"), nom_tiers_en_cours );
760 	    }
761 	    else
762 	    {
763 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
764 		{
765 		    gchar* fmtstr;
766 		    if ( nb_ope_tiers_etat <= 1 )
767 			fmtstr = _("Payee total: (%d transaction): ");
768 		    else
769 			fmtstr = _("Payee total: (%d transactions): ");
770 		    text = g_strdup_printf ( fmtstr, nb_ope_tiers_etat );
771 		}
772 		else
773 		    text = g_strdup( _("Payee total: ") );
774 	    }
775 
776 	    etat_affiche_attach_label ( text, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
777 	    g_free ( text );
778 
779 	    text = utils_real_get_string_with_currency (montant_tiers_etat, devise_tiers_etat, TRUE );
780 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
781 	    g_free ( text );
782 	    ligne++;
783 
784 	    etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
785 	    ligne++;
786 	}
787 	else
788 	{
789 	    ligne--;
790 
791 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
792 	    {
793 	        gchar* fmtstr;
794 		if ( nb_ope_tiers_etat <= 1 )
795 		    fmtstr = _("%s (%d transaction)");
796 		else
797 		    fmtstr = _("%s (%d transactions)");
798 		tmpstr = utils_real_get_string_with_currency (montant_tiers_etat,
799 										devise_tiers_etat, TRUE  );
800 		text = g_strdup_printf ( fmtstr, tmpstr, nb_ope_tiers_etat );
801 	        g_free ( tmpstr );
802 	    }
803 	    else
804 		text = utils_real_get_string_with_currency (montant_tiers_etat, devise_tiers_etat, TRUE );
805 
806 	    etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
807 	    g_free ( text );
808 	    ligne++;
809 	}
810     }
811 
812     montant_tiers_etat = null_real;
813     nom_tiers_en_cours = NULL;
814     titres_affiches = 0;
815     nb_ope_tiers_etat = 0;
816 
817     return (ligne );
818 }
819 /*****************************************************************************************************/
820 
821 
822 
823 
824 
825 
826 /*****************************************************************************************************/
827 /* affiche le total de la période à l'endroit donné de la table */
828 /* retourne le ligne suivante de la table */
829 /* si force = 0, vérifie les dates et affiche si nécessaire */
830 /*   si force = 1, affiche le total (chgt de categ, ib ...) */
831 /*****************************************************************************************************/
etat_affiche_affiche_total_periode(gint transaction_number,gint ligne,gint force)832 gint etat_affiche_affiche_total_periode ( gint transaction_number,
833 					  gint ligne,
834 					  gint force )
835 {
836     gint current_report_number;
837 	gchar* dtstr1;
838 	gchar* dtstr2;
839 
840     current_report_number = gsb_gui_navigation_get_current_report ();
841 
842     if ( gsb_data_report_get_period_split (current_report_number))
843     {
844 	gchar *text = NULL;
845 	const GDate *date;
846     GDateWeekday jour_debut_semaine;
847 
848 		if (gsb_data_report_get_date_select_value (current_report_number))
849 			date = gsb_data_transaction_get_value_date_or_date (transaction_number);
850 		else
851 			date = gsb_data_transaction_get_date (transaction_number);
852 
853     /* on récupère ici le premier jour de la semaine */
854     jour_debut_semaine = gsb_data_report_get_period_split_day ( current_report_number );
855 
856 	/* si la date de début de période est nulle, on la met au début de la période la date de l'opération */
857 	if ( !date_debut_periode )
858 	{
859 	    if ( transaction_number )
860 	    {
861 		/*  il y a une opération, on va rechercher le début de la période qui la contient */
862 		/* ça peut être le début de la semaine, du mois ou de l'année de l'opé */
863 
864 		switch ( gsb_data_report_get_period_split_type (current_report_number))
865 		{
866 		    case 0:
867 			/* split by day, set the day of the transaction */
868 			date_debut_periode = g_date_new_dmy ( g_date_get_day ( date),
869 							      g_date_get_month ( date),
870 							      g_date_get_year ( date));
871 			break;
872 
873 		    case 1:
874 			/* séparation par semaine : on recherche le début de la semaine qui contient l'opé */
875 			date_debut_periode = g_date_new_dmy ( g_date_get_day ( date),
876 							      g_date_get_month ( date),
877 							      g_date_get_year ( date));
878 
879             if ( g_date_get_weekday ( date_debut_periode )  != jour_debut_semaine )
880 			{
881                 do
882                 {
883                     g_date_subtract_days ( date_debut_periode, 1 );
884                 }
885                 while ( g_date_get_weekday ( date_debut_periode )  != jour_debut_semaine );
886 			}
887 			break;
888 
889 		    case 2:
890 			/* séparation par mois */
891 
892 			date_debut_periode = g_date_new_dmy ( 1,
893 							      g_date_get_month ( date),
894 							      g_date_get_year ( date));
895 			break;
896 
897 		    case 3:
898 			/* séparation par an */
899 
900 			date_debut_periode = g_date_new_dmy ( 1,
901 							      1,
902 							      g_date_get_year ( date));
903 			break;
904 		}
905 	    }
906 	    else
907 		date_debut_periode = NULL;
908 	    return ( ligne );
909 	}
910 
911 	gchar buffer[256];
912 	gsize rc;
913 	GDate *date_tmp;
914 
915 	/* on vérifie maintenant s'il faut afficher un total ou pas */
916 	switch ( gsb_data_report_get_period_split_type (current_report_number))
917 	{
918 	    case 0:
919 	    /* split by day, we do nothing only if it's the same day as the transaction before */
920 	    if ( !force
921 		 &&
922 		 !g_date_compare ( date,
923 				   date_debut_periode ))
924 		return ( ligne );
925 
926 	    /* ok, not the same day, we show a separation */
927 	    rc = g_date_strftime ( buffer,
928 			      sizeof(buffer),
929 			      "%A %d %B %Y",
930 			      date_debut_periode );
931 	    if (rc == 0)
932 		strcpy(buffer, "???");
933 
934 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
935 	    {
936 	        const gchar *fmtstr;
937 
938 			if ( nb_ope_periode_etat <= 1 )
939 		    fmtstr = _("Result of %s (%d transaction): ");
940 			else
941 				fmtstr = _("Result of %s (%d transactions): ");
942 			text = g_strdup_printf ( fmtstr, buffer, nb_ope_periode_etat );
943 	    }
944 	    else
945 		text = g_strdup_printf ( _("Result of %s: "), buffer );
946 
947 
948 	    break;
949 
950 	    case 1:
951 	    /* séparation par semaine */
952 
953 	    /* 	  si c'est le même jour que l'opé précédente, on fait rien */
954 
955 	    if ( !force
956 		 &&
957 		 !g_date_compare ( date,
958 				   date_debut_periode ))
959 		return ( ligne );
960 
961 	    /* 	  si on est en début de semaine, on met un sous total */
962 
963 	    date_tmp = g_date_new_dmy ( g_date_get_day ( date_debut_periode ),
964 					g_date_get_month ( date_debut_periode ),
965 					g_date_get_year ( date_debut_periode ));
966 	    g_date_add_days ( date_tmp,
967 			      7 );
968 
969 	    if ( !force
970 		 &&
971 		 ( g_date_get_weekday(date)  != gsb_data_report_get_period_split_day (current_report_number)
972 		   &&
973 		   g_date_compare ( date, date_tmp ) < 0 ))
974 		return ( ligne );
975 
976 	    /* on doit retrouver la date du début de semaine et y ajouter 6j pour afficher la période */
977 
978 	    if ( g_date_get_weekday ( date_debut_periode )  != jour_debut_semaine )
979 			{
980                 do
981                 {
982                     g_date_subtract_days ( date_debut_periode, 1 );
983                 }
984                 while ( g_date_get_weekday ( date_debut_periode )  != jour_debut_semaine );
985 			}
986 
987 
988 	    g_date_free ( date_tmp );
989 
990 	    date_tmp = g_date_new_dmy ( g_date_get_day ( date_debut_periode ),
991 					g_date_get_month ( date_debut_periode ),
992 					g_date_get_year ( date_debut_periode ));
993 	    g_date_add_days ( date_tmp,
994 			      6 );
995 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
996 	    {
997 	        gchar* fmtstr;
998 		if ( nb_ope_periode_etat <= 1 )
999 		    fmtstr = _("Result from %s to %s (%d transaction): ");
1000 		else
1001 		    fmtstr = _("Result from %s to %s (%d transactions): ");
1002 		dtstr1 = gsb_format_gdate ( date_debut_periode );
1003 		dtstr2 = gsb_format_gdate ( date_tmp );
1004 		text = g_strdup_printf ( fmtstr, dtstr1, dtstr2, nb_ope_periode_etat );
1005 	        g_free ( dtstr1 );
1006 	        g_free ( dtstr2 );
1007 	    }
1008 	    else
1009 	    {
1010 	        dtstr1 = gsb_format_gdate ( date_debut_periode );
1011 	        dtstr2 = gsb_format_gdate ( date_tmp );
1012 		text = g_strdup_printf ( _("Result from %s to %s: "), dtstr1, dtstr2);
1013 	        g_free ( dtstr1 );
1014 	        g_free ( dtstr2 );
1015 	    }
1016 
1017 	    break;
1018 
1019 	    case 2:
1020 	    /* séparation par mois */
1021 
1022 	    if ( !force
1023 		 &&
1024 		 g_date_get_month ( date) == g_date_get_month ( date_debut_periode ) )
1025 		return ( ligne );
1026 
1027 	    rc = g_date_strftime ( buffer,
1028 			      sizeof(buffer),
1029 			      "%B %Y",
1030 			      date_debut_periode );
1031 	    if (rc == 0)
1032 		strcpy(buffer, "???");
1033 
1034 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
1035 	    {
1036 	        gchar* fmtstr;
1037 		if ( nb_ope_periode_etat <= 1 )
1038 		    fmtstr = _("Result of %s (%d transaction): ");
1039 		else
1040 		    fmtstr = _("Result of %s (%d transactions): ");
1041 		text = g_strdup_printf ( fmtstr, buffer, nb_ope_periode_etat );
1042 	    }
1043 	    else
1044 		text = g_strdup_printf ( _("Result of %s: "), buffer );
1045 
1046 	    break;
1047 
1048 	    case 3:
1049 	    /* séparation par an */
1050 
1051 	    if ( !force
1052 		 &&
1053 		 g_date_get_year ( date) == g_date_get_year ( date_debut_periode ) )
1054 		return ( ligne );
1055 
1056 	    rc = g_date_strftime ( buffer,
1057 			      sizeof(buffer),
1058 			      "%Y",
1059 			      date_debut_periode );
1060 	    if (rc == 0)
1061 		strcpy(buffer, "???");
1062 
1063 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
1064 	    {
1065 	        gchar* fmtstr;
1066 		if ( nb_ope_periode_etat <= 1 )
1067 		    fmtstr = _("Result for %s (%d transaction): ");
1068 		else
1069 		    fmtstr = _("Result for %s (%d transactions): ");
1070 		text = g_strdup_printf ( fmtstr, buffer, nb_ope_periode_etat );
1071 	    }
1072 	    else
1073 		text = g_strdup_printf ( _("Result for %s: "), buffer );
1074 	    break;
1075 	}
1076 
1077 	/*       si on arrive ici, c'est qu'il y a un chgt de période ou que c'est forcé */
1078 
1079 	etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
1080 	ligne++;
1081 
1082 	etat_affiche_attach_hsep ( 1, nb_colonnes, ligne, ligne + 1 );
1083 	ligne++;
1084 
1085 	etat_affiche_attach_label ( text, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1086 	g_free ( text );
1087 
1088 	text = utils_real_get_string_with_currency (montant_periode_etat, devise_generale_etat, TRUE );
1089 	etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
1090 	g_free ( text );
1091 	ligne++;
1092 
1093 	etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
1094 	ligne++;
1095 
1096 	montant_periode_etat = null_real;
1097 	nb_ope_periode_etat = 0;
1098 
1099 	/* comme il y a un changement de période, on remet la date_debut_periode à celle du début de la période */
1100 	/* de l'opération  en cours */
1101 
1102 
1103 	if ( transaction_number )
1104 	{
1105 	    /*  il y a une opération, on va rechercher le début de la période qui la contient */
1106 	    /* ça peut être le début de la semaine, du mois ou de l'année de l'opé */
1107 	    switch ( gsb_data_report_get_period_split_type (current_report_number))
1108 	    {
1109 		case 0:
1110 		    /* split by day, set on the transactions day */
1111 		    date_debut_periode = g_date_new_dmy ( g_date_get_day ( date),
1112 							  g_date_get_month ( date),
1113 							  g_date_get_year ( date));
1114 		    break;
1115 		case 1:
1116 		    /* séparation par semaine : on recherche le début de la semaine qui contient l'opé */
1117 
1118 		    date_debut_periode = g_date_new_dmy ( g_date_get_day ( date),
1119 							  g_date_get_month ( date),
1120 							  g_date_get_year ( date));
1121 
1122 		    if ( g_date_get_weekday ( date_debut_periode )  != jour_debut_semaine )
1123 			{
1124                 do
1125                 {
1126                     g_date_subtract_days ( date_debut_periode, 1 );
1127                 }
1128                 while ( g_date_get_weekday ( date_debut_periode )  != jour_debut_semaine );
1129 			}
1130 		    break;
1131 
1132 		case 2:
1133 		    /* séparation par mois */
1134 
1135 		    date_debut_periode = g_date_new_dmy ( 1,
1136 							  g_date_get_month ( date),
1137 							  g_date_get_year ( date));
1138 		    break;
1139 
1140 		case 3:
1141 		    /* séparation par an */
1142 
1143 		    date_debut_periode = g_date_new_dmy ( 1,
1144 							  1,
1145 							  g_date_get_year ( date));
1146 		    break;
1147 	    }
1148 	}
1149 	else
1150 	    date_debut_periode = NULL;
1151     }
1152 
1153     return (ligne );
1154 }
1155 /*****************************************************************************************************/
1156 
1157 
1158 
1159 /*****************************************************************************************************/
1160 /* affiche le total de l'exo  à l'endroit donné de la table */
1161 /* retourne le ligne suivante de la table */
1162 /* si force = 0, vérifie les dates et affiche si nécessaire */
1163 /*   si force = 1, affiche le total (chgt de categ, ib ...) */
1164 /*****************************************************************************************************/
etat_affiche_affiche_total_exercice(gint transaction_number,gint ligne,gint force)1165 gint etat_affiche_affiche_total_exercice ( gint transaction_number,
1166 					   gint ligne,
1167 					   gint force )
1168 {
1169     gint current_report_number;
1170 
1171     current_report_number = gsb_gui_navigation_get_current_report ();
1172 
1173     if ( gsb_data_report_get_financial_year_split (current_report_number))
1174     {
1175 	gchar *text;
1176 
1177 	text = NULL;
1178 
1179 	/* 	si l'exo précédent est -1, on le met à l'exo de l'opé */
1180 	/* 	utilise ça car des opés peuvent ne pas avoir d'exo */
1181 
1182 	if ( exo_en_cours_etat == -1 )
1183 	{
1184 	    exo_en_cours_etat = gsb_data_transaction_get_financial_year_number (transaction_number);
1185 	    return ligne;
1186 	}
1187 
1188 	/* on vérifie maintenant s'il faut afficher un total ou pas */
1189 
1190 	if ( !force
1191 	     &&
1192 	     gsb_data_transaction_get_financial_year_number (transaction_number) == exo_en_cours_etat )
1193 	    return ligne;
1194 
1195 	if ( exo_en_cours_etat )
1196 	{
1197 	    /* 	    les opés ont un exo */
1198 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
1199 	    {
1200 	        gchar* fmtstr;
1201 		if ( nb_ope_periode_etat <= 1 )
1202 		    fmtstr = _("Result of %s (%d transaction): ");
1203 		else
1204 		    fmtstr = _("Result of %s (%d transactions): ");
1205 		text = g_strdup_printf ( fmtstr,
1206 					     gsb_data_fyear_get_name ( exo_en_cours_etat ),
1207 					     nb_ope_periode_etat );
1208 	    }
1209 	    else
1210 		text = g_strdup_printf ( _("Result of %s: "),
1211 					 gsb_data_fyear_get_name ( exo_en_cours_etat ));
1212 	}
1213 	else
1214 	{
1215 	    /* 	    les opés n'ont pas d'exo */
1216 	    if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
1217 	    {
1218 	        gchar* fmtstr;
1219 		if ( nb_ope_periode_etat <= 1 )
1220 		    fmtstr = _("Result without financial year (%d transaction): ");
1221 		else
1222 		    fmtstr = _("Result without financial year (%d transactions): ");
1223 		text = g_strdup_printf ( fmtstr, nb_ope_periode_etat );
1224 	    }
1225 	    else
1226 		text = g_strdup_printf ( "%s", _("Result without financial year: ") );
1227 	}
1228 
1229 
1230 
1231 	/*       si on arrive ici, c'est qu'il y a un chgt de période ou que c'est forcé */
1232 
1233 	etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
1234 	ligne++;
1235 
1236 	etat_affiche_attach_hsep ( 1, nb_colonnes, ligne, ligne + 1 );
1237 	ligne++;
1238 
1239 	etat_affiche_attach_label ( text, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1240 	g_free ( text );
1241 
1242 	text = utils_real_get_string_with_currency (montant_exo_etat, devise_generale_etat, TRUE );
1243 	etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
1244 	g_free ( text );
1245 	ligne++;
1246 
1247 	etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
1248 	ligne++;
1249 
1250 	montant_exo_etat = null_real;
1251 	nb_ope_exo_etat = 0;
1252 
1253 	/* comme il y a un changement d'état, on remet exo_en_cours_etat à celle de l'opé en cours */
1254 	if (transaction_number)
1255 	    exo_en_cours_etat = gsb_data_transaction_get_financial_year_number (transaction_number);
1256 	else
1257 	    exo_en_cours_etat = -1;
1258     }
1259 
1260     return (ligne );
1261 }
1262 /*****************************************************************************************************/
1263 
1264 
1265 /*****************************************************************************************************/
etat_affiche_affichage_ligne_ope(gint transaction_number,gint ligne)1266 gint etat_affiche_affichage_ligne_ope ( gint transaction_number,
1267 					gint ligne )
1268 {
1269     gint colonne;
1270     gchar *text;
1271     gint current_report_number;
1272 
1273     current_report_number = gsb_gui_navigation_get_current_report ();
1274 
1275 
1276     /* on met tous les labels dans un event_box pour aller directement sur l'opé si elle est clickée */
1277 
1278 	/* on affiche ce qui est demandé pour les opés */
1279 	/* si les titres ne sont pas affichés et qu'il faut le faire, c'est ici */
1280 
1281 	if ( !titres_affiches
1282 	     &&
1283 	     gsb_data_report_get_column_title_show (current_report_number)
1284 	     &&
1285 	     gsb_data_report_get_column_title_type (current_report_number))
1286 	    ligne = etat_affiche_affiche_titres_colonnes ( ligne );
1287 
1288 	colonne = 1;
1289 
1290 	/*       pour chaque info, on vérifie si on l'opé doit être clickable */
1291 	/* si c'est le cas, on place le label dans un event_box */
1292 
1293 	if ( gsb_data_report_get_show_report_transaction_number (current_report_number))
1294 	{
1295 	    text = utils_str_itoa ( transaction_number);
1296 
1297 	    if ( gsb_data_report_get_report_can_click (current_report_number))
1298 	    {
1299 		etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1300 	    }
1301 	    else
1302 	    {
1303 		etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1304 	    }
1305 
1306 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1307 	    colonne = colonne + 2;
1308 	    g_free (text);
1309 	}
1310 
1311 	if ( gsb_data_report_get_show_report_date (current_report_number))
1312 	{
1313 	    text = gsb_format_gdate ( gsb_data_transaction_get_date (transaction_number));
1314 
1315 	    if ( gsb_data_report_get_report_can_click (current_report_number))
1316 	    {
1317 		etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1318 	    }
1319 	    else
1320 	    {
1321 		etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1322 	    }
1323 
1324 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1325 	    colonne = colonne + 2;
1326 	    if (text)
1327 		g_free (text);
1328 	}
1329 
1330 	if ( gsb_data_report_get_show_report_value_date (current_report_number))
1331 	{
1332 	    text = gsb_format_gdate ( gsb_data_transaction_get_value_date (transaction_number));
1333 
1334 	    if ( gsb_data_report_get_report_can_click (current_report_number))
1335 	    {
1336 		etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1337 	    }
1338 	    else
1339 	    {
1340 		etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1341 	    }
1342 
1343 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1344 	    colonne = colonne + 2;
1345 	    if (text)
1346 		g_free (text);
1347 	}
1348 
1349 	if ( gsb_data_report_get_show_report_financial_year (current_report_number))
1350 	{
1351 	    if ( gsb_data_transaction_get_financial_year_number ( transaction_number))
1352 	    {
1353 		text = my_strdup (gsb_data_fyear_get_name ( gsb_data_transaction_get_financial_year_number ( transaction_number)));
1354 
1355 		if ( gsb_data_report_get_report_can_click (current_report_number))
1356 		{
1357 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1358 		}
1359 		else
1360 		{
1361 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1362 		}
1363 		if (text)
1364 		    g_free (text);
1365 	    }
1366 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1367 	    colonne = colonne + 2;
1368 	}
1369 
1370 
1371 	if ( gsb_data_report_get_show_report_payee (current_report_number))
1372 	{
1373 	    if ( gsb_data_transaction_get_party_number ( transaction_number))
1374 	    {
1375 		text = my_strdup (gsb_data_payee_get_name ( gsb_data_transaction_get_party_number ( transaction_number), TRUE ));
1376 
1377 		if ( gsb_data_report_get_report_can_click (current_report_number))
1378 		{
1379 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1380 		}
1381 		else
1382 		{
1383 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1384 		}
1385 		if (text)
1386 		    g_free (text);
1387 	    }
1388 
1389 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1390 	    colonne = colonne + 2;
1391 	}
1392 
1393 	if ( gsb_data_report_get_show_report_category (current_report_number))
1394 	{
1395 	    if ( gsb_data_transaction_get_category_number (transaction_number))
1396 		text = my_strdup (gsb_data_category_get_name ( gsb_data_transaction_get_category_number (transaction_number),
1397 								  gsb_data_transaction_get_sub_category_number (transaction_number),
1398 								  NULL ));
1399 	    else
1400 	    {
1401 		/* si c'est un virement, on le marque, sinon c'est qu'il n'y a pas de categ */
1402 		/* ou que c'est une opé ventilée, et on marque rien */
1403 
1404 		if ( gsb_data_transaction_get_contra_transaction_number ( transaction_number) > 0)
1405 		{
1406 		    /* c'est un virement */
1407 
1408 		    gchar* fmtstr;
1409 		    if ( gsb_data_transaction_get_amount ( transaction_number).mantissa < 0 )
1410 			fmtstr = _("Transfer to %s");
1411 		    else
1412 			fmtstr =  _("Transfer from %s");
1413 		    text = g_strdup_printf ( fmtstr, gsb_data_account_get_name (
1414 		    	gsb_data_transaction_get_contra_transaction_account ( transaction_number)) );
1415 		}
1416 		else
1417 		    text = NULL;
1418 	    }
1419 
1420 	    if ( text )
1421 	    {
1422 		if ( gsb_data_report_get_report_can_click (current_report_number))
1423 		{
1424 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1425 		}
1426 		else
1427 		{
1428 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1429 		}
1430 		g_free (text);
1431 	    }
1432 
1433 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1434 	    colonne = colonne + 2;
1435 	}
1436 
1437 
1438 	if ( gsb_data_report_get_show_report_budget (current_report_number))
1439 	{
1440 	    if ( gsb_data_transaction_get_budgetary_number ( transaction_number))
1441 	    {
1442 		text = my_strdup (gsb_data_budget_get_name ( gsb_data_transaction_get_budgetary_number ( transaction_number),
1443 								 gsb_data_transaction_get_sub_budgetary_number ( transaction_number),
1444 								NULL ));
1445 
1446 		if ( gsb_data_report_get_report_can_click (current_report_number))
1447 		{
1448 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1449 		}
1450 		else
1451 		{
1452 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1453 		}
1454 		if (text)
1455 		    g_free (text);
1456 	    }
1457 
1458 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1459 	    colonne = colonne + 2;
1460 	}
1461 
1462 
1463 	if ( gsb_data_report_get_show_report_note (current_report_number))
1464 	{
1465 	    if ( gsb_data_transaction_get_notes ( transaction_number))
1466 	    {
1467 		text = my_strdup (gsb_data_transaction_get_notes ( transaction_number));
1468 
1469 		if ( gsb_data_report_get_report_can_click (current_report_number))
1470 		{
1471 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1472 		}
1473 		else
1474 		{
1475 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1476 		}
1477 		if (text)
1478 		    g_free (text);
1479 	    }
1480 	    else
1481 	    {
1482 		etat_affiche_attach_label ( NULL, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1483 	    }
1484 
1485 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1486 	    colonne = colonne + 2;
1487 	}
1488 
1489 	if ( gsb_data_report_get_show_report_method_of_payment (current_report_number))
1490 	{
1491 	    text = my_strdup (gsb_data_payment_get_name (gsb_data_transaction_get_method_of_payment_number ( transaction_number)));
1492 	    if (text)
1493 	    {
1494 		if ( gsb_data_report_get_report_can_click (current_report_number))
1495 		{
1496 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1497 		}
1498 		else
1499 		{
1500 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1501 		}
1502 		g_free (text);
1503 	    }
1504 
1505 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1506 	    colonne = colonne + 2;
1507 	}
1508 
1509 
1510 	if ( gsb_data_report_get_show_report_method_of_payment_content (current_report_number))
1511 	{
1512 	    /* Si l'opération est une opération de ventilation, il faut rechercher
1513 	       l'opération mère pour pouvoir récupérer le n° du chèque */
1514 	    if ( gsb_data_transaction_get_mother_transaction_number ( transaction_number))
1515 	    {
1516 		GSList *list_tmp_transactions;
1517 
1518 		/* On récupère donc la liste des opérations du compte et on en fait
1519 		   le tour jusqu'à ce qu'on trouve l'opération mère */
1520 
1521 		list_tmp_transactions = gsb_data_transaction_get_complete_transactions_list ();
1522 
1523 		while ( list_tmp_transactions )
1524 		{
1525 		    gint transaction_number_tmp;
1526 		    transaction_number_tmp = gsb_data_transaction_get_transaction_number (list_tmp_transactions -> data);
1527 
1528 		    if ( gsb_data_transaction_get_account_number (transaction_number_tmp) == gsb_data_transaction_get_account_number (transaction_number))
1529 		    {
1530 			if ( gsb_data_transaction_get_split_of_transaction (transaction_number_tmp)
1531 			     &&
1532 			     transaction_number_tmp == gsb_data_transaction_get_mother_transaction_number ( transaction_number)
1533 			     &&
1534 			     gsb_data_transaction_get_method_of_payment_content (transaction_number_tmp))
1535 			{
1536 			    gsb_data_transaction_set_method_of_payment_content ( transaction_number,
1537 										 gsb_data_transaction_get_method_of_payment_content (transaction_number_tmp));
1538 			}
1539 		    }
1540 		    list_tmp_transactions = list_tmp_transactions -> next;
1541 		}
1542 	    }
1543 
1544 	    if ( gsb_data_transaction_get_method_of_payment_content ( transaction_number))
1545 	    {
1546 		text = my_strdup (gsb_data_transaction_get_method_of_payment_content ( transaction_number));
1547 
1548 		if ( gsb_data_report_get_report_can_click (current_report_number))
1549 		{
1550 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1551 		}
1552 		else
1553 		{
1554 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1555 		}
1556 		if (text)
1557 		    g_free (text);
1558 	    }
1559 
1560 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1561 	    colonne = colonne + 2;
1562 	}
1563 
1564 
1565 	if ( gsb_data_report_get_show_report_voucher (current_report_number))
1566 	{
1567 	    if ( gsb_data_transaction_get_voucher ( transaction_number))
1568 	    {
1569 		text = my_strdup (gsb_data_transaction_get_voucher ( transaction_number));
1570 
1571 		if ( gsb_data_report_get_report_can_click (current_report_number))
1572 		{
1573 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1574 		}
1575 		else
1576 		{
1577 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1578 		}
1579 		if (text)
1580 		    g_free (text);
1581 	    }
1582 
1583 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1584 	    colonne = colonne + 2;
1585 	}
1586 
1587 
1588 
1589 	if ( gsb_data_report_get_show_report_bank_references (current_report_number))
1590 	{
1591 	    if ( gsb_data_transaction_get_bank_references ( transaction_number))
1592 	    {
1593 		text = my_strdup (gsb_data_transaction_get_bank_references ( transaction_number));
1594 
1595 		if ( gsb_data_report_get_report_can_click (current_report_number))
1596 		{
1597 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1598 		}
1599 		else
1600 		{
1601 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1602 		}
1603 		if (text)
1604 		    g_free (text);
1605 	    }
1606 
1607 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1608 	    colonne = colonne + 2;
1609 	}
1610 
1611 	if ( gsb_data_report_get_show_report_marked (current_report_number))
1612 	{
1613 	    text = my_strdup (gsb_data_reconcile_get_name ( gsb_data_transaction_get_reconcile_number ( transaction_number)));
1614 
1615 	    if ( text )
1616 	    {
1617 		if ( gsb_data_report_get_report_can_click (current_report_number))
1618 		{
1619 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, transaction_number );
1620 		}
1621 		else
1622 		{
1623 		    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1624 		}
1625 		g_free (text);
1626 	    }
1627 
1628 	    etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
1629 	    colonne = colonne + 2;
1630 	}
1631 
1632 
1633 	/* on affiche le montant au bout de la ligne */
1634 
1635 	text = utils_real_get_string_with_currency (gsb_data_transaction_get_amount (transaction_number),
1636 						  gsb_data_transaction_get_currency_number (transaction_number), TRUE );
1637 
1638 	if ( gsb_data_report_get_report_can_click (current_report_number))
1639 	{
1640 	    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, transaction_number );
1641 	}
1642 	else
1643 	{
1644 	    etat_affiche_attach_label ( text, TEXT_NORMAL, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
1645 	}
1646 	if (text)
1647 	    g_free (text);
1648 
1649 
1650 	if ( ligne_debut_partie == -1 )
1651 	    ligne_debut_partie = ligne;
1652 
1653 	ligne++;
1654 
1655 	return ( ligne );
1656 }
1657 /*****************************************************************************************************/
1658 
1659 
1660 /*****************************************************************************************************/
etat_affiche_affiche_total_partiel(GsbReal total_partie,gint ligne,gint type)1661 gint etat_affiche_affiche_total_partiel ( GsbReal total_partie,
1662 					  gint ligne,
1663 					  gint type )
1664 {
1665     gchar * text;
1666     gint current_report_number;
1667 	GrisbiWinEtat *w_etat;
1668 
1669 	w_etat = grisbi_win_get_w_etat ();
1670 
1671     current_report_number = gsb_gui_navigation_get_current_report ();
1672 
1673     etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
1674     ligne++;
1675 
1676     etat_affiche_attach_hsep ( 0, nb_colonnes, ligne, ligne + 1 );
1677     ligne++;
1678 
1679     if ( type )
1680     {
1681 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
1682 		{
1683 			gchar* fmtstr;
1684 
1685 			if ( nb_ope_partie_etat <= 1 )
1686 			{
1687 				if (w_etat->metatree_assoc_mode)
1688 					fmtstr = _("Total charge (%d transaction): ");
1689 				else
1690 					fmtstr = _("Total expense (%d transaction): ");
1691 			}
1692 			else
1693 			{
1694 				if (w_etat->metatree_assoc_mode)
1695 					fmtstr = _("Total charges (%d transactions): ");
1696 				else
1697 					fmtstr = _("Total expenses (%d transactions): ");
1698 			}
1699 			text = g_strdup_printf ( fmtstr, nb_ope_partie_etat );
1700 		}
1701 		else
1702 		{
1703 			if (w_etat->metatree_assoc_mode)
1704 				text = g_strdup ("Total charges: ");
1705 			else
1706 				text = g_strdup ( _("Total expenses: ") );
1707 		}
1708     }
1709     else
1710     {
1711 		if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
1712 		{
1713 			gchar* fmtstr;
1714 
1715 			if ( nb_ope_partie_etat <= 1 )
1716 			{
1717 				if (w_etat->metatree_assoc_mode)
1718 					fmtstr = _("Total product (%d transaction): ");
1719 				else
1720 					fmtstr = _("Total income (%d transaction): ");
1721 			}
1722 			else
1723 			{
1724 				if (w_etat->metatree_assoc_mode)
1725 					fmtstr = _("Total products (%d transactions): ");
1726 				else
1727 					fmtstr = _("Total income (%d transactions): ");
1728 			}
1729 			text = g_strdup_printf ( fmtstr, nb_ope_partie_etat );
1730 		}
1731 		else
1732 		{
1733 			if (w_etat->metatree_assoc_mode)
1734 				text = g_strdup (_("Total Products: "));
1735 			else
1736 				text = g_strdup ( _("Total income: ") );
1737 		}
1738     }
1739 
1740     etat_affiche_attach_label ( text, TEXT_NORMAL, 0, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1741     g_free ( text );
1742 
1743     text = utils_real_get_string_with_currency (total_partie, devise_generale_etat, TRUE );
1744     etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
1745     g_free ( text );
1746     ligne++;
1747 
1748     etat_affiche_attach_hsep ( 0, nb_colonnes, ligne, ligne + 1 );
1749     ligne++;
1750 
1751     etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
1752     ligne++;
1753 
1754     nom_categ_en_cours = NULL;
1755     nom_ss_categ_en_cours = NULL;
1756     nom_ib_en_cours = NULL;
1757     nom_ss_ib_en_cours = NULL;
1758     nom_compte_en_cours = NULL;
1759     nom_tiers_en_cours = NULL;
1760 
1761 
1762     return ( ligne );
1763 }
1764 /*****************************************************************************************************/
1765 
1766 /*****************************************************************************************************/
etat_affiche_affiche_total_general(GsbReal total_general,gint ligne)1767 gint etat_affiche_affiche_total_general ( GsbReal total_general,
1768 					  gint ligne )
1769 {
1770     gchar * text;
1771     gint current_report_number;
1772 
1773     current_report_number = gsb_gui_navigation_get_current_report ();
1774 
1775 
1776     etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
1777     ligne++;
1778 
1779     etat_affiche_attach_hsep ( 0, nb_colonnes, ligne, ligne + 1 );
1780     ligne++;
1781 
1782     if ( gsb_data_report_get_show_report_transaction_amount (current_report_number))
1783     {
1784         gchar* fmtstr;
1785 	if ( nb_ope_general_etat <= 1 )
1786 	    fmtstr = _("General total (%d transaction): ");
1787 	else
1788 	    fmtstr = _("General total (%d transactions): ");
1789 	text = g_strdup_printf ( fmtstr, nb_ope_general_etat );
1790     }
1791     else
1792 	text = g_strdup( _("General total: ") );
1793 
1794     etat_affiche_attach_label ( text, TEXT_NORMAL, 0, nb_colonnes - 1, ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1795     g_free ( text );
1796 
1797     text = utils_real_get_string_with_currency (total_general, devise_generale_etat, TRUE );
1798     etat_affiche_attach_label ( text, TEXT_NORMAL, nb_colonnes - 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_RIGHT, 0 );
1799     g_free ( text );
1800     ligne++;
1801 
1802     etat_affiche_attach_hsep ( 0, nb_colonnes, ligne, ligne + 1 );
1803     ligne++;
1804 
1805     etat_affiche_attach_label ( NULL, TEXT_NORMAL, 1, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
1806     ligne++;
1807 
1808     return ( ligne );
1809 }
1810 /*****************************************************************************************************/
1811 
1812 
1813 
1814 /*****************************************************************************************************/
etat_affiche_affiche_categ_etat(gint transaction_number,const gchar * decalage_categ,gint ligne)1815 gint etat_affiche_affiche_categ_etat ( gint transaction_number,
1816 				       const gchar *decalage_categ,
1817 				       gint ligne )
1818 {
1819     gchar *pointeur_char;
1820     gint current_report_number;
1821 
1822     current_report_number = gsb_gui_navigation_get_current_report ();
1823 
1824     /* vérifie qu'il y a un changement de catégorie */
1825     /* ça peut être aussi chgt pour virement, ventilation ou pas de categ */
1826 
1827     if (gsb_data_transaction_get_category_number ( transaction_number)!= ancienne_categ_etat
1828 	   ||
1829 	   ( ancienne_categ_speciale_etat == 1
1830 	     &&
1831 	     gsb_data_transaction_get_contra_transaction_number ( transaction_number) == 0)
1832 	   ||
1833 	   ( ancienne_categ_speciale_etat == 2
1834 	     &&
1835 	     !gsb_data_transaction_get_split_of_transaction ( transaction_number))
1836 	   ||
1837 	   ( ancienne_categ_speciale_etat == 3
1838 	     &&
1839 	     ( gsb_data_transaction_get_split_of_transaction ( transaction_number)
1840 	       ||
1841 	       gsb_data_transaction_get_contra_transaction_number ( transaction_number) > 0)))
1842     {
1843 
1844 	/* lorsqu'on est au début de l'affichage de l'état, on n'affiche pas de totaux */
1845 
1846 	if ( !debut_affichage_etat
1847 	     &&
1848 	     !changement_de_groupe_etat )
1849 	{
1850 	    /* on affiche le total de la période en le forçant si besoin */
1851 	    ligne = etat_affiche_affiche_total_periode (transaction_number, ligne, 1);
1852 
1853 		/* on affiche le total de l'exercice en le forçant si besoin*/
1854 		ligne = etat_affiche_affiche_total_exercice (transaction_number, ligne, 1);
1855 
1856 	    /* on ajoute les totaux de tout ce qu'il y a derrière la catégorie */
1857 
1858 	    ligne = etat_affiche_affiche_totaux_sous_jaccent ( 1,
1859 							       ligne );
1860 
1861 	    /* on ajoute le total de la categ */
1862 
1863 	    ligne = etat_affiche_affiche_total_categories ( ligne );
1864 	}
1865 
1866 	/*       si on a demandé de ne pas afficher les noms des catég, on saute la partie suivante */
1867 
1868 	if ( gsb_data_report_get_category_show_name (current_report_number))
1869 	{
1870 	    if ( gsb_data_transaction_get_category_number ( transaction_number))
1871 	    {
1872 		nom_categ_en_cours = gsb_data_category_get_name ( gsb_data_transaction_get_category_number (transaction_number),
1873 								  0,
1874 								  NULL );
1875 		pointeur_char = g_strconcat ( decalage_categ,
1876 					      nom_categ_en_cours,
1877 					      NULL );
1878 		ancienne_categ_speciale_etat = 0;
1879 	    }
1880 	    else
1881 	    {
1882 		if ( gsb_data_transaction_get_contra_transaction_number (transaction_number) > 0)
1883 		{
1884 		    pointeur_char = g_strconcat ( decalage_categ,
1885 						  _("Transfer"),
1886 						  NULL );
1887 		    ancienne_categ_speciale_etat = 1;
1888 		}
1889 		else
1890 		{
1891 		    if ( gsb_data_transaction_get_split_of_transaction (transaction_number))
1892 		    {
1893 			pointeur_char = g_strconcat ( decalage_categ,
1894 						      _("Split of transaction"),
1895 						      NULL );
1896 			ancienne_categ_speciale_etat = 2;
1897 		    }
1898 		    else
1899 		    {
1900 			pointeur_char = g_strconcat ( decalage_categ,
1901 						      _("No category"),
1902 						      NULL );
1903 			ancienne_categ_speciale_etat = 3;
1904 		    }
1905 		}
1906 	    }
1907 
1908 	    etat_affiche_attach_label ( pointeur_char, TEXT_NORMAL, 0, nb_colonnes-1,
1909 					ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1910 	    g_free ( pointeur_char );
1911 	    ligne++;
1912 	}
1913 
1914 	ligne_debut_partie = ligne;
1915 	denote_struct_sous_jaccentes ( 1 );
1916 
1917 	ancienne_categ_etat = gsb_data_transaction_get_category_number (transaction_number);
1918 
1919 	debut_affichage_etat = 0;
1920 	changement_de_groupe_etat = 1;
1921     }
1922 
1923     return ( ligne );
1924 }
1925 /*****************************************************************************************************/
1926 
1927 
1928 
1929 /*****************************************************************************************************/
etat_affiche_affiche_sous_categ_etat(gint transaction_number,const gchar * decalage_sous_categ,gint ligne)1930 gint etat_affiche_affiche_sous_categ_etat ( gint transaction_number,
1931 					    const gchar *decalage_sous_categ,
1932 					    gint ligne )
1933 {
1934     gchar *pointeur_char;
1935     gint current_report_number;
1936 
1937     current_report_number = gsb_gui_navigation_get_current_report ();
1938 
1939 
1940     if (gsb_data_transaction_get_category_number (transaction_number)
1941 	 &&
1942 	 gsb_data_transaction_get_sub_category_number (transaction_number) != ancienne_sous_categ_etat )
1943     {
1944 	/* lorsqu'on est au début de l'affichage de l'état, on n'affiche pas de totaux */
1945 
1946 	if ( !debut_affichage_etat
1947 	     &&
1948 	     !changement_de_groupe_etat )
1949 	{
1950 	    /* on affiche le total de la période en le forçant */
1951 
1952 	    ligne = etat_affiche_affiche_total_periode ( transaction_number,
1953 							 ligne,
1954 							 1 );
1955 
1956 	    /* on ajoute les totaux de tout ce qu'il y a derrière la sous catégorie */
1957 
1958 	    ligne = etat_affiche_affiche_totaux_sous_jaccent ( 2,
1959 							       ligne );
1960 
1961 	    /* on ajoute le total de la sous categ */
1962 
1963 	    ligne = etat_affiche_affiche_total_sous_categ ( ligne );
1964 	}
1965 
1966 	/*       si on a demandé de ne pas afficher les noms des ss-catég, on saute la partie suivante */
1967 
1968 	if ( gsb_data_report_get_category_show_name (current_report_number))
1969 	{
1970 	    gchar *sub_categ = gsb_data_category_get_sub_category_name ( gsb_data_transaction_get_category_number (transaction_number),
1971 									 gsb_data_transaction_get_sub_category_number (transaction_number),
1972 									 0 );
1973 	    if (sub_categ)
1974 	    {
1975 		pointeur_char = g_strconcat ( decalage_sous_categ,
1976 					      sub_categ,
1977 					      NULL );
1978 	    }
1979 	    else
1980 	    {
1981 		if ( gsb_data_report_get_category_show_without_category (current_report_number))
1982 		    pointeur_char = g_strconcat ( decalage_sous_categ,
1983 						  _("No subcategory"),
1984 						  NULL );
1985 		else
1986 		    pointeur_char = my_strdup ("");
1987 	    }
1988 
1989 	    etat_affiche_attach_label ( pointeur_char, TEXT_NORMAL, 0, nb_colonnes-1,
1990 					ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
1991 	    g_free (pointeur_char);
1992 	    ligne++;
1993 	}
1994 
1995 	ligne_debut_partie = ligne;
1996 	denote_struct_sous_jaccentes ( 2 );
1997 
1998 	ancienne_sous_categ_etat = gsb_data_transaction_get_sub_category_number (transaction_number );
1999 
2000 	debut_affichage_etat = 0;
2001 	changement_de_groupe_etat = 1;
2002     }
2003 
2004     return ( ligne );
2005 }
2006 /*****************************************************************************************************/
2007 
2008 
2009 
2010 
2011 /*****************************************************************************************************/
etat_affiche_affiche_ib_etat(gint transaction_number,const gchar * decalage_ib,gint ligne)2012 gint etat_affiche_affiche_ib_etat ( gint transaction_number,
2013 				    const gchar *decalage_ib,
2014 				    gint ligne )
2015 {
2016     gchar *pointeur_char;
2017     gint current_report_number;
2018 
2019     current_report_number = gsb_gui_navigation_get_current_report ();
2020 
2021 
2022     /* mise en place de l'ib */
2023 
2024 
2025     if (gsb_data_transaction_get_budgetary_number (transaction_number) != ancienne_ib_etat)
2026     {
2027 	/* lorsqu'on est au début de l'affichage de l'état, on n'affiche pas de totaux */
2028 
2029 	if ( !debut_affichage_etat
2030 	     &&
2031 	     !changement_de_groupe_etat )
2032 	{
2033 	    /* on affiche le total de la période en le forçant */
2034 
2035 	    ligne = etat_affiche_affiche_total_periode ( transaction_number,
2036 							 ligne,
2037 							 1 );
2038 
2039 	    /* on ajoute les totaux de tout ce qu'il y a derrière l'ib */
2040 
2041 	    ligne = etat_affiche_affiche_totaux_sous_jaccent ( 3,
2042 							       ligne );
2043 
2044 	    /* on ajoute le total de l'ib */
2045 
2046 	    ligne = etat_affiche_affiche_total_ib ( ligne );
2047 	}
2048 
2049 	/*       si on a demandé de ne pas afficher les noms des ib, on saute la partie suivante */
2050 
2051 	if ( gsb_data_report_get_budget_show_name (current_report_number))
2052 	{
2053 	    if ( gsb_data_transaction_get_budgetary_number (transaction_number ))
2054 	    {
2055 		nom_ib_en_cours = gsb_data_budget_get_name ( gsb_data_transaction_get_budgetary_number (transaction_number),
2056 							     0,
2057 							     NULL );
2058 
2059 		pointeur_char = g_strconcat ( decalage_ib,
2060 					      nom_ib_en_cours,
2061 					      NULL );
2062 	    }
2063 	    else
2064 		pointeur_char = g_strconcat ( decalage_ib,
2065 					      _("No budgetary line"),
2066 					      NULL );
2067 
2068 	    etat_affiche_attach_label ( pointeur_char, TEXT_NORMAL, 0, nb_colonnes-1,
2069 					ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
2070 	    g_free ( pointeur_char );
2071 	    ligne++;
2072 	}
2073 
2074 	ligne_debut_partie = ligne;
2075 	denote_struct_sous_jaccentes ( 3 );
2076 
2077 	ancienne_ib_etat = gsb_data_transaction_get_budgetary_number (transaction_number);
2078 
2079 	debut_affichage_etat = 0;
2080 	changement_de_groupe_etat = 1;
2081     }
2082 
2083     return ( ligne );
2084 }
2085 /*****************************************************************************************************/
2086 
2087 
2088 
2089 
2090 /*****************************************************************************************************/
etat_affiche_affiche_sous_ib_etat(gint transaction_number,const gchar * decalage_sous_ib,gint ligne)2091 gint etat_affiche_affiche_sous_ib_etat ( gint transaction_number,
2092 					 const gchar *decalage_sous_ib,
2093 					 gint ligne )
2094 {
2095     gchar *pointeur_char;
2096     gint current_report_number;
2097 
2098     current_report_number = gsb_gui_navigation_get_current_report ();
2099 
2100 
2101 
2102     /* mise en place de la sous_ib */
2103 
2104 
2105     if (gsb_data_transaction_get_budgetary_number (transaction_number)
2106 	 &&
2107 	 gsb_data_transaction_get_sub_budgetary_number (transaction_number) != ancienne_sous_ib_etat )
2108     {
2109 	/* lorsqu'on est au début de l'affichage de l'état, on n'affiche pas de totaux */
2110 
2111 	if ( !debut_affichage_etat
2112 	     &&
2113 	     !changement_de_groupe_etat )
2114 	{
2115 	    /* on affiche le total de la période en le forçant */
2116 
2117 	    ligne = etat_affiche_affiche_total_periode ( transaction_number,
2118 							 ligne,
2119 							 1 );
2120 
2121 	    /* on ajoute les totaux de tout ce qu'il y a derrière la sous ib */
2122 
2123 	    ligne = etat_affiche_affiche_totaux_sous_jaccent ( 4,
2124 							       ligne );
2125 
2126 	    /* on ajoute le total de la sous ib */
2127 
2128 	    ligne = etat_affiche_affiche_total_sous_ib ( ligne );
2129 	}
2130 
2131 	/*       si on a demandé de ne pas afficher les noms des ss-ib, on saute la partie suivante */
2132 
2133 	if ( gsb_data_report_get_budget_show_name (current_report_number))
2134 	{
2135 	    nom_ss_ib_en_cours = gsb_data_budget_get_sub_budget_name ( gsb_data_transaction_get_budgetary_number (transaction_number),
2136 								       gsb_data_transaction_get_sub_budgetary_number (transaction_number),
2137 								       0 );
2138 	    if ( nom_ss_ib_en_cours )
2139 		pointeur_char = g_strconcat ( decalage_sous_ib,
2140 					      nom_ss_ib_en_cours,
2141 					      NULL );
2142 	    else
2143 	    {
2144 		if ( gsb_data_report_get_budget_show_without_budget (current_report_number))
2145 		    pointeur_char = g_strconcat ( decalage_sous_ib,
2146 						  _("No sub-budgetary line"),
2147 						  NULL );
2148 		else
2149 		    pointeur_char = g_strdup("");
2150 	    }
2151 
2152 	    etat_affiche_attach_label ( pointeur_char, TEXT_NORMAL, 0, nb_colonnes-1,
2153 					ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
2154 	    g_free ( pointeur_char );
2155 	    ligne++;
2156 	}
2157 
2158 	ligne_debut_partie = ligne;
2159 	denote_struct_sous_jaccentes ( 4 );
2160 
2161 	ancienne_sous_ib_etat = gsb_data_transaction_get_sub_budgetary_number (transaction_number);
2162 
2163 	debut_affichage_etat = 0;
2164 	changement_de_groupe_etat = 1;
2165     }
2166 
2167     return ( ligne );
2168 }
2169 /*****************************************************************************************************/
2170 
2171 
2172 
2173 
2174 /*****************************************************************************************************/
etat_affiche_affiche_compte_etat(gint transaction_number,const gchar * decalage_compte,gint ligne)2175 gint etat_affiche_affiche_compte_etat ( gint transaction_number,
2176 					const gchar *decalage_compte,
2177 					gint ligne )
2178 {
2179     gchar *pointeur_char;
2180     gint current_report_number;
2181 
2182     current_report_number = gsb_gui_navigation_get_current_report ();
2183 
2184 
2185     /* mise en place du compte */
2186 
2187     if (gsb_data_transaction_get_account_number (transaction_number) != ancien_compte_etat )
2188     {
2189 	/* lorsqu'on est au début de l'affichage de l'état, on n'affiche pas de totaux */
2190 
2191 	if ( !debut_affichage_etat
2192 	     &&
2193 	     !changement_de_groupe_etat )
2194 	{
2195 	    /* on affiche le total de la période en le forçant */
2196 
2197 	    ligne = etat_affiche_affiche_total_periode ( transaction_number,
2198 							 ligne,
2199 							 1 );
2200 
2201 	    /* on ajoute les totaux de tout ce qu'il y a derrière le compte */
2202 
2203 	    ligne = etat_affiche_affiche_totaux_sous_jaccent ( 5,
2204 							       ligne );
2205 
2206 	    /* on ajoute le total du compte */
2207 
2208 	    ligne = etat_affiche_affiche_total_compte ( ligne );
2209 	}
2210 
2211 	/*       si on a demandé de ne pas afficher les noms des comptes, on saute la partie suivante */
2212 
2213 	if ( gsb_data_report_get_account_show_name (current_report_number))
2214 	{
2215 	    pointeur_char = g_strconcat ( decalage_compte,
2216 					  gsb_data_account_get_name (gsb_data_transaction_get_account_number (transaction_number)),
2217 					  NULL );
2218 	    nom_compte_en_cours = gsb_data_account_get_name (gsb_data_transaction_get_account_number (transaction_number));
2219 
2220 	    etat_affiche_attach_label ( pointeur_char, TEXT_NORMAL, 0, nb_colonnes-1,
2221 					ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
2222 	    g_free ( pointeur_char );
2223 	    ligne++;
2224 	}
2225 
2226 	ligne_debut_partie = ligne;
2227 	denote_struct_sous_jaccentes ( 5 );
2228 
2229 	ancien_compte_etat = gsb_data_transaction_get_account_number (transaction_number);
2230 
2231 	debut_affichage_etat = 0;
2232 	changement_de_groupe_etat = 1;
2233     }
2234 
2235     return ( ligne );
2236 }
2237 /*****************************************************************************************************/
2238 
2239 
2240 
2241 
2242 /*****************************************************************************************************/
etat_affiche_affiche_tiers_etat(gint transaction_number,const gchar * decalage_tiers,gint ligne)2243 gint etat_affiche_affiche_tiers_etat ( gint transaction_number,
2244 				       const gchar *decalage_tiers,
2245 				       gint ligne )
2246 {
2247     gchar *pointeur_char;
2248     gint current_report_number;
2249 
2250     current_report_number = gsb_gui_navigation_get_current_report ();
2251 
2252 
2253     /* affiche le tiers */
2254 
2255     if ( gsb_data_report_get_payee_used (current_report_number)
2256 	 &&
2257 	 gsb_data_transaction_get_party_number (transaction_number) != ancien_tiers_etat )
2258     {
2259 	/* lorsqu'on est au début de l'affichage de l'état, on n'affiche pas de totaux */
2260 
2261 	if ( !debut_affichage_etat
2262 	     &&
2263 	     !changement_de_groupe_etat )
2264 	{
2265 	    /* on affiche le total de la période en le forçant */
2266 
2267 	    ligne = etat_affiche_affiche_total_periode ( transaction_number,
2268 							 ligne,
2269 							 1 );
2270 
2271 	    /* on ajoute les totaux de tout ce qu'il y a derrière le tiers */
2272 
2273 	    ligne = etat_affiche_affiche_totaux_sous_jaccent ( 6,
2274 							       ligne );
2275 
2276 	    /* on ajoute le total du tiers */
2277 
2278 	    ligne = etat_affiche_affiche_total_tiers ( ligne );
2279 	}
2280 
2281 	/*       si on a demandé de ne pas afficher les noms des tiers, on saute la partie suivante */
2282 
2283 	if ( gsb_data_report_get_payee_show_name (current_report_number))
2284 	{
2285 	    if ( gsb_data_transaction_get_party_number (transaction_number))
2286 	    {
2287 		nom_tiers_en_cours = gsb_data_payee_get_name ( gsb_data_transaction_get_party_number (transaction_number), TRUE );
2288 
2289 		pointeur_char = g_strconcat ( decalage_tiers,
2290 					      nom_tiers_en_cours,
2291 					      NULL );
2292 	    }
2293 	    else
2294 		pointeur_char = g_strconcat ( decalage_tiers,
2295 					      _("No payee"),
2296 					      NULL );
2297 
2298 	    etat_affiche_attach_label ( pointeur_char, TEXT_NORMAL, 0, nb_colonnes-1,
2299 					ligne, ligne + 1, GTK_JUSTIFY_LEFT, 0 );
2300 	    g_free ( pointeur_char );
2301 	    ligne++;
2302 	}
2303 
2304 	ligne_debut_partie = ligne;
2305 	denote_struct_sous_jaccentes ( 6 );
2306 
2307 	ancien_tiers_etat = gsb_data_transaction_get_party_number (transaction_number);
2308 
2309 	debut_affichage_etat = 0;
2310 	changement_de_groupe_etat = 1;
2311     }
2312     return ( ligne );
2313 }
2314 /*****************************************************************************************************/
2315 
2316 
2317 /*****************************************************************************************************/
etat_affiche_affiche_titre_revenus_etat(gint ligne)2318 gint etat_affiche_affiche_titre_revenus_etat ( gint ligne )
2319 {
2320 	GrisbiWinEtat *w_etat;
2321 
2322 	w_etat = grisbi_win_get_w_etat ();
2323     etat_affiche_attach_label ( NULL, TEXT_NORMAL, 0, nb_colonnes,
2324 				ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2325     ligne++;
2326 
2327 	if (w_etat->metatree_assoc_mode)
2328 		etat_affiche_attach_label (_("Products"), TEXT_LARGE, 0, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0);
2329 	else
2330 		etat_affiche_attach_label (_("Incomes"), TEXT_LARGE, 0, nb_colonnes,
2331 					ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2332 
2333     ligne++;
2334 
2335     etat_affiche_attach_label ( NULL, TEXT_NORMAL, 0, nb_colonnes,
2336 				ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2337     ligne++;
2338 
2339     return ( ligne );
2340 }
2341 /*****************************************************************************************************/
2342 
2343 
2344 /*****************************************************************************************************/
etat_affiche_affiche_titre_depenses_etat(gint ligne)2345 gint etat_affiche_affiche_titre_depenses_etat ( gint ligne )
2346 {
2347 	GrisbiWinEtat *w_etat;
2348 
2349 	w_etat = grisbi_win_get_w_etat ();
2350     etat_affiche_attach_label ( NULL, TEXT_NORMAL, 0, nb_colonnes,
2351 				ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2352     ligne++;
2353 
2354 	if (w_etat->metatree_assoc_mode)
2355 		etat_affiche_attach_label (_("Charges"), TEXT_LARGE, 0, nb_colonnes, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0);
2356 	else
2357 		etat_affiche_attach_label ( _("Outgoings"), TEXT_LARGE, 0, nb_colonnes,
2358 								   ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2359     ligne++;
2360 
2361     etat_affiche_attach_label ( NULL, TEXT_NORMAL, 0, nb_colonnes,
2362 				ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2363     ligne++;
2364 
2365     return ( ligne );
2366 }
2367 /*****************************************************************************************************/
2368 
2369 
2370 /*****************************************************************************************************/
2371 /* appelée lors de l'affichage d'une structure ( catég, ib ... ) */
2372 /* affiche le total de toutes les structures sous jaccentes */
2373 /*****************************************************************************************************/
2374 
etat_affiche_affiche_totaux_sous_jaccent(gint origine,gint ligne)2375 gint etat_affiche_affiche_totaux_sous_jaccent ( gint origine,
2376 						gint ligne )
2377 {
2378     GSList *pointeur_glist;
2379     gint current_report_number;
2380 	gint categ_used = 0;
2381 	gint sous_categ_used = 0;
2382 	gint group_reports = 0;
2383 	gint ib_used = 0;
2384 	gint sous_ib_used = 0;
2385 	gint payee_used = 0;
2386 
2387     current_report_number = gsb_gui_navigation_get_current_report ();
2388 	categ_used = gsb_data_report_get_category_used (current_report_number);
2389 	sous_categ_used = gsb_data_report_get_category_show_sub_category (current_report_number);
2390 	ib_used = gsb_data_report_get_budget_used (current_report_number);
2391 	sous_ib_used = gsb_data_report_get_budget_show_sub_budget (current_report_number);
2392 	group_reports = gsb_data_report_get_account_group_reports (current_report_number);
2393 	payee_used = gsb_data_report_get_payee_used (current_report_number);
2394 
2395     /* on doit partir du bout de la liste pour revenir vers la structure demandée */
2396     pointeur_glist = g_slist_reverse (g_slist_copy ( gsb_data_report_get_sorting_type_list (current_report_number)));
2397 
2398     while ( GPOINTER_TO_INT ( pointeur_glist -> data ) != origine )
2399     {
2400 	switch ( GPOINTER_TO_INT ( pointeur_glist -> data ))
2401 	{
2402 	    case 1:
2403 			if (categ_used)
2404 				ligne = etat_affiche_affiche_total_categories ( ligne );
2405 			break;
2406 
2407 	    case 2:
2408 			if (categ_used && sous_categ_used)
2409 				ligne = etat_affiche_affiche_total_sous_categ ( ligne );
2410 			break;
2411 
2412 	    case 3:
2413 			if (ib_used)
2414 				ligne = etat_affiche_affiche_total_ib ( ligne );
2415 			break;
2416 
2417 	    case 4:
2418 			if (ib_used && sous_ib_used)
2419 				ligne = etat_affiche_affiche_total_sous_ib ( ligne );
2420 			break;
2421 
2422 	    case 5:
2423 			if (group_reports)
2424 				ligne = etat_affiche_affiche_total_compte ( ligne );
2425 			break;
2426 
2427 	    case 6:
2428 			if (payee_used)
2429 				ligne = etat_affiche_affiche_total_tiers ( ligne );
2430 			break;
2431 	}
2432 	pointeur_glist = pointeur_glist -> next;
2433     }
2434 
2435     g_slist_free (pointeur_glist);
2436     return ( ligne );
2437 
2438 }
2439 /*****************************************************************************************************/
2440 
2441 
2442 
2443 /*****************************************************************************************************/
etat_affiche_affiche_titres_colonnes(gint ligne)2444 gint etat_affiche_affiche_titres_colonnes ( gint ligne )
2445 {
2446     gint colonne;
2447     gint current_report_number;
2448 
2449     current_report_number = gsb_gui_navigation_get_current_report ();
2450 
2451 
2452     colonne = 1;
2453 
2454     if ( gsb_data_report_get_show_report_transaction_number (current_report_number))
2455     {
2456 	etat_affiche_attach_label ( _("Number"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2457 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2458 	colonne = colonne + 2;
2459     }
2460 
2461     if ( gsb_data_report_get_show_report_date (current_report_number))
2462     {
2463 	etat_affiche_attach_label ( _("Date"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2464 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2465 	colonne = colonne + 2;
2466     }
2467 
2468     if ( gsb_data_report_get_show_report_value_date (current_report_number))
2469     {
2470 	etat_affiche_attach_label ( _("Value date"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2471 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2472 	colonne = colonne + 2;
2473     }
2474 
2475     if ( gsb_data_report_get_show_report_financial_year (current_report_number))
2476     {
2477 	etat_affiche_attach_label ( _("Financial year"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2478 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2479 	colonne = colonne + 2;
2480     }
2481 
2482     if ( gsb_data_report_get_show_report_payee (current_report_number))
2483     {
2484 	etat_affiche_attach_label ( _("Payee"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2485 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2486 	colonne = colonne + 2;
2487     }
2488 
2489     if ( gsb_data_report_get_show_report_category (current_report_number))
2490     {
2491 	etat_affiche_attach_label ( _("Category"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2492 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2493 	colonne = colonne + 2;
2494     }
2495 
2496     if ( gsb_data_report_get_show_report_budget (current_report_number))
2497     {
2498 	etat_affiche_attach_label ( _("Budgetary line"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2499 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2500 	colonne = colonne + 2;
2501     }
2502 
2503     if ( gsb_data_report_get_show_report_note (current_report_number))
2504     {
2505 	etat_affiche_attach_label ( _("Notes"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2506 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2507 	colonne = colonne + 2;
2508     }
2509 
2510     if ( gsb_data_report_get_show_report_method_of_payment (current_report_number))
2511     {
2512 	etat_affiche_attach_label ( _("Payment methods"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2513 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2514 	colonne = colonne + 2;
2515     }
2516 
2517     if ( gsb_data_report_get_show_report_method_of_payment_content (current_report_number))
2518     {
2519 	etat_affiche_attach_label ( _("Cheque"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2520 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2521 	colonne = colonne + 2;
2522     }
2523 
2524     if ( gsb_data_report_get_show_report_voucher (current_report_number))
2525     {
2526 	etat_affiche_attach_label ( _("Voucher"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2527 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2528 	colonne = colonne + 2;
2529     }
2530 
2531     if ( gsb_data_report_get_show_report_bank_references (current_report_number))
2532     {
2533 	etat_affiche_attach_label ( _("Bank references"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2534 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2535 	colonne = colonne + 2;
2536     }
2537 
2538     if ( gsb_data_report_get_show_report_marked (current_report_number))
2539     {
2540 	etat_affiche_attach_label ( _("Statement"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2541 	etat_affiche_attach_vsep ( colonne + 1, colonne + 2, ligne, ligne + 1 );
2542 	colonne = colonne + 2;
2543     }
2544 
2545 	/* on ajoute le montant */
2546 	etat_affiche_attach_label ( _("Amount"), TEXT_BOLD, colonne, colonne + 1, ligne, ligne + 1, GTK_JUSTIFY_CENTER, 0 );
2547 
2548 	ligne++;
2549 
2550     etat_affiche_attach_hsep ( 1, nb_colonnes, ligne, ligne + 1 );
2551     ligne++;
2552 
2553     titres_affiches = 1;
2554 
2555     return ( ligne );
2556 }
2557 /*****************************************************************************************************/
2558 
2559 
2560 
etat_affiche_attach_hsep(int x,int x2,int y,int y2)2561 void etat_affiche_attach_hsep ( int x, int x2, int y, int y2)
2562 {
2563     etat_affichage_output -> attach_hsep ( x, x2, y, y2);
2564 }
2565 
2566 
2567 
etat_affiche_attach_vsep(int x,int x2,int y,int y2)2568 void etat_affiche_attach_vsep ( int x, int x2, int y, int y2)
2569 {
2570     etat_affichage_output -> attach_vsep ( x, x2, y, y2);
2571 }
2572 
2573 
2574 
etat_affiche_attach_label(gchar * text,gint properties,int x,int x2,int y,int y2,GtkJustification align,gint transaction_number)2575 void etat_affiche_attach_label ( gchar * text, gint properties, int x, int x2, int y, int y2,
2576 								GtkJustification align, gint transaction_number )
2577 {
2578     etat_affichage_output -> attach_label ( text, properties, x, x2, y, y2, align, transaction_number );
2579 }
2580 
2581 
2582 
etat_affiche_initialise(GSList * opes_selectionnees,gchar * filename)2583 gint etat_affiche_initialise (GSList * opes_selectionnees, gchar * filename )
2584 {
2585     return etat_affichage_output -> initialise ( opes_selectionnees, filename );
2586 }
2587 
2588 
2589 
etat_affiche_finish(void)2590 gint etat_affiche_finish (void)
2591 {
2592     return etat_affichage_output -> finish ();
2593 }
2594 
2595 /* Local Variables: */
2596 /* c-basic-offset: 4 */
2597 /* End: */
2598