package LIMS::Controller::Local::Worklist::FishWorksheetCustom;
use base 'LIMS::Base';
use Moose;
with(
'LIMS::Controller::Roles::Misc', 'LIMS::Controller::Roles::User',
'LIMS::Controller::Roles::DataMap', 'LIMS::Local::Role::Worklist',
'LIMS::Controller::Roles::FormData',
);
has 'tt_name' => ( is => 'rw', isa => 'Str' );
__PACKAGE__->meta->make_immutable( inline_constructor => 0 );
use Data::Dumper;
use File::Basename qw(basename);
use URI::Escape qw( uri_unescape);
use Ref::Util 'is_arrayref'; # dont do ref $foo eq 'ARRAY'
# ------------------------------------------------------------------------------
sub default : StartRunmode {
my $self = shift;
# get CGI parameters
my $data =
$self->get_data_from_dfv( $self->validate('fish_custom_worklist') );
if ( not exists $data->{request_id} or not exists $data->{template} ) {
my $url = $self->query->url()
. '/local_worklist?function_name=fish_worksheets_custom';
return $self->redirect($url);
}
my @request_ids =
is_arrayref( $data->{request_id} )
? @{ $data->{request_id} }
: ( $data->{request_id} );
my $template = uri_unescape( $data->{template} );
# check only allowed characters in template filename and template found
my @template_names =
map { basename $_ } $self->get_fish_custom_template_names;
if ( $template =~ m{\A([\w ./-]+)\z}mxs
and grep { $template eq $_ } @template_names )
{
$self->tt_params( fish_template => $template );
}
else {
die "invalid template parameter: $template"
; # will only get here if bypassing form
}
{
# get request & report data for request_ids:
my %args = ( # to use existing method used by Search function
search_constraints => { id => \@request_ids },
); # warn Dumper \%args;
my $requests = $self->model('Request')->find_requests( \%args );
$self->tt_params( requests => $requests ); # warn Dumper $requests;
}
{ # get lab-test data from FISH section:
my %args = (
section_name => 'FISH',
request_id => \@request_ids,
status_option_id => 1,
);
my $request_lab_tests =
$self->model('LabTest')->get_request_lab_tests_for_section( \%args );
# get probesets for fish panels:
my $probes =
$self->_get_fish_panel_probes_as_test_names(); # warn Dumper $probes;
$self->tt_params( panel_probes => $probes );
# prepare data here before sending to template
# [{rid => [ probes, ],}
my $template_data = {};
foreach ( grep { $_->status->description !~ /complete|delete/ } @{$request_lab_tests} ) {
my @tests;
if ( $_->lab_test->test_type eq 'panel' ) {
# push panel tests onto @test
if ( exists $probes->{ $_->lab_test->test_name } )
{ # not all probes have tests
push @tests, @{ $probes->{ $_->lab_test->test_name } };
}
}
else {
push @tests, $_->lab_test->test_name;
}
# build template_data->{rid}->[]
push @{ $template_data->{ $_->request_id } }, @tests;
}
$self->tt_params( template_data => $template_data );
}
return $self->render_view(
'worklist/local/fish/custom_templates_wrapper.tt');
}
1;