package LIMS::Model::LabTest; use strict; use parent 'LIMS::Model::Base'; #------------------------------------------------------------------------------- sub get_all_active_lab_tests { my $self = shift; my %args = ( require_objects => 'lab_section', sort_by => 'field_label', ); # get all lab_tests rows as arrayref: my $data = LIMS::DB::LabTest::Manager->get_lab_tests_iterator(%args); # DEBUG $data; return $data; } #------------------------------------------------------------------------------- sub get_request_lab_tests_status { my ($self, $request_id) = @_; my %args = ( query => [ request_id => $request_id ], require_objects => [ 'lab_test.lab_section', 'user', 'status' ], sort_by => 'lab_tests.field_label', ); #$self->set_rose_debug(1); my $lab_test_results = LIMS::DB::RequestLabTestStatus::Manager ->get_request_lab_test_status(%args); #$self->set_rose_debug(0); return $lab_test_results; } #------------------------------------------------------------------------------- sub get_request_lab_tests_status_for_section { my $self = shift; my $args = shift; # warn Dumper $args; my %args = ( query => [ section_name => $args->{section_name}, request_id => $args->{request_id}, ], require_objects => [ 'lab_test.lab_section', 'status' ], ); #$self->set_rose_debug(1); my $data = LIMS::DB::RequestLabTestStatus::Manager ->get_request_lab_test_status(%args); #$self->set_rose_debug(0); return $data; } #------------------------------------------------------------------------------- sub get_request_lab_tests_for_section { my $self = shift; my $args = shift; # warn Dumper $args; my %args = ( query => [ section_name => $args->{section_name}, request_id => $args->{request_id}, ], require_objects => [ 'lab_test.lab_section' ], ); my $data = LIMS::DB::RequestLabTestStatus::Manager ->get_request_lab_test_status(%args); return $data; } #------------------------------------------------------------------------------- sub get_status_option { my $self = shift; my $id = shift; my $option = LIMS::DB::LabTestStatusOption->new(id => $id)->load; # DEBUG $test; return $option; } #------------------------------------------------------------------------------- sub get_status_options { my $self = shift; my $options = LIMS::DB::LabTestStatusOption::Manager ->get_lab_test_status_options; return $options; } #------------------------------------------------------------------------------- sub update_status_options { my $self = shift; my $data = shift; # DEBUG $section; return; my %args = ( class => 'LabTestStatusOption', data => $data ); return $self->update_object(\%args); } #------------------------------------------------------------------------------- =begin # not in use ? # need to return 1 if it's unique: sub check_lab_test_unique { my $self = shift; my $data = shift; my %args = ( query => [ test_name => $data->{test_name}, lab_section_id => $data->{lab_section_id}, ], ); #$self->set_rose_debug(1); my $count = LIMS::DB::LabTest::Manager->get_lab_tests_count(%args); #$self->set_rose_debug(0); # if $count exists, it's not unique so return inverse: return ! $count; } =cut #------------------------------------------------------------------------------- sub get_lab_test { my $self = shift; my $id = shift; my $test = LIMS::DB::LabTest->new(id => $id)->load; # DEBUG $test; return $test; } #------------------------------------------------------------------------------- sub get_lab_test_by_name { my ($self, $params) = @_; my $test = LIMS::DB::LabTest->new(%$params)->load; # DEBUG $test; return $test; } #------------------------------------------------------------------------------- sub get_lab_section_for_test_name { my ($self, $test_name) = @_; my %query = ( query => [ test_name => $test_name ], require_objects => 'lab_section', ); my $test = LIMS::DB::LabTest::Manager->get_lab_tests(%query); return $test; } #------------------------------------------------------------------------------- sub get_lab_tests_count { my $self = shift; my $args = shift || {}; # optional query params (lab_Section_id) # restrict by lab_section_id if supplied: if ( my $lab_section_id = $args->{lab_section_id} ) { # put 'lab_section_id' into $args->{query} so it's preserved for later: push @{ $args->{query} }, ( lab_section_id => $lab_section_id ); # delete 'lab_section_id' entry in original data structure: delete $args->{lab_section_id}; # $args gets passed to get_lab_tests() } # get all lab_tests count (restricted by lab_section_id if supplied): my $count = LIMS::DB::LabTest::Manager->get_lab_tests_count(%$args); return $count; } #------------------------------------------------------------------------------- sub get_lab_tests { my $self = shift; my $params = shift || {}; $params->{require_objects} = 'lab_section'; $params->{sort_by} ||= 'field_label'; # $self->debug($params); # get all lab_tests as arrayref - restrict by lab_section_id if supplied # by get_lab_tests_count() method: my $data = LIMS::DB::LabTest::Manager->get_lab_tests(%$params); return $data; } #------------------------------------------------------------------------------- sub get_section_lab_tests { my ($self, $query_args) = @_; my $lab_tests = LIMS::DB::LabTest::Manager->get_lab_tests( query => [ %$query_args ], require_objects => 'lab_section', ); return $lab_tests; } #------------------------------------------------------------------------------- # gets row count for number of lab_tests with has_results = 'yes', preserves query # params for later use in get_resultable_lab_tests(): sub get_resultable_lab_tests_count { my $self = shift; my $args = shift || {}; $args->{query} = [ has_results => 'yes' ]; # restrict by lab_section_id if supplied: if ( my $lab_section_id = $args->{lab_section_id} ) { # put 'lab_section_id ' into query params: push @{ $args->{query} }, ( lab_section_id => $lab_section_id ); # delete 'lab_section_id' entry in original data structure: delete $args->{lab_section_id}; # $args gets passed to get_resultable_lab_tests() } my $count = LIMS::DB::LabTest::Manager->get_lab_tests_count(%$args); return $count; } #------------------------------------------------------------------------------- sub get_resultable_lab_tests { my $self = shift; my $args = shift || {}; # query params set in get_resultable_lab_tests_count() # add require_objects for Manager get_lab_tests() method: $args->{require_objects} = 'lab_section'; $self->debug($args); my $data = LIMS::DB::LabTest::Manager->get_lab_tests(%$args); return $data; } # ------------------------------------------------------------------------------ sub get_lab_test_result_options { my $self = shift; my $args = shift || {}; $args->{require_objects} = 'data_type'; $args->{sort_by} ||= [ 'data_type.description', 'value' ]; my $options = LIMS::DB::LabTestResultOption::Manager ->get_lab_test_result_options(%$args); return $options; } # ------------------------------------------------------------------------------ sub get_lab_test_result_option { my ($self, $result_option_id) = @_; my $option = LIMS::DB::LabTestResultOption->new(id => $result_option_id) ->load(with => 'data_type'); return $option; } #------------------------------------------------------------------------------- sub get_lab_test_data_types { my $self = shift; my %args = ( require_objects => ['lab_test.lab_section','data_type'], ); my $data = LIMS::DB::LabTestDataType::Manager->get_lab_test_data_type(%args); return $data; } #------------------------------------------------------------------------------- sub get_lab_test_data_type { my ($self, $lab_test_id) = @_; my $data = LIMS::DB::LabTest->new(id => $lab_test_id) ->load(with => ['lab_section', 'lab_test_data_type']); return $data; } #------------------------------------------------------------------------------- sub update_lab_test_data_type { my $self = shift; my $data = shift; # $self->debug($data); eval { LIMS::DB::LabTestDataType->new(%$data)->insert_or_update; }; return $@ if $@; } #------------------------------------------------------------------------------- sub update_lab_tests { my $self = shift; my $data = shift || return; # DEBUG $data; return; # shouldn't receive empty data from controller my %args = ( class => 'LabTest', data => $data ); return $self->update_object(\%args); } #------------------------------------------------------------------------------- sub update_lab_test_result_option { my $self = shift; my $data = shift || return; # DEBUG $data; my %args = ( class => 'LabTestResultOption', data => $data ); return $self->update_object(\%args); } 1;