#!/usr/bin/env perl use strict; use warnings; # 0600 on Mon, Thurs, Sat my $JUST_TESTING = 0; # dumps xl file only # recipients =================================================================== my @recipients = qw( rf.cytogenetics e.nacheva ); # ============================================================================== BEGIN { use lib ( '/home/raj/perl5/lib/perl5', # *must* come before FindBin($Bin) '/home/raj/perl-lib', ); use FindBin qw($Bin); # warn $Bin; use lib $Bin . '/../../../lib'; } use Spreadsheet::WriteExcel::Simple; use LIMS::Local::ScriptHelpers; use Data::Printer alias=>'p'; use Local::DB; use IO::All; my $tools = LIMS::Local::ScriptHelpers->new(); my $config = $tools->config(); my $today = $tools->time_now; $tools->test_only($JUST_TESTING); #------------------------------------------------------------------------------- my $filename = sprintf 'outstanding_rfh_%s.xls', $today->ymd('_'); # warn $filename; my $subject = sprintf 'Outstanding RFH requests [%s]', $today->dmy; # warn $subject; exit; #------------------------------------------------------------------------------- my $dbix = Local::DB->dbix({ dbname => 'uclh' }); $Local::QueryLogger::NO_QUERY_LOGS = 1; # don't need queries in logs dir my $sql = _get_query(); my $data = $dbix->query($sql)->arrays; # p $data; my $xl = Spreadsheet::WriteExcel::Simple->new; # xl file headers: my @headers = ( 'Request Number', 'BORIS ID', 'Initials', 'Date of Birth', 'Date Created', 'Specimens', 'Tests', 'Section', 'Status', ); $xl->write_bold_row(\@headers); $xl->write_row($_) for @$data; if ($JUST_TESTING) { $xl->save($filename); exit; } my %mail = ( config => $config, subject => $subject, filename => $filename, attachment => $xl->data, ); # p %mail; p @recipients; $tools->send_mail(\%mail, \@recipients); sub _get_query { return q! SELECT CONCAT('U',r.request_number,'/',RIGHT(r.year,2)) as 'Request Number', (SELECT lsfid.foreign_id FROM request_lab_section_foreign_id lsfid WHERE ts.request_id=lsfid.request_id AND lsfid.lab_section_id=4) AS 'BORIS ID', UPPER(CONCAT(LEFT(p.first_name, 1),LEFT(p.last_name, 1))) as 'Initials', DATE_FORMAT(p.dob,'%d-%m-%Y') as 'Date of Birth', DATE_FORMAT(r.created_at,'%d-%m-%Y') as 'Date Created', GROUP_CONCAT(spec.sample_code SEPARATOR ", ") AS 'Specimens', tests.field_label as 'Tests', labs.section_name as 'Section', ltso.description as 'Status' FROM request_lab_test_status ts JOIN lab_test_status_options ltso on (ts.status_option_id = ltso.id) JOIN lab_tests tests on (ts.lab_test_id = tests.id) JOIN lab_sections labs on (labs.id = tests.lab_section_id) JOIN requests r on (r.id = ts.request_id) LEFT JOIN request_specimen rs on (rs.request_id = r.id) JOIN specimens spec on (spec.id = rs.specimen_id) JOIN patient_case pc on (r.patient_case_id = pc.id) JOIN patients p on (pc.patient_id = p.id) JOIN referral_sources refs on (pc.referral_source_id = refs.id) JOIN status_options so on (r.status_option_id = so.id) WHERE ltso.description LIKE '%RFH%' AND ( labs.section_name = 'CG/FISH' OR labs.section_name = 'Gene Variant Screening' ) GROUP BY ts.id ORDER BY r.year, r.request_number, labs.section_name! }