package LIMS::Controller::PAS;
use strict;
use base 'LIMS::Base';
use LIMS::Local::PAS;
use LIMS::Local::Utils; # format_postcode()
#-------------------------------------------------------------------------------
sub search : StartRunmode {
my $self = shift; $self->_debug_path($self->get_current_runmode);
my $patient_id =
$self->param('id') || $self->query->param('_patient_id'); # warn $case_id;
my $patient = $self->model('Patient')->get_patient($patient_id);
my $cases = $self->model('PatientCase')->get_cases_by_patient_id($patient_id);
my %all_unit_numbers =
map { $_->unit_number, 1 }
grep { $_->unit_number ne $_->meta->column('unit_number')->default }
@$cases;
my @unit_numbers = sort keys %all_unit_numbers;
$self->tt_params(
patient => $patient,
unit_numbers => \@unit_numbers,
);
my $html = $self->tt_process;
return $self->fill_form($html);
}
#-------------------------------------------------------------------------------
sub do_search : Runmode {
my $self = shift; $self->_debug_path($self->get_current_runmode);
my $data = $self->query->Vars; # $self->debug($data);
my $number_of_vars = grep $data->{$_},
qw(last_name first_name dob unit_number nhs_number post_code); # warn $number_of_vars;
unless ( $number_of_vars >= 2 ) { # warn 'Insufficient no. of vars';
$self->flash( error => $self->messages('demographics')->{pas_insufficient_vars} );
return $self->forward('search');
}
my @pas_config_settings = qw(pas_address pas_username pas_pwd);
my %pas_config = map {
$_ => $self->cfg('settings')->{$_};
} @pas_config_settings; # $self->debug(\%pas_config);
# need all required PAS config settings, or return:
return if grep ! $pas_config{$_}, @pas_config_settings;
if ( my $zip = $data->{post_code} ) {
my $formatted_postcode = LIMS::Local::Utils::format_postcode($zip);
$data->{post_code} = $formatted_postcode;
}
my %args = (
patient => $data,
config => \%pas_config,
messages => $self->messages('demographics'),
);
my $pas = LIMS::Local::PAS->new(\%args);
my $result = $pas->query; # $self->debug($result);
my $is_arrayref = sub { ref shift eq 'ARRAY' };
$self->tt_params(
pas_results => $result,
is_arrayref => $is_arrayref,
);
return $self->forward('search');
}
1;