@@ -, +, @@ birth from checkout and patron quick searches incorrect format is an existing bug) --- C4/Utils/DataTables/Members.pm | 7 +++ t/db_dependent/Utils/Datatables_Members.t | 77 ++++++++++++++++++++++++++++--- 2 files changed, 78 insertions(+), 6 deletions(-) --- a/C4/Utils/DataTables/Members.pm +++ a/C4/Utils/DataTables/Members.pm @@ -88,10 +88,17 @@ sub search { foreach my $term (@terms) { next unless $term; + my $term_is_dt = eval { local $SIG{__WARN__}={}; Koha::DateUtils::output_pref( { str=>$term, dateonly=>1, dateformat=>'sql' } ); }; + + if ( $term_is_dt ){ + $searchfieldstype = "dateofbirth" ; + $term = $term_is_dt; + } else { $term .= '%' # end with anything if $term !~ /%$/; $term = "%$term" # begin with anythin unless start_with if $searchtype eq 'contain' && $term !~ /^%/; + } my @where_strs_or; for my $searchfield ( split /,/, $searchfields->{$searchfieldstype} ) { --- a/t/db_dependent/Utils/Datatables_Members.t +++ a/t/db_dependent/Utils/Datatables_Members.t @@ -17,7 +17,7 @@ use Modern::Perl; -use Test::More tests => 27; +use Test::More tests => 47; use C4::Context; use C4::Members; @@ -60,7 +60,7 @@ my %john_doe = ( surname => 'Doe', categorycode => $categorycode, branchcode => $branchcode, - dateofbirth => '', + dateofbirth => '1983-03-01', dateexpiry => '9999-12-31', userid => 'john.doe' ); @@ -71,7 +71,7 @@ my %john_smith = ( surname => 'Smith', categorycode => $categorycode, branchcode => $branchcode, - dateofbirth => '', + dateofbirth => '1982-02-01', dateexpiry => '9999-12-31', userid => 'john.smith' ); @@ -82,7 +82,7 @@ my %jane_doe = ( surname => 'Doe', categorycode => $categorycode, branchcode => $branchcode, - dateofbirth => '', + dateofbirth => '1983-03-01', dateexpiry => '9999-12-31', userid => 'jane.doe' ); @@ -93,7 +93,7 @@ my %jeanpaul_dupont = ( surname => 'Dupont', categorycode => $categorycode, branchcode => $branchcode, - dateofbirth => '', + dateofbirth => '1982-02-01', dateexpiry => '9999-12-31', userid => 'jeanpaul.dupont' ); @@ -104,7 +104,7 @@ my %dupont_brown = ( surname => 'Brown', categorycode => $categorycode, branchcode => $branchcode, - dateofbirth => '', + dateofbirth => '1979-01-01', dateexpiry => '9999-12-31', userid => 'dupont.brown' ); @@ -362,6 +362,71 @@ $search_results = C4::Utils::DataTables::Members::search({ is( $search_results->{ iTotalDisplayRecords }, 1, "Jean Paul Dupont is found using contains and two terms search 'Jea Pau' (Bug 15252)"); +my @datetimeprefs = ("dmydot","iso","metric","us"); +my %dates_in_pref = ( + dmydot => ["01.02.1982","01.03.1983","01.01.1979","01.01.1988"], + iso => ["1982-02-01","1983-03-01","1979-01-01","1988-01-01"], + metric => ["01/02/1982","01/03/1983","01/01/1979","01/01/1988"], + us => ["02/01/1982","03/01/1983","01/01/1979","01/01/1988"], + ); +foreach my $dateformloo (@datetimeprefs){ + t::lib::Mocks::mock_preference('dateformat', $dateformloo); + $search_results = C4::Utils::DataTables::Members::search({ + searchmember => $dates_in_pref{$dateformloo}[0], + searchfieldstype => 'standard', + searchtype => 'contain', + branchcode => $branchcode, + dt_params => \%dt_params + }); + + is( $search_results->{ iTotalDisplayRecords }, 2, + "dateformat: $dateformloo Two borrowers have dob $dates_in_pref{$dateformloo}[0], standard search fields overriden"); + + $search_results = C4::Utils::DataTables::Members::search({ + searchmember => $dates_in_pref{$dateformloo}[2], + searchfieldstype => 'standard', + searchtype => 'contain', + branchcode => $branchcode, + dt_params => \%dt_params + }); + + is( $search_results->{ iTotalDisplayRecords }, 1, + "dateformat: $dateformloo One borrower has dob $dates_in_pref{$dateformloo}[2], standard search fields overriden"); + + $search_results = C4::Utils::DataTables::Members::search({ + searchmember => $dates_in_pref{$dateformloo}[1], + searchfieldstype => 'dateofbirth', + searchtype => 'contain', + branchcode => $branchcode, + dt_params => \%dt_params + }); + + is( $search_results->{ iTotalDisplayRecords }, 2, + "dateformat: $dateformloo Two borrowers have dob $dates_in_pref{$dateformloo}[1], dateofbirth search field works"); + + $search_results = C4::Utils::DataTables::Members::search({ + searchmember => $dates_in_pref{$dateformloo}[3], + searchfieldstype => 'dateofbirth', + searchtype => 'contain', + branchcode => $branchcode, + dt_params => \%dt_params + }); + + is( $search_results->{ iTotalDisplayRecords }, 0, + "dateformat: $dateformloo No borrowers have dob $dates_in_pref{$dateformloo}[3], dateofbirth search field works"); + + $search_results = C4::Utils::DataTables::Members::search({ + searchmember => $dates_in_pref{$dateformloo}[3], + searchfieldstype => 'standard', + searchtype => 'contain', + branchcode => $branchcode, + dt_params => \%dt_params + }); + + is( $search_results->{ iTotalDisplayRecords }, 0, + "dateformat: $dateformloo No borrowers have dob $dates_in_pref{$dateformloo}[3], standard search field overridden"); +} + # End $dbh->rollback; --