diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb index 6dc6d9f5e..aa656d4f0 100644 --- a/app/controllers/admin/accounts_controller.rb +++ b/app/controllers/admin/accounts_controller.rb @@ -16,12 +16,12 @@ module Admin def update if @account.valid? - @sum = params[:account][:balance].to_f - @account.balance - action = Actions::AccountActivityCreate.new(@account, @sum, params[:description], - AccountActivity::UPDATE_CREDIT) - redirect_to admin_accounts_path, notice: t('.updated') if action.call + action = Actions::AccountActivityCreate.new(@account, params[:account][:balance], + params[:description], AccountActivity::UPDATE_CREDIT) + redirect_to admin_accounts_path, notice: t('.updated') and return if action.call end + flash[:alert] = t('invalid_balance') render 'edit' end diff --git a/app/interactions/actions/account_activity_create.rb b/app/interactions/actions/account_activity_create.rb index 41b351fbe..f76cdcf76 100644 --- a/app/interactions/actions/account_activity_create.rb +++ b/app/interactions/actions/account_activity_create.rb @@ -1,17 +1,35 @@ module Actions class AccountActivityCreate - def initialize(account, sum, description, type) + def initialize(account, new_balance, description, type) @account = account - @sum = sum + @new_balance = new_balance @description = description @type = type end def call + validate_new_balance + return false if @error + + calc_sum create_activity commit end + def calc_sum + @sum = @new_balance.to_f - @account.balance + end + + def validate_new_balance + return if @new_balance.blank? + + begin + !Float(@new_balance).nil? + rescue StandardError + @error = true + end + end + def create_activity @activity = AccountActivity.new(account: @account, sum: @sum, diff --git a/config/locales/admin/accounts.en.yml b/config/locales/admin/accounts.en.yml index d0e2d115a..8566f335e 100644 --- a/config/locales/admin/accounts.en.yml +++ b/config/locales/admin/accounts.en.yml @@ -1,5 +1,7 @@ en: edit_balance: Edit balance + invalid_balance: The balance must be a number + admin: accounts: index: