From adba253d01d04972e44b217669336d92723465f0 Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Mon, 17 Feb 2020 15:55:46 +0500 Subject: [PATCH 1/3] Add client_hold action to xml console See #1481 --- .../epp_requests/domain/client_hold.xml | 15 +++++++++++++++ app/views/registrar/xml_consoles/show.haml | 3 +++ 2 files changed, 18 insertions(+) create mode 100644 app/views/registrar/xml_consoles/epp_requests/domain/client_hold.xml diff --git a/app/views/registrar/xml_consoles/epp_requests/domain/client_hold.xml b/app/views/registrar/xml_consoles/epp_requests/domain/client_hold.xml new file mode 100644 index 000000000..fcafec538 --- /dev/null +++ b/app/views/registrar/xml_consoles/epp_requests/domain/client_hold.xml @@ -0,0 +1,15 @@ + + + + + + example.ee + + + + + + timo-1579351654 + + diff --git a/app/views/registrar/xml_consoles/show.haml b/app/views/registrar/xml_consoles/show.haml index f96b67738..5ffcb5279 100644 --- a/app/views/registrar/xml_consoles/show.haml +++ b/app/views/registrar/xml_consoles/show.haml @@ -29,6 +29,9 @@ , %a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'domain', epp_action: 'delete'}} Delete + , + %a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'domain', epp_action: 'client_hold'}} + Client Hold %h4 Poll %a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'poll', epp_action: 'poll'}} From 3b332da0bb27160ac07414e5911f000eddbf6c82 Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Wed, 19 Feb 2020 14:09:45 +0500 Subject: [PATCH 2/3] Add remove clientHold to registrar UI --- app/controllers/registrar/domains_controller.rb | 8 ++++++++ app/models/ability.rb | 1 + app/models/concerns/domain/force_delete.rb | 4 ++++ app/models/concerns/remove_hold.rb | 9 +++++++++ app/models/depp/domain.rb | 1 + app/views/registrar/domains/_domain.html.erb | 4 ++++ config/locales/en.yml | 1 + config/locales/registrar/domains.en.yml | 1 + config/routes.rb | 1 + 9 files changed, 30 insertions(+) create mode 100644 app/models/concerns/remove_hold.rb diff --git a/app/controllers/registrar/domains_controller.rb b/app/controllers/registrar/domains_controller.rb index 5bf1a51f5..8fdfd51fd 100644 --- a/app/controllers/registrar/domains_controller.rb +++ b/app/controllers/registrar/domains_controller.rb @@ -153,6 +153,14 @@ class Registrar render json: scope.pluck(:name, :code).map { |c| { display_key: "#{c.second} #{c.first}", value: c.second } } end + def remove_hold + authorize! :remove_hold, Depp::Domain + return unless params[:domain_name] + + @data = @domain.remove_hold(params) + redirect_to info_registrar_domains_url(domain_name: params[:domain_name]) + end + private def init_domain diff --git a/app/models/ability.rb b/app/models/ability.rb index 9a0676ac8..a727254ad 100644 --- a/app/models/ability.rb +++ b/app/models/ability.rb @@ -50,6 +50,7 @@ class Ability can(:check, Epp::Domain) can(:create, Epp::Domain) can(:renew, Epp::Domain) { |d| d.registrar_id == @user.registrar_id } + can(:remove_hold, Epp::Domain) { |d| d.registrar_id == @user.registrar_id } can(:update, Epp::Domain) { |d, pw| d.registrar_id == @user.registrar_id || d.transfer_code == pw } can(:transfer, Epp::Domain) can(:delete, Epp::Domain) { |d, pw| d.registrar_id == @user.registrar_id || d.transfer_code == pw } diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index af3aaa7c7..89c121993 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -34,6 +34,10 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength force_delete_start.present? && force_delete_lte_today && force_delete_lte_valid_date end + def client_holded? + statuses.include?(DomainStatus::CLIENT_HOLD) + end + def force_delete_lte_today force_delete_start + Setting.expire_warning_period.days <= Time.zone.now end diff --git a/app/models/concerns/remove_hold.rb b/app/models/concerns/remove_hold.rb new file mode 100644 index 000000000..1da3b5a7f --- /dev/null +++ b/app/models/concerns/remove_hold.rb @@ -0,0 +1,9 @@ +module RemoveHold + extend ActiveSupport::Concern + + def remove_hold(params) + xml = epp_xml.update(name: { value: params[:domain_name] }, + rem: [status: { attrs: { s: 'clientHold' }, value: '' }]) + current_user.request(xml) + end +end diff --git a/app/models/depp/domain.rb b/app/models/depp/domain.rb index e2413a004..3bb3b7473 100644 --- a/app/models/depp/domain.rb +++ b/app/models/depp/domain.rb @@ -1,6 +1,7 @@ module Depp class Domain include ActiveModel::Conversion + include RemoveHold extend ActiveModel::Naming attr_accessor :name, :current_user, :epp_xml diff --git a/app/views/registrar/domains/_domain.html.erb b/app/views/registrar/domains/_domain.html.erb index 74f29dc15..d8910a490 100644 --- a/app/views/registrar/domains/_domain.html.erb +++ b/app/views/registrar/domains/_domain.html.erb @@ -9,5 +9,9 @@ class: 'btn btn-default btn-xs' %> <%= link_to t('.delete_btn'), delete_registrar_domains_path(domain_name: domain.name), class: 'btn btn-default btn-xs' %> + <% if domain.client_holded? %> + <%= link_to t('.client_hold_btn'), remove_hold_registrar_domains_path(domain_name: domain.name), + class: 'btn btn-default btn-xs' %> + <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 74040fe98..15deab604 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -580,6 +580,7 @@ en: tech: Tech contact valid: Valid object_is_not_eligible_for_renewal: 'Object is not eligible for renewal' + object_is_not_holded: 'Object is not holded' bank_statement_desc: 'Import file row will match only when matching following attributes:
ref number
payment amount
invoice number (the first numerical value in comment field)
.' create_bank_statement: 'Create bank statement' create_bank_transaction: 'Create bank transaction' diff --git a/config/locales/registrar/domains.en.yml b/config/locales/registrar/domains.en.yml index c98002b8f..2f5d83240 100644 --- a/config/locales/registrar/domains.en.yml +++ b/config/locales/registrar/domains.en.yml @@ -24,6 +24,7 @@ en: edit_btn: Edit renew_btn: Renew delete_btn: Delete + client_hold_btn: Remove Hold form: save_btn: Save diff --git a/config/routes.rb b/config/routes.rb index 135fe8eb0..8315e78ce 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -99,6 +99,7 @@ Rails.application.routes.draw do get 'check' get 'delete' get 'search_contacts' + get 'remove_hold' end end resources :domain_transfers, only: %i[new create] From 5ec2d25ec573e0feff982c9e244a99ebe18f01be Mon Sep 17 00:00:00 2001 From: Alex Sherman Date: Wed, 19 Feb 2020 18:39:18 +0500 Subject: [PATCH 3/3] Move Remove clientHold button to domain info --- app/controllers/registrar/domains_controller.rb | 7 +++++++ app/models/concerns/domain/force_delete.rb | 4 ---- app/views/registrar/domains/_domain.html.erb | 4 ---- app/views/registrar/domains/info.html.erb | 4 ++++ app/views/registrar/xml_consoles/show.haml | 2 +- config/locales/en.yml | 1 + config/locales/registrar/domains.en.yml | 1 - 7 files changed, 13 insertions(+), 10 deletions(-) diff --git a/app/controllers/registrar/domains_controller.rb b/app/controllers/registrar/domains_controller.rb index 8fdfd51fd..3e721666b 100644 --- a/app/controllers/registrar/domains_controller.rb +++ b/app/controllers/registrar/domains_controller.rb @@ -59,6 +59,7 @@ class Registrar def info authorize! :info, Depp::Domain @data = @domain.info(params[:domain_name]) if params[:domain_name] + @client_holded = client_holded(@data) if response_ok? render 'info' else @@ -158,6 +159,8 @@ class Registrar return unless params[:domain_name] @data = @domain.remove_hold(params) + + flash[:alert] = @data.css('msg').text unless response_ok? redirect_to info_registrar_domains_url(domain_name: params[:domain_name]) end @@ -167,6 +170,10 @@ class Registrar @domain = Depp::Domain.new(current_user: depp_current_user) end + def client_holded(data) + data.css('status')&.map { |element| element.attribute('s').value } + &.any? { |status| status == DomainStatus::CLIENT_HOLD } + end def contacts current_registrar_user.registrar.contacts diff --git a/app/models/concerns/domain/force_delete.rb b/app/models/concerns/domain/force_delete.rb index 89c121993..af3aaa7c7 100644 --- a/app/models/concerns/domain/force_delete.rb +++ b/app/models/concerns/domain/force_delete.rb @@ -34,10 +34,6 @@ module Concerns::Domain::ForceDelete # rubocop:disable Metrics/ModuleLength force_delete_start.present? && force_delete_lte_today && force_delete_lte_valid_date end - def client_holded? - statuses.include?(DomainStatus::CLIENT_HOLD) - end - def force_delete_lte_today force_delete_start + Setting.expire_warning_period.days <= Time.zone.now end diff --git a/app/views/registrar/domains/_domain.html.erb b/app/views/registrar/domains/_domain.html.erb index d8910a490..74f29dc15 100644 --- a/app/views/registrar/domains/_domain.html.erb +++ b/app/views/registrar/domains/_domain.html.erb @@ -9,9 +9,5 @@ class: 'btn btn-default btn-xs' %> <%= link_to t('.delete_btn'), delete_registrar_domains_path(domain_name: domain.name), class: 'btn btn-default btn-xs' %> - <% if domain.client_holded? %> - <%= link_to t('.client_hold_btn'), remove_hold_registrar_domains_path(domain_name: domain.name), - class: 'btn btn-default btn-xs' %> - <% end %> diff --git a/app/views/registrar/domains/info.html.erb b/app/views/registrar/domains/info.html.erb index 1fcfc23c3..e88882233 100644 --- a/app/views/registrar/domains/info.html.erb +++ b/app/views/registrar/domains/info.html.erb @@ -6,6 +6,10 @@ class: 'btn btn-default') %> <%= link_to(t(:delete), delete_registrar_domains_path(domain_name: params[:domain_name]), class: 'btn btn-default') %> + <% if @client_holded %> + <%= link_to(t(:remove_client_hold), remove_hold_registrar_domains_path(domain_name: params[:domain_name]), + class: 'btn btn-default') %> + <% end %> <% else %> <%= link_to t('.transfer_btn'), new_registrar_domain_transfer_path(domain_name: params[:domain_name]), class: 'btn btn-default' %> diff --git a/app/views/registrar/xml_consoles/show.haml b/app/views/registrar/xml_consoles/show.haml index 5ffcb5279..bb66116ee 100644 --- a/app/views/registrar/xml_consoles/show.haml +++ b/app/views/registrar/xml_consoles/show.haml @@ -31,7 +31,7 @@ Delete , %a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'domain', epp_action: 'client_hold'}} - Client Hold + Remove Client Hold %h4 Poll %a.js-load-xml{href: 'javascript:void(0)', data: {obj: 'poll', epp_action: 'poll'}} diff --git a/config/locales/en.yml b/config/locales/en.yml index 15deab604..cf72b1027 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -206,6 +206,7 @@ en: statuses: 'Statuses' description: 'Description' delete: 'Delete' + remove_client_hold: 'Remove clientHold' are_you_sure: 'Are you sure?' back: 'Back' new_domain: 'New domain' diff --git a/config/locales/registrar/domains.en.yml b/config/locales/registrar/domains.en.yml index 2f5d83240..c98002b8f 100644 --- a/config/locales/registrar/domains.en.yml +++ b/config/locales/registrar/domains.en.yml @@ -24,7 +24,6 @@ en: edit_btn: Edit renew_btn: Renew delete_btn: Delete - client_hold_btn: Remove Hold form: save_btn: Save