diff --git a/app/controllers/admin/contacts_controller.rb b/app/controllers/admin/contacts_controller.rb index a8a062af8..33eba70ad 100644 --- a/app/controllers/admin/contacts_controller.rb +++ b/app/controllers/admin/contacts_controller.rb @@ -3,8 +3,24 @@ class Admin::ContactsController < AdminController before_action :set_contact, only: [:show] def index + params[:q] ||= {} @q = Contact.includes(:registrar).search(params[:q]) @contacts = @q.result.page(params[:page]) + + if params[:statuses_contains] + contacts = Contact.includes(:registrar).where( + "statuses @> ?::varchar[]", "{#{params[:statuses_contains].join(',')}}" + ) + else + contacts = Contact.includes(:registrar) + end + + normalize_search_parameters do + @q = contacts.search(params[:q]) + @contacts = @q.result.page(params[:page]) + end + + @contacts = @contacts.per(params[:results_per_page]) if params[:results_per_page].to_i > 0 end def search @@ -45,4 +61,18 @@ class Admin::ContactsController < AdminController dp[:statuses].reject!(&:blank?) dp end + + def normalize_search_parameters + ca_cache = params[:q][:created_at_lteq] + begin + end_time = params[:q][:created_at_lteq].try(:to_date) + params[:q][:created_at_lteq] = end_time.try(:end_of_day) + rescue + logger.warn('Invalid date') + end + + yield + + params[:q][:created_at_lteq] = ca_cache + end end diff --git a/app/views/admin/contacts/index.haml b/app/views/admin/contacts/index.haml index a633c86eb..9325b59cb 100644 --- a/app/views/admin/contacts/index.haml +++ b/app/views/admin/contacts/index.haml @@ -1,17 +1,71 @@ = render 'shared/title', name: t(:contacts) +/ .row +/ .col-md-12 +/ = search_form_for [:admin, @q], html: { class: 'form-horizontal' } do |f| +/ .col-md-11 +/ .form-group +/ = f.search_field :name_cont, class: 'form-control' +/ .col-md-1.text-right.text-center-xs +/ .form-group +/ %button.btn.btn-primary +/   +/ %span.glyphicon.glyphicon-search +/   +/ %hr .row .col-md-12 - = search_form_for [:admin, @q], html: { class: 'form-horizontal' } do |f| - .col-md-11 - .form-group - = f.search_field :name_cont, class: 'form-control' - .col-md-1.text-right.text-center-xs - .form-group - %button.btn.btn-primary -   - %span.glyphicon.glyphicon-search -   + = search_form_for [:admin, @q], html: { style: 'margin-bottom: 0;', class: 'js-form', autocomplete: 'off' } do |f| + .row + .col-md-3 + .form-group + = f.label :name + = f.search_field :name_matches, value: params[:q][:name_matches], class: 'form-control', placeholder: t(:name) + .col-md-3 + .form-group + = f.label t(:id) + = f.search_field :code_eq, class: 'form-control', placeholder: t(:id) + .col-md-3 + .form-group + = f.label t(:ident) + = f.search_field :ident_matches, class: 'form-control', placeholder: t(:ident) + .col-md-3 + .form-group + = f.label t(:email) + = f.search_field :email_matches, class: 'form-control', placeholder: t(:email) + .row + .col-md-6 + .form-group + = f.label t(:registrar) + = f.select :registrar_id_eq, Registrar.all.map { |x| [x, x.id] }, { include_blank: true }, class: 'form-control selectize', placeholder: t(:choose) + .col-md-3 + .form-group + = f.label t(:created_at_from) + = f.search_field :created_at_gteq, value: params[:q][:created_at_gteq], class: 'form-control datepicker', placeholder: t(:created_at_from) + .col-md-3 + .form-group + = f.label t(:created_at_until) + = f.search_field :created_at_lteq, value: params[:q][:created_at_lteq], class: 'form-control datepicker', placeholder: t(:created_at_until) + .row + .col-md-6 + .form-group + = label_tag t(:status) + = select_tag :statuses_contains, options_for_select(Contact::STATUSES, params[:statuses_contains]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' } + .col-md-6 + .form-group + = label_tag t(:status) + = select_tag '[q][domain_contacts_type_in]', options_for_select(['AdminDomainContact', 'TechDomainContact'], params[:q][:domain_contacts_type_in]), { multiple: true, placeholder: t(:choose), class: 'form-control js-combobox' } + / .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 +   + %button.btn.btn-default.js-reset-form + = t(:clear_fields) %hr .row .col-md-12 @@ -38,7 +92,7 @@ %td= contact.email %td - if contact.registrar - = link_to(contact.registrar, admin_registrar_path(contact.registrar)) + = link_to(contact.registrar, admin_registrar_path(contact.registrar)) .row .col-md-12 diff --git a/config/locales/en.yml b/config/locales/en.yml index 7d33957db..a80c47bb3 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -911,3 +911,5 @@ en: pending_epp: Pending epp id: ID hidden: '[hidden]' + created_at_from: 'Created at from' + created_at_until: 'Created at until'