package RequestForm::Validate;
use Data::FormValidator;
use Data::FormValidator::Constraints qw(:closures);
use Data::Dumper::Concise;
use Moo;
use LIMS::Local::Utils;
sub validate {
my $self = shift;
my $vars = shift;
my $defaults = _dfv_defaults();
my $dfv = Data::FormValidator->new({}, $defaults);
my $dfv_profile = dfv_profile(); # DEBUG($dfv_profile);
my $results = $dfv->check($vars, $dfv_profile); # DEBUG($results);
return $results;
}
sub dfv_profile {
my @required = qw(
last_name first_name nhs_number gender location referrer day month year
);
my @optional = qw( patient_number tb );
return {
required => \@required,
optional => \@optional,
dependencies => {
doi => 'tb',
},
constraint_methods => {
nhs_number => _check_nhs_number(),
year => _check_date(),
},
msgs => {
constraints => { },
},
}
}
sub _dfv_defaults {
return {
missing_optional_valid => 1,
filters => 'trim', # trims white space pre/post field param
field_filters => { }, # use for forcing field formats eg foo => 'uc'
msgs => {
any_errors => 'dfv_errors', # default err__
invalid => 'INVALID', # default 'Invalid'
missing => 'MISSING', # default 'Missing'
format => '<div class="dfv-err">%s</div>',
},
};
}
sub _check_nhs_number {
return sub {
my $dfv = shift; # warn Dumper $dfv;
my $nhs_number = shift || return 0; # warn 'NHSNo:'.$nhs_number;
# check_nhsno() return true if valid:
my $is_valid = LIMS::Local::Utils::check_nhsno( $nhs_number ); # warn $is_valid;
return $is_valid;
};
}
sub _check_date {
return sub {
my $dfv = shift; # warn Dumper $dfv;
my $data = $dfv->get_filtered_data; # warn Dumper $data;
my $date = join '/', @{$data}{qw/day month year/}; # warn $date;
my $is_valid = LIMS::Local::Utils::check_date($date); # warn $is_valid;
return $is_valid;
};
}
1;