Bugzilla – Attachment 45579 Details for
Bug 15206
Show patron's age when filling date of birth in memberentry.pl
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 15206 - C4::Member::GetAge returns years and months
Bug-15206---C4MemberGetAge-returns-years-and-month.patch (text/plain), 8.29 KB, created by
Alex Arnaud
on 2015-12-10 16:01:35 UTC
(
hide
)
Description:
Bug 15206 - C4::Member::GetAge returns years and months
Filename:
MIME Type:
Creator:
Alex Arnaud
Created:
2015-12-10 16:01:35 UTC
Size:
8.29 KB
patch
obsolete
>From c3aad0861a032e283e7e55291eb16efa543a18e4 Mon Sep 17 00:00:00 2001 >From: Alex Arnaud <alex.arnaud@biblibre.com> >Date: Thu, 10 Dec 2015 11:01:29 +0100 >Subject: [PATCH] Bug 15206 - C4::Member::GetAge returns years and months > >--- > C4/Members.pm | 20 +++++++++++------ > members/memberentry.pl | 4 ++-- > t/db_dependent/Members.t | 53 +++++++++++++++++++++++++--------------------- > 3 files changed, 44 insertions(+), 33 deletions(-) > >diff --git a/C4/Members.pm b/C4/Members.pm >index 19a7cfc..708b98e 100644 >--- a/C4/Members.pm >+++ b/C4/Members.pm >@@ -1640,7 +1640,7 @@ sub GetBorrowercategoryList { > > =head2 GetAge > >- $dateofbirth,$date = &GetAge($date); >+ my ($age_year, $age_month) = &GetAge($dateofbirth); > > this function return the borrowers age with the value of dateofbirth > >@@ -1648,21 +1648,27 @@ this function return the borrowers age with the value of dateofbirth > > #' > sub GetAge{ >- my ( $date, $date_ref ) = @_; >+ my ( $dateofbirth, $date_ref ) = @_; > > if ( not defined $date_ref ) { > $date_ref = sprintf( '%04d-%02d-%02d', Today() ); > } > >- my ( $year1, $month1, $day1 ) = split /-/, $date; >+ my ( $year1, $month1, $day1 ) = split /-/, $dateofbirth; > my ( $year2, $month2, $day2 ) = split /-/, $date_ref; > >- my $age = $year2 - $year1; >- if ( $month1 . $day1 > $month2 . $day2 ) { >- $age--; >+ my $age_year = $year2 - $year1; >+ my $age_month = $month2 - $month1; >+ my $age_day = $day2 - $day1; >+ >+ $age_month-- if $age_day < 0; >+ >+ if ($age_month < 0) { >+ $age_year--; >+ $age_month += 12; > } > >- return $age; >+ return ($age_year, $age_month); > } # sub get_age > > =head2 SetAge >diff --git a/members/memberentry.pl b/members/memberentry.pl >index ae54383..1bd457c 100755 >--- a/members/memberentry.pl >+++ b/members/memberentry.pl >@@ -289,10 +289,10 @@ if ($op eq 'save' || $op eq 'insert'){ > } > > if ( $newdata{dateofbirth} ) { >- my $age = GetAge($newdata{dateofbirth}); >+ my ($age_year, $age_month) = GetAge($newdata{dateofbirth}); > my $borrowercategory=GetBorrowercategory($newdata{'categorycode'}); > my ($low,$high) = ($borrowercategory->{'dateofbirthrequired'}, $borrowercategory->{'upperagelimit'}); >- if (($high && ($age > $high)) or ($age < $low)) { >+ if (($high && ($age_year > $high)) or ($age_year < $low)) { > push @errors, 'ERROR_age_limitations'; > $template->param( age_low => $low); > $template->param( age_high => $high); >diff --git a/t/db_dependent/Members.t b/t/db_dependent/Members.t >index 4c87e84..3157729 100755 >--- a/t/db_dependent/Members.t >+++ b/t/db_dependent/Members.t >@@ -17,7 +17,7 @@ > > use Modern::Perl; > >-use Test::More tests => 74; >+use Test::More tests => 79; > use Test::MockModule; > use Data::Dumper; > use C4::Context; >@@ -374,43 +374,48 @@ sub testAgeAccessors { > my $original_dateofbirth = $member->{dateofbirth}; > > ##Testing GetAge() >- my $age=GetAge("1992-08-14", "2011-01-19"); >- is ($age, "18", "Age correct"); >+ my ($age_year, $age_month) = GetAge("1992-08-14", "2011-01-19"); >+ is ($age_year, "18", "Age year correct"); >+ is ($age_month, "5", "Age month correct"); > >- $age=GetAge("2011-01-19", "1992-01-19"); >- is ($age, "-19", "Birthday In the Future"); >+ ($age_year, $age_month) = GetAge("2011-01-19", "1992-01-19"); >+ is ($age_year, "-19", "Birthday In the Future"); > > ##Testing SetAge() for now() > my $dt_now = DateTime->now(); >- $age = DateTime::Duration->new(years => 12, months => 6, days => 1); >+ my $age = DateTime::Duration->new(years => 12, months => 6, days => 1); > C4::Members::SetAge( $member, $age ); >- $age = C4::Members::GetAge( $member->{dateofbirth} ); >- is ($age, '12', "SetAge 12 years"); >+ ($age_year, $age_month) = C4::Members::GetAge( $member->{dateofbirth} ); >+ is ($age_year, '12', "SetAge 12 years and 6 months"); >+ is ($age_month, '6', "SetAge 12 years and 6 months"); > > $age = DateTime::Duration->new(years => 18, months => 12, days => 31); > C4::Members::SetAge( $member, $age ); >- $age = C4::Members::GetAge( $member->{dateofbirth} ); >- is ($age, '19', "SetAge 18+1 years"); #This is a special case, where months=>12 and days=>31 constitute one full year, hence we get age 19 instead of 18. >+ ($age_year, $age_month) = C4::Members::GetAge( $member->{dateofbirth} ); >+ is ($age_year, '19', "SetAge 18+1 years"); #This is a special case, where months=>12 and days=>31 constitute one full year, hence we get age 19 instead of 18. >+ is ($age_month, '1', "SetAge 18+1 years"); #This is a special case, where months=>12 and days=>31 constitute one full year, hence we get age 19 instead of 18. > > $age = DateTime::Duration->new(years => 18, months => 12, days => 30); > C4::Members::SetAge( $member, $age ); >- $age = C4::Members::GetAge( $member->{dateofbirth} ); >- is ($age, '19', "SetAge 18 years"); >+ ($age_year, $age_month) = C4::Members::GetAge( $member->{dateofbirth} ); >+ is ($age_year, '19', "SetAge 18 years"); >+ is ($age_month, '1', "SetAge 18 years"); > > $age = DateTime::Duration->new(years => 0, months => 1, days => 1); > C4::Members::SetAge( $member, $age ); >- $age = C4::Members::GetAge( $member->{dateofbirth} ); >- is ($age, '0', "SetAge 0 years"); >+ ($age_year, $age_month) = C4::Members::GetAge( $member->{dateofbirth} ); >+ is ($age_year, '0', "SetAge 0 years"); >+ is ($age_month, '1', "SetAge 0 years"); > > $age = '0018-12-31'; > C4::Members::SetAge( $member, $age ); >- $age = C4::Members::GetAge( $member->{dateofbirth} ); >- is ($age, '19', "SetAge ISO_Date 18+1 years"); #This is a special case, where months=>12 and days=>31 constitute one full year, hence we get age 19 instead of 18. >+ ($age_year, $age_month) = C4::Members::GetAge( $member->{dateofbirth} ); >+ is ($age_year, '19', "SetAge ISO_Date 18+1 years"); #This is a special case, where months=>12 and days=>31 constitute one full year, hence we get age 19 instead of 18. > > $age = '0018-12-30'; > C4::Members::SetAge( $member, $age ); >- $age = C4::Members::GetAge( $member->{dateofbirth} ); >- is ($age, '19', "SetAge ISO_Date 18 years"); >+ ($age_year, $age_month) = C4::Members::GetAge( $member->{dateofbirth} ); >+ is ($age_year, '19', "SetAge ISO_Date 18 years"); > > $age = '18-1-1'; > eval { C4::Members::SetAge( $member, $age ); }; >@@ -425,18 +430,18 @@ sub testAgeAccessors { > > $age = DateTime::Duration->new(years => 10, months => 3); > C4::Members::SetAge( $member, $age, $relative_date ); >- $age = C4::Members::GetAge( $member->{dateofbirth}, $relative_date->ymd() ); >- is ($age, '10', "SetAge, 10 years and 3 months old person was born on ".$member->{dateofbirth}." if todays is ".$relative_date->ymd()); >+ ($age_year, $age_month) = C4::Members::GetAge( $member->{dateofbirth}, $relative_date->ymd() ); >+ is ($age_year, '10', "SetAge, 10 years and 3 months old person was born on ".$member->{dateofbirth}." if todays is ".$relative_date->ymd()); > > $age = DateTime::Duration->new(years => 112, months => 1, days => 1); > C4::Members::SetAge( $member, $age, $relative_date ); >- $age = C4::Members::GetAge( $member->{dateofbirth}, $relative_date->ymd() ); >- is ($age, '112', "SetAge, 112 years, 1 months and 1 days old person was born on ".$member->{dateofbirth}." if today is ".$relative_date->ymd()); >+ ($age_year, $age_month) = C4::Members::GetAge( $member->{dateofbirth}, $relative_date->ymd() ); >+ is ($age_year, '112', "SetAge, 112 years, 1 months and 1 days old person was born on ".$member->{dateofbirth}." if today is ".$relative_date->ymd()); > > $age = '0112-01-01'; > C4::Members::SetAge( $member, $age, $relative_date ); >- $age = C4::Members::GetAge( $member->{dateofbirth}, $relative_date->ymd() ); >- is ($age, '112', "SetAge ISO_Date, 112 years, 1 months and 1 days old person was born on ".$member->{dateofbirth}." if today is ".$relative_date->ymd()); >+ ($age_year, $age_month) = C4::Members::GetAge( $member->{dateofbirth}, $relative_date->ymd() ); >+ is ($age_year, '112', "SetAge ISO_Date, 112 years, 1 months and 1 days old person was born on ".$member->{dateofbirth}." if today is ".$relative_date->ymd()); > > $member->{dateofbirth} = $original_dateofbirth; #It is polite to revert made changes in the unit tests. > } #sub testAgeAccessors >-- >1.7.10.4
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 15206
:
44953
|
44978
|
45579
|
45580
|
45581
|
45589
|
45590
|
45591
|
45592
|
45593
|
45597
|
45598
|
45599
|
45600
|
45601
|
46228
|
46245
|
46396
|
47301
|
47505
|
47506
|
47540
|
47541
|
47542
|
49032
|
49033
|
49034