Class: LabwareController

Inherits:
ApplicationController show all
Defined in:
app/controllers/labware_controller.rb

Overview

Handles viewing Labware information

See Also:

Instance Method Summary collapse

Methods inherited from ApplicationController

#block_api_access, #clean_params_from_check, #evil_parameter_hack!, #extract_header_info, #set_cache_disabled!

Instance Method Details

#destroyObject


67
68
69
70
71
72
73
74
# File 'app/controllers/labware_controller.rb', line 67

def destroy
  @asset.destroy

  respond_to do |format|
    format.html { redirect_to(assets_url) }
    format.xml  { head :ok }
  end
end

#editObject


38
39
40
# File 'app/controllers/labware_controller.rb', line 38

def edit
  @valid_purposes_options = @asset.compatible_purposes.pluck(:name, :id)
end

#find_by_barcodeObject


164
# File 'app/controllers/labware_controller.rb', line 164

def find_by_barcode; end

#historyObject


42
43
44
45
46
47
48
# File 'app/controllers/labware_controller.rb', line 42

def history
  respond_to do |format|
    format.html
    format.xml  { @request.events.to_xml }
    format.json { @request.events.to_json }
  end
end

#indexObject


8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
# File 'app/controllers/labware_controller.rb', line 8

def index
  if params[:study_id]
    @study = Study.find(params[:study_id])
    @assets = @study.assets_through_aliquots.order(:name).page(params[:page])
  else
    @assets = Labware.page(params[:page])
  end

  respond_to do |format|
    format.html
    if params[:study_id]
      format.xml { render xml: Study.find(params[:study_id]).assets_through_requests.to_xml }
    elsif params[:sample_id]
      format.xml { render xml: Sample.find(params[:sample_id]).assets.to_xml }
    elsif params[:asset_id]
      @asset = Labware.find(params[:asset_id])
      format.xml { render xml: ['relations' => { 'parents' => @asset.parents, 'children' => @asset.children }].to_xml }
    end
  end
end

#lab_viewObject


166
167
168
169
170
171
172
173
174
175
176
# File 'app/controllers/labware_controller.rb', line 166

def lab_view
  barcode = params.fetch(:barcode, '').strip

  if barcode.blank?
    redirect_to action: 'find_by_barcode'
    return
  else
    @asset = Labware.find_from_barcode(barcode)
    redirect_to action: 'find_by_barcode', error: "Unable to find anything with this barcode: #{barcode}" if @asset.nil?
  end
end

#lookupObject


139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
# File 'app/controllers/labware_controller.rb', line 139

def lookup
  return unless params[:asset] && params[:asset][:barcode]

  @assets = Labware.with_barcode(params[:asset][:barcode]).limit(50).page(params[:page])

  if @assets.size == 1
    redirect_to @assets.first
  elsif @assets.empty?
    flash.now[:error] = "No asset found with barcode #{params[:asset][:barcode]}"
    respond_to do |format|
      format.html { render action: 'lookup' }
      format.xml  { render xml: @assets.to_xml }
    end
  else
    respond_to do |format|
      format.html { render action: 'index' }
      format.xml  { render xml: @assets.to_xml }
    end
  end
end

#new_requestObject


120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# File 'app/controllers/labware_controller.rb', line 120

def new_request
  @request_types = RequestType.standard.active.applicable_for_asset(@asset)
  # In rare cases the user links in to the 'new request' page
  # with a specific study specified. In even rarer cases this may
  # conflict with the assets primary study.
  # ./features/7711055_new_request_links_broken.feature:29
  # This resolves the issue, but the code could do with a significant
  # refactor. I'm delaying this currently as we NEED to get SS434 completed.
  # 1. This should probably be RequestsController::new
  # 2. We should use Request.new(...) and form helpers
  # 3. This will allow us to instance_variable_or_id_param helpers.
  @study = if params[:study_id]
             Study.find(params[:study_id])
           else
             @asset.studies.first
           end
  @project = @asset.projects.first || @asset.studies.first&.projects&.first
end

81
82
83
84
85
86
87
88
89
# File 'app/controllers/labware_controller.rb', line 81

def print
  if @asset.printable?
    @printable = @asset.printable_target
    @direct_printing = (@asset.printable_target == @asset)
  else
    flash[:error] = "#{@asset.display_name} does not have a barcode so a label can not be printed."
    redirect_to asset_path(@asset)
  end
end

104
105
106
107
108
109
110
111
112
113
114
# File 'app/controllers/labware_controller.rb', line 104

def print_assets
  print_job = LabelPrinter::PrintJob.new(params[:printer],
                                         LabelPrinter::Label::AssetRedirect,
                                         printables: @asset)
  if print_job.execute
    flash[:notice] = print_job.success
  else
    flash[:error] = print_job.errors.full_messages.join('; ')
  end
  redirect_to asset_url(@asset)
end

91
92
93
94
95
96
97
98
99
100
101
102
# File 'app/controllers/labware_controller.rb', line 91

def print_labels
  print_job = LabelPrinter::PrintJob.new(params[:printer],
                                         LabelPrinter::Label::AssetRedirect,
                                         printables: params[:printables])
  if print_job.execute
    flash[:notice] = print_job.success
  else
    flash[:error] = print_job.errors.full_messages.join('; ')
  end

  redirect_to phi_x_url
end

#reset_values_for_moveObject


160
161
162
# File 'app/controllers/labware_controller.rb', line 160

def reset_values_for_move
  render layout: false
end

#showObject


29
30
31
32
33
34
35
36
# File 'app/controllers/labware_controller.rb', line 29

def show
  @source_plate = @asset.source_plate
  respond_to do |format|
    format.html
    format.xml
    format.json { render json: @asset }
  end
end

#show_plateObject


116
117
118
# File 'app/controllers/labware_controller.rb', line 116

def show_plate
  @asset = Plate.find(params[:id])
end

#summaryObject


76
77
78
79
# File 'app/controllers/labware_controller.rb', line 76

def summary
  @summary = UiHelper::Summary.new(per_page: 25, page: params[:page])
  @summary.load_asset(@asset)
end

#updateObject


50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/controllers/labware_controller.rb', line 50

def update
  respond_to do |format|
    if @asset.update(labware_params.merge(params.to_unsafe_h.fetch(:lane, {})))
      flash[:notice] = 'Labware was successfully updated.'
      if params[:lab_view]
        format.html { redirect_to(action: :lab_view, barcode: @asset.human_barcode) }
      else
        format.html { redirect_to(action: :show, id: @asset.id) }
        format.xml  { head :ok }
      end
    else
      format.html { render action: 'edit' }
      format.xml  { render xml: @asset.errors, status: :unprocessable_entity }
    end
  end
end