# prototype script for calculating turnaround times for specific lab-test: BEGIN { use FindBin qw($Bin); # warn $Bin; use lib ( '/home/raj/perl-lib', "$Bin/../lib", ); } use Data::Printer alias => 'p'; use Local::DB; my $lab_section = 'FISH'; my $trial_name = 'NCRI CLL FLAIR'; my $panel_name = 'cll_trial'; my $test_name = 'p53'; $Local::QueryLogger::NO_QUERY_LOGS = 1; # don't need queries in logs dir my $dbix = Local::DB->dbix({ dbname => 'hilis4' }); my $result = do { my $sql = _get_query(); $dbix->query($sql, $trial_name, $panel_name, $lab_section); }; while ( my $data = $result->hash ) { my $manual_request_date = ''; my $auto_request_date = ''; # use manual request date if exists, or auto-request date, or date of screening: my $date = $manual_request_date || $auto_request_date || $data->{screened}; } sub _get_query { return q! SELECT r.id, rh.time as 'screened', FROM requests r JOIN ( request_trial rt JOIN clinical_trials ct on rt.trial_id = ct.id ) on rt.request_id = r.id JOIN ( request_lab_test_status rlts JOIN ( lab_tests lt JOIN lab_sections ls on lt.lab_section_id = ls.id ) on rlts.lab_test_id = lt.id ) on rlts.request_id = r.id JOIN lab_test_status_options so on rlts.status_option_id = so.id JOIN request_history rh on ( rh.request_id = r.id AND rh.action = 'screened' ) WHERE ct.trial_name = ? and lt.test_name = ? and ls.section_name = ? and so.description = 'complete'!; } __DATA__ SELECT request_id, `action`, `time` as 'datetime' FROM request_lab_test_history WHERE `action` RLIKE '^(auto-)?requested' and request_id in (??) ORDER BY `time` /* so any repeat tests in chronological order */