Samples - show all/show assigned [SCI-1277] (#644)

* Samples - show all/show assigned [SCI-1277]

* Some fixes in code

* Some minor fixes in code

* Omit present

* Correct missed present

* Fixing hound warnings
This commit is contained in:
ajugo 2017-06-06 12:46:56 +02:00 committed by GitHub
parent eb95ec74a3
commit 887d9a4f52
5 changed files with 57 additions and 6 deletions

View file

@ -33,9 +33,12 @@ var loadFirstTime = true;
var table; var table;
var originalHeader; var originalHeader;
var view_assigned;
function dataTableInit() { function dataTableInit() {
// Make a copy of original samples table header // Make a copy of original samples table header
originalHeader = $('#samples thead').children().clone(); originalHeader = $('#samples thead').children().clone();
view_assigned = 'assigned';
table = $('#samples').DataTable({ table = $('#samples').DataTable({
order: [[2, 'desc']], order: [[2, 'desc']],
dom: "R<'row'<'col-sm-9-custom toolbar'l><'col-sm-3-custom'f>>tpi", dom: "R<'row'<'col-sm-9-custom toolbar'l><'col-sm-3-custom'f>>tpi",
@ -53,6 +56,9 @@ function dataTableInit() {
destroy: true, destroy: true,
ajax: { ajax: {
url: $('#samples').data('source'), url: $('#samples').data('source'),
data: function ( d ) {
d.assigned = view_assigned;
},
global: false, global: false,
type: 'POST' type: 'POST'
}, },
@ -819,6 +825,15 @@ function onClickAddSample() {
}); });
} }
$('#assignedSamples').on('click', function () {
view_assigned = 'assigned';
table.draw();
});
$('#allSamples').on('click', function () {
view_assigned = 'all';
table.draw();
});
// Handle enter key // Handle enter key
$(document).off('keypress').keypress(function(event) { $(document).off('keypress').keypress(function(event) {
var keycode = (event.keyCode ? event.keyCode : event.which); var keycode = (event.keyCode ? event.keyCode : event.which);

View file

@ -17,6 +17,12 @@ $("form#form-samples-file")
$(this).find(".form-group").append("<span class='help-block'>" + data.responseJSON.message + "</span>"); $(this).find(".form-group").append("<span class='help-block'>" + data.responseJSON.message + "</span>");
}); });
$('.sample-assign-group > .btn').click(function() {
$('.btn-group > .btn').removeClass('active btn-primary');
$('.btn-group > .btn').addClass('btn-default');
$(this).addClass('active btn-primary');
});
// Fetch samples data and updates the select options fields for // Fetch samples data and updates the select options fields for
// sample group and sample type column // sample group and sample type column
function updateSamplesTypesandGroups() { function updateSamplesTypesandGroups() {

View file

@ -21,6 +21,7 @@ class SampleDatatable < AjaxDatatablesRails::Base
'regex' => false, 'regex' => false,
'caseInsensitive' => true }, 'caseInsensitive' => true },
'columns' => [], 'columns' => [],
'assigned' => 'all',
'ColReorder' => [*0..6] 'ColReorder' => [*0..6]
} }
7.times do 7.times do
@ -178,10 +179,14 @@ class SampleDatatable < AjaxDatatablesRails::Base
@assigned_samples = @my_module.samples @assigned_samples = @my_module.samples
samples = samples.joins("LEFT OUTER JOIN sample_my_modules ON samples = samples.joins("LEFT OUTER JOIN sample_my_modules ON
(samples.id = sample_my_modules.sample_id AND (samples.id = sample_my_modules.sample_id AND
(sample_my_modules.my_module_id = #{@my_module.id.to_s} OR (sample_my_modules.my_module_id =
sample_my_modules.id IS NULL))") #{@my_module.id} OR
.references(:sample_my_modules) sample_my_modules.id IS NULL))")
.references(:sample_my_modules)
if params[:assigned] == 'assigned'
samples = samples.where('"sample_my_modules"."id" > 0')
end
elsif @project elsif @project
@assigned_samples = @project.assigned_samples @assigned_samples = @project.assigned_samples
ids = @project.my_modules_ids ids = @project.my_modules_ids
@ -198,6 +203,16 @@ class SampleDatatable < AjaxDatatablesRails::Base
sample_my_modules.id IS NULL))") sample_my_modules.id IS NULL))")
.references(:sample_my_modules) .references(:sample_my_modules)
end end
if params[:assigned] == 'assigned'
samples = samples.joins('LEFT OUTER JOIN "my_modules" ON
"my_modules"."id" =
"sample_my_modules"."my_module_id"')
.joins('LEFT OUTER JOIN "experiments" ON
"experiments"."id" =
"my_modules"."experiment_id"')
.where('"experiments"."project_id" = ?', @project.id)
.where('"my_modules"."nr_of_assigned_samples" > 0')
end
elsif @experiment elsif @experiment
@assigned_samples = @experiment.assigned_samples @assigned_samples = @experiment.assigned_samples
ids = @experiment.my_modules.select(:id) ids = @experiment.my_modules.select(:id)
@ -207,6 +222,14 @@ class SampleDatatable < AjaxDatatablesRails::Base
(sample_my_modules.my_module_id IN (#{ids.to_sql}) OR (sample_my_modules.my_module_id IN (#{ids.to_sql}) OR
sample_my_modules.id IS NULL))") sample_my_modules.id IS NULL))")
.references(:sample_my_modules) .references(:sample_my_modules)
if params[:assigned] == 'assigned'
samples = samples.joins('LEFT OUTER JOIN "my_modules" ON
"my_modules"."id" =
"sample_my_modules"."my_module_id"')
.where('"my_modules"."experiment_id" = ?',
@experiment.id)
.where('"my_modules"."nr_of_assigned_samples" > 0')
end
end end
# Make mappings of custom fields, so we have same id for every column # Make mappings of custom fields, so we have same id for every column
@ -297,9 +320,9 @@ class SampleDatatable < AjaxDatatablesRails::Base
.distinct .distinct
# check the input param and merge the two arrays of ids # check the input param and merge the two arrays of ids
if params[:order].values[0]["dir"] == "asc" if params[:order].values[0]['dir'] == 'asc'
ids = assigned + unassigned ids = assigned + unassigned
elsif params[:order].values[0]["dir"] == "desc" elsif params[:order].values[0]['dir'] == 'desc'
ids = unassigned + assigned ids = unassigned + assigned
end end
ids = ids.collect { |s| s.id } ids = ids.collect { |s| s.id }

View file

@ -36,6 +36,11 @@
<span class="glyphicon glyphicon-cloud-download"></span> <span class="glyphicon glyphicon-cloud-download"></span>
<span class="hidden-xs"><%= t("samples.export") %></span> <span class="hidden-xs"><%= t("samples.export") %></span>
</a> </a>
<div id="show-assigned-buttons" class="btn-group sample-assign-group" data-toggle="buttons">
<button type="button" class="active btn btn-primary" id="assignedSamples"><%= t("samples.view_assigned_samples") %></button>
<button type="button" class="btn btn-default" id="allSamples"><%= t("samples.view_all_samples") %></button>
</div>
<% end %> <% end %>
<div id="datatables-buttons" style="display: inline;"> <div id="datatables-buttons" style="display: inline;">

View file

@ -853,6 +853,8 @@ en:
add_new_sample_type: "Add sample type" add_new_sample_type: "Add sample type"
add_new_sample_group: "Add sample group" add_new_sample_group: "Add sample group"
add_new_column: "Add column" add_new_column: "Add column"
view_all_samples: "View all samples"
view_assigned_samples: "View assigned samples"
modal_info: modal_info:
added_on: "Added on" added_on: "Added on"
added_by: "Added by" added_by: "Added by"