RSS Git Download  Clone
Raw Blame History
package LIMS::Model::ClinicalTrial;

use base 'LIMS::Model::Base';

use Data::Dumper;
use strict;

#-------------------------------------------------------------------------------
sub get_trial {
    my ($self, $trial_id) = @_; # DEBUG $trial_id;

    my $data = LIMS::DB::ClinicalTrial->new(id => $trial_id)->load;

    return $data;
}

#-------------------------------------------------------------------------------
sub get_patient_trials {
    my ($self, $data) = @_; # warn Dumper $data;

    my $patient_id = $data->{patient_id};
    my $request_id = $data->{request_id};

    # get all *previous* requests (ie r.id < $request_id) for this patient that
    # have patient_trial entries (join), with any request_trial (left join) entries:
    my $requests = do {
        my @args = (
            query => [
                'patient_trial.patient_id' => $patient_id,
                id => { lt => $request_id }, # previous to this request
            ],
            require_objects => [ 'patient_case.patient.patient_trial.trial' ],
            with_objects    => [ 'request_trial' ],
        );        
        LIMS::DB::Request::Manager->get_requests(@args);
    };
    
    my %h = (); 
    REQ: for my $r(@$requests) { # warn Dumper $r->as_tree;
        # skip unless entry in request_trial table; optional as it's a left-join tbl:
        next REQ unless $r->as_tree->{request_trial}; # as_tree to prevent db lookup

        my $data = $r->patient_case->patient->patient_trial->[0]; # ALWAYS ARRAYREF!!
        my $trial_name = $data->trial->trial_name; # warn Dumper $data->as_tree;
        next REQ if $h{$trial_name}; # may already have trial details from earlier request

        # add trial data to trial-name accessor:
        $h{$trial_name} = $data->as_tree; # $data has everything tt requires
    } # warn Dumper \%h;
    return \%h;
}

#-------------------------------------------------------------------------------
sub get_trials {
    my $self = shift;
    
    # get all rows as arrayref:
    my $data = LIMS::DB::ClinicalTrial::Manager
        ->get_clinical_trials(sort_by => 'trial_name'); # DEBUG $data;

    return $data;
}

#-------------------------------------------------------------------------------
sub get_trial_number {
    my ($self, $patient_id, $trial_id) = @_;
    
    my %data = (
        patient_id => $patient_id,
        trial_id   => $trial_id,
    );
    
    my $patient_trial
        = LIMS::DB::PatientTrial->new(%data)->load(speculative => 1);
    
    return $patient_trial ? $patient_trial->trial_number : undef;
}

#-------------------------------------------------------------------------------
sub update_trials {
    my $self = shift;
    my $data = shift; # DEBUG $trial; # return;

    my %args = ( class => 'ClinicalTrial', data  => $data );
    
    return $self->update_object(\%args);
}

1;