gint gsb_data_mix_get_account_number ( gint transaction_number, gboolean is_transaction ) { if ( is_transaction ) return ( gsb_data_transaction_get_account_number ( transaction_number ) ); else return (gsb_data_scheduled_get_account_number ( transaction_number ) ); }
/** * set the scheduler part of the form from the scheduled transaction given in param * * \param scheduled_number * * \return FALSE * */ gboolean gsb_form_scheduler_set ( gint scheduled_number ) { devel_debug_int (scheduled_number); gsb_form_scheduler_sensitive_buttons (TRUE); /* if we are on a white split line, set all as the mother */ if (scheduled_number < -1) scheduled_number = gsb_data_scheduled_get_mother_scheduled_number (scheduled_number); gsb_form_scheduler_set_account ( gsb_data_scheduled_get_account_number (scheduled_number)); gsb_form_scheduler_set_auto ( gsb_data_scheduled_get_automatic_scheduled (scheduled_number)); gsb_form_scheduler_set_frequency ( gsb_data_scheduled_get_frequency (scheduled_number)); gsb_form_scheduler_set_limit_date ( gsb_data_scheduled_get_limit_date (scheduled_number)); gsb_form_scheduler_set_frequency_user ( gsb_data_scheduled_get_user_entry (scheduled_number)); gsb_form_scheduler_set_frequency_user_button ( gsb_data_scheduled_get_user_interval (scheduled_number)); 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; }
/** * create a new transaction and fill it directly from a scheduled transaction * (don't pass throw the form) * if it's a child of split, append it automatickly to the mother * * \param scheduled_number the transaction we use to fill the new transaction * \param transaction_mother the number of the mother if it's a split child, 0 else * * \return the number of the new transaction * */ gint gsb_scheduler_create_transaction_from_scheduled_transaction ( gint scheduled_number, gint transaction_mother ) { gint transaction_number, payment_number; gint account_number; account_number = gsb_data_scheduled_get_account_number (scheduled_number); transaction_number = gsb_data_transaction_new_transaction (account_number); /* begin to fill the new transaction */ gsb_data_transaction_set_date ( transaction_number, gsb_date_copy (gsb_data_scheduled_get_date (scheduled_number))); gsb_data_transaction_set_party_number ( transaction_number, gsb_data_scheduled_get_party_number (scheduled_number)); gsb_data_transaction_set_amount ( transaction_number, gsb_data_scheduled_get_amount (scheduled_number)); gsb_data_transaction_set_currency_number ( transaction_number, gsb_data_scheduled_get_currency_number (scheduled_number)); gsb_data_transaction_set_account_number ( transaction_number, account_number ); /* ask for change if necessary, only for normal transaction ; a child must have the same currency number * than the mother */ if (!transaction_mother) gsb_currency_check_for_change ( transaction_number ); gsb_data_transaction_set_method_of_payment_number ( transaction_number, gsb_data_scheduled_get_method_of_payment_number (scheduled_number)); gsb_data_transaction_set_notes ( transaction_number, gsb_data_scheduled_get_notes (scheduled_number)); payment_number = gsb_data_scheduled_get_method_of_payment_number (scheduled_number); if ( payment_number ) { if (gsb_data_payment_get_show_entry (payment_number)) { if (gsb_data_payment_get_automatic_numbering (payment_number)) { gchar* tmpstr; tmpstr = gsb_data_payment_incremente_last_number ( payment_number, 1 ); gsb_data_transaction_set_method_of_payment_content ( transaction_number, tmpstr); gsb_data_payment_set_last_number ( payment_number, tmpstr ); g_free ( tmpstr ); } else gsb_data_transaction_set_method_of_payment_content ( transaction_number, gsb_data_scheduled_get_method_of_payment_content ( scheduled_number ) ); } } else { gsb_data_transaction_set_method_of_payment_content ( transaction_number, gsb_data_scheduled_get_method_of_payment_content ( scheduled_number ) ); } gsb_data_transaction_set_automatic_transaction ( transaction_number, gsb_data_scheduled_get_automatic_scheduled (scheduled_number)); gsb_data_transaction_set_budgetary_number ( transaction_number, gsb_data_scheduled_get_budgetary_number (scheduled_number)); gsb_data_transaction_set_sub_budgetary_number ( transaction_number, gsb_data_scheduled_get_sub_budgetary_number (scheduled_number)); /* if the financial year is automatic, we set it here */ if ( gsb_data_scheduled_get_financial_year_number (scheduled_number) == -2 ) gsb_data_transaction_set_financial_year_number ( transaction_number, gsb_data_fyear_get_from_date ( gsb_data_transaction_get_date (transaction_number))); else gsb_data_transaction_set_financial_year_number ( transaction_number, gsb_data_scheduled_get_financial_year_number (scheduled_number)); /* get the category */ gsb_scheduler_get_category_for_transaction_from_transaction ( transaction_number, scheduled_number ); /* set the mother split if exists */ gsb_data_transaction_set_mother_transaction_number ( transaction_number, transaction_mother ); /* we show the new transaction in the tree view */ gsb_transactions_list_append_new_transaction (transaction_number, TRUE); return transaction_number; }