RSS Git Download  Clone
Raw Blame History
package RequestForm::Validate::Ajax;

use Dancer2;
use LIMS::Local::Utils;
use RequestForm::Class; # provides Moo, Local::MooX::Types & LIMS::Local::Debug::p

prefix '/ajax';

# nhs number ajax validation ('get' returns a string, 'post' returns json):
any [ qw(get post) ] => '/validate_nhs_number' => sub {
    my $var = params->{nhs_number}; # p $var;
    my $is_valid = LIMS::Local::Utils::check_nhsno($var) ? 'OK' : 'invalid';

    # web form jquery $.ajax function sends a 'post' request, alternative is $.get
    if (request->is_post) {
        my $json = to_json({ result => $is_valid });
        return $json;
    }
    else { return $is_valid }
};

# bsn.AutoSuggest.jQuery method, returns json:
get '/autosuggest_location' => sub {
    my $params = params;    
    return unless $params->{ref_src} && length $params->{ref_src} >= 3;

    my $results = _get_referral_sources($params); # p $data; # AoH
    my $json = to_json({ results => $results }); # p $json;
    return $json;
};

sub _get_referral_sources {
    my $params = shift; p $params;
    
    my $str = $params->{ref_src};
    my $ctr = $params->{centre};

    my $db = RequestForm::DB->new(dbname => $ctr);
    my $results = $db->get_referral_sources($str); # p $sources;
    
    # manipulate $results to provide keys for AJAX caller:
    my @data = map {
        {
            id    => $_->{id},
            value => $_->{display_name},
            info  => $_->{organisation_code},
        }
    } @$results;
    return \@data;
}

1;