Class: Studies::InformationController

Inherits:
ApplicationController
  • Object
show all
Defined in:
app/controllers/studies/information_controller.rb

Overview

Responsible for displaying overcomplicated reporting pages

Constant Summary collapse

BASIC_TABS =
[
  %w[summary Summary],
  ['sample-progress', 'Sample progress'],
  ['assets-progress', 'Assets progress']
].freeze

Instance Method Summary collapse

Instance Method Details

#showObject


16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/controllers/studies/information_controller.rb', line 16

def show
  @summary = params[:summary] || 'sample-progress'
  @request_types = RequestType.where(id: @study.requests.distinct.pluck(:request_type_id)).standard.order(:order, :id)
  @summaries = BASIC_TABS + @request_types.pluck(:key, :name)

  @submissions = @study.submissions
  @awaiting_submissions = @study.submissions.where.not(state: 'ready')

  # We need to propagate the extra_parameters - as page - to the summary partial
  @extra_params = params.except(i[summary study_id id action controller])

  respond_to do |format|
    format.html
    format.xml
    format.json { render json: Study.all.to_json }
  end
end

#show_summaryObject


34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'app/controllers/studies/information_controller.rb', line 34

def show_summary
  page_params = { page: params[:page] || 1, per_page: params[:per_page] || 50 }

  if request.xhr?
    @summary = params[:summary] || 'assets-progress'

    case @summary
    when 'sample-progress'
      @page_elements = @study.samples.paginate(page_params)
      @request_types = RequestType.where(id: @study.requests.distinct.pluck(:request_type_id)).standard.order(:order, :id)
      render partial: 'sample_progress'
    when 'assets-progress'
      @request_types = RequestType.where(id: @study.requests.distinct.pluck(:request_type_id)).standard.order(:order, :id)
      @labware_type = Labware.descendants.detect { |cls| cls.name == params[:labware_type] } || Labware
      @labware_type_name = params.fetch(:labware_type, 'All Assets').underscore.humanize
      @page_elements = @study.assets_through_aliquots.on_a(@labware_type).paginate(page_params)
      render partial: 'asset_progress'
    when 'summary'
      @page_elements = @study.assets_through_requests.for_summary.paginate(page_params)
      render partial: 'summary'
    else # A request_type key
      @request_type = RequestType.find_by!(key: params[:summary])
      # The include here doesn't load ALL the requests, only those matching the given request type. Ideally we'd just grab the counts,
      # but unfortunately we need to have at least the request id available for linking to in cases where we have
      # only one request in a particular state.
      @assets_to_detail = Receptacle.for_study_and_request_type(@study, @request_type).includes(:requests).paginate(page_params)
      # Example group by count which would allow us to do returned_hash[[asset_id,state]] to get the count for a particular asset/state
      # Unfortunately this doesn't let us grab the request id. We could use some custom SQL to achieve this, but we'll see how
      # effective the above is before trying that.
      # Receptacle.for_study_and_request_type(@study,@request_type).where(id:@assets_to_detail.map(&:id)).group('assets.id','requests.state').count
      if @assets_to_detail.empty?
        render plain: 'No requests of this type can be found'
      else
        render partial: 'summary_for_request_type'
      end
    end
  else
    page_params[:summary] = params[:summary]
    redirect_to study_information_path(@study, page_params)
  end
end

#summaryObject


76
77
78
79
80
81
82
# File 'app/controllers/studies/information_controller.rb', line 76

def summary
  s = UiHelper::Summary.new
  @summary = s.load(@study).paginate page: params[:page], per_page: 30
  respond_to do |format|
    format.html
  end
end