diff --git a/app/controllers/admin/registrars_controller.rb b/app/controllers/admin/registrars_controller.rb index 767138468..4059e1dcb 100644 --- a/app/controllers/admin/registrars_controller.rb +++ b/app/controllers/admin/registrars_controller.rb @@ -1,4 +1,5 @@ class Admin::RegistrarsController < AdminController + before_action :set_registrar, only: [:show, :edit, :update, :destroy] def search render json: Registrar.search_by_query(params[:q]) end @@ -7,4 +8,52 @@ class Admin::RegistrarsController < AdminController @q = Registrar.search(params[:q]) @registrars = @q.result.page(params[:page]) end + + def new + @registrar = Registrar.new + end + + def create + @registrar = Registrar.new(registrar_params) + + if @registrar.save + flash[:notice] = I18n.t('shared.registrar_added') + redirect_to [:admin, @registrar] + else + flash.now[:alert] = I18n.t('shared.failed_to_add_registrar') + render 'new' + end + end + + def edit; end + + def update + if @registrar.update(registrar_params) + flash[:notice] = I18n.t('shared.registrar_updated') + redirect_to [:admin, @registrar] + else + flash.now[:alert] = I18n.t('shared.failed_to_update_registrar') + render 'edit' + end + end + + def destroy + if @registrar.destroy + flash[:notice] = I18n.t('shared.registrar_deleted') + redirect_to admin_registrars_path + else + flash.now[:alert] = I18n.t('shared.failed_to_delete_registrar') + render 'show' + end + end + + private + + def set_registrar + @registrar = Registrar.find(params[:id]) + end + + def registrar_params + params.require(:registrar).permit(:name, :reg_no, :vat_no, :address, :billing_address, :country_id) + end end diff --git a/app/models/registrar.rb b/app/models/registrar.rb index d36da1f5f..3e509a9a0 100644 --- a/app/models/registrar.rb +++ b/app/models/registrar.rb @@ -1,10 +1,14 @@ class Registrar < ActiveRecord::Base belongs_to :country - has_many :domains + has_many :domains, :dependent => :restrict_with_error has_many :ns_sets has_many :epp_users has_many :users + validates :name, :reg_no, :address, :country, presence: true + validates :name, :reg_no, uniqueness: true + + def domain_transfers at = DomainTransfer.arel_table DomainTransfer.where( diff --git a/app/views/admin/registrars/_form.haml b/app/views/admin/registrars/_form.haml new file mode 100644 index 000000000..ac71af50b --- /dev/null +++ b/app/views/admin/registrars/_form.haml @@ -0,0 +1,34 @@ += form_for([:admin, @registrar]) do |f| + - if @registrar.errors.any? + - @registrar.errors.each do |attr, err| + = err + %br + - if @registrar.errors.any? + %hr + + .row + .col-md-6 + .form-group + = f.label :name + = f.text_field(:name, class: 'form-control') + .form-group + = f.label :reg_no + = f.text_field(:reg_no, class: 'form-control') + .form-group + = f.label :vat_no + = f.text_field(:vat_no, class: 'form-control') + + .col-md-6.text-left + .form-group + = f.label :country_id + = f.select :country_id, options_for_select(Country.all.map{|x| [x.name, x.id]}, @registrar.country_id), {}, {class: 'form-control'} + .form-group + = f.label :address + = f.text_field(:address, class: 'form-control') + .form-group + = f.label :billing_address + = f.text_field(:billing_address, class: 'form-control') + %hr + .row + .col-md-12.text-right + = button_tag(t('shared.save'), class: 'btn btn-primary') diff --git a/app/views/admin/registrars/edit.haml b/app/views/admin/registrars/edit.haml new file mode 100644 index 000000000..82cfd096d --- /dev/null +++ b/app/views/admin/registrars/edit.haml @@ -0,0 +1,9 @@ +.row + .col-sm-6 + %h2.text-center-xs + = "#{t('shared.edit_registrar')}" + .col-sm-6 + %h2.text-right.text-center-xs + = link_to(t('shared.back_to_registrar'), [:admin, @registrar], class: 'btn btn-default') +%hr += render 'form' diff --git a/app/views/admin/registrars/index.haml b/app/views/admin/registrars/index.haml index 92c4529b1..7cb17c990 100644 --- a/app/views/admin/registrars/index.haml +++ b/app/views/admin/registrars/index.haml @@ -3,7 +3,7 @@ %h2.text-center-xs= t('shared.registrars') .col-sm-6 %h2.text-right.text-center-xs - = link_to(t('shared.add'), '#', class: 'btn btn-primary') + = link_to(t('shared.add'), new_admin_registrar_path, class: 'btn btn-primary') %hr .row .col-md-12 @@ -20,7 +20,7 @@ %tbody - @registrars.each do |x| %tr - %td= link_to(x, '#') + %td= link_to(x, [:admin, x]) %td= x.reg_no %td= link_to(t('shared.edit'), '#', class: 'btn btn-primary btn-xs') .row diff --git a/app/views/admin/registrars/new.haml b/app/views/admin/registrars/new.haml new file mode 100644 index 000000000..34b659790 --- /dev/null +++ b/app/views/admin/registrars/new.haml @@ -0,0 +1,3 @@ +%h2= t('shared.new_registrar') +%hr += render 'form' diff --git a/app/views/admin/registrars/show.haml b/app/views/admin/registrars/show.haml new file mode 100644 index 000000000..5d234c8c3 --- /dev/null +++ b/app/views/admin/registrars/show.haml @@ -0,0 +1,46 @@ +.row + .col-sm-6 + %h2.text-center-xs + = "#{t('shared.registrar_details')}" + .col-sm-6 + %h2.text-right.text-center-xs + = link_to(t('shared.edit'), edit_admin_registrar_path(@registrar), class: 'btn btn-primary') + = link_to(t('shared.delete'), admin_registrar_path(@registrar), method: :delete, data: { confirm: t('shared.are_you_sure') }, class: 'btn btn-danger') + +%hr +- if @registrar.errors.any? + - @registrar.errors.each do |attr, err| + = err + %br +- if @registrar.errors.any? + %hr +.row + .col-md-6 + .panel.panel-default + .panel-heading + %h3.panel-title= t('shared.general') + .panel-body + %dl.dl-horizontal + %dt= t('shared.name') + %dd= @registrar.name + + %dt= t('shared.reg_no') + %dd= @registrar.reg_no + + %dt= t('shared.vat_no') + %dd= @registrar.vat_no + + .col-md-6 + .panel.panel-default + .panel-heading + %h3.panel-title= t('shared.address') + .panel-body + %dl.dl-horizontal + %dt= t('shared.country') + %dd= @registrar.country + + %dt= t('shared.address') + %dd= @registrar.address + + %dt= t('shared.billing_address') + %dd= @registrar.billing_address diff --git a/config/locales/en.yml b/config/locales/en.yml index f3d1d8fdf..482adb60b 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -140,6 +140,22 @@ en: setting_id: taken: 'Status already exists on this domain' + + registrar: + attributes: + name: + blank: 'Name is missing' + taken: 'Name already exists' + reg_no: + blank: 'Reg. number is missing' + taken: 'Reg no. already exists' + vat_no: + blank: 'Vat number is missing' + country: + blank: 'Country is missing' + address: + blank: 'Address is missing' + attributes: epp_domain: &epp_domain_attributes name: 'Domain name' @@ -303,3 +319,16 @@ en: contact_list: 'Contact list' create_new_contact: 'Create new contact' domain_pw: 'Domain password' + + new_registrar: 'New registrar' + registrar_added: 'Registrar added!' + failed_to_add_registrar: 'Failed to add registrar' + registrar_details: 'Registrar details' + vat_no: 'Vat no' + edit_registrar: 'Edit registrar' + back_to_registrar: 'Back to registrar' + registrar_updated: 'Registrar updated' + failed_to_update_registrar: 'Failed to update registrar' + registrar_deleted: 'Registrar deleted' + failed_to_delete_registrar: 'Failed to delete registrar' +