/** * associate all transactions without fyear to the corresponding * fyear * * \param * * \return FALSE * */ gboolean gsb_fyear_config_associate_transactions ( void ) { GSList *list_tmp; gint modification_number = 0; if (!question_yes_no_hint ( _("Automatic association of financial years?"), _("This function assigns each transaction without a financial year to the one related to its transaction date. If no financial year matches, the transaction will not be changed."), GTK_RESPONSE_NO )) return FALSE; list_tmp = gsb_data_transaction_get_complete_transactions_list (); while ( list_tmp ) { gint transaction_number; transaction_number = gsb_data_transaction_get_transaction_number (list_tmp -> data); if (!gsb_data_transaction_get_financial_year_number (transaction_number)) { gint fyear_number; fyear_number = gsb_data_fyear_get_from_date (gsb_data_transaction_get_date (transaction_number)); if (fyear_number) { gsb_data_transaction_set_financial_year_number ( transaction_number, fyear_number ); modification_number++; } } list_tmp = list_tmp -> next; } if (modification_number) { gchar* tmpstr = g_strdup_printf (_("%d transactions associated"), modification_number); dialogue ( tmpstr ); g_free ( tmpstr ); transaction_list_update_element (ELEMENT_EXERCICE); gsb_file_set_modified ( TRUE ); } else dialogue ( _("no transaction to associate")); return FALSE; }
/** * called to remove a financial year, check before if * some transactions are associated with it and warn if yes * * \param tree_view * * \return FALSE * */ gboolean gsb_fyear_config_remove_fyear ( GtkWidget *tree_view ) { GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection; gint fyear_number; gboolean warning_showed = FALSE; GSList *tmp_list; selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (tree_view)); gtk_tree_selection_get_selected ( GTK_TREE_SELECTION (selection), &model, &iter ); gtk_tree_model_get ( GTK_TREE_MODEL (model), &iter, FYEAR_NUMBER_COLUMN, &fyear_number, -1 ); if (!fyear_number) return FALSE; /* first, we check if one transaction uses that financial year */ tmp_list = gsb_data_transaction_get_complete_transactions_list (); while (tmp_list) { gint transaction_number; transaction_number = gsb_data_transaction_get_transaction_number (tmp_list -> data); if ( fyear_number == gsb_data_transaction_get_financial_year_number (transaction_number)) { /* at the beginning warning_showed is FALSE and we show a warning, * if the user doesn't want to continue, we go out of the while so cannot come * here again ; but if he wants to continue, warning_showed is set to TRUE, we delete * the financial year and continue to come here to set the fyear of the * transactions to 0 */ if (warning_showed) gsb_data_transaction_set_financial_year_number (transaction_number, 0); else { gint result; result = question_yes_no_hint ( _("The selected financial year is used in the file"), _("If you really remove it, all the associated transactions will be without financial year.\nAre you sure?"), GTK_RESPONSE_NO ); if (result) { gsb_data_transaction_set_financial_year_number (transaction_number, 0); warning_showed = TRUE; } else break; } } tmp_list = tmp_list -> next; } /* if warning_showed is FALSE, it's because none transaction have that fyear, * or we answer NO to the warning but in that case, tmp_list is non NULL */ if (warning_showed || !tmp_list ) { gsb_data_fyear_remove (fyear_number); gtk_list_store_remove ( GTK_LIST_STORE (model), &iter ); gtk_widget_set_sensitive ( g_object_get_data ( G_OBJECT (model), "paddingbox_details" ), FALSE ); gtk_widget_set_sensitive ( g_object_get_data ( G_OBJECT (model), "remove_fyear_button" ), FALSE ); /* Update various menus */ gsb_fyear_update_fyear_list (); gsb_file_set_modified ( TRUE ); } return FALSE; }
/** that function delete the current account selected in the account properties * \param none * \return FALSE FALSE * */ gboolean gsb_account_delete ( void ) { gint deleted_account; gint page_number; GSList *list_tmp; gchar* tmpstr; deleted_account = gsb_gui_navigation_get_current_account (); tmpstr = g_strdup_printf (_("Delete account \"%s\"?"), gsb_data_account_get_name ( deleted_account ) ) ; if ( !question_yes_no_hint ( tmpstr, _("This will irreversibly remove this account and all operations " "that were previously contained. There is no undo for this. " "Usually it's a better way to close an account."), GTK_RESPONSE_NO )) { g_free ( tmpstr ); return FALSE; } g_free ( tmpstr ); /* if the last account, close the file */ if ( gsb_data_account_get_accounts_amount () == 1 ) { gsb_file_set_modified ( FALSE ); gsb_file_close (); return FALSE; } /* delete the schedules transactions on that account */ list_tmp = gsb_data_scheduled_get_scheduled_list (); while (list_tmp) { gint scheduled_number; scheduled_number = gsb_data_scheduled_get_scheduled_number ( list_tmp -> data ); if ( gsb_data_scheduled_get_account_number (scheduled_number) == deleted_account ) gsb_data_scheduled_remove_scheduled (scheduled_number); list_tmp = list_tmp -> next; } /* remove all the transactions of that account */ list_tmp = gsb_data_transaction_get_complete_transactions_list (); while (list_tmp) { gint transaction_number; transaction_number = gsb_data_transaction_get_transaction_number ( list_tmp -> data ); /* better to go to the next transaction now */ list_tmp = list_tmp -> next; if (gsb_data_transaction_get_account_number (transaction_number) == deleted_account) { gint contra_transaction_number; /* we are on a transaction on the deleted account, we delete that transaction, * but if it's a transfer, modify the contra-transaction to set transfer to deleted account */ contra_transaction_number = gsb_data_transaction_get_contra_transaction_number ( transaction_number); if (contra_transaction_number > 0) /* it's a transfer, modify the contra-transaction */ gsb_data_transaction_set_contra_transaction_number ( contra_transaction_number, -1); /* now can remove the transaction */ gsb_data_transaction_remove_transaction_without_check ( transaction_number ); } } /* delete the payment_number */ list_tmp = gsb_data_account_get_sort_list ( deleted_account ); while (list_tmp) { gpointer ptr; gint payment_number; ptr = list_tmp -> data; payment_number = GPOINTER_TO_INT ( ptr ); gsb_data_payment_remove ( payment_number ); list_tmp = list_tmp -> next; } /* delete the account */ gsb_data_account_delete ( deleted_account ); /* check gsb_gui_navigation_get_current_account () and gsb_gui_navigation_get_current_account ()_onglet and put them * on the first account if they are on the deleted account */ if ( gsb_gui_navigation_get_current_account () == deleted_account ) { GtkWidget *notebook_general; /* update the transaction list */ notebook_general = gsb_gui_get_general_notebook ( ); page_number = gtk_notebook_get_current_page ( GTK_NOTEBOOK ( notebook_general ) ); navigation_change_account ( gsb_data_account_first_number () ); gtk_notebook_set_current_page ( GTK_NOTEBOOK ( notebook_general ), page_number ); } /* update the buttons lists */ gsb_menu_update_accounts_in_menus(); /* Replace trees contents. */ categories_fill_list (); budgetary_lines_fill_list (); payees_fill_list (); /* update the categories in lists */ transaction_list_update_element (ELEMENT_CATEGORY); /* update the name of accounts in form */ gsb_account_update_combo_list ( gsb_form_scheduler_get_element_widget (SCHEDULED_FORM_ACCOUNT), FALSE ); gsb_scheduler_list_fill_list (gsb_scheduler_list_get_tree_view ()); mise_a_jour_liste_echeances_manuelles_accueil = 1; mise_a_jour_liste_comptes_accueil = 1; mise_a_jour_soldes_minimaux = 1; mise_a_jour_fin_comptes_passifs = 1; /* Update navigation pane. */ gsb_gui_navigation_remove_account ( deleted_account ); gsb_file_set_modified ( TRUE ); return FALSE; }