From 6f0aa4002427833d3eeb2132e94dcf143adccca0 Mon Sep 17 00:00:00 2001 From: Wendy Yang Date: Fri, 6 Mar 2026 17:58:18 +0000 Subject: [PATCH 1/9] save changes --- .../sdb/sample_manifests_controller.rb | 2 ++ app/views/sdb/sample_manifests/show.html.erb | 7 ++++++- app/views/shared/_printer_list.html.erb | 16 ++++++---------- 3 files changed, 14 insertions(+), 11 deletions(-) diff --git a/app/controllers/sdb/sample_manifests_controller.rb b/app/controllers/sdb/sample_manifests_controller.rb index 2aea301719..f6d42bc62f 100644 --- a/app/controllers/sdb/sample_manifests_controller.rb +++ b/app/controllers/sdb/sample_manifests_controller.rb @@ -36,6 +36,8 @@ def index def show @study_id = @sample_manifest.study_id @samples = @sample_manifest.samples.paginate(page: params[:page]) + @barcode_printers = @sample_manifest.applicable_barcode_printers.pluck(:name) + @barcode_types = Rails.application.config.tube_manifest_barcode_config[:barcode_type_labels].values.sort end def new diff --git a/app/views/sdb/sample_manifests/show.html.erb b/app/views/sdb/sample_manifests/show.html.erb index dae20435ce..46fb729bd8 100644 --- a/app/views/sdb/sample_manifests/show.html.erb +++ b/app/views/sdb/sample_manifests/show.html.erb @@ -46,7 +46,12 @@ <%= label_tag :barcode_printer, 'Barcode printer' %> <%= render partial: "shared/printer_list" %> - + +
+ <%= label_tag :barcode_printer_type_id, 'Barcode type' %> + <%= select_tag 'barcode_printer_type_id',options_for_select(Rails.application.config.tube_manifest_barcode_config[:barcode_type_labels].values) %> +
+
<%= f.submit "Reprint all #{@sample_manifest.barcodes&.size || ''} labels", class: 'btn btn-success' %>
diff --git a/app/views/shared/_printer_list.html.erb b/app/views/shared/_printer_list.html.erb index 9008969a43..a0b42c5bfe 100644 --- a/app/views/shared/_printer_list.html.erb +++ b/app/views/shared/_printer_list.html.erb @@ -1,12 +1,8 @@
- + + From 81bfa36dda41e3b46d9558ca1fced5bd3a079f3f Mon Sep 17 00:00:00 2001 From: Wendy Yang Date: Fri, 6 Mar 2026 22:43:21 +0000 Subject: [PATCH 2/9] save changes --- app/controllers/sdb/sample_manifests_controller.rb | 11 ++++++++++- app/views/sdb/sample_manifests/show.html.erb | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/app/controllers/sdb/sample_manifests_controller.rb b/app/controllers/sdb/sample_manifests_controller.rb index f6d42bc62f..2d6123ebdd 100644 --- a/app/controllers/sdb/sample_manifests_controller.rb +++ b/app/controllers/sdb/sample_manifests_controller.rb @@ -64,7 +64,9 @@ def print_labels # rubocop:todo Metrics/MethodLength LabelPrinter::PrintJob.new( params[:printer], LabelPrinter::Label::SampleManifestRedirect, - sample_manifest: @sample_manifest + sample_manifest: @sample_manifest, + label_template_name: label_template_for_2d_barcodes, + barcode_type: params[:barcode_type] ) if print_job.execute flash[:notice] = print_job.success @@ -114,4 +116,11 @@ def validate_type redirect_to sample_manifests_path end end + + def label_template_for_2d_barcodes + if params[:barcode_type] == Rails.application.config.tube_manifest_barcode_config[:barcode_type_labels]['2d'] && + SampleManifest.tube_asset_types.include?(params[:asset_type]) + Rails.application.config.tube_manifest_barcode_config[:two_dimensional_label_template] + end + end end diff --git a/app/views/sdb/sample_manifests/show.html.erb b/app/views/sdb/sample_manifests/show.html.erb index 46fb729bd8..cd204b0a4a 100644 --- a/app/views/sdb/sample_manifests/show.html.erb +++ b/app/views/sdb/sample_manifests/show.html.erb @@ -49,7 +49,7 @@
<%= label_tag :barcode_printer_type_id, 'Barcode type' %> - <%= select_tag 'barcode_printer_type_id',options_for_select(Rails.application.config.tube_manifest_barcode_config[:barcode_type_labels].values) %> + <%= select_tag :barcode_type, options_for_select(@barcode_types),class: "form-control select2" %>
From 0fbdf72eee94d7e09d45f6d6f750ed72065f7b97 Mon Sep 17 00:00:00 2001 From: Wendy Yang Date: Sun, 8 Mar 2026 11:49:13 +0000 Subject: [PATCH 3/9] modify how to get asset type --- app/controllers/sdb/sample_manifests_controller.rb | 7 ++++--- app/views/sdb/sample_manifests/show.html.erb | 10 ++++++---- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/app/controllers/sdb/sample_manifests_controller.rb b/app/controllers/sdb/sample_manifests_controller.rb index 2d6123ebdd..5bdec5d996 100644 --- a/app/controllers/sdb/sample_manifests_controller.rb +++ b/app/controllers/sdb/sample_manifests_controller.rb @@ -38,6 +38,7 @@ def show @samples = @sample_manifest.samples.paginate(page: params[:page]) @barcode_printers = @sample_manifest.applicable_barcode_printers.pluck(:name) @barcode_types = Rails.application.config.tube_manifest_barcode_config[:barcode_type_labels].values.sort + assset_type = @sample_manifest.asset_type end def new @@ -65,7 +66,7 @@ def print_labels # rubocop:todo Metrics/MethodLength params[:printer], LabelPrinter::Label::SampleManifestRedirect, sample_manifest: @sample_manifest, - label_template_name: label_template_for_2d_barcodes, + label_template_name: label_template_for_2d_barcodes(@sample_manifest.asset_type), barcode_type: params[:barcode_type] ) if print_job.execute @@ -117,9 +118,9 @@ def validate_type end end - def label_template_for_2d_barcodes + def label_template_for_2d_barcodes(asset_type) if params[:barcode_type] == Rails.application.config.tube_manifest_barcode_config[:barcode_type_labels]['2d'] && - SampleManifest.tube_asset_types.include?(params[:asset_type]) + SampleManifest.tube_asset_types.include?(asset_type) Rails.application.config.tube_manifest_barcode_config[:two_dimensional_label_template] end end diff --git a/app/views/sdb/sample_manifests/show.html.erb b/app/views/sdb/sample_manifests/show.html.erb index cd204b0a4a..6d94c4a82b 100644 --- a/app/views/sdb/sample_manifests/show.html.erb +++ b/app/views/sdb/sample_manifests/show.html.erb @@ -47,10 +47,12 @@ <%= render partial: "shared/printer_list" %>
-
- <%= label_tag :barcode_printer_type_id, 'Barcode type' %> - <%= select_tag :barcode_type, options_for_select(@barcode_types),class: "form-control select2" %> -
+ +
+ <%= label_tag :barcode_printer_type_id, 'Barcode type' %> + <%= select_tag :barcode_type, options_for_select(@barcode_types),class: "form-control select2" %> +
+
<%= f.submit "Reprint all #{@sample_manifest.barcodes&.size || ''} labels", class: 'btn btn-success' %> From 286777b127e1f3e57cc0bff86252cd44f45f0a4c Mon Sep 17 00:00:00 2001 From: Wendy Yang Date: Sun, 8 Mar 2026 11:57:56 +0000 Subject: [PATCH 4/9] hide the printer type for plate --- app/controllers/sdb/sample_manifests_controller.rb | 2 +- app/views/sdb/sample_manifests/show.html.erb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/app/controllers/sdb/sample_manifests_controller.rb b/app/controllers/sdb/sample_manifests_controller.rb index 5bdec5d996..5fccee9518 100644 --- a/app/controllers/sdb/sample_manifests_controller.rb +++ b/app/controllers/sdb/sample_manifests_controller.rb @@ -38,7 +38,7 @@ def show @samples = @sample_manifest.samples.paginate(page: params[:page]) @barcode_printers = @sample_manifest.applicable_barcode_printers.pluck(:name) @barcode_types = Rails.application.config.tube_manifest_barcode_config[:barcode_type_labels].values.sort - assset_type = @sample_manifest.asset_type + @asset_type = @sample_manifest.asset_type end def new diff --git a/app/views/sdb/sample_manifests/show.html.erb b/app/views/sdb/sample_manifests/show.html.erb index 6d94c4a82b..550404cf81 100644 --- a/app/views/sdb/sample_manifests/show.html.erb +++ b/app/views/sdb/sample_manifests/show.html.erb @@ -47,12 +47,12 @@ <%= render partial: "shared/printer_list" %>
- + <% if SampleManifest.tube_asset_types.include?(@asset_type) %>
<%= label_tag :barcode_printer_type_id, 'Barcode type' %> <%= select_tag :barcode_type, options_for_select(@barcode_types),class: "form-control select2" %>
- + <% end %>
<%= f.submit "Reprint all #{@sample_manifest.barcodes&.size || ''} labels", class: 'btn btn-success' %> From f9734d6a2a0f2b981c0c210ad280811372436f42 Mon Sep 17 00:00:00 2001 From: Wendy Yang Date: Mon, 9 Mar 2026 09:20:48 +0000 Subject: [PATCH 5/9] fix the linting --- app/controllers/sdb/sample_manifests_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/sdb/sample_manifests_controller.rb b/app/controllers/sdb/sample_manifests_controller.rb index 5fccee9518..8f005e593a 100644 --- a/app/controllers/sdb/sample_manifests_controller.rb +++ b/app/controllers/sdb/sample_manifests_controller.rb @@ -60,7 +60,7 @@ def create # rubocop:todo Metrics/AbcSize end end - def print_labels # rubocop:todo Metrics/MethodLength + def print_labels # rubocop:todo Metrics/MethodLength, Metrics/AbcSize print_job = LabelPrinter::PrintJob.new( params[:printer], From 734f23555aa76bf9673961de1a7482044a2f1a58 Mon Sep 17 00:00:00 2001 From: Wendy Yang Date: Mon, 9 Mar 2026 10:47:11 +0000 Subject: [PATCH 6/9] revert printer list template --- app/views/shared/_printer_list.html.erb | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/app/views/shared/_printer_list.html.erb b/app/views/shared/_printer_list.html.erb index a0b42c5bfe..f27fb221eb 100644 --- a/app/views/shared/_printer_list.html.erb +++ b/app/views/shared/_printer_list.html.erb @@ -1,8 +1,13 @@
- + From a4163173ed95a18abdd68c8659d7db9facc19e19 Mon Sep 17 00:00:00 2001 From: Wendy Yang Date: Mon, 9 Mar 2026 16:21:03 +0000 Subject: [PATCH 7/9] remove redundant barcode_printers --- app/controllers/sdb/sample_manifests_controller.rb | 1 - 1 file changed, 1 deletion(-) diff --git a/app/controllers/sdb/sample_manifests_controller.rb b/app/controllers/sdb/sample_manifests_controller.rb index 8f005e593a..b34d6c136b 100644 --- a/app/controllers/sdb/sample_manifests_controller.rb +++ b/app/controllers/sdb/sample_manifests_controller.rb @@ -36,7 +36,6 @@ def index def show @study_id = @sample_manifest.study_id @samples = @sample_manifest.samples.paginate(page: params[:page]) - @barcode_printers = @sample_manifest.applicable_barcode_printers.pluck(:name) @barcode_types = Rails.application.config.tube_manifest_barcode_config[:barcode_type_labels].values.sort @asset_type = @sample_manifest.asset_type end From d0170349b449d127cd414fe52e133ce8a005fa83 Mon Sep 17 00:00:00 2001 From: Wendy Yang Date: Tue, 10 Mar 2026 09:24:29 +0000 Subject: [PATCH 8/9] fix the indentation --- app/views/shared/_printer_list.html.erb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app/views/shared/_printer_list.html.erb b/app/views/shared/_printer_list.html.erb index f27fb221eb..5d7a1a3d00 100644 --- a/app/views/shared/_printer_list.html.erb +++ b/app/views/shared/_printer_list.html.erb @@ -1,8 +1,8 @@
- + <% printer_list = BarcodePrinter.alphabetical.includes(:barcode_printer_type).all.group_by {|printer| "#{printer.barcode_printer_type.name} (#{printer.active? ? 'Active' : 'Inactive'})" } %> + <% printer_list.each do |group, printers| %> <% printers.each do |printer| %> From 9e4bfff30c81e988e4e37e0b8e16ce3c6321951e Mon Sep 17 00:00:00 2001 From: Wendy Yang Date: Thu, 12 Mar 2026 16:06:15 +0000 Subject: [PATCH 9/9] add print label tests --- .../sample_manifest_controller_spec.rb | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) diff --git a/spec/controllers/sample_manifest_controller_spec.rb b/spec/controllers/sample_manifest_controller_spec.rb index f2a429602f..24f78851a7 100644 --- a/spec/controllers/sample_manifest_controller_spec.rb +++ b/spec/controllers/sample_manifest_controller_spec.rb @@ -55,6 +55,73 @@ end end + describe 'POST #print_labels' do + let!(:user) { create(:user, swipecard_code: '123456') } + + before do + user.grant_administrator + session[:user] = user.id + request.env['HTTP_REFERER'] = '/' + end + + context 'when printing labels for a plate manifest' do + let!(:sample_manifest) { create(:sample_manifest, asset_type: 'plate') } + let(:print_job) { instance_double(LabelPrinter::PrintJob) } + + before do + allow(LabelPrinter::PrintJob).to receive(:new).and_return(print_job) + allow(print_job).to receive_messages(execute: true, success: 'Printed') + end + + it 'prints successfully' do + post :print_labels, + params: { + id: sample_manifest.id, + printer: 'printer1' + } + + expect(flash[:notice]).to eq('Printed') + end + end + + context 'when printing labels for a tube manifest with 2D barcodes' do + subject(:make_request) do + post :print_labels, + params: { + id: sample_manifest.id, + printer: 'printer1', + barcode_type: '2D Barcode' + } + end + + let!(:sample_manifest) { create(:sample_manifest, asset_type: '1dtube') } + let(:print_job) { instance_double(LabelPrinter::PrintJob) } + + before do + allow(controller).to receive(:label_template_for_2d_barcodes).and_return('2d_template') + allow(LabelPrinter::PrintJob).to receive(:new).and_return(print_job) + allow(print_job).to receive_messages(execute: true, success: 'Printed') + make_request + end + + it 'passes the 2D label template to the print job' do + expect(LabelPrinter::PrintJob).to have_received(:new).with( + 'printer1', + LabelPrinter::Label::SampleManifestRedirect, + hash_including( + sample_manifest: sample_manifest, + label_template_name: '2d_template', + barcode_type: '2D Barcode' + ) + ) + end + + it 'prints successfully' do + expect(flash[:notice]).to eq('Printed') + end + end + end + def expect_correct_attributes(sample_manifest, study, supplier, purpose) # rubocop:todo Metrics/AbcSize expect(sample_manifest.study_id).to eq(study.id) expect(sample_manifest.supplier_id).to eq(supplier.id)