RSS Git Download  Clone
Raw Blame History
package Reporter::SQL::Lib;

use SQL::Abstract::More; # extends SQL::Abstract to support joins
use Reporter::Class; # provides Moo, Modern::Perl & Data::Printer::p

use lib '/home/raj/perl-lib';
use Local::QueryLibrary;

has sql_abs => ( is => 'lazy', builder => sub { SQL::Abstract::More->new } );
has sql_lib => ( is => 'lazy', builder => sub { Local::QueryLibrary->new } );

#-------------------------------------------------------------------------------
sub request_data {
    my ($self, $request_number, $yr) = @_;

    my @cols = ( qw/
        r.id
        r.request_number
        r.year
        r.created_at|registered
        p.last_name
        p.first_name
        p.nhs_number
        p.dob
        rs.display_name|location /,
        'group_concat(s.sample_code order by s.sample_code)|specimen',
    ); # p @cols;

    # SQL::Abstract::More join (rr & d = left joins, unused but retained for syntax):
    my @joins = (
            # table|alias               # FK => PK relationship
        qw{
            requests|r                  r.patient_case_id=pc.id
            patient_case|pc             pc.patient_id=p.id
            patients|p                  pc.referral_source_id=rs.id
            referral_sources|rs         =>{rr.request_id=r.id}
            request_report_view|rr      =>{rr.diagnosis_id=d.id}
            diagnoses|d                 rs2.request_id=r.id
            request_specimen|rs2        rs2.specimen_id=s.id
            specimens|s
        }
    );
    my ($sql, @bind) = $self->sql_abs->select(
        -columns => [ @cols ],
        -from    => [ -join => @joins ],
        -where   => {
            'r.request_number' => $request_number,
            'r.year' => $yr + 2000,
        },
    ); # p $sql;
    return ($sql, @bind);
}

#-------------------------------------------------------------------------------
sub report_data {
    my ($self, $where) = @_; # p $where;

    my @cols = ( qw/
        r.*
        d1.name|diagnosis
        d2.name|secondary_diagnosis /
    );
    my @joins = qw(
        request_draft_report|r    r.diagnosis_id=d1.id
        diagnoses|d1              =>{r.secondary_diagnosis_id=d2.id}
        diagnoses|d2
    );
    my ($sql, @bind) = $self->sql_abs->select(
        -columns => [ @cols ],
        -from    => [ -join => @joins ],
        -where   => $where,
    ); # p $sql;
    return ($sql, @bind);
}

#-------------------------------------------------------------------------------
sub result_summaries {
    my ($self, $request_id) = @_; # p $request_id;

    my @cols = qw( ls.section_name rrs.results_summary );
    my @joins = (
        'request_result_summaries|rrs' => 'rrs.lab_section_id=ls.id' => 'lab_sections|ls'
    );
    my ($sql, @bind) = $self->sql_abs->select(
        -columns => [ @cols ],
        -from    => [ -join => @joins ],
        -where   => { 'rrs.request_id' => $request_id },
    ); # p $sql;
    return ($sql, @bind);
}

#-------------------------------------------------------------------------------
sub lab_test_results {
    my ($self, $request_id) = @_; # p $request_id;

    my @cols = qw( ls.section_name|section lt.field_label|test ltr.result );
    my @joins = qw(
        request_lab_test_results|ltr        ltr.lab_test_id=lt.id
        lab_tests|lt                        lt.lab_section_id=ls.id
        lab_sections|ls
    );
    my ($sql, @bind) = $self->sql_abs->select(
        -columns => [ @cols ],
        -from    => [ -join => @joins ],
        -where   => { 'ltr.request_id' => $request_id },
    ); # p $sql;
    return ($sql, @bind);
}

1;