package RequestForm::Role::PDS;
use Moo::Role;
with 'LIMS::Controller::Roles::PatientDemographics'; # some methods overriden above
use FindBin;
use Path::Tiny;
use JSON::MaybeXS;
use Data::Dumper::Concise;
# supplies local versions of LIMS::Controller::Roles::PatientDemographics methods:
#-------------------------------------------------------------------------------
sub get_session_data { shift->session->read('_pds_data') } # original assumed CGI::Session
sub session_store_hashref {
my ($self, $data, $key_name) = @_;
$self->session->write($key_name => $data);
}
sub require_proxy {
shift->settings->{patient_demographic_service}->{pds_proxy} ? 1 : 0;
}
sub get_username { 'RequestForm' } # maybe better to use remote IP address
sub user_profile { { id => 459 } } # hmds.lth - can't use HILIS user.id
sub get_logfile { path($FindBin::RealBin, '..', 'logs/sms.csv')->realpath }
sub messages { shift->settings->{patient_demographic_service}->{messages} }
sub cfg { shift->settings->{patient_demographic_service} }
#-------------------------------------------------------------------------------
sub patient_demographic_service {
my ($self, $data) = @_;
my $nhs_number = $data->{nhs_number};
my $session = $self->session; # warn Dumper $session;
# create hash of patient data used by PDS & store in session:
my %patient = map +($_ => $data->{$_}),
qw(last_name first_name gender nhs_number);
$patient{dob} = $data->{dob}->dmy;
# check that submitted vars haven't changed - compare to session stored:
if ( my $stored = $session->read($nhs_number) ) { # warn 'have data';
my $json = JSON->new->canonical;
# warn Dumper [$json->encode($stored),$json->encode(\%patient)];
return 0 if ( $json->encode($stored) eq $json->encode(\%patient) );
}
else { # warn 'no data - writing';
$session->write($nhs_number => \%patient);
}
# get result of PDS lookup:
my $pds_result = $self->get_pds_data($data); # warn Dumper $pds_result;
return $pds_result;
}
1;