diff options
| author | Zog | 2018-03-07 11:35:25 +0100 |
|---|---|---|
| committer | Zog | 2018-03-12 12:00:14 +0100 |
| commit | 1245099459bd3d7dce71fdf0d7c95b2377a0034e (patch) | |
| tree | c17f2c4bd68fc6ad4eedead96e1106954d7093e4 /app/controllers | |
| parent | 0b9269780989dbd69a9be9d63670aab12050cf60 (diff) | |
| download | chouette-core-1245099459bd3d7dce71fdf0d7c95b2377a0034e.tar.bz2 | |
Refs #6133; First Crud for exports
Diffstat (limited to 'app/controllers')
| -rw-r--r-- | app/controllers/concerns/iev_interfaces.rb | 65 | ||||
| -rw-r--r-- | app/controllers/exports_controller.rb | 111 | ||||
| -rw-r--r-- | app/controllers/imports_controller.rb | 56 |
3 files changed, 106 insertions, 126 deletions
diff --git a/app/controllers/concerns/iev_interfaces.rb b/app/controllers/concerns/iev_interfaces.rb new file mode 100644 index 000000000..590482c7f --- /dev/null +++ b/app/controllers/concerns/iev_interfaces.rb @@ -0,0 +1,65 @@ +module IevInterfaces + extend ActiveSupport::Concern + + included do + before_action only: [:index] { set_date_time_params("started_at", DateTime) } + before_action :ransack_status_params, only: [:index] + respond_to :html + belongs_to :workbench + end + + def show + show! do + instance_variable_set "@#{collection_name.singularize}", resource.decorate(context: { + workbench: @workbench + }) + end + end + + def index + index! do |format| + format.html { + if collection.out_of_bounds? + redirect_to params.merge(:page => 1) + end + collection = decorate_collection(collection) + } + end + end + + protected + def collection + scope = parent.send(collection_name).where(type: "#{resource_class.parent.name}::Workbench") + + scope = self.ransack_period_range(scope: scope, error_message: t("#{collection_name}.filters.error_period_filter"), query: :where_started_at_in) + + @q = scope.search(params[:q]) + + unless instance_variable_get "@#{collection_name}" + coll = if sort_column && sort_direction + @q.result(distinct: true).order(sort_column + ' ' + sort_direction).paginate(page: params[:page], per_page: 10) + else + @q.result(distinct: true).order(:name).paginate(page: params[:page], per_page: 10) + end + instance_variable_set "@#{collection_name}", decorate_collection(coll) + end + instance_variable_get "@#{collection_name}" + end + + private + def ransack_status_params + if params[:q] + return params[:q].delete(:status_eq_any) if params[:q][:status_eq_any].empty? || ( (resource_class.status.values & params[:q][:status_eq_any]).length >= 4 ) + params[:q][:status_eq_any].push("new", "running") if params[:q][:status_eq_any].include?("pending") + params[:q][:status_eq_any].push("aborted", "canceled") if params[:q][:status_eq_any].include?("failed") + end + end + + def sort_column + parent.imports.column_names.include?(params[:sort]) ? params[:sort] : 'created_at' + end + + def sort_direction + %w[asc desc].include?(params[:direction]) ? params[:direction] : 'desc' + end +end diff --git a/app/controllers/exports_controller.rb b/app/controllers/exports_controller.rb index 095720aa0..1b947299f 100644 --- a/app/controllers/exports_controller.rb +++ b/app/controllers/exports_controller.rb @@ -1,74 +1,41 @@ -require 'will_paginate/array' -require 'open-uri' - class ExportsController < ChouetteController - include ReferentialSupport - # defaults :resource_class => Export - # - # respond_to :html, :only => [:show, :index, :destroy, :exported_file] - # respond_to :js, :only => [:index] - # belongs_to :referential - # - # def index - # begin - # index! - # rescue Ievkit::Error, Faraday::Error => error - # logger.error("Iev failure : #{error.message}") - # flash[:error] = t(error.locale_for_error) - # redirect_to referential_path(@referential) - # end - # end - # - # def show - # begin - # show! - # rescue Ievkit::Error, Faraday::Error => error - # logger.error("Iev failure : #{error.message}") - # flash[:error] = t(error.locale_for_error) - # redirect_to referential_path(@referential) - # end - # end - # - # def destroy - # begin - # destroy! - # rescue Ievkit::Error, Faraday::Error => error - # logger.error("Iev failure : #{error.message}") - # flash[:error] = t(error.locale_for_error) - # redirect_to referential_path(@referential) - # end - # end - # - # def exported_file - # # WARNING : files under 10kb in size get treated as StringIO by OpenUri - # # http://stackoverflow.com/questions/10496874/why-does-openuri-treat-files-under-10kb-in-size-as-stringio - # OpenURI::Buffer.send :remove_const, 'StringMax' if OpenURI::Buffer.const_defined?('StringMax') - # OpenURI::Buffer.const_set 'StringMax', 0 - # begin - # send_file open(resource.file_path), { :type => "application/#{resource.filename_extension}", :disposition => "attachment", :filename => resource.filename } - # rescue Ievkit::Error, Faraday::Error => error - # logger.error("Iev failure : #{error.message}") - # flash[:error] = t(error.locale_for_error) - # redirect_to referential_path(@referential) - # end - # end - # - # protected - # - # def export_service - # ExportService.new(@referential) - # end - # - # def resource - # @export ||= export_service.find( params[:id] ) - # @line_items = @export.report.line_items - # if @line_items.size > 500 - # @line_items = @line_items.paginate(page: params[:page], per_page: 20) - # end - # @export - # end - # - # def collection - # @exports ||= export_service.all.sort_by{ |export| export.created_at }.reverse.paginate(:page => params[:page]) - # end + include PolicyChecker + include RansackDateFilter + include IevInterfaces + skip_before_action :authenticate_user!, only: [:upload] + defaults resource_class: Export::Base, collection_name: 'exports', instance_name: 'export' + + def upload + if params[:token] == resource.token_download + send_file resource.file.path + else + user_not_authorized + end + end + + private + + def build_resource + @export ||= Export::Workbench.new(*resource_params) do |export| + export.workbench = parent + export.creator = current_user.name + end + end + + def export_params + params.require(:export).permit( + :name, + :type, + :referential_id + ) + end + + def decorate_collection(exports) + ExportDecorator.decorate( + exports, + context: { + workbench: @workbench + } + ) + end end diff --git a/app/controllers/imports_controller.rb b/app/controllers/imports_controller.rb index 3ebbeb665..f95b6acf1 100644 --- a/app/controllers/imports_controller.rb +++ b/app/controllers/imports_controller.rb @@ -1,31 +1,9 @@ class ImportsController < ChouetteController include PolicyChecker include RansackDateFilter - before_action only: [:index] { set_date_time_params("started_at", DateTime) } + include IevInterfaces skip_before_action :authenticate_user!, only: [:download] defaults resource_class: Import::Base, collection_name: 'imports', instance_name: 'import' - before_action :ransack_status_params, only: [:index] - respond_to :html - belongs_to :workbench - - def show - show! do - @import = @import.decorate(context: { - workbench: @workbench - }) - end - end - - def index - index! do |format| - format.html { - if collection.out_of_bounds? - redirect_to params.merge(:page => 1) - end - @imports = decorate_imports(@imports) - } - end - end def download if params[:token] == resource.token_download @@ -35,31 +13,8 @@ class ImportsController < ChouetteController end end - protected - def collection - scope = parent.imports.where(type: "Import::Workbench") - - scope = self.ransack_period_range(scope: scope, error_message: t('imports.filters.error_period_filter'), query: :where_started_at_in) - - @q = scope.search(params[:q]) - - if sort_column && sort_direction - @imports ||= @q.result(distinct: true).order(sort_column + ' ' + sort_direction).paginate(page: params[:page], per_page: 10) - else - @imports ||= @q.result(distinct: true).order(:name).paginate(page: params[:page], per_page: 10) - end - end - private - def ransack_status_params - if params[:q] - return params[:q].delete(:status_eq_any) if params[:q][:status_eq_any].empty? || ( (Import::Base.status.values & params[:q][:status_eq_any]).length >= 4 ) - params[:q][:status_eq_any].push("new", "running") if params[:q][:status_eq_any].include?("pending") - params[:q][:status_eq_any].push("aborted", "canceled") if params[:q][:status_eq_any].include?("failed") - end - end - def build_resource @import ||= Import::Workbench.new(*resource_params) do |import| import.workbench = parent @@ -76,14 +31,7 @@ class ImportsController < ChouetteController ) end - def sort_column - parent.imports.column_names.include?(params[:sort]) ? params[:sort] : 'created_at' - end - def sort_direction - %w[asc desc].include?(params[:direction]) ? params[:direction] : 'desc' - end - - def decorate_imports(imports) + def decorate_collection(imports) ImportDecorator.decorate( imports, context: { |
