diff options
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: {  | 
