/** * append a new line to the tree_view and fill it with the * link given in param * * \param model * \param fyear_number * \param iter a pointer to an iter to fill it with the position of the new link, or NULL * * \return * */ void gsb_fyear_config_append_line ( GtkTreeModel *model, gint fyear_number, GtkTreeIter *iter_to_fill ) { gchar *invalid; GtkTreeIter local_iter; GtkTreeIter *iter_ptr; if (iter_to_fill) iter_ptr = iter_to_fill; else iter_ptr = &local_iter; if ( gsb_data_fyear_get_invalid (fyear_number)) invalid = GTK_STOCK_DIALOG_WARNING; else invalid = NULL; gtk_list_store_append ( GTK_LIST_STORE (model), iter_ptr ); gtk_list_store_set ( GTK_LIST_STORE (model), iter_ptr, FYEAR_NAME_COLUMN, gsb_data_fyear_get_name (fyear_number), FYEAR_BEGIN_DATE_COLUMN, gsb_format_gdate (gsb_data_fyear_get_beginning_date (fyear_number)), FYEAR_END_DATE_COLUMN, gsb_format_gdate (gsb_data_fyear_get_end_date (fyear_number)), FYEAR_INVALID_COLUMN, invalid, FYEAR_NUMBER_COLUMN, fyear_number, -1 ); }
/** * called when something change for a fyear * update the list and the invalid * * \param entry the entry wich change * \param tree_view the tree_view * * \return FALSE * */ gboolean gsb_fyear_config_modify_fyear ( GtkWidget *entry, GtkWidget *tree_view) { GtkTreeModel *model; GtkTreeIter iter; gint fyear_number; GtkWidget *widget; gchar *invalid; if (!gtk_tree_selection_get_selected ( GTK_TREE_SELECTION (gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view))), &model, &iter )) return FALSE; gtk_tree_model_get ( GTK_TREE_MODEL (model), &iter, FYEAR_NUMBER_COLUMN, &fyear_number, -1 ); /* normally should not happen */ if (!fyear_number) return FALSE; /* check the invalid and show the message if needed */ widget = g_object_get_data ( G_OBJECT (model), "invalid_label" ); /* check all the fyear to set them invalid if need */ gsb_fyear_update_invalid (tree_view); /* and check if the current fyear was set as invalid */ if (gsb_data_fyear_get_invalid (fyear_number)) { /* and now focus on the current fyear */ invalid = GTK_STOCK_DIALOG_WARNING; gtk_label_set_markup ( GTK_LABEL (widget), gsb_data_fyear_get_invalid_message (fyear_number)); gtk_widget_show (widget); } else { invalid = NULL; gtk_widget_hide (widget); } gtk_list_store_set ( GTK_LIST_STORE (model), &iter, FYEAR_NAME_COLUMN, gsb_data_fyear_get_name (fyear_number), FYEAR_BEGIN_DATE_COLUMN, gsb_format_gdate (gsb_data_fyear_get_beginning_date (fyear_number)), FYEAR_END_DATE_COLUMN, gsb_format_gdate (gsb_data_fyear_get_end_date (fyear_number)) , FYEAR_INVALID_COLUMN, invalid, FYEAR_NUMBER_COLUMN, fyear_number, -1 ); gsb_file_set_modified ( TRUE ); return FALSE; }
/** * callback called when something change in the entries of the configuration of the reconcile * * \param tree_view * * \return FALSE * */ gboolean gsb_reconcile_config_update_line ( GtkWidget *entry, GtkWidget *tree_view ) { GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection; gboolean good; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)); good = gtk_tree_selection_get_selected (selection, &model, &iter); if (good) { gint reconcile_number; gtk_tree_model_get (model, &iter, RECONCILIATION_RECONCILE_COLUMN, &reconcile_number, -1 ); if (reconcile_number) { /* we are on a reconcile, change the line with the new values */ gchar *init_date, *final_date; gchar *init_balance, *final_balance; init_date = gsb_format_gdate (gsb_data_reconcile_get_init_date (reconcile_number)); final_date = gsb_format_gdate (gsb_data_reconcile_get_final_date (reconcile_number)); init_balance = utils_real_get_string (gsb_data_reconcile_get_init_balance (reconcile_number)); final_balance = utils_real_get_string (gsb_data_reconcile_get_final_balance (reconcile_number)); gtk_tree_store_set ( GTK_TREE_STORE (model), &iter, RECONCILIATION_NAME_COLUMN, gsb_data_reconcile_get_name (reconcile_number), RECONCILIATION_INIT_DATE_COLUMN, init_date, RECONCILIATION_FINAL_DATE_COLUMN, final_date, RECONCILIATION_INIT_BALANCE_COLUMN, init_balance, RECONCILIATION_FINAL_BALANCE_COLUMN, final_balance, -1 ); g_free (init_date); g_free (final_date); g_free (init_balance); g_free (final_balance); } } return FALSE; }
/** * increase or decrease the date in the entry date * * \param entry * \param movement + or - ONE_DAY, ONE_WEEK, ONE_MONTH, ONE_YEAR * * \return * */ void gsb_calendar_entry_step_date ( GtkWidget *entry, gint movement ) { GDate *date; gchar *string; /* on commence par vérifier que la date est valide */ if ( !gsb_date_check_and_complete_entry ( entry, TRUE ) ) return; date = gsb_date_get_last_entry_date ( gtk_entry_get_text ( GTK_ENTRY ( entry ))); switch ( movement ) { case ONE_DAY : case ONE_WEEK : g_date_add_days ( date, movement ) ; break ; case -ONE_DAY : case -ONE_WEEK : g_date_subtract_days ( date, -movement ) ; break ; case ONE_MONTH : g_date_add_months ( date, 1 ) ; break ; case -ONE_MONTH : g_date_subtract_months ( date, 1 ) ; break ; case ONE_YEAR : g_date_add_years ( date, 1 ) ; break ; case -ONE_YEAR : g_date_subtract_years ( date, 1 ) ; break ; default : break ; } string = gsb_format_gdate (date); gtk_entry_set_text ( GTK_ENTRY ( entry ), string ); g_date_free (date); g_free (string); }
/** * function called when the user come to the manually association page * update the list of transactions to associate and fill the labels * * \param assistant * \param new_page * * \return FALSE * */ gboolean gsb_assistant_reconcile_config_update_manu_asso ( GtkWidget *assistant, gint new_page ) { gchar *string; GSList *tmp_list; gint transaction_number; GtkListStore *store; /* update the string containing the number of transactions to link */ string = g_strdup_printf (_("Still %d transactions to link with a reconciliation."), transactions_to_link); gtk_label_set_text ( GTK_LABEL (label_transactions_to_link_3), string); g_free (string); gtk_misc_set_alignment ( GTK_MISC (label_transactions_to_link_3), 0, 0.5 ); /* fill the list with the transactions to link */ store = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (treeview_transactions_to_link))); gtk_list_store_clear (GTK_LIST_STORE (store)); tmp_list = gsb_data_transaction_get_transactions_list (); while (tmp_list) { transaction_number = gsb_data_transaction_get_transaction_number (tmp_list -> data); if ( gsb_data_transaction_get_marked_transaction (transaction_number) == OPERATION_RAPPROCHEE && !gsb_data_transaction_get_reconcile_number (transaction_number)) { gchar *amount_str; gchar *date_str; GtkTreeIter iter; date_str = gsb_format_gdate (gsb_data_transaction_get_date (transaction_number)); amount_str = utils_real_get_string (gsb_data_transaction_get_amount (transaction_number)); gtk_list_store_append ( GTK_LIST_STORE (store), &iter ); gtk_list_store_set ( GTK_LIST_STORE (store), &iter, TRANSACTION_DATE, date_str, TRANSACTION_PAYEE, gsb_data_payee_get_name (gsb_data_transaction_get_party_number (transaction_number), TRUE), TRANSACTION_AMOUNT, amount_str, TRANSACTION_ACCOUNT, gsb_data_account_get_name (gsb_data_transaction_get_account_number (transaction_number)), TRANSACTION_NUMBER, transaction_number, -1 ); g_free (amount_str); g_free (date_str); } tmp_list = tmp_list -> next; } return FALSE; }
/** * append a new line to the tree_view and fill it with the * link given in param * * \param model * \param link_number * \param iter a pointer to an iter to fill it with the position of the new link, or NULL * * \return * */ void gsb_currency_link_config_append_line ( GtkTreeModel *model, gint link_number, GtkTreeIter *iter_to_fill ) { gchar *invalid; GtkTreeIter local_iter; GtkTreeIter *iter_ptr; gchar *tmpstr; gchar *strdate; if (iter_to_fill) iter_ptr = iter_to_fill; else iter_ptr = &local_iter; strdate = gsb_format_gdate ( gsb_data_currency_link_get_modified_date ( link_number ) ); if ( gsb_data_currency_link_get_invalid_link (link_number)) invalid = GTK_STOCK_DIALOG_WARNING; else invalid = NULL; tmpstr = utils_real_get_string (gsb_data_currency_link_get_change_rate (link_number)); gtk_list_store_append ( GTK_LIST_STORE ( model ), iter_ptr ); gtk_list_store_set ( GTK_LIST_STORE ( model ), iter_ptr, LINK_1_COLUMN, "1", LINK_CURRENCY1_COLUMN, gsb_data_currency_get_name (gsb_data_currency_link_get_first_currency(link_number)), LINK_EQUAL_COLUMN, "=", LINK_EXCHANGE_COLUMN, tmpstr, LINK_CURRENCY2_COLUMN, gsb_data_currency_get_name (gsb_data_currency_link_get_second_currency(link_number)), LINK_DATE_COLUMN, strdate, LINK_INVALID_COLUMN, invalid, LINK_NUMBER_COLUMN, link_number, -1 ); g_free ( tmpstr ); g_free ( strdate ); }
/** * set the date in the date entry * * \param entry * \param date a GDate or NULL to set nothing * * \return FALSE if problem, TRUE if ok * */ gboolean gsb_calendar_entry_set_date ( GtkWidget *entry, const GDate *date ) { gchar *string; if (!entry || !GTK_IS_ENTRY (entry)) return FALSE; if (!date || !g_date_valid (date)) { gtk_entry_set_text ( GTK_ENTRY (entry), "" ); return FALSE; } string = gsb_format_gdate ( date ); gtk_entry_set_text ( GTK_ENTRY ( entry ), string ); g_free ( string ); return TRUE; }
/** * finish the reconciliation, * called by a click on the finish button * * \param button * \param null * * \return FALSE */ gboolean gsb_reconcile_finish_reconciliation ( GtkWidget *button, gpointer null ) { GSList *list_tmp_transactions; GDate *date; gint account_number; gint reconcile_number; gsb_real real; gchar* tmpstr; account_number = gsb_gui_navigation_get_current_account (); if ( gsb_real_sub ( gsb_real_add ( utils_real_get_from_string (gtk_entry_get_text ( GTK_ENTRY ( reconcile_initial_balance_entry ))), gsb_data_account_calculate_waiting_marked_balance (account_number)), utils_real_get_from_string (gtk_entry_get_text ( GTK_ENTRY ( reconcile_final_balance_entry )))).mantissa != 0 ) { dialogue_warning_hint ( _("There is a variance in balances, check that both final balance and initial balance minus marked transactions are equal."), _("Reconciliation can't be completed.") ); return FALSE; } /* get and check the reconcile name */ reconcile_number = gsb_data_reconcile_get_number_by_name (gtk_entry_get_text ( GTK_ENTRY ( reconcile_number_entry ))); if (reconcile_number) { dialogue_warning_hint ( _("There is already a reconcile with that name, you must use another name or let it free.\nIf the reconcile name is ending by a number,\nit will be automatically incremented."), _("Reconciliation can't be completed.") ); return FALSE; } /* get and save the date */ date = gsb_calendar_entry_get_date (reconcile_new_date_entry); if (!date) { gchar* tmpstr = g_strdup_printf ( _("Invalid date: '%s'"), gtk_entry_get_text ( GTK_ENTRY ( reconcile_new_date_entry ))); dialogue_warning_hint ( tmpstr, _("Reconciliation can't be completed.") ); g_free ( tmpstr ); return FALSE; } if (!strlen (gtk_entry_get_text ( GTK_ENTRY ( reconcile_number_entry )))) { dialogue_warning_hint ( _("You need to set a name to the reconciliation ; at least, set a number,\nit will be automatically incremented later"), _("Reconciliation can't be completed.") ); return FALSE; } /* restore the good sort of the list */ if (transaction_list_sort_get_reconcile_sort ()) { gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (reconcile_sort_list_button), FALSE ); gsb_reconcile_list_button_clicked (reconcile_sort_list_button, NULL); } tmpstr = g_strdup_printf ( _("Last statement: %s"), gsb_format_gdate (date)); gtk_label_set_text ( GTK_LABEL ( label_last_statement ), tmpstr); g_free ( tmpstr ); /* create the new reconcile structure */ reconcile_number = gsb_data_reconcile_new (gtk_entry_get_text (GTK_ENTRY (reconcile_number_entry))); gsb_data_reconcile_set_account ( reconcile_number, account_number ); /* set the variables of the reconcile */ gsb_data_reconcile_set_final_date ( reconcile_number, date ); g_date_free (date); date = gsb_parse_date_string (gtk_label_get_text (GTK_LABEL (reconcile_last_date_label))); gsb_data_reconcile_set_init_date ( reconcile_number, date ); g_free (date); real = utils_real_get_from_string ( gtk_entry_get_text ( GTK_ENTRY ( reconcile_initial_balance_entry ) ) ); gsb_data_reconcile_set_init_balance ( reconcile_number, real ); real = utils_real_get_from_string ( gtk_entry_get_text ( GTK_ENTRY ( reconcile_final_balance_entry ) ) ); gsb_data_reconcile_set_final_balance ( reconcile_number, real ); /* modify the reconciled transactions */ list_tmp_transactions = gsb_data_transaction_get_transactions_list (); while ( list_tmp_transactions ) { gint transaction_number_tmp; transaction_number_tmp = gsb_data_transaction_get_transaction_number ( list_tmp_transactions -> data); if ( gsb_data_transaction_get_account_number (transaction_number_tmp) == account_number && ( gsb_data_transaction_get_marked_transaction (transaction_number_tmp) == OPERATION_POINTEE || gsb_data_transaction_get_marked_transaction (transaction_number_tmp) == OPERATION_TELERAPPROCHEE )) { gsb_data_transaction_set_marked_transaction ( transaction_number_tmp, OPERATION_RAPPROCHEE ); gsb_data_transaction_set_reconcile_number ( transaction_number_tmp, reconcile_number ); } list_tmp_transactions = list_tmp_transactions -> next; } /* update the P and T to R in the list */ transaction_list_update_element (ELEMENT_MARK); run.mise_a_jour_liste_comptes_accueil = TRUE; /* go back to the normal transactions list */ gsb_reconcile_cancel (NULL, NULL); /* reset records in run: to do after gsb_reconcile_cancel */ g_free (run.reconcile_final_balance); if (run.reconcile_new_date) g_date_free (run.reconcile_new_date); run.reconcile_final_balance = NULL; run.reconcile_new_date = NULL; run.reconcile_account_number = -1; gsb_file_set_modified ( TRUE ); if ( reconcile_save_last_scheduled_convert ) { gsb_gui_navigation_set_selection ( GSB_SCHEDULER_PAGE, 0, NULL ); gsb_scheduler_list_select ( reconcile_save_last_scheduled_convert ); gsb_scheduler_list_edit_transaction ( reconcile_save_last_scheduled_convert ); reconcile_save_last_scheduled_convert = 0; } return FALSE; }
/** * start the reconciliation, called by a click on the * reconcile button * * \param button the button we click to come here * \param null not used * * \return FALSE * */ gboolean gsb_reconcile_run_reconciliation ( GtkWidget *button, gpointer null ) { GDate *date; gint account_number; gint reconcile_number; gchar *label; gchar *string; gchar* tmpstr; account_number = gsb_gui_navigation_get_current_account (); reconcile_number = gsb_data_reconcile_get_account_last_number (account_number); label = gsb_reconcile_build_label ( reconcile_number ); gtk_entry_set_text ( GTK_ENTRY ( reconcile_number_entry ), label ); g_free ( label ); /* reset records in run structure if user has changed of account */ if (run.reconcile_account_number != account_number) { g_free (run.reconcile_final_balance); if (run.reconcile_new_date) g_date_free (run.reconcile_new_date); run.reconcile_final_balance = NULL; run.reconcile_new_date = NULL; run.reconcile_account_number = -1; } /* set last input date/amount if available */ if (run.reconcile_new_date) { date = run.reconcile_new_date; } else { /* increase the last date of 1 month */ date = gsb_date_copy (gsb_data_reconcile_get_final_date (reconcile_number)); if (date) { GDate *today; gchar *string ; string = gsb_format_gdate ( date ); gtk_label_set_text ( GTK_LABEL ( reconcile_last_date_label ), string); gtk_widget_set_sensitive ( GTK_WIDGET ( reconcile_last_date_label ), FALSE ); g_free (string); g_date_add_months ( date, 1 ); /* if etat.reconcile_end_date or the new date is after today, set today */ today = gdate_today(); if ( etat.reconcile_end_date || g_date_compare ( date, today) > 0 ) { g_date_free (date); date = gdate_today(); } else g_date_free (today); /* it's not the first reconciliation, set the old balance and unsensitive the old balance entry */ tmpstr = utils_real_get_string (gsb_data_reconcile_get_final_balance (reconcile_number)); gtk_entry_set_text ( GTK_ENTRY ( reconcile_initial_balance_entry ), tmpstr); g_free ( tmpstr ); gtk_widget_set_sensitive ( GTK_WIDGET ( reconcile_initial_balance_entry ), FALSE ); } else { gtk_label_set_text ( GTK_LABEL ( reconcile_last_date_label ), _("None") ); date = gdate_today(); /* it's the first reconciliation, set the initial balance and make sensitive the old balance to change * it if necessary */ tmpstr = utils_real_get_string ( gsb_data_account_get_init_balance (account_number, -1)); gtk_entry_set_text ( GTK_ENTRY ( reconcile_initial_balance_entry ), tmpstr); g_free ( tmpstr ); gtk_widget_set_sensitive ( GTK_WIDGET ( reconcile_initial_balance_entry ), TRUE ); } } string = gsb_format_gdate (date); gtk_entry_set_text ( GTK_ENTRY ( reconcile_new_date_entry ), string ); g_free (string); g_date_free (date); /* set last input amount if available and if the account is the good one */ gtk_entry_set_text ( GTK_ENTRY ( reconcile_final_balance_entry ), (run.reconcile_final_balance) ? run.reconcile_final_balance : ""); g_free(run.reconcile_final_balance); /* set the title */ tmpstr = g_markup_printf_escaped ( _(" <b>%s reconciliation</b> "), gsb_data_account_get_name (account_number)); gtk_label_set_markup ( GTK_LABEL (gtk_frame_get_label_widget (GTK_FRAME (reconcile_panel))), tmpstr ); g_free ( tmpstr ); /* we go to the reconciliation mode */ run.equilibrage = 1; /* set all the balances for reconciliation */ gsb_reconcile_update_amounts (NULL, NULL); /* set the transactions list to reconciliation mode */ /* only change the current account */ reconcile_save_account_display = etat.retient_affichage_par_compte; etat.retient_affichage_par_compte = 1; /* hide the marked R transactions */ reconcile_save_show_marked = gsb_data_account_get_r (account_number); if (reconcile_save_show_marked) { gsb_data_account_set_r (account_number, FALSE ); mise_a_jour_affichage_r (FALSE); } /* 1 line on the transaction list */ reconcile_save_rows_number = gsb_data_account_get_nb_rows (account_number); if (reconcile_save_rows_number != 1) gsb_transactions_list_set_visible_rows_number ( 1 ); /* sort by method of payment if in conf */ if (gsb_data_account_get_reconcile_sort_type (account_number)) gtk_toggle_button_set_active ( GTK_TOGGLE_BUTTON (reconcile_sort_list_button), TRUE ); gtk_widget_show_all ( reconcile_panel ); transaction_list_show_toggle_mark (TRUE); /* unsensitive all that could change the account number */ gsb_reconcile_sensitive (FALSE); gtk_widget_grab_focus ( GTK_WIDGET ( reconcile_number_entry ) ); return FALSE; }
/** * callback called by the button to launch the automatic association * between transactions and reconcile * * \param button * \param assistant * * \return FALSE * */ static gboolean gsb_assistant_reconcile_config_lauch_manu_asso ( GtkWidget *button, GtkWidget *assistant ) { GList *tmp_list; GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection; GList *path_list; gint account_number = -1; GtkWidget *dialog; GtkWidget *label; GtkWidget *scrolled_window; GtkWidget *dialog_tree_view; GtkListStore *dialog_store; gint return_value; gint i; enum dialog_column { DIALOG_NAME = 0, DIALOG_INIT_DATE, DIALOG_FINAL_DATE, DIALOG_RECONCILE_NUMBER, DIALOG_NB_COL }; gint selected_reconcile_number; gint transaction_number; /* get the selection */ selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (treeview_transactions_to_link)); /* get the selected transactions */ path_list = gtk_tree_selection_get_selected_rows ( GTK_TREE_SELECTION (selection), &model ); if (!path_list) return FALSE; /* ok, we have a selection, before continuing, * we check that all the transactions are on the same account */ tmp_list = path_list; while (tmp_list) { GtkTreePath *path; path = tmp_list -> data; if (gtk_tree_model_get_iter ( GTK_TREE_MODEL (model), &iter, path )) { gtk_tree_model_get ( GTK_TREE_MODEL (model), &iter, TRANSACTION_NUMBER, &transaction_number, -1 ); if (account_number == -1) account_number = gsb_data_transaction_get_account_number (transaction_number); else { if (gsb_data_transaction_get_account_number (transaction_number) != account_number) { dialogue_error (_("All the selected transactions have to belong to the same account !")); /* erase the path_list */ g_list_foreach (path_list, (GFunc) gtk_tree_path_free, NULL); g_list_free (path_list); return FALSE; } } } tmp_list = tmp_list -> next; } if (account_number == -1) { /* erase the path_list */ g_list_foreach (path_list, (GFunc) gtk_tree_path_free, NULL); g_list_free (path_list); return FALSE; } /* ok, all the transactions belong to the same account, we can * show a dialog to select the reconcile */ dialog = gtk_dialog_new_with_buttons ( _("Selection of a reconciliation"), GTK_WINDOW ( assistant ), GTK_DIALOG_MODAL | GTK_DIALOG_DESTROY_WITH_PARENT, "gtk-cancel", GTK_RESPONSE_CANCEL, "gtk-ok", GTK_RESPONSE_OK, NULL ); gtk_window_set_default_size ( GTK_WINDOW ( dialog ), 770, 412 ); gtk_window_set_position ( GTK_WINDOW ( dialog ), GTK_WIN_POS_CENTER_ON_PARENT ); gtk_window_set_resizable ( GTK_WINDOW ( dialog ), TRUE ); gtk_container_set_border_width ( GTK_CONTAINER ( dialog ), 12 ); label = gtk_label_new ( _("Select the reconciliation to associate to the selected transactions: ") ); gtk_misc_set_alignment ( GTK_MISC ( label ), 0.0, 0.0 ); gtk_box_pack_start ( GTK_BOX ( dialog_get_content_area ( dialog ) ), label, FALSE, FALSE, 10 ); /* make the list */ scrolled_window = gtk_scrolled_window_new (FALSE, FALSE); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_box_pack_start ( GTK_BOX ( dialog_get_content_area ( dialog ) ), scrolled_window, TRUE, TRUE, 0 ); dialog_store = gtk_list_store_new ( DIALOG_NB_COL, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT ); dialog_tree_view = gtk_tree_view_new_with_model (GTK_TREE_MODEL (dialog_store)); g_object_unref (G_OBJECT(dialog_store)); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (dialog_tree_view), TRUE); gtk_container_add ( GTK_CONTAINER (scrolled_window), dialog_tree_view ); /* set the columns */ for (i=DIALOG_NAME ; i<DIALOG_RECONCILE_NUMBER ; i++) { GtkTreeViewColumn *column; GtkCellRenderer *cell; gchar *titles[] = { _("Reconciliation reference"), _("Initial date"), _("Final date") }; gfloat alignment[] = { COLUMN_LEFT, COLUMN_CENTER, COLUMN_CENTER }; cell = gtk_cell_renderer_text_new (); g_object_set ( G_OBJECT (cell), "xalign", alignment[i], NULL ); column = gtk_tree_view_column_new (); gtk_tree_view_column_set_sizing ( column, GTK_TREE_VIEW_COLUMN_AUTOSIZE ); gtk_tree_view_column_set_alignment ( column, alignment[i] ); gtk_tree_view_column_pack_start ( column, cell, TRUE ); gtk_tree_view_column_set_title ( column, titles[i] ); gtk_tree_view_column_set_attributes (column, cell, "text", i, NULL); gtk_tree_view_column_set_expand ( column, TRUE ); gtk_tree_view_column_set_resizable ( column, TRUE ); gtk_tree_view_append_column ( GTK_TREE_VIEW(dialog_tree_view), column); } /* fill the tree view */ tmp_list = gsb_data_reconcile_get_reconcile_list (); while (tmp_list) { gint reconcile_number; reconcile_number = gsb_data_reconcile_get_no_reconcile (tmp_list -> data); if (gsb_data_reconcile_get_account (reconcile_number) == account_number) { gchar *init_date_str; gchar *final_date_str; init_date_str = gsb_format_gdate (gsb_data_reconcile_get_init_date (reconcile_number)); final_date_str = gsb_format_gdate (gsb_data_reconcile_get_final_date (reconcile_number)); gtk_list_store_append ( GTK_LIST_STORE (dialog_store), &iter ); gtk_list_store_set ( GTK_LIST_STORE (dialog_store), &iter, DIALOG_NAME, gsb_data_reconcile_get_name (reconcile_number), DIALOG_INIT_DATE, init_date_str, DIALOG_FINAL_DATE, final_date_str, DIALOG_RECONCILE_NUMBER, reconcile_number, -1 ); g_free (init_date_str); g_free (final_date_str); } tmp_list = tmp_list -> next; } gtk_widget_show_all (dialog); /* launch the dialog */ return_value = gtk_dialog_run (GTK_DIALOG (dialog)); if (return_value != GTK_RESPONSE_OK) { gtk_widget_destroy (dialog); return FALSE; } /* we get the selected reconcile */ if (!gtk_tree_selection_get_selected ( gtk_tree_view_get_selection (GTK_TREE_VIEW (dialog_tree_view)), NULL, &iter )) { dialogue_warning (_("No selection found, the transactions are not modified.")); gtk_widget_destroy (dialog); return FALSE; } gtk_tree_model_get ( GTK_TREE_MODEL (dialog_store), &iter, DIALOG_RECONCILE_NUMBER, &selected_reconcile_number, -1 ); /* ok we have the reconcile number, we can destroy the dialog */ gtk_widget_destroy (dialog); /* and now, fill the selected transactions with that reconcile number */ tmp_list = g_list_last (path_list); while (tmp_list) { GtkTreePath *path; path = tmp_list -> data; if (gtk_tree_model_get_iter ( GTK_TREE_MODEL (model), &iter, path )) { gtk_tree_model_get ( GTK_TREE_MODEL (model), &iter, TRANSACTION_NUMBER, &transaction_number, -1 ); gtk_list_store_remove ( GTK_LIST_STORE (model), &iter ); gsb_data_transaction_set_reconcile_number ( transaction_number, selected_reconcile_number ); transactions_to_link--; } tmp_list = tmp_list -> prev; } /* erase the path_list */ g_list_foreach (path_list, (GFunc) gtk_tree_path_free, NULL); g_list_free (path_list); /* now there is 2 way : * either transactions_to_link is 0, we go directly to the succes page * either it's not null, and the user should create more reconciles */ if (transactions_to_link) { gchar *string; /* update the labels */ string = g_strdup_printf (_("Still %d transactions to link with a reconciliation."), transactions_to_link); gtk_label_set_text ( GTK_LABEL (label_transactions_to_link_1), string); gtk_label_set_text ( GTK_LABEL (label_transactions_to_link_3), string); g_free (string); gtk_widget_grab_focus (treeview_transactions_to_link); } else { /* go to the success page */ gsb_assistant_set_next ( assistant, RECONCILE_ASSISTANT_MANUALLY_ASSOCIATE, RECONCILE_ASSISTANT_SUCCESS ); gsb_assistant_next_page (assistant); } return FALSE; }
/** * called when something change for a link * * \param tree_view the tree_view * * \return FALSE * */ gboolean gsb_currency_link_config_modify_link ( GtkWidget *tree_view ) { GtkWidget *combobox_1; GtkWidget *combobox_2; GtkWidget *exchange_entry; GtkTreeModel *model; GtkTreeIter iter; gint link_number; gchar *invalid; GtkWidget *label; gchar* tmpstr; gchar *strdate; gsb_real number; if ( !gtk_tree_selection_get_selected ( gtk_tree_view_get_selection ( GTK_TREE_VIEW ( tree_view ) ), &model, &iter ) ) return FALSE; gtk_tree_model_get ( GTK_TREE_MODEL (model), &iter, LINK_NUMBER_COLUMN, &link_number, -1 ); /* normally should not happen */ if (!link_number) return FALSE; combobox_1 = g_object_get_data ( G_OBJECT (model), "combobox_1" ); combobox_2 = g_object_get_data ( G_OBJECT (model), "combobox_2" ); exchange_entry = g_object_get_data ( G_OBJECT (model), "exchange_entry" ); number = utils_real_get_from_string ( gtk_entry_get_text ( GTK_ENTRY (exchange_entry) ) ); if ( number.exponent > 8 ) gtk_entry_set_max_length (GTK_ENTRY (exchange_entry), strlen( gtk_entry_get_text ( GTK_ENTRY ( exchange_entry ) ) - 1) ); gsb_data_currency_link_set_first_currency ( link_number, gsb_currency_get_currency_from_combobox (combobox_1)); gsb_data_currency_link_set_second_currency ( link_number, gsb_currency_get_currency_from_combobox (combobox_2)); gsb_data_currency_link_set_change_rate ( link_number, number ); gsb_data_currency_link_set_modified_date ( link_number, gdate_today ( ) ); strdate = gsb_format_gdate ( gsb_data_currency_link_get_modified_date ( link_number ) ); if ( gsb_data_currency_link_get_invalid_link (link_number)) invalid = GTK_STOCK_DIALOG_WARNING; else invalid = NULL; tmpstr = utils_real_get_string ( gsb_data_currency_link_get_change_rate ( link_number ) ); gtk_list_store_set ( GTK_LIST_STORE (model), &iter, LINK_CURRENCY1_COLUMN, gsb_data_currency_get_name (gsb_data_currency_link_get_first_currency(link_number)), LINK_EXCHANGE_COLUMN, tmpstr, LINK_CURRENCY2_COLUMN, gsb_data_currency_get_name (gsb_data_currency_link_get_second_currency(link_number)), LINK_DATE_COLUMN, strdate, LINK_INVALID_COLUMN, invalid, -1 ); g_free ( tmpstr ); g_free ( strdate ); /* set or hide the warning label */ label = g_object_get_data (G_OBJECT (model), "warning_label"); if ( gsb_data_currency_link_get_invalid_link (link_number)) { gtk_label_set_markup ( GTK_LABEL (label), gsb_data_currency_link_get_invalid_message (link_number)); gtk_widget_show (label); } else gtk_widget_hide (label); gsb_file_set_modified ( TRUE ); gsb_gui_navigation_update_home_page ( ); return FALSE; }
/** * create the page 2 of the assistant * this page permit to choose the archive to export * * \param assistant the GtkWidget assistant * * \return a GtkWidget containing the page * */ static GtkWidget *gsb_assistant_archive_export_page_choose ( GtkWidget *assistant ) { GtkWidget *vbox_page, *scrolled_window; GtkWidget *paddingbox; GtkListStore *archive_model; gchar *titles[] = { "", _("Name"), _("Initial date"), _("Final date"), _("Financial year"), _("Report name") }; gfloat alignment[] = { COLUMN_CENTER, COLUMN_LEFT, COLUMN_CENTER, COLUMN_CENTER , COLUMN_CENTER, COLUMN_CENTER }; gint i; GSList *tmp_list; /* create the page */ vbox_page = gtk_vbox_new ( FALSE, 0); gtk_container_set_border_width ( GTK_CONTAINER(vbox_page), 12 ); paddingbox = new_paddingbox_with_title (vbox_page, TRUE, _("Select the archive to export")); /* Create scrolled window */ scrolled_window = gtk_scrolled_window_new ( NULL, NULL ); gtk_scrolled_window_set_policy ( GTK_SCROLLED_WINDOW ( scrolled_window ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); gtk_scrolled_window_set_shadow_type ( GTK_SCROLLED_WINDOW ( scrolled_window ), GTK_SHADOW_IN); gtk_box_pack_start ( GTK_BOX (paddingbox), scrolled_window, TRUE, TRUE, 0 ); /* Create tree view */ archive_model = gtk_list_store_new (NUM_ARCHIVES_EXPORT_COLUMNS, G_TYPE_BOOLEAN, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT ); archive_export_treeview = gtk_tree_view_new_with_model ( GTK_TREE_MODEL (archive_model) ); gtk_tree_view_set_rules_hint (GTK_TREE_VIEW (archive_export_treeview), TRUE); gtk_container_add ( GTK_CONTAINER (scrolled_window), archive_export_treeview ); /* set the columns */ for (i=0 ; i<6 ; i++) { GtkTreeViewColumn *column; GtkCellRenderer *renderer; column = gtk_tree_view_column_new (); gtk_tree_view_column_set_sizing ( column, GTK_TREE_VIEW_COLUMN_AUTOSIZE ); gtk_tree_view_column_set_alignment ( column, alignment[i] ); gtk_tree_view_column_set_title ( column, titles[i] ); gtk_tree_view_column_set_expand ( column, TRUE ); gtk_tree_view_column_set_resizable ( column, TRUE ); if (i) { /* we are on a text column */ renderer = gtk_cell_renderer_text_new (); g_object_set ( G_OBJECT (renderer), "xalign", alignment[i], NULL ); gtk_tree_view_column_pack_start ( column, renderer, TRUE ); gtk_tree_view_column_set_attributes (column, renderer, "text", i, NULL); } else { /* we are on the select column */ renderer = gtk_cell_renderer_toggle_new (); g_signal_connect (renderer, "toggled", G_CALLBACK (gsb_assistant_archive_export_toggled), assistant ); gtk_tree_view_column_pack_start ( column, renderer, TRUE ); gtk_tree_view_column_set_attributes (column, renderer, "active", i, NULL); } gtk_tree_view_append_column ( GTK_TREE_VIEW(archive_export_treeview), column); } /* fill the list */ tmp_list = gsb_data_archive_get_archives_list (); while ( tmp_list ) { gint archive_number; GtkTreeIter iter; gchar *init_date; gchar *final_date; archive_number = gsb_data_archive_get_no_archive (tmp_list -> data); init_date = gsb_format_gdate (gsb_data_archive_get_beginning_date (archive_number)); final_date = gsb_format_gdate (gsb_data_archive_get_end_date (archive_number)); gtk_list_store_append ( GTK_LIST_STORE (archive_model), &iter ); gtk_list_store_set ( GTK_LIST_STORE (archive_model), &iter, ARCHIVES_EXPORT_NAME_COLUMN, gsb_data_archive_get_name (archive_number), ARCHIVES_EXPORT_INIT_DATE, init_date, ARCHIVES_EXPORT_FINAL_DATE, final_date, ARCHIVES_EXPORT_FYEAR_NAME, gsb_data_fyear_get_name (gsb_data_archive_get_fyear (archive_number)), ARCHIVES_EXPORT_REPORT_TITLE, gsb_data_archive_get_report_title (archive_number), ARCHIVES_EXPORT_NUMBER, archive_number, -1 ); if (init_date) g_free (init_date); if (final_date) g_free (final_date); tmp_list = tmp_list -> next; } gtk_widget_show_all (vbox_page); return ( vbox_page ); }
/** * fill the reconcile list, * sort each reconcile in its account * * \param * * \return * */ void gsb_reconcile_config_fill ( void ) { GtkTreeModel *model; GSList *tmp_list; GrisbiWinEtat *w_etat; if (!reconcile_treeview) return; w_etat = (GrisbiWinEtat *) grisbi_win_get_w_etat (); model = gtk_tree_view_get_model ( GTK_TREE_VIEW (reconcile_treeview)); gtk_tree_store_clear (GTK_TREE_STORE(model)); /* we make a tree_model containing the accounts, * and for each account, all the reconciles */ tmp_list = gsb_data_account_get_list_accounts (); while (tmp_list) { gint account_number; GtkTreeIter account_iter; GList *reconcile_list; account_number = gsb_data_account_get_no_account (tmp_list -> data); gtk_tree_store_append ( GTK_TREE_STORE (model), &account_iter, NULL ); gtk_tree_store_set ( GTK_TREE_STORE (model), &account_iter, RECONCILIATION_NAME_COLUMN, gsb_data_account_get_name (account_number), RECONCILIATION_WEIGHT_COLUMN, 800, RECONCILIATION_ACCOUNT_COLUMN, account_number, -1 ); /* for each account, get the concerned reconciles */ reconcile_list = gsb_data_reconcile_get_sort_reconcile_list (account_number); if (w_etat->reconcile_sort) reconcile_list = g_list_reverse (reconcile_list); while (reconcile_list) { gint reconcile_number; reconcile_number = GPOINTER_TO_INT (reconcile_list->data); if (gsb_data_reconcile_get_account (reconcile_number) == account_number) { GtkTreeIter reconcile_iter; gchar *init_date, *final_date; gchar *init_balance, *final_balance; init_date = gsb_format_gdate (gsb_data_reconcile_get_init_date (reconcile_number)); final_date = gsb_format_gdate (gsb_data_reconcile_get_final_date (reconcile_number)); init_balance = utils_real_get_string (gsb_data_reconcile_get_init_balance (reconcile_number)); final_balance = utils_real_get_string (gsb_data_reconcile_get_final_balance (reconcile_number)); gtk_tree_store_append ( GTK_TREE_STORE (model), &reconcile_iter, &account_iter ); gtk_tree_store_set ( GTK_TREE_STORE (model), &reconcile_iter, RECONCILIATION_NAME_COLUMN, gsb_data_reconcile_get_name (reconcile_number), RECONCILIATION_WEIGHT_COLUMN, 400, RECONCILIATION_INIT_DATE_COLUMN, init_date, RECONCILIATION_FINAL_DATE_COLUMN, final_date, RECONCILIATION_INIT_BALANCE_COLUMN, init_balance, RECONCILIATION_FINAL_BALANCE_COLUMN, final_balance, RECONCILIATION_RECONCILE_COLUMN, reconcile_number, RECONCILIATION_ACCOUNT_COLUMN, account_number, -1 ); g_free (init_date); g_free (final_date); g_free (init_balance); g_free (final_balance); } reconcile_list = reconcile_list -> next; } tmp_list = tmp_list -> next; } }
gchar *etats_titre ( gint report_number) { gchar *titre; GDate *today_date; titre = gsb_data_report_get_report_name (report_number); today_date = gdate_today (); if ( gsb_data_report_get_use_financial_year (report_number)) { GSList *tmp_list; gint fyear_number; gint last_fyear_number; switch (gsb_data_report_get_financial_year_type (report_number)) { case 0: /* all the financial years */ titre = g_strconcat ( titre, ", ", _("all financial years"), NULL ); break; case 1: /* current financial year */ fyear_number = gsb_data_fyear_get_from_date (today_date); if (fyear_number) titre = g_strconcat ( titre, ", ", _("current financial year") , " (", gsb_data_fyear_get_name (fyear_number), ")", NULL ); else titre = g_strconcat ( titre, ", ", _("current financial year"), NULL ); break; case 2: /* last financial year */ fyear_number = gsb_data_fyear_get_from_date (today_date); last_fyear_number = 0; tmp_list = gsb_data_fyear_get_fyears_list (); while (tmp_list) { gint tmp_fyear_number; tmp_fyear_number = gsb_data_fyear_get_no_fyear (tmp_list -> data); if (gsb_data_fyear_compare (fyear_number, tmp_fyear_number) == 1) { if (last_fyear_number) { if (gsb_data_fyear_compare (last_fyear_number, tmp_fyear_number) == -1) last_fyear_number = tmp_fyear_number; } else { last_fyear_number = tmp_fyear_number; } } tmp_list = tmp_list -> next; } /* here, last_fyear_number is on the last financial year */ if (last_fyear_number) titre = g_strconcat ( titre, ", ", _("former financial year") , " (", gsb_data_fyear_get_name (last_fyear_number), ")", NULL ); else titre = g_strconcat ( titre, ", ", _("former financial year"), NULL ); break; case 3: /* personal selection of financial years */ tmp_list = gsb_data_report_get_financial_year_list (report_number); if ( g_slist_length ( tmp_list ) > 1 ) titre = g_strconcat ( titre, ", ", _("financial years"), " ", NULL ); else titre = g_strconcat ( titre, ", ", _("financial year"), " ", NULL ); while ( tmp_list ) { gint fyear_number; fyear_number = GPOINTER_TO_INT (tmp_list -> data); if ( tmp_list == g_slist_last (gsb_data_report_get_financial_year_list (report_number))) titre = g_strconcat ( titre, gsb_data_fyear_get_name (fyear_number), NULL ); else titre = g_strconcat ( titre, gsb_data_fyear_get_name (fyear_number), ", ", NULL ); tmp_list = tmp_list -> next; } break; } } else { /* c'est une plage de dates qui a été entrée */ gchar buffer_date[15]; gchar buffer_date_2[15]; GDate *date_tmp; switch ( gsb_data_report_get_date_type (report_number)) { case 0: /* toutes */ titre = g_strconcat ( titre, ", ", _("all dates"), NULL ); break; case 1: /* plage perso */ if ( gsb_data_report_get_personal_date_start (report_number) && gsb_data_report_get_personal_date_end (report_number)) titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("Result from %s to %s"), gsb_format_gdate ( gsb_data_report_get_personal_date_start (report_number)), gsb_format_gdate ( gsb_data_report_get_personal_date_end (report_number)) ), NULL ); else titre = g_strconcat ( titre, ", ", _("Custom dates ranges not filled"), NULL ); break; case 2: /* cumul à ce jour */ titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("total at %s"), gsb_format_gdate (today_date)), NULL ); break; case 3: /* mois en cours */ g_date_strftime ( buffer_date, 14, "%B", today_date ); titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("%s %d"), buffer_date, g_date_get_year (today_date)), NULL ); break; case 4: /* année en cours */ titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("year %d"), g_date_get_year (today_date)), NULL ); break; case 5: /* cumul mensuel */ titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("month total at %s"), gsb_format_gdate (today_date)), NULL ); break; case 6: /* cumul annuel */ titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("year total at %s"), gsb_format_gdate (today_date)), NULL ); break; case 7: /* mois précédent */ g_date_subtract_months ( today_date, 1 ); g_date_strftime ( buffer_date, 14, "%B", today_date ); titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("%s %d"), buffer_date, g_date_get_year (today_date)), NULL ); break; case 8: /* année précédente */ titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("year %d"), g_date_get_year (today_date) - 1), NULL ); break; case 9: /* 30 derniers jours */ date_tmp = gdate_today ( ); g_date_subtract_days ( date_tmp, 30 ); titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("Result from %s to %s"), gsb_format_gdate ( date_tmp ), gsb_format_gdate (today_date)), NULL ); break; case 10: /* 3 derniers mois */ date_tmp = gdate_today ( ); g_date_subtract_months ( date_tmp, 3 ); g_date_strftime ( buffer_date_2, 14, "%B", date_tmp ); g_date_strftime ( buffer_date, 14, "%B", today_date); titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("from %s %d"), buffer_date_2, g_date_get_year ( date_tmp )), " ", g_strdup_printf ( _("to %s %d"), buffer_date, g_date_get_year (today_date)), NULL ); break; case 11: /* 6 derniers mois */ date_tmp = gdate_today ( ); g_date_subtract_months ( date_tmp, 6 ); g_date_strftime ( buffer_date_2, 14, "%B", date_tmp ); g_date_strftime ( buffer_date, 14, "%B", today_date); titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("from %s %d"), buffer_date_2, g_date_get_year ( date_tmp )), " ", g_strdup_printf ( _("to %s %d"), buffer_date, g_date_get_year (today_date)), NULL ); break; case 12: /* 12 derniers mois */ date_tmp = gdate_today ( ); g_date_subtract_months ( date_tmp, 12 ); g_date_strftime ( buffer_date_2, 14, "%B", date_tmp ); g_date_strftime ( buffer_date, 14, "%B", today_date); titre = g_strconcat ( titre, ", ", g_strdup_printf ( _("from %s %d"), buffer_date_2, g_date_get_year ( date_tmp )), " ", g_strdup_printf ( _("to %s %d"), buffer_date, g_date_get_year (today_date)), NULL ); break; } } return titre; }