package LIMS::Model::Roles::ScreenUpdate; use Moose::Role; has status_option_new => ( is => 'ro', isa => 'LIMS::DB::LabTestStatusOption', lazy_build => 1, ); #------------------------------------------------------------------------------- # creates new lab_tests according to ScreenLabTest data for this screen_id # doesn't overwrite existing tests sub do_lab_tests { my $self = shift; my $data = shift; my %args = ( query => [ screen_id => $data->{screen_id} ], ); my $lab_tests = LIMS::DB::ScreenLabTest::Manager->get_screen_lab_tests(%args); foreach my $t (@$lab_tests) { $data->{lab_test_id} = $t->lab_test_id; $self->do_new_lab_test($data); } } #------------------------------------------------------------------------------- sub do_new_lab_test { # shared by M::Request::new_request() my $self = shift; my $data = shift; # requires lab_test_id && user_id my $status_option = $self->status_option_new; LIMS::DB::RequestLabTestStatus->new( user_id => $self->user_profile->{id}, lab_test_id => $data->{lab_test_id}, request_id => $data->{_request_id}, status_option_id => $status_option->id, )->load_or_insert; # in case test already requested manually } #------------------------------------------------------------------------------- sub do_lab_test_details { my $self = shift; my $data = shift; my %args = ( query => [ screen_id => $data->{screen_id} ], ); my $lab_test_details = LIMS::DB::ScreenLabTestDetail::Manager->get_screen_lab_test_details(%args); foreach my $detail (@$lab_test_details) { # should only be 0 or 1: LIMS::DB::RequestLabSectionNote->new( details => $detail->test_details, request_id => $data->{_request_id}, lab_section_id => $detail->lab_section_id, )->load_or_insert; # in case test_detail already exists } } #------------------------------------------------------------------------------- sub _build_status_option_new { my $self = shift; my $status_option = LIMS::DB::LabTestStatusOption->new(description => 'new')->load; return $status_option; } 1;