/** * fill the budget of the transaction from the string given in param * create the budget if necessary * if string is NULL, free the budget of the transaction * * \param transaction_number * \param string a string like "budget : sub_budget" * \param is_transaction TRUE if it's for a transaction, FALSE for a scheduled transaction * * \return * */ void gsb_data_budget_set_budget_from_string ( gint transaction_number, const gchar *string, gboolean is_transaction ) { gchar **tab_char; gint budget_number; /* the simpliest is to split in 2 parts, transaction and scheduled, * but the 2 parts are exactly the same, exept the call to the functions */ if (is_transaction) { if (!string || strlen ( string ) == 0 ) { gsb_data_transaction_set_budgetary_number ( transaction_number, 0 ); gsb_data_transaction_set_sub_budgetary_number ( transaction_number, 0 ); return; } tab_char = g_strsplit ( string, " : ", 2 ); /* we don't mind if tab_char exists and others, all the checks will be done in ...get_number_by_name */ budget_number = gsb_data_budget_get_number_by_name ( g_strstrip ( tab_char[0] ), TRUE, gsb_data_transaction_get_amount ( transaction_number ).mantissa < 0 ); gsb_data_transaction_set_budgetary_number ( transaction_number, budget_number ); if ( tab_char[1] ) gsb_data_transaction_set_sub_budgetary_number ( transaction_number, gsb_data_budget_get_sub_budget_number_by_name ( budget_number, g_strstrip (tab_char[1]), TRUE )); } else { if (!string) { gsb_data_scheduled_set_budgetary_number ( transaction_number, 0 ); gsb_data_scheduled_set_sub_budgetary_number ( transaction_number, 0 ); return; } tab_char = g_strsplit ( string, " : ", 2 ); /* we don't mind if tab_char exists and others, all the checks will be done in ...get_number_by_name */ budget_number = gsb_data_budget_get_number_by_name ( tab_char[0], TRUE, gsb_data_scheduled_get_amount (transaction_number).mantissa <0 ); gsb_data_scheduled_set_budgetary_number ( transaction_number, budget_number ); if ( tab_char[1] ) gsb_data_scheduled_set_sub_budgetary_number ( transaction_number, gsb_data_budget_get_sub_budget_number_by_name ( budget_number, tab_char[1], TRUE )); } g_strfreev (tab_char); }
gsb_real gsb_data_mix_get_amount ( gint transaction_number, gboolean is_transaction ) { if ( is_transaction ) return ( gsb_data_transaction_get_amount ( transaction_number ) ); else return ( gsb_data_scheduled_get_amount ( transaction_number ) ); }
/** * 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; }