diff --git a/app/controllers/admin/local_census_records/base_controller.rb b/app/controllers/admin/local_census_records/base_controller.rb new file mode 100644 index 000000000..bcc2e382a --- /dev/null +++ b/app/controllers/admin/local_census_records/base_controller.rb @@ -0,0 +1,10 @@ +class Admin::LocalCensusRecords::BaseController < Admin::BaseController + helper_method :namespace + + private + + def namespace + "admin" + end + +end diff --git a/app/controllers/admin/local_census_records/imports_controller.rb b/app/controllers/admin/local_census_records/imports_controller.rb new file mode 100644 index 000000000..4d450842d --- /dev/null +++ b/app/controllers/admin/local_census_records/imports_controller.rb @@ -0,0 +1,21 @@ +class Admin::LocalCensusRecords::ImportsController < Admin::LocalCensusRecords::BaseController + load_and_authorize_resource class: "LocalCensusRecords::Import" + + def create + @import = LocalCensusRecords::Import.new(local_census_records_import_params) + if @import.save + flash.now[:notice] = t("admin.local_census_records.imports.create.notice") + render :show + else + render :new + end + end + + private + + def local_census_records_import_params + return {} unless params[:local_census_records_import].present? + + params.require(:local_census_records_import).permit(:file) + end +end diff --git a/app/helpers/admin/local_census_records/imports_helper.rb b/app/helpers/admin/local_census_records/imports_helper.rb new file mode 100644 index 000000000..656fd8f95 --- /dev/null +++ b/app/helpers/admin/local_census_records/imports_helper.rb @@ -0,0 +1,9 @@ +module Admin::LocalCensusRecords::ImportsHelper + def errors_for(resource, field) + if resource.errors.include? field + content_tag :div, class: "error" do + resource.errors[field].join(", ") + end + end + end +end diff --git a/app/views/admin/local_census_records/imports/_form.html.erb b/app/views/admin/local_census_records/imports/_form.html.erb new file mode 100644 index 000000000..86ceb9b71 --- /dev/null +++ b/app/views/admin/local_census_records/imports/_form.html.erb @@ -0,0 +1,9 @@ +<%= form_for [:admin, @import] do |f| %> + <%= render "shared/errors", resource: @import %> + + <%= f.file_field :file %> + +
+ <%= f.submit(class: "button success expanded", value: t("shared.save")) %> +
+<% end %> diff --git a/app/views/admin/local_census_records/imports/_local_census_record.html.erb b/app/views/admin/local_census_records/imports/_local_census_record.html.erb new file mode 100644 index 000000000..b7b942350 --- /dev/null +++ b/app/views/admin/local_census_records/imports/_local_census_record.html.erb @@ -0,0 +1,18 @@ + + + <%= local_census_record.document_type %> + <%= errors_for local_census_record, :document_type %> + + + <%= local_census_record.document_number %> + <%= errors_for local_census_record, :document_number %> + + + <%= l local_census_record.date_of_birth if local_census_record.date_of_birth.present? %> + <%= errors_for local_census_record, :date_of_birth %> + + + <%= local_census_record.postal_code %> + <%= errors_for local_census_record, :postal_code %> + + diff --git a/app/views/admin/local_census_records/imports/_local_census_records.html.erb b/app/views/admin/local_census_records/imports/_local_census_records.html.erb new file mode 100644 index 000000000..32876ebdf --- /dev/null +++ b/app/views/admin/local_census_records/imports/_local_census_records.html.erb @@ -0,0 +1,25 @@ +

<%= title %> (<%= local_census_records.any? ? local_census_records.size : 0 %>)

+ + + + + + + + + + + + <% if local_census_records.any? %> + <% local_census_records.each do |local_census_record| %> + <%= render "local_census_record", local_census_record: local_census_record %> + <% end %> + <% else %> + + + + <% end %> + +
<%= t("activerecord.attributes.local_census_record.document_type") %><%= t("activerecord.attributes.local_census_record.document_number") %><%= t("activerecord.attributes.local_census_record.date_of_birth") %><%= t("activerecord.attributes.local_census_record.postal_code") %>
+ <%= t("admin.local_census_records.imports.local_census_records.no_records_found") %> +
diff --git a/app/views/admin/local_census_records/imports/new.html.erb b/app/views/admin/local_census_records/imports/new.html.erb new file mode 100644 index 000000000..f36f16b68 --- /dev/null +++ b/app/views/admin/local_census_records/imports/new.html.erb @@ -0,0 +1,7 @@ +<%= back_link_to admin_local_census_records_path %> + +

<%= t("admin.local_census_records.imports.new.title") %>

+ +

<%= t("admin.local_census_records.imports.new.subtitle") %>

+ +<%= render "form" %> diff --git a/app/views/admin/local_census_records/imports/show.html.erb b/app/views/admin/local_census_records/imports/show.html.erb new file mode 100644 index 000000000..eede90e38 --- /dev/null +++ b/app/views/admin/local_census_records/imports/show.html.erb @@ -0,0 +1,19 @@ +<%= back_link_to(admin_local_census_records_path, text = t("shared.back")) %> +
+

<%= t("admin.local_census_records.imports.show.title") %>

+ +<%= link_to t("admin.local_census_records.imports.show.import"), + new_admin_local_census_records_import_path, + class: "button float-right hollow" %> + +

<%= t("admin.local_census_records.imports.show.subtitle") %>

+ +<%= render partial: "local_census_records", locals: { + title: t("admin.local_census_records.imports.show.errored"), + id: "invalid-local-census-records", + local_census_records: @import.invalid_records } %> + +<%= render partial: "local_census_records", locals: { + title: t("admin.local_census_records.imports.show.created"), + id: "created-local-census-records", + local_census_records: @import.created_records } %> diff --git a/config/locales/en/admin.yml b/config/locales/en/admin.yml index 1822078e3..8b2124cdd 100644 --- a/config/locales/en/admin.yml +++ b/config/locales/en/admin.yml @@ -1688,3 +1688,17 @@ en: notice: Local census record updated successfully! destroy: notice: Local census record removed successfully! + imports: + new: + title: Local census records + subtitle: Import CSV file + create: + notice: Local census records import process executed successfully! + show: + title: Manage local census + subtitle: Import process results + import: Import again + errored: Errored rows + created: Created records + local_census_records: + no_records_found: No records found. diff --git a/config/locales/en/general.yml b/config/locales/en/general.yml index cd8e6f7e4..2ea40d22e 100644 --- a/config/locales/en/general.yml +++ b/config/locales/en/general.yml @@ -198,6 +198,7 @@ en: topic: Topic image: Image local_census_record: Local Census Record + local_census_records/import: Local Census Records Import geozones: none: All city layouts: diff --git a/config/locales/es/admin.yml b/config/locales/es/admin.yml index b92d8ea4f..d755437c9 100644 --- a/config/locales/es/admin.yml +++ b/config/locales/es/admin.yml @@ -1686,3 +1686,17 @@ es: notice: ¡Registro del censo local actualizado correctamente! destroy: notice: ¡Registro del censo local eliminado correctamente! + imports: + new: + title: Registros del censo local + subtitle: Importar archivo CSV + create: + notice: ¡Proceso de import de registros del censo local ejecutado correctamente! + show: + title: Gestionar censo local + subtitle: Resultados del proceso de importación + import: Importar otro fichero + errored: Filas erróneas + created: Registros creados + local_census_records: + no_records_found: No se han encontrado registros. \ No newline at end of file diff --git a/config/locales/es/general.yml b/config/locales/es/general.yml index 9491d0b84..f879e29aa 100644 --- a/config/locales/es/general.yml +++ b/config/locales/es/general.yml @@ -198,6 +198,7 @@ es: topic: Tema image: Imagen local_census_record: el registro del censo local + local_census_records/import: la importación de registros del censo local geozones: none: Toda la ciudad layouts: diff --git a/config/routes/admin.rb b/config/routes/admin.rb index 557811a03..9e79838cc 100644 --- a/config/routes/admin.rb +++ b/config/routes/admin.rb @@ -257,4 +257,7 @@ namespace :admin do get "/change_log/:id", to: "budget_investments#show_investment_log", as: "change_log" resources :local_census_records + namespace :local_census_records do + resources :imports, only: [:new, :create, :show] + end end