RSS Git Download  Clone
Raw Blame History
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;