Example #1
0
/**
 * add the given transaction to its payee in the counters
 * if the transaction has no payee, add it to the blank payee
 *
 * \param transaction_number the transaction we want to work with
 *
 * \return
 * */
void gsb_data_payee_add_transaction_to_payee ( gint transaction_number )
{
    struct_payee *payee;

    payee = gsb_data_payee_get_structure ( gsb_data_transaction_get_party_number (transaction_number));

    /* if no payee in that transaction, and it's neither a split, neither a transfer,
     * we work with empty_payee */

    /* should not happen, this is if the transaction has a payee wich doesn't exists
     * we show a debug warning and get without payee */
    if (!payee)
    {
	gchar *tmpstr;
	tmpstr = g_strdup_printf ( _("The transaction %d has a payee n°%d but it doesn't exist."),
				   transaction_number, 
				   gsb_data_transaction_get_party_number (transaction_number));
	warning_debug (tmpstr);
	g_free (tmpstr);
	payee = empty_payee;
    }

    payee -> payee_nb_transactions ++;
    if ( ! gsb_data_transaction_get_split_of_transaction ( transaction_number ) )
        payee -> payee_balance = gsb_real_add ( payee -> payee_balance,
					    gsb_data_transaction_get_adjusted_amount_for_currency 
                        ( transaction_number, payee_tree_currency (), -1));
}
Example #2
0
/**
 * Add the given transaction to a budget in the counters if no budget
 * is specified, add it to the blank budget.
 *
 * \param transaction_number	Transaction we want to work with.
 * \param budget_id		Budget to add transaction into total.
 * \param sub_budget_id		Sub-budget to add transaction into total.
 */
void gsb_data_budget_add_transaction_to_budget ( gint transaction_number,
                        gint budget_id,
                        gint sub_budget_id )
{
    struct_budget *budget;
    struct_sub_budget *sub_budget;

    budget = gsb_data_budget_get_structure (  budget_id );
    sub_budget = gsb_data_budget_get_sub_budget_structure ( budget_id ,
							    sub_budget_id );

    /* should not happen, this is if the transaction has a budget wich doesn't exist
     * we show a debug warning and get without budget */
    if (!budget)
    {
	gchar *tmpstr;
	tmpstr = g_strdup_printf ( _("The transaction %d has a budget n°%d and sub-budget n°%d but they don't exist."),
				   transaction_number, 
				   budget_id,
				   sub_budget_id );
	warning_debug (tmpstr);
	g_free (tmpstr);
	budget = empty_budget;
    }

    /* now budget is on the budget structure or on empty_budget */
    if ( budget )
    {
	budget -> budget_nb_transactions ++;
    if ( ! gsb_data_transaction_get_split_of_transaction ( transaction_number ) )
        budget -> budget_balance = gsb_real_add ( budget -> budget_balance,
                        gsb_data_transaction_get_adjusted_amount_for_currency (
                        transaction_number, budgetary_line_tree_currency (), -1));
    }

    /* if we are on empty_budget, no sub-budget */
    if (budget == empty_budget)
	return;

    if ( sub_budget )
    {
	sub_budget -> sub_budget_nb_transactions ++;
    if ( ! gsb_data_transaction_get_split_of_transaction ( transaction_number ) )
        sub_budget -> sub_budget_balance = gsb_real_add (
                        sub_budget -> sub_budget_balance,
                        gsb_data_transaction_get_adjusted_amount_for_currency (
                        transaction_number, budgetary_line_tree_currency (), -1));
    }
    else
    {
	budget -> budget_nb_direct_transactions ++;
    if ( ! gsb_data_transaction_get_split_of_transaction ( transaction_number ) )
        budget -> budget_direct_balance = gsb_real_add (
                            budget -> budget_direct_balance,
                            gsb_data_transaction_get_adjusted_amount_for_currency (
                            transaction_number, budgetary_line_tree_currency (), -1));
    }
}
Example #3
0
/**
 * find the right function to sort the list and sort the 2 iters given
 *
 * \param model
 * \param iter_1
 * \param iter_2
 * \param no_sort permit to find the right function
 *
 * \return -1 if iter_1 is above iter_2
 * */
gint gsb_transactions_list_sort_by_no_sort (  gint transaction_number_1,
                        gint transaction_number_2,
                        gint element_number )
{
    gchar* tmpstr;

    switch (element_number)
    {
	case ELEMENT_DATE:  /* = 1 */
	    return ( gsb_transactions_list_sort_by_date ( transaction_number_1,
							  transaction_number_2));
	    break;
	case ELEMENT_VALUE_DATE:
	    return ( gsb_transactions_list_sort_by_value_date ( transaction_number_1,
								transaction_number_2));
	    break;
	case ELEMENT_PARTY:
	    return ( gsb_transactions_list_sort_by_party ( transaction_number_1,
							   transaction_number_2));
	    break;
	case ELEMENT_BUDGET:
	    return ( gsb_transactions_list_sort_by_budget ( transaction_number_1,
							    transaction_number_2));
	    break;
	case ELEMENT_CREDIT:
	    return ( gsb_transactions_list_sort_by_credit ( transaction_number_1,
							    transaction_number_2));
	    break;
	case ELEMENT_DEBIT:
	    return ( gsb_transactions_list_sort_by_debit ( transaction_number_1,
							   transaction_number_2));
	    break;
	case ELEMENT_BALANCE:
	    /* 	    balance, normally, shouldn't be here... in case, give back the date */
	    return ( gsb_transactions_list_sort_by_date ( transaction_number_1,
							  transaction_number_2));
	    break;
	case ELEMENT_AMOUNT:
	    return ( gsb_transactions_list_sort_by_amount ( transaction_number_1,
							    transaction_number_2));
	    break;
	case ELEMENT_PAYMENT_TYPE:
	    return ( gsb_transactions_list_sort_by_type ( transaction_number_1,
							  transaction_number_2));
	    break;
	case ELEMENT_RECONCILE_NB:
	    return ( gsb_transactions_list_sort_by_reconcile_nb ( transaction_number_1,
								  transaction_number_2));
	    break;
	case ELEMENT_EXERCICE:
	    return ( gsb_transactions_list_sort_by_financial_year ( transaction_number_1,
								    transaction_number_2));
	    break;
	case ELEMENT_CATEGORY:
	    return ( gsb_transactions_list_sort_by_category ( transaction_number_1,
							      transaction_number_2));
	    break;
	case ELEMENT_MARK:
	    return ( gsb_transactions_list_sort_by_mark ( transaction_number_1,
							  transaction_number_2));
	    break;
	case ELEMENT_VOUCHER:
	    return ( gsb_transactions_list_sort_by_voucher ( transaction_number_1,
							     transaction_number_2));
	    break;
	case ELEMENT_NOTES:
	    return ( gsb_transactions_list_sort_by_notes ( transaction_number_1,
							   transaction_number_2));
	    break;
	case ELEMENT_BANK:
	    return ( gsb_transactions_list_sort_by_bank ( transaction_number_1,
							  transaction_number_2));
	    break;
	case ELEMENT_NO:
	    return ( gsb_transactions_list_sort_by_no ( transaction_number_1,
							transaction_number_2));
	    break;
	case ELEMENT_CHQ:
	    return ( gsb_transactions_list_sort_by_chq ( transaction_number_1,
							 transaction_number_2));
	    break;
	default :
	    tmpstr = g_strdup_printf ( _("ask for the sort number %d which doesn't exist... return by date"), element_number );
	    warning_debug (tmpstr);
	    g_free(tmpstr);
	    return ( gsb_transactions_list_sort_by_date ( transaction_number_1,
							  transaction_number_2));
    }
}
/**
 * create the scheduled part : that widgets are created at the beginning
 * and normally never destroyed, they are showed only for
 * scheduled transactions 
 * Cela ne fonctionne pas : tous les widgets sont détruits par la
 * fonction gsb_form_create_widgets ( )
 *
 * \param table a GtkTable with the dimension SCHEDULED_HEIGHT*SCHEDULED_WIDTH to be filled
 *
 * \return FALSE
 * */
gboolean gsb_form_scheduler_create ( GtkWidget *table )
{
    gint row, column;
    struct_element *element;
    devel_debug (NULL);
    if (!table)
        return FALSE;

    /* just in case... be sure that not created */
    if (scheduled_element_list)
        gsb_form_scheduler_free_list ( );

    /* check the dimensions, 
     * if problem give a warning message but continue the program with changing the values */
    g_object_get ( G_OBJECT (table),
		   "n-columns", &column,
		   "n-rows", &row,
		   NULL );
    if ( column != SCHEDULED_WIDTH
	 ||
	 row != SCHEDULED_HEIGHT )
    {
        warning_debug ( _("gsb_form_scheduler_create is called with a bad table,\n"
                          "the number of rows or columns is not good.\n"
                          "The function will resize the table to the correct values but "
                          "should check that warning."));
        gtk_table_resize ( GTK_TABLE (table), SCHEDULED_HEIGHT, SCHEDULED_WIDTH );
    }

    /* ok, now fill the form 
     * we play with height and width, but for now it's fix : 6 columns and 1 line */
    for ( row=0 ; row < SCHEDULED_HEIGHT ; row++ )
	for ( column=0 ; column < SCHEDULED_WIDTH ; column++ )
	{
	    gint element_number;
	    GtkWidget *widget = NULL;
	    const gchar *tooltip_text = NULL;
	    gchar *text_auto [] = { _("Manual"), _("Automatic"), NULL };
	    gchar *text_frequency [] = { _("Once"), _("Weekly"), _("Monthly"), _("Bimonthly"),
                        _("Quarterly"), _("Yearly"), _("Custom"), NULL };
	    gchar *text_frequency_user [] = { _("Days"), _("Weeks"), _("Months"), _("Years"), NULL };

	    element_number = row*SCHEDULED_WIDTH + column;

	    switch ( element_number )
	    {
		case SCHEDULED_FORM_ACCOUNT:
		    widget = gsb_account_create_combo_list ( G_CALLBACK ( gsb_form_scheduler_change_account ),
                        NULL, FALSE);
		    gtk_combo_box_set_active ( GTK_COMBO_BOX (widget), 0 );
		    tooltip_text = _("Choose the account");
		    break;

		case SCHEDULED_FORM_AUTO:
		    widget = gsb_combo_box_new_with_index ( text_auto, NULL, NULL );
		    tooltip_text = _("Automatic/manual scheduled transaction");
		    break;

		case SCHEDULED_FORM_FREQUENCY_BUTTON:
		    widget = gsb_combo_box_new_with_index ( text_frequency,
                        G_CALLBACK (gsb_form_scheduler_frequency_button_changed), NULL );
		    tooltip_text = _("Frequency");
		    break;

        case SCHEDULED_FORM_LIMIT_DATE:
            widget = gsb_calendar_entry_new (FALSE);
            g_signal_connect ( G_OBJECT (widget),
                        "button-press-event",
                        G_CALLBACK (gsb_form_scheduler_button_press_event),
                        GINT_TO_POINTER (element_number));
            g_signal_connect ( G_OBJECT (widget),
                        "focus-in-event",
                        G_CALLBACK (gsb_form_entry_get_focus),
                        GINT_TO_POINTER (element_number));
            g_signal_connect_after ( G_OBJECT (widget),
                        "focus-out-event",
                        G_CALLBACK (gsb_form_scheduler_entry_lose_focus),
                        GINT_TO_POINTER (element_number));
            tooltip_text = _("Limit date");
            break;

		case SCHEDULED_FORM_FREQUENCY_USER_ENTRY:
		    widget = gtk_entry_new ();
            g_signal_connect ( G_OBJECT (widget),
                        "focus-in-event",
                        G_CALLBACK (gsb_form_entry_get_focus),
                        GINT_TO_POINTER (element_number));
            g_signal_connect_after ( G_OBJECT (widget),
                        "focus-out-event",
                        G_CALLBACK (gsb_form_scheduler_entry_lose_focus),
                        GINT_TO_POINTER (element_number));
		    tooltip_text = _("Own frequency");
		    break;

		case SCHEDULED_FORM_FREQUENCY_USER_BUTTON:
		    widget = gsb_combo_box_new_with_index ( text_frequency_user,
							    NULL, NULL );
		    tooltip_text = _("Custom frequency");
		    break;
	    }

	    if (!widget)
            continue;

	    if (tooltip_text)
            gtk_widget_set_tooltip_text ( GTK_WIDGET (widget),
                        tooltip_text);

	    /* save the element */
	    element = g_malloc0 (sizeof (struct_element));
	    element -> element_number = element_number;
	    element -> element_widget = widget;
	    scheduled_element_list = g_slist_append ( scheduled_element_list,
                        element );

	    /* set in the form */
	    gtk_table_attach ( GTK_TABLE (table),
                        widget,
                        column, column+1,
                        row, row+1,
                        GTK_EXPAND | GTK_FILL,
                        GTK_EXPAND | GTK_FILL,
                        0, 0);
	}
    gsb_form_scheduler_clean ( );
    return FALSE;
}