/**
 * Callback called when toggle the default payment method
 *
 * \param cell
 * \param path_str
 * \param tree_view
 *
 * \return FALSE
 * */
gboolean gsb_payment_method_config_toggled ( GtkCellRendererToggle *cell,
					     gchar *path_str,
					     GtkTreeView *tree_view )
{
    GtkTreePath *path = gtk_tree_path_new_from_string (path_str);
    GtkTreeIter iter, parent, child;
    gboolean toggle_item;
    gint payment_number;
    GtkTreeModel *model;

    model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));

    /* get toggled iter */
    gtk_tree_model_get_iter (GTK_TREE_MODEL(model), &iter, path);
    gtk_tree_model_get (GTK_TREE_MODEL(model), &iter,
			PAYMENT_METHODS_DEFAULT_COLUMN, &toggle_item,
			PAYMENT_METHODS_NUMBER_COLUMN, &payment_number,
			-1);

    if (gsb_data_payment_get_sign (payment_number) == GSB_PAYMENT_DEBIT)
	gsb_data_account_set_default_debit ( gsb_data_payment_get_account_number (payment_number),
					     payment_number );
    else
    {
	if (gsb_data_payment_get_sign (payment_number) == GSB_PAYMENT_CREDIT)
	    gsb_data_account_set_default_credit (gsb_data_payment_get_account_number (payment_number),
						 payment_number );
    }

    if (! toggle_item)
    {
	gtk_tree_model_iter_parent ( GTK_TREE_MODEL(model), &parent, &iter );

	if ( gtk_tree_model_iter_children (GTK_TREE_MODEL(model), &child, &parent) )
	{
	    do
	    {
		gtk_tree_store_set (GTK_TREE_STORE (model), &child,
				    PAYMENT_METHODS_DEFAULT_COLUMN, FALSE,
				    -1);
	    }
	    while ( gtk_tree_model_iter_next (GTK_TREE_MODEL(model), &child) );
	}
	else
	{
	    /* Should not happen theorically */
	    dialogue_error_brain_damage () ;
	}

	/* set new value */
	gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
			    PAYMENT_METHODS_DEFAULT_COLUMN, 1,
			    -1);
    }

    /* clean up */
    gtk_tree_path_free (path);
    gsb_file_set_modified ( TRUE );
    return FALSE;
}
/**
 * This function looks for a method of payment which matches
 * `signe_type' and returns its number.
 *
 * \param account_number	The account to process.
 * \param signe_type	A payment method sign to match against payment
 *			methods of specified account.
 *			(GSB_PAYMENT_NEUTRAL, GSB_PAYMENT_DEBIT, GSB_PAYMENT_CREDIT)
 * \param exclude	A payment method that should not be checked,
 *			as it may be the one which is to be removed.
 *
 * \return		The matching payment method number on success,
 *			0 otherwise (for transfer).
 */
gint gsb_payment_method_config_get_transaction_by_sign ( gint account_number,
							 gint signe_type,
							 gint exclude )
{
    GSList *tmp_list;

    tmp_list = gsb_data_payment_get_payments_list ();

    while (tmp_list)
    {
	gint payment_number;

	payment_number = gsb_data_payment_get_number (tmp_list -> data);

	if ( gsb_data_payment_get_account_number (payment_number) == account_number
	     &&
	     payment_number != exclude
	     &&
	     gsb_data_payment_get_sign (payment_number) == signe_type )
	    return payment_number;

	tmp_list = tmp_list -> next;
    };

    /* Defaults to first method_ptr, whatever it may be */
    return 0;
}
/**
 * callback called by the button to add a new method of payment
 *
 * \param button
 * \param tree_view the payment method config tree view
 *
 * \return FALSE
 * */
gboolean gsb_payment_method_config_add ( GtkWidget *button,
					 GtkWidget *tree_view )
{
    GtkTreeSelection * selection;
    GtkTreeIter iter, parent, root, child, *final;
    GtkTreePath * treepath;
    gint account_number, type_final;
    gboolean good;
    gint payment_number;
    GtkTreeModel *model;

    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view));
    good = gtk_tree_selection_get_selected (selection, NULL, &iter);
    model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));

    if ( good )
    {
	/* there is a selection, get corrent iters */
	gtk_tree_model_get ( GTK_TREE_MODEL(model), &iter,
			     PAYMENT_METHODS_NUMBER_COLUMN, &payment_number,
			     -1 );
	if (payment_number)
	{
	    /* Select parent */
	    gtk_tree_model_iter_parent ( GTK_TREE_MODEL(model),
					 &parent, &iter );
	    final = &parent;
	    type_final = gsb_data_payment_get_sign (payment_number);
	    gtk_tree_model_iter_parent (GTK_TREE_MODEL(model), &root, &parent);
	}
	else
	{
Ejemplo n.º 4
0
/**
 * Callback called when toggle the check button to split the neutral method of payments
 *
 * \param cell
 * \param path_str
 * \param tree_view
 *
 * \return FALSE
 */
gboolean gsb_reconcile_sort_config_neutral_toggled ( GtkCellRendererToggle *cell,
						     gchar *path_str,
						     GtkWidget *tree_view )
{
    GtkTreePath * treepath;
    GtkTreeIter iter;
    gboolean toggle;
    gint account_number;
    GSList *sorted_list_copy;
    GSList *tmp_list;
    GtkTreeModel *model;

    model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));

    /* invert the toggle */
    treepath = gtk_tree_path_new_from_string ( path_str );
    gtk_tree_model_get_iter ( GTK_TREE_MODEL (model),
			      &iter, treepath );

    gtk_tree_model_get (GTK_TREE_MODEL(model), &iter,
			RECONCILIATION_SORT_SPLIT_NEUTRAL_COLUMN, &toggle,
			RECONCILIATION_SORT_ACCOUNT_COLUMN, &account_number,
			-1);
    toggle ^= 1;
    gtk_tree_store_set (GTK_TREE_STORE (model), &iter,
			RECONCILIATION_SORT_SPLIT_NEUTRAL_COLUMN, toggle,
			-1);

    /* and save it */
    gsb_data_account_set_split_neutral_payment ( account_number,
						 toggle );

    /* need to copy the sorted_list to avoid an infinite loop when add a negative payment neutral later */
    sorted_list_copy = g_slist_copy (gsb_data_account_get_sort_list (account_number));
    tmp_list = sorted_list_copy;

    while (tmp_list)
    {
	gint payment_number;

	payment_number = GPOINTER_TO_INT (tmp_list -> data);

	/* payment_number can be negative, so do for it abs */
	if ( gsb_data_payment_get_sign (abs (payment_number)) == GSB_PAYMENT_NEUTRAL )
	{
	    if (toggle)
		gsb_data_account_sort_list_add ( account_number,
						 -payment_number );
	    else
		if (payment_number < 0 )
		    gsb_data_account_sort_list_remove ( account_number,
							payment_number );
	}
	tmp_list = tmp_list -> next;
    }
    g_slist_free (sorted_list_copy);
    gsb_reconcile_sort_config_fill ();
    gsb_file_set_modified ( TRUE );
    return FALSE;
}
Ejemplo n.º 5
0
/**
 * set the content in the form according to the content of the list
 * of struct content_element given in param
 *
 * \param content_list the list of struct content_element
 *
 * \return
 * */
void gsb_form_scheduler_set_content_list ( GSList *content_list )
{
    GSList *list_tmp;
    gint account_number;

    account_number = gsb_form_scheduler_get_account ();

    list_tmp = content_list;

    /* see each saved element */
    while (list_tmp)
    {
	content_element *element;
	GSList *form_list;

	element = list_tmp -> data;

	/* normally, cannot happen */
	if (!element)
	    continue;

	/* we look for that element in the form */
	form_list = gsb_form_widget_get_list ();

	while (form_list)
	{
	    struct_element *form_element;

	    form_element = form_list -> data;

	    if (!GTK_WIDGET_VISIBLE (form_element -> element_widget)
		||
		form_element -> element_number != element -> element_number)
	    {
		form_list = form_list -> next;
		continue;
	    }

	    switch (form_element -> element_number)
	    {
		/* first, the entries */
		case TRANSACTION_FORM_DATE:
		case TRANSACTION_FORM_VALUE_DATE:
		case TRANSACTION_FORM_DEBIT:
		case TRANSACTION_FORM_CREDIT:
		case TRANSACTION_FORM_NOTES:
		case TRANSACTION_FORM_BANK:
		case TRANSACTION_FORM_VOUCHER:
		    gsb_form_entry_get_focus (form_element -> element_widget);
            if ( element -> element_string )
                gtk_entry_set_text ( GTK_ENTRY (form_element -> element_widget),
                                element -> element_string );
		    break;

		case TRANSACTION_FORM_TYPE:
		    gsb_payment_method_create_combo_list ( form_element -> element_widget,
							   gsb_data_payment_get_sign (element -> element_int),
							   account_number, 0, FALSE );
		    gsb_payment_method_set_combobox_history ( form_element -> element_widget,
							   gsb_data_payment_get_similar (element -> element_int, account_number), TRUE );
		    break;

		case TRANSACTION_FORM_CONTRA:
		    gsb_payment_method_create_combo_list ( form_element -> element_widget,
							   gsb_data_payment_get_sign (element -> element_int),
							   account_number, 0, TRUE );
		    gsb_payment_method_set_combobox_history ( form_element -> element_widget,
							   gsb_data_payment_get_similar (element -> element_int, account_number), TRUE );
			break;

		case TRANSACTION_FORM_EXERCICE:
		    gsb_fyear_set_combobox_history ( form_element -> element_widget,
						     element -> element_int );
		    break;

		case TRANSACTION_FORM_DEVISE:
		    gsb_currency_set_combobox_history ( form_element -> element_widget,
							element -> element_int );
		    break;

		    /* check the combofix */
		case TRANSACTION_FORM_PARTY:
		case TRANSACTION_FORM_CATEGORY:
		case TRANSACTION_FORM_BUDGET:
		    gsb_form_entry_get_focus (form_element -> element_widget);
            if ( element -> element_string )
                gtk_combofix_set_text ( GTK_COMBOFIX ( form_element -> element_widget ),
                                element -> element_string );
		    break;
	    }
	    form_list = form_list -> next;
	}
	list_tmp = list_tmp -> next;
    }
}
/**
 * callback called when changing the sign type of the method of payment
 *
 * \param menu_item the widget wich receive the signal
 * \param sign a pointer to an int : GSB_PAYMENT_NEUTRAL, GSB_PAYMENT_DEBIT or GSB_PAYMENT_CREDIT
 *
 * \return FALSE
 */
gboolean gsb_payment_method_config_sign_changed ( GtkWidget *menu_item,
						  gint *sign )
{
    GtkTreeSelection *selection;
    GtkTreeIter iter;
    gboolean good;

    selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (payment_method_treeview));
    good = gtk_tree_selection_get_selected (selection, NULL, &iter);

    if (good)
    {
	GtkTreeModel *model;
	gint payment_number;

	model = gtk_tree_view_get_model ( GTK_TREE_VIEW (payment_method_treeview));
	gtk_tree_model_get ( GTK_TREE_MODEL(model), &iter,
			     PAYMENT_METHODS_NUMBER_COLUMN, &payment_number,
			     -1 );

	if (payment_number)
	{
	    gint account_number;

	    /* Call this callback so that we "unselect" things */
	    gsb_payment_method_config_select ( selection, payment_method_treeview);

	    account_number = gsb_data_payment_get_account_number (payment_number);

	    /* as we have changed the sign of the method of payment, check if it was the default
	     * for the account, and if yes, change the default for that account */
	    switch (gsb_data_payment_get_sign (payment_number))
	    {
		case GSB_PAYMENT_DEBIT:
		    if ( gsb_data_account_get_default_debit (account_number) == payment_number)
		    {
			/* the current method of payment was a debit and was the default debit for its account,
			 * so change the default to another debit */
			gsb_data_account_set_default_debit ( account_number,
							     gsb_payment_method_config_get_transaction_by_sign (account_number,
											  GSB_PAYMENT_DEBIT,
											  payment_number));
		    }
		    break;

		case GSB_PAYMENT_CREDIT:
		    if ( gsb_data_account_get_default_credit (account_number) == payment_number)
		    {
			/* the current method of payment was a credit and was the default credit for its account,
			 * so change the default to another credit */
			gsb_data_account_set_default_credit ( account_number,
							      gsb_payment_method_config_get_transaction_by_sign (account_number,
											   GSB_PAYMENT_CREDIT,
											   payment_number));
		    }
		    break;
	    }
	    gsb_data_payment_set_sign ( payment_number,
					GPOINTER_TO_INT (sign));

	    /* Update tree */
	    g_signal_handlers_block_by_func ( selection,
					      G_CALLBACK (gsb_payment_method_config_select),
					      model );
	    gsb_payment_method_config_fill_list (model);
	    gtk_tree_view_expand_all ( GTK_TREE_VIEW(payment_method_treeview) );
	    g_signal_handlers_unblock_by_func ( selection,
						G_CALLBACK (gsb_payment_method_config_select),
						model );
	    gtk_tree_model_foreach ( GTK_TREE_MODEL (model),
				     (GtkTreeModelForeachFunc) gsb_payment_method_config_foreach_select,
				     GINT_TO_POINTER (payment_number));
	    /* need to clear and fill the reconciliation tree becaus if it was a neutral changing to credit/debit
	     * and neutral was split... */
	    gsb_reconcile_sort_config_fill ();
	}
    }
    return FALSE;
}
/**
 * Callback used when a payment method is selected in payment methods
 * list.
 *
 * \param selection the tree selection
 * \param tree_view
 *
 * \return FALSE
 */
gboolean gsb_payment_method_config_select ( GtkTreeSelection *selection,
					    GtkWidget *tree_view )
{
    GtkTreeIter iter;
    gboolean good;

    good = gtk_tree_selection_get_selected (selection, NULL, &iter);
    if (good)
    {
	GtkTreeModel *model;
	gint payment_number;

	model = gtk_tree_view_get_model (GTK_TREE_VIEW (tree_view));
	gtk_tree_model_get (model, &iter,
			    PAYMENT_METHODS_NUMBER_COLUMN, &payment_number,
			    -1 );

	if (payment_number )
	{
	    gtk_widget_set_sensitive ( details_paddingbox, TRUE );

	    /* Filling entries */
	    gsb_autofunc_entry_set_value ( payment_name_entry,
					   gsb_data_payment_get_name (payment_number),
					   payment_number );
	    gsb_autofunc_spin_set_value ( payment_last_number_entry,
					  gsb_data_payment_get_last_number_to_int ( payment_number ),
					  payment_number );
	    gsb_autofunc_checkbutton_set_value ( button_show_entry,
						 gsb_data_payment_get_show_entry (payment_number),
						 payment_number );
	    gsb_autofunc_checkbutton_set_value ( button_auto_numbering,
						 gsb_data_payment_get_automatic_numbering (payment_number),
						 payment_number );
	    gtk_option_menu_set_history ( GTK_OPTION_MENU ( payment_sign_button ),
					  gsb_data_payment_get_sign (payment_number));
	    /* Activating widgets */
	    gtk_widget_set_sensitive ( button_auto_numbering,
				       gsb_data_payment_get_show_entry (payment_number));
	    gtk_widget_set_sensitive ( payment_last_number_entry,
				       gsb_data_payment_get_automatic_numbering (payment_number));
	    /* We can remove this entry */
	    gtk_widget_set_sensitive ( payment_remove_button, TRUE );
	}
	else
	{
	    /* Blanking entries */
	    gsb_autofunc_entry_set_value ( payment_name_entry, NULL, 0);
	    gsb_autofunc_spin_set_value ( payment_last_number_entry, 0, 0 );
	    gsb_autofunc_checkbutton_set_value ( button_show_entry, FALSE, 0 );
	    gsb_autofunc_checkbutton_set_value ( button_auto_numbering, FALSE, 0 );
	    /* Some widgets are useless */
	    gtk_widget_set_sensitive ( button_auto_numbering, FALSE );
	    gtk_widget_set_sensitive ( payment_last_number_entry, FALSE );
	    /* We set menu to "Neutral" as a default*/
	    gtk_option_menu_set_history ( GTK_OPTION_MENU ( payment_sign_button ), 0);
	    /* Nothing to remove */
	    gtk_widget_set_sensitive ( payment_remove_button, TRUE );

	    gtk_widget_set_sensitive ( details_paddingbox, FALSE );
	}
    }
    else
    {
	/* Blanking entries */
	gsb_autofunc_entry_set_value ( payment_name_entry, NULL, 0);
	gsb_autofunc_spin_set_value ( payment_last_number_entry, 0, 0 );
	gsb_autofunc_checkbutton_set_value ( button_show_entry, FALSE, 0 );
	gsb_autofunc_checkbutton_set_value ( button_auto_numbering, FALSE, 0 );
	/* Some widgets are useless */
	gtk_widget_set_sensitive ( button_auto_numbering, FALSE );
	gtk_widget_set_sensitive ( payment_last_number_entry, FALSE );
	/* We set menu to "Neutral" as a default*/
	gtk_option_menu_set_history ( GTK_OPTION_MENU ( payment_sign_button ), 0);
	/* Nothing to remove */
	gtk_widget_set_sensitive ( payment_remove_button, TRUE );

	gtk_widget_set_sensitive ( details_paddingbox, FALSE );
    }
   return ( FALSE );
}
/**
 * Fill the `model' GtkTreeModel with all payment methods known.  They
 * are organized by account and then my method_ptr of payment method: Debit,
 * Credit, Neutral.
 *
 *  \param model
 *
 *  \return
 */
void gsb_payment_method_config_fill_list ( GtkTreeModel *model)
{
    GSList *list_tmp;

    gtk_tree_store_clear ( GTK_TREE_STORE (model) );

    /* Fill tree, iter over with accounts */
    list_tmp = gsb_data_account_get_list_accounts ();

    while ( list_tmp )
    {
	gint account_number;
	GSList *payment_list;
	GtkTreeIter account_iter, debit_iter, credit_iter;

	account_number = gsb_data_account_get_no_account ( list_tmp -> data );

	gtk_tree_store_append (GTK_TREE_STORE (model), &account_iter, NULL);
	gtk_tree_store_set (GTK_TREE_STORE (model), &account_iter,
			    PAYMENT_METHODS_NAME_COLUMN, gsb_data_account_get_name (account_number),
			    PAYMENT_METHODS_NUMBERING_COLUMN, NULL,
			    PAYMENT_METHODS_TYPE_COLUMN, 0,
			    PAYMENT_METHODS_DEFAULT_COLUMN, FALSE,
			    PAYMENT_METHODS_ACTIVABLE_COLUMN, FALSE,
			    PAYMENT_METHODS_VISIBLE_COLUMN, FALSE,
			    PAYMENT_METHODS_NUMBER_COLUMN, NULL,
			    PAYMENT_METHODS_ACCOUNT_COLUMN, account_number,
			    -1 );

	/* Create the "Debit" node */
	gtk_tree_store_append (GTK_TREE_STORE (model), &debit_iter, &account_iter);
	gtk_tree_store_set (GTK_TREE_STORE (model), &debit_iter,
			    PAYMENT_METHODS_NAME_COLUMN, _("Debit"),
			    PAYMENT_METHODS_NUMBERING_COLUMN, NULL,
			    PAYMENT_METHODS_TYPE_COLUMN, 0,
			    PAYMENT_METHODS_DEFAULT_COLUMN, FALSE,
			    PAYMENT_METHODS_ACTIVABLE_COLUMN, FALSE,
			    PAYMENT_METHODS_VISIBLE_COLUMN, FALSE,
			    PAYMENT_METHODS_NUMBER_COLUMN, NULL,
			    PAYMENT_METHODS_ACCOUNT_COLUMN, account_number,
			    -1 );

	/* Create the "Credit" node */
	gtk_tree_store_append (GTK_TREE_STORE (model), &credit_iter, &account_iter);
	gtk_tree_store_set (GTK_TREE_STORE (model), &credit_iter,
			    PAYMENT_METHODS_NAME_COLUMN, _("Credit"),
			    PAYMENT_METHODS_NUMBERING_COLUMN, NULL,
			    /* This is a hack: account number is put in
			       Debit/Credit nodes */
			    PAYMENT_METHODS_TYPE_COLUMN, 0,
			    PAYMENT_METHODS_DEFAULT_COLUMN, FALSE,
			    PAYMENT_METHODS_ACTIVABLE_COLUMN, FALSE,
			    PAYMENT_METHODS_VISIBLE_COLUMN, FALSE,
			    PAYMENT_METHODS_NUMBER_COLUMN, NULL,
			    PAYMENT_METHODS_ACCOUNT_COLUMN, account_number,
			    -1 );


	/* Iter over account payment methods */
	payment_list = gsb_data_payment_get_payments_list ();
	while (payment_list)
	{
	    gint payment_number;
	    GtkTreeIter *parent_iter = NULL;
	    GtkTreeIter method_iter;
	    gboolean isdefault;
	    const gchar *number;

	    payment_number = gsb_data_payment_get_number (payment_list -> data);

	    /* check if we have to show this payment here */
	    if (gsb_data_payment_get_account_number (payment_number) != account_number)
	    {
		payment_list = payment_list -> next;
		continue;
	    }

	    /* set if default value */
	    if ( payment_number == gsb_data_account_get_default_debit (account_number)
		 ||
		 payment_number == gsb_data_account_get_default_credit (account_number) )
		isdefault = 1;
	    else
		isdefault = 0;

	    /* look for the parent iter according to the sign */
	    switch (gsb_data_payment_get_sign (payment_number))
	    {
		case GSB_PAYMENT_NEUTRAL:
		    parent_iter = &account_iter;
		    break;
		case GSB_PAYMENT_DEBIT:
		    parent_iter = &debit_iter;
		    break;
		case GSB_PAYMENT_CREDIT:
		    parent_iter = &credit_iter;
		    break;
	    }

	    /* set the last number */
	    if ( gsb_data_payment_get_automatic_numbering (payment_number))
		number = gsb_data_payment_get_last_number ( payment_number );
	    else
		number = g_strdup("");

	    /* Insert a child node */
	    gtk_tree_store_append (GTK_TREE_STORE (model), &method_iter, parent_iter);
	    gtk_tree_store_set (GTK_TREE_STORE (model), &method_iter,
				PAYMENT_METHODS_NAME_COLUMN, gsb_data_payment_get_name (payment_number),
				PAYMENT_METHODS_NUMBERING_COLUMN, number,
				PAYMENT_METHODS_TYPE_COLUMN, gsb_data_payment_get_sign (payment_number),
				PAYMENT_METHODS_DEFAULT_COLUMN, isdefault,
				PAYMENT_METHODS_ACTIVABLE_COLUMN, gsb_data_payment_get_sign (payment_number) != 0,
				PAYMENT_METHODS_VISIBLE_COLUMN, gsb_data_payment_get_sign (payment_number) != 0,
				PAYMENT_METHODS_NUMBER_COLUMN, payment_number,
				PAYMENT_METHODS_ACCOUNT_COLUMN, account_number,
				-1 );

	    payment_list = payment_list -> next;
	}
	list_tmp = list_tmp -> next;
    }
}
Ejemplo n.º 9
0
/**
 * clear and fill the reconciliation tree with the accounts,
 * and for each account, set the method of payments in the good order
 *
 * \param
 *
 * \return
 */
void gsb_reconcile_sort_config_fill ( void )
{
    GtkTreeIter account_iter, payment_method_iter;
    GSList *list_tmp;
    GtkTreeModel *model;

    model = gtk_tree_view_get_model (GTK_TREE_VIEW (reconcile_treeview));

    gtk_tree_store_clear (GTK_TREE_STORE (model));
    list_tmp = gsb_data_account_get_list_accounts ();

    while ( list_tmp )
    {
	gint account_number;
	GSList *sorted_list;
	GSList *payment_list;
	gboolean visible;

	account_number = gsb_data_account_get_no_account ( list_tmp -> data );

	/* when no method of payment, hide the checkbuttons because non sense */
	payment_list = gsb_data_payment_get_list_for_account (account_number);
	if (payment_list)
	{
	    visible = TRUE;
	    g_slist_free (payment_list);
	}
	else
	    visible = FALSE;

	gtk_tree_store_append (GTK_TREE_STORE (model), &account_iter, NULL);
	gtk_tree_store_set (GTK_TREE_STORE (model), &account_iter,
			    RECONCILIATION_SORT_NAME_COLUMN, gsb_data_account_get_name (account_number),
			    RECONCILIATION_SORT_VISIBLE_COLUMN, visible,
			    RECONCILIATION_SORT_SORT_COLUMN, gsb_data_account_get_reconcile_sort_type(account_number),
			    RECONCILIATION_SORT_SPLIT_NEUTRAL_COLUMN, gsb_data_account_get_split_neutral_payment (account_number),
			    RECONCILIATION_SORT_ACCOUNT_COLUMN, account_number,
			    RECONCILIATION_SORT_TYPE_COLUMN, 0,
			    RECONCILIATION_SORT_SENSITIVE_COLUMN, visible,
			    -1 );

	/* the sorted list is a list of numbers of method of payment, in the good order */
	sorted_list = gsb_data_account_get_sort_list (account_number);

	while ( sorted_list )
	{
	    gint payment_number;

	    /* in the sorted list, a number can be negative, when split a neutral into 2 parts
	     * so payment number here can be negative for neutral payments */
	    payment_number = GPOINTER_TO_INT (sorted_list -> data);

	    if (payment_number)
	    {
		gchar *name = NULL;

		gtk_tree_store_append (GTK_TREE_STORE (model),
				       &payment_method_iter,
				       &account_iter);

		/* if split the neutrals, show here with the name */
		switch (gsb_data_payment_get_sign (abs (payment_number)))
		{
		    case GSB_PAYMENT_DEBIT:
		    case GSB_PAYMENT_CREDIT:
			name = my_strdup (gsb_data_payment_get_name (payment_number));
			break;

		    case GSB_PAYMENT_NEUTRAL:
			if (gsb_data_account_get_split_neutral_payment (account_number))
			{
			    /* the neutrals are splitted */
			    if (payment_number < 0)
				name = g_strconcat ( gsb_data_payment_get_name (-payment_number),
						     " ( - )", NULL );
			    else
				name = g_strconcat ( gsb_data_payment_get_name (payment_number),
						     " ( + )", NULL );
			}
			else
			    name = my_strdup (gsb_data_payment_get_name (payment_number));
			break;
		}

		gtk_tree_store_set (GTK_TREE_STORE (model), &payment_method_iter,
				    RECONCILIATION_SORT_NAME_COLUMN, name,
				    RECONCILIATION_SORT_VISIBLE_COLUMN, FALSE,
				    RECONCILIATION_SORT_SORT_COLUMN, FALSE,
				    RECONCILIATION_SORT_SPLIT_NEUTRAL_COLUMN, FALSE,
				    RECONCILIATION_SORT_ACCOUNT_COLUMN, account_number,
				    RECONCILIATION_SORT_TYPE_COLUMN, payment_number,
				    RECONCILIATION_SORT_SENSITIVE_COLUMN, TRUE,
				    -1 );
		if (name)
		    g_free (name);
	    }
	    sorted_list = sorted_list -> next;
	}

	if ( gtk_tree_model_iter_has_child( GTK_TREE_MODEL(model), &account_iter)
	     &&
	     gsb_data_account_get_reconcile_sort_type (account_number) )
	{
	    GtkTreePath * treepath;
	    treepath = gtk_tree_model_get_path (GTK_TREE_MODEL(model), &account_iter);
	    if ( treepath )
	    {
		gtk_tree_view_expand_row ( GTK_TREE_VIEW(reconcile_treeview), treepath, TRUE );
		gtk_tree_path_free ( treepath );
	    }
	}
	list_tmp = list_tmp -> next;
    }
}