def make_refund_split_transaction(transaction): if df_is_not_empty(transaction): reverse_amount(transaction) assign_new_column(transaction, 'type', 'FIC') apply_function_to_field_overrule(transaction, 'date', datetime_to_timestamp, destination='timestamp') create_id(transaction) return transaction
def add_link_fields(df): def join_str(x): return sep_link_ids.join(x) for field_name, fields in fields_link_ids.items(): values = apply_function(select_columns(df, fields), join_str).astype(str) assign_new_column(df, field_name, values)
def add_new_column_autofilled(data, column_from, column_to, keep_initial=False, default_value='-'): dictioname = make_dictioname(column_from, column_to) column_content = _autofill_series(data[column_from], dictioname, keep_initial, default_value=default_value) assign_new_column(data, column_to, column_content)
def add_the_amount_to_df(df): def turn_amount_to_string(series): return (100 * series.fillna(0)).abs().astype(int).astype(str) the_amounts = turn_amount_to_string(get_one_field(df, amount_field)) assign_new_column(df, amount_name, the_amounts) the_o_currency = get_one_field(df, o_currency_field).fillna('EUR') assign_new_column(df, currency_name, the_o_currency) the_o_amounts = (100 * get_one_field(df, o_amount_field).fillna( get_one_field(df, amount_field))).abs().astype(int).astype(str) assign_new_column(df, o_amount_name, the_o_amounts)
def recap_by_cat(cycle, round_it=True): output_columns = ['category', 'currency', 'spent', 'remaining', 'spent_from_budget', 'amount', 'budget', 'over'] data = get_data_from_cycle(cycle) deposit = get_deposit_debits_from_cycle(cycle) convert_non_euro_amounts(data) add_column_with_value(deposit, currency_col, default_currency) field_name = category_col selected_columns = [amount_euro_col, field_name, currency_col] data = filter_df_on_bools(data, column_is_null(data, deposit_name_col)) data = select_columns(data, selected_columns) deposit = select_columns(deposit, selected_columns) all_output = concat_lines([data, deposit]) if df_is_empty(all_output): return empty_df(columns=output_columns) spent = group_by_field(all_output, category_col).set_index(currency_col, append=True) if df_is_empty(spent): return empty_df(columns=output_columns) budgets = get_budgets(cycle).set_index(currency_col, append=True) rename_columns(budgets, {amount_euro_col: budgets_col}) recap = concat_columns([spent, budgets], keep_index_name=True).round(2).fillna(0).reset_index() recap = filter_df_not_these_values(recap, category_col, no_recap_categories) over = positive_part(- recap[amount_euro_col] - recap[budgets_col]) remaining = positive_part(recap[budgets_col] + recap[amount_euro_col]) spent = positive_part(- recap[amount_euro_col] - over) assign_new_column(recap, 'over', ceil_series(over) if round_it else over) assign_new_column(recap, 'remaining', floor_series(remaining) if round_it else remaining) assign_new_column(recap, 'spent_from_budget', ceil_series(spent) if round_it else spent) return recap