aboutsummaryrefslogtreecommitdiffstats
path: root/app/controllers
diff options
context:
space:
mode:
authorZog2018-03-07 11:35:25 +0100
committerZog2018-03-12 12:00:14 +0100
commit1245099459bd3d7dce71fdf0d7c95b2377a0034e (patch)
treec17f2c4bd68fc6ad4eedead96e1106954d7093e4 /app/controllers
parent0b9269780989dbd69a9be9d63670aab12050cf60 (diff)
downloadchouette-core-1245099459bd3d7dce71fdf0d7c95b2377a0034e.tar.bz2
Refs #6133; First Crud for exports
Diffstat (limited to 'app/controllers')
-rw-r--r--app/controllers/concerns/iev_interfaces.rb65
-rw-r--r--app/controllers/exports_controller.rb111
-rw-r--r--app/controllers/imports_controller.rb56
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: {