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;