sanger/sequencescape

View on GitHub
app/views/receptacles/new_request.html.erb

Summary

Maintainability
Test Coverage

<%= page_title "New request", "#{@asset.label} - #{@asset.display_name}" %>
<% can_edit = can? :edit_additional, Request %>
<%= form_for(@asset, url: create_request_receptacle_url(@asset), html: {method: :post}) do |f| %>
  <%= render_error_messages(@asset) %>

  <fieldset id="details">
    <h3>Submission Options</h3>
    <% instance_variable_or_id_param(:request_type) do |field_name, value| %>
      <div class="form-group  col-xs-12">
        <%= label_tag(field_name, 'Request type', class: 'col-md-4') %>
        <%= select_field_sorted_by_name(field_name, @request_types, value, can_edit, prompt: 'Select a request type', required: true) %>
      </div>
    <% end %>
    <% if @asset.studies.uniq.count > 1 -%>
      <div class="form-group col-xs-12">
        <%= label_tag('cross_study_request', 'Cross Study Request', class: 'col-md-4') %>
        <%= check_box_tag('cross_study_request', 'cross_study_request', true) %>
      </div>
    <% end %>
    <% instance_variable_or_id_param(:study) do |field_name, value| %>
      <div class="form-group col-xs-12">
        <%= label_tag(field_name, 'Study', class: 'col-md-4') %>
        <%= select_field_sorted_by_name(field_name, current_user_studies, value, can_edit, prompt: 'Select a study') %>
      </div>
    <% end %>
    <% if @asset.projects.uniq.count > 1 -%>
      <div class="form-group col-xs-12">
        <%= label_tag('cross_project_request', 'Cross Project Request', class: 'col-md-4') %>:
        <%= check_box_tag('cross_project_request', 'cross_project_request', true) %>
      </div>
    <% end %>
    <% instance_variable_or_id_param(:project) do |field_name, value| %>
      <div class="form-group col-xs-12">
        <%= label_tag(field_name, 'Project', class: 'col-md-4') %>
        <%= select_field_sorted_by_name(field_name, Project, value, can_edit, prompt: 'Select a project') %>
      </div>
    <% end %>
    <div class="form-group col-xs-12">
      <%= label_tag(:priority, 'Priority', class: 'col-md-4') %>
      <%= content_tag(:div, select_tag(:priority, options_for_select(
        Submission::Priorities.options,
        @asset.requests.last.try(:priority)
      ),class: 'form-control'),class: 'col-md-5') %>
    </div>
    <div class="form-group col-xs-12">
      <%= label_tag(:count, 'Number of requests to generate', class: 'col-md-4') %>
      <%= content_tag(:div, number_field_tag(:count, 1, {min: 0, step: 1, class: 'form-control' }),class: 'col-md-5') %>
    </div>
  </fieldset>


  <% if @request.present? %>
  <fieldset id="existing_request_options">
    <h3><%= @request.request_type.name %> Options</h3>
    <table width="100%" cellspacing="0" cellpadding="0">
      <tr>
        <%= tabulated_error_messages_for "request" %>
      </tr>
    </table>

    <%= render partial: 'shared/metadata/edit/request', locals: { request: @request } %>
  </fieldset>
  <% else %>
    <% @request_types.each do |request_type| %>
      <fieldset id="request_type_options_for_<%= request_type.id %>" class="request_options">
        <h3><%= request_type.name %> Options</h3>
          <%= render partial: 'shared/metadata/edit/request',
                     locals: {
                      request: request_type.new(request_metadata_attributes: @asset.created_with_request_options)
                    } %>
      </fieldset>
    <% end %>
  <% end %>

  <fieldset class="comments">
    <div class="form-group col-xs-12">
      <%= label_tag(:comments, 'Comments', class: 'col-md-4') %>
      <%= content_tag(:div,text_area_tag(:comments,nil, rows: 10, cols: 40,class: 'form-control'),class: 'col-md-8') %>
    </div>
  </fieldset>

  <table width="100%" cellspacing="0" cellpadding="0">
    <tr>
      <td class="item" width="40%"><%= f.submit "Create" %></td>
      <td>or <%= link_to 'Back', receptacle_path(@asset) %></td>
      <td class="help_field"></td>
    </tr>
  </table>

<% end %>

<%= legacy_javascript_tag do %>
  /*
   * Hook into the 'Request type' select dropdown so that if the value is changed the correct fields
   * are displayed.
   */
  (function($, undefined) {
    $(function() {
      var request_type_element   = $('#request_type_id');
      var request_options        = $('.request_options');

      // Can't use ':input' selector as it ignores disabled inputs!
      var disable_inputs = function(context) { $('input,select,textarea', context).attr('disabled', true);  }
      var enable_inputs  = function(context) { $('input,select,textarea', context).attr('disabled', false); }

      handler = function() {
        var selected_request_type_id = $('option:selected', request_type_element).attr('value');

        // Not only hide but disable inputs; not only show, but enable inputs.  If this isn't done
        // the parameters passed to the server are incorrect.
        disable_inputs(request_options.hide());
        enable_inputs($('#request_type_options_for_' + selected_request_type_id).show());
      }

      request_type_element.change(handler);
      handler();

      checkStudyHandler = function() {
        var cross_study = ($('#cross_study_request')[0] !== undefined) && $('#cross_study_request')[0].checked;
        $('#study_id').attr('disabled',cross_study);
      }
      checkProjectHandler = function() {
        var cross_project = ($('#cross_project_request')[0] !== undefined) && $('#cross_project_request')[0].checked;
        $('#project_id').attr('disabled',cross_project);
      }
      $('#cross_study_request').change(checkStudyHandler);
      $('#cross_project_request').change(checkProjectHandler);
      checkStudyHandler();
      checkProjectHandler();
    });

  })(jQuery);
<% end %>