diff --git a/app/controllers/admin/accounts_controller.rb b/app/controllers/admin/accounts_controller.rb new file mode 100644 index 000000000..c3f72371a --- /dev/null +++ b/app/controllers/admin/accounts_controller.rb @@ -0,0 +1,46 @@ +module Admin + class AccountsController < BaseController + load_and_authorize_resource + + def index + @q = Account.includes(:registrar).search(params[:q]) + @accounts = @q.result.page(params[:page]) + @accounts = @accounts.per(params[:results_per_page]) if params[:results_per_page].to_i.positive? + + render_by_format('admin/accounts/index', 'accounts') + end + + def show; end + + def edit; end + + def update + if @account.valid? + @sum = params[:account][:balance].to_f - @account.balance + redirect_to admin_accounts_path, notice: t('.updated') if create_activity + else + render 'edit' + end + end + + private + + def create_activity + activity = AccountActivity.new(account: @account, + sum: @sum, + currency: @account.currency, + description: params[:description], + activity_type: AccountActivity::ADD_CREDIT) + + if activity.save + true + else + false + end + end + + def account_params + params.require(:account).permit(:id, :currency, :balance) + end + end +end diff --git a/app/models/ability.rb b/app/models/ability.rb index 66a8793bc..febde4e8b 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -101,6 +101,7 @@ class Ability can :manage, BankTransaction can :manage, Invoice can :manage, WhiteIp + can :manage, Account can :manage, AccountActivity can :manage, Dispute can :read, ApiLog::EppLog diff --git a/app/models/account.rb b/app/models/account.rb index 420f43e48..fe0820888 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -1,4 +1,5 @@ class Account < ApplicationRecord + extend ToCsv include Versions belongs_to :registrar, required: true diff --git a/app/views/admin/accounts/_account.html.erb b/app/views/admin/accounts/_account.html.erb new file mode 100644 index 000000000..43a9a2c06 --- /dev/null +++ b/app/views/admin/accounts/_account.html.erb @@ -0,0 +1,7 @@ + + <%= account.id %> + <%= account.balance %> + <%= account.currency %> + <%= link_to account.registrar, admin_registrar_path(account.registrar) %> + <%= link_to(t(:edit_balance), edit_admin_account_path(account), class: 'btn btn-primary btn-xs') %> + diff --git a/app/views/admin/accounts/_form.html.erb b/app/views/admin/accounts/_form.html.erb new file mode 100644 index 000000000..01533cf20 --- /dev/null +++ b/app/views/admin/accounts/_form.html.erb @@ -0,0 +1,52 @@ +<%= form_for([:admin, @account], html: { class: 'form-horizontal', autocomplete: 'off' }) do |f| %> + <%= render 'form_errors', target: @account %> + +
+
+
+
+ <%= f.label :id, nil, class: 'required' %> +
+
+ <%= f.text_field :id, required: true, autofocus: true, + class: 'form-control', disabled: true %> +
+
+ +
+
+ <%= f.label :currency, nil, class: 'required' %> +
+
+ <%= f.text_field :currency, required: true, class: 'form-control', disabled: true %> +
+
+ +
+
+ <%= f.label :balance %> +
+
+ <%= f.text_field(:balance, class: 'form-control') %> +
+
+ +
+
+ <%= f.label :description %> +
+
+ <%= text_area_tag :description, params[:description], class: 'form-control' %> +
+
+
+
+ +
+ +
+
+ <%= button_tag t('.save_btn'), class: 'btn btn-warning' %> +
+
+<% end %> diff --git a/app/views/admin/accounts/_search_form.haml b/app/views/admin/accounts/_search_form.haml new file mode 100644 index 000000000..f9cbfccaa --- /dev/null +++ b/app/views/admin/accounts/_search_form.haml @@ -0,0 +1,34 @@ +.row + .col-md-12 + = search_form_for [:admin, @q], html: { style: 'margin-bottom: 0;', class: 'js-form', autocomplete: 'off' } do |f| + .row + .col-md-3 + .form-group + = label_tag :name + = f.search_field :name, value: params[:q][:name], class: 'form-control', placeholder: t(:name) + .col-md-3 + .form-group + = label_tag :registrant + = f.search_field :registrant, value: params[:q][:registrant], class: 'form-control', placeholder: t('.registrant_placeholder') + .col-md-3 + .form-group + = label_tag t(:registrar_name) + = select_tag '[q][registrar]', options_for_select(Registrar.all.map { |x| [x, x.name] }, selected: params[:q][:registrar]), { include_blank: true, class: 'form-control', placeholder: t('.registrant')} + .col-md-3 + .form-group + = label_tag :action + = select_tag '[q][event]', options_for_select([['Update', 'update'], ['Destroy', 'destroy'], ['Create', 'create']], params[:q][:event]), { include_blank:true, multiple: false, placeholder: t(:choose), class: 'form-control js-combobox' } + .row + .col-md-3 + .col-md-3 + .col-md-3 + .form-group + = label_tag t(:results_per_page) + = text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) + .col-md-3{style: 'padding-top: 25px;'} + %button.btn.btn-primary +   + %span.glyphicon.glyphicon-search +   + = link_to(t('.reset_btn'), admin_domain_versions_path, class: 'btn btn-default') +%hr diff --git a/app/views/admin/accounts/_search_form.html.erb b/app/views/admin/accounts/_search_form.html.erb new file mode 100644 index 000000000..9a0a83521 --- /dev/null +++ b/app/views/admin/accounts/_search_form.html.erb @@ -0,0 +1,32 @@ +
+
+ <%= search_form_for @q, url: [:admin, :accounts], html: { style: 'margin-bottom: 0;' } do |f| %> +
+
+
+ <%= f.label t(:registrar_name) %> + <%= f.select :registrar_id_in, Registrar.all.map { |x| [x, x.id] }, {}, class: 'form-control js-combobox', placeholder: t(:choose), multiple: true %> +
+
+
+
+ <%= label_tag t(:results_per_page) %> + <%= text_field_tag :results_per_page, params[:results_per_page], class: 'form-control', placeholder: t(:results_per_page) %> +
+
+ +
+ + <%= button_tag t('.download_csv_btn'), + formaction: admin_accounts_path(format: 'csv'), + class: 'btn btn-default' %> + <%= link_to(t('.reset_btn'), admin_accounts_path, class: 'btn btn-default') %> +
+
+ <% end %> +
+
diff --git a/app/views/admin/accounts/edit.html.erb b/app/views/admin/accounts/edit.html.erb new file mode 100644 index 000000000..d3b22c2b0 --- /dev/null +++ b/app/views/admin/accounts/edit.html.erb @@ -0,0 +1,5 @@ +

Editing Account

+ +<%= render 'form', account: @account %> + +<%= link_to 'Back', admin_accounts_path %> diff --git a/app/views/admin/accounts/index.html.erb b/app/views/admin/accounts/index.html.erb new file mode 100644 index 000000000..60ecdb15b --- /dev/null +++ b/app/views/admin/accounts/index.html.erb @@ -0,0 +1,38 @@ +

<%= t '.header' %>

+<%= render 'search_form', search: @search %> + +
+
+
+ + + + + + + + + + + + + <%= render @accounts %> + +
<%= sort_link(@q, 'ID', t('.')) %><%= sort_link(@q, 'Balance') %><%= sort_link(@q, 'Currency') %><%= sort_link(@q, 'registrar_name', Registrar.model_name.human) %> + <%= t(:actions) %> +
+
+
+
+
+ +
+
+ <%= paginate @accounts %> +
+
+ +
+
diff --git a/app/views/admin/accounts/new.html.erb b/app/views/admin/accounts/new.html.erb new file mode 100644 index 000000000..562a15b8e --- /dev/null +++ b/app/views/admin/accounts/new.html.erb @@ -0,0 +1,5 @@ +

New Admin Account

+ +<%= render 'form', admin_account: @admin_account %> + +<%= link_to 'Back', admin_accounts_path %> diff --git a/app/views/admin/accounts/show.html.erb b/app/views/admin/accounts/show.html.erb new file mode 100644 index 000000000..ef5583e83 --- /dev/null +++ b/app/views/admin/accounts/show.html.erb @@ -0,0 +1,4 @@ +

<%= notice %>

+ +<%= link_to 'Edit', edit_admin_account_path(@account) %> | +<%= link_to 'Back', admin_accounts_path %> diff --git a/app/views/admin/base/_menu.haml b/app/views/admin/base/_menu.haml index 46910afa7..c5edd4708 100644 --- a/app/views/admin/base/_menu.haml +++ b/app/views/admin/base/_menu.haml @@ -21,6 +21,7 @@ %li= link_to t('.prices'), admin_prices_path %li= link_to t(:bank_statements), admin_bank_statements_path %li= link_to t(:invoices), admin_invoices_path + %li= link_to t(:accounts), admin_accounts_path %li= link_to t(:account_activities), admin_account_activities_path(created_after: 'today') %li.divider %li.dropdown-header= t('.archive') diff --git a/app/views/admin/registrars/index.html.erb b/app/views/admin/registrars/index.html.erb index 7095fd0ef..23f29115c 100644 --- a/app/views/admin/registrars/index.html.erb +++ b/app/views/admin/registrars/index.html.erb @@ -45,7 +45,7 @@ <%= x.reg_no %> - <%= "#{x.balance}" %> + <%= link_to "#{x.balance}", edit_admin_account_path(x.cash_account) %> <%= "#{x.test_registrar}" %> diff --git a/app/views/admin/registrars/show/_details.html.erb b/app/views/admin/registrars/show/_details.html.erb index 9ae9aac3f..28194ca0a 100644 --- a/app/views/admin/registrars/show/_details.html.erb +++ b/app/views/admin/registrars/show/_details.html.erb @@ -15,7 +15,7 @@
<%= registrar.code %>
<%= Registrar.human_attribute_name :balance %>
-
<%= number_to_currency registrar.balance %>
+
<%= link_to (number_to_currency registrar.balance), edit_admin_account_path(registrar.cash_account) %>
<%= Registrar.human_attribute_name :website %>
<%= registrar.website %>
diff --git a/config/locales/admin/accounts.en.yml b/config/locales/admin/accounts.en.yml new file mode 100644 index 000000000..d94b1775d --- /dev/null +++ b/config/locales/admin/accounts.en.yml @@ -0,0 +1,21 @@ +en: + admin: + accounts: + index: + header: Accounts + + update: + updated: Account has been successfully updated + + form: + update_btn: Update account + reset_btn: Reset + save_btn: Save + + search_form: + registrar_name: Registrar + reset_btn: Reset + download_csv_btn: CSV + + account: + edit_balance: Edit balance diff --git a/config/locales/en.yml b/config/locales/en.yml index 944c99367..4566d2302 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -358,6 +358,7 @@ en: contact_org_error: 'Parameter value policy error. Org must be blank' contact_fax_error: 'Parameter value policy error. Fax must be blank' invoices: 'Invoices' + accounts: 'Accounts' no_such_user: 'No such user' phone_no: 'Phone number' confirmation_sms_was_sent_to_your_phone_verification_code_is: 'Confirmation sms was sent to your phone. Verification code is %{code}.' diff --git a/config/routes.rb b/config/routes.rb index 0db226cf1..1a3b394d1 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -236,6 +236,7 @@ Rails.application.routes.draw do end end + resources :accounts resources :account_activities resources :bank_statements do diff --git a/test/system/admin_area/accounts_test.rb b/test/system/admin_area/accounts_test.rb new file mode 100644 index 000000000..7c8344080 --- /dev/null +++ b/test/system/admin_area/accounts_test.rb @@ -0,0 +1,20 @@ +require 'application_system_test_case' + +class AdminAccountsSystemTest < ApplicationSystemTestCase + setup do + sign_in users(:admin) + end + + def test_download_accounts + now = Time.zone.parse('2010-07-05 08:00') + travel_to now + + get admin_accounts_path(format: :csv) + + assert_response :ok + assert_equal 'text/csv; charset=utf-8', response.headers['Content-Type'] + assert_equal %(attachment; filename="accounts_#{Time.zone.now.to_formatted_s(:number)}.csv"; filename*=UTF-8''accounts_#{Time.zone.now.to_formatted_s(:number)}.csv), + response.headers['Content-Disposition'] + assert_not_empty response.body + end +end