package LIMS::Controller::Resources;
use Moose;
BEGIN { extends 'LIMS::Base'; }
with (
'LIMS::Controller::Roles::DataMap',
'LIMS::Controller::Roles::DataFile',
);
__PACKAGE__->meta->make_immutable(inline_constructor => 0);
use Data::Dumper;
#-------------------------------------------------------------------------------
sub menu : StartRunmode {
my $self = shift; $self->_debug_path($self->get_current_runmode);
return $self->tt_process;
}
#-------------------------------------------------------------------------------
sub list_all_screen_tests : Runmode {
my $self = shift; $self->_debug_path($self->get_current_runmode);
my $all_assigned_tests = $self->model('Screen')->get_all_assigned_tests;
my %tests;
while (my $test = $all_assigned_tests->next) { # $self->debug($test);
my $description = $test->screen->description;
my $field_label = $test->lab_test->field_label;
push @{ $tests{$description} }, $field_label;
}
$self->tt_params(
tests => \%tests,
);
return $self->tt_process;
}
#-------------------------------------------------------------------------------
sub data_file : Runmode {
my $self = shift; $self->_debug_path($self->get_current_runmode);
my $errs = shift;
return $self->forbidden() unless $self->user_can('do_admin');
return $self->tt_process('resources/new_data_file.tt', { error => $errs });
}
#-------------------------------------------------------------------------------
sub active_sessions : Runmode {
my $self = shift;
my $args = { sort_by => 'time desc' };
my $sessions = $self->model('Base')->get_objects('Session', $args);
$self->tt_params( sessions => $sessions );
return $self->tt_process;
}
#-------------------------------------------------------------------------------
sub get_data_file : Runmode {
my $self = shift; $self->_debug_path($self->get_current_runmode);
return $self->forbidden() unless $self->user_can('do_admin');
my $method = $self->query->param('method'); # warn $method;
if ($method eq 'url') {
return $self->data_file_from_url; # Role::DataFile
}
elsif ($method eq 'upload') {
return $self->data_file_from_upload; # Role::DataFile
}
else {
return $self->forward('data_file');
}
}
#-------------------------------------------------------------------------------
sub user_messages : Runmode {
my $self = shift; $self->_debug_path($self->get_current_runmode);
if ( my $recipient_id = $self->param('id') ) { # if passed from 'hello' page
my $user = $self->model('User')->get_user_profile($recipient_id);
$self->tt_params( recipient => $user );
}
else {
# get list of users:
my $args = { sort_by => [ qw(last_name first_name) ] }; # override default
my $users = $self->model('User')->get_all_users($args);
$self->tt_params( users => $users );
# get any user-to-user messages:
my $profile = $self->authen->store->fetch('yooza_profile');
my $messages = $self->model('User')->get_user_messages($profile->{id});
$self->tt_params( user_messages => $messages );
}
return $self->tt_process;
}
#-------------------------------------------------------------------------------
sub new_message : Runmode {
my $self = shift; $self->_debug_path($self->get_current_runmode);
my $vars = $self->query->Vars();
return $self->forward('user_messages')
if grep { ! $vars->{$_}} qw(user_id message); # dfv overkill for 2 vars ??
my $rtn = $self->model('User')->new_user_message($vars);
if ($rtn) {
return $self->error($rtn);
}
else {
$self->flash( info => $self->messages('user')->{msg_sent});
return $self->redirect( $self->query->url . '/resources/user_messages' );
}
}
#-------------------------------------------------------------------------------
sub new_diagnoses : Runmode {
my $self = shift; $self->_debug_path($self->get_current_runmode);
{ # get list of locations from email_contacts table:
my $locations_map = $self->user_locations_map;
$self->tt_params( locations => $locations_map );
}
# if we have an org_code to search on:
if ( my $org_code = $self->query->param('org_code') ) {
my $duration = $self->query->param('duration') || 7; # default
my %args = (
org_code => $org_code,
duration => $duration,
);
my $data = $self->model('Request')->get_new_and_relapsed_cases(\%args);
# sort data by report_history.time since Rose can't do it:
my @sorted = sort { # warn Dumper $a->request_history->time;
my $A = $a->request_history->[0]->time->truncate( to => 'day' );
my $B = $b->request_history->[0]->time->truncate( to => 'day' );
DateTime->compare( $A, $B ) # date 1st
|| $a->year <=> $b->year # year 2nd
|| $a->request_number <=> $b->request_number; # req_no 3rd
} @$data;
$self->tt_params( results => \@sorted );
}
return $self->tt_process();
}
1;