Bug 16911: Koha::Patron::Categories - Move GetExpiryDate to ->get_expiry_date
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Mon, 11 Jul 2016 22:45:55 +0000 (23:45 +0100)
committerKyle M Hall <kyle@bywatersolutions.com>
Fri, 9 Sep 2016 09:45:31 +0000 (09:45 +0000)
This patch moves the code from C4::Members::GetExpiryDate to
Koha::Patron::Categories.
Nothing much exiting, please follow test plan in next patches.

Signed-off-by: Aleisha Amohia <aleishaamohia@hotmail.com>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
C4/Members.pm
Koha/Patron/Category.pm
members/memberentry.pl
tools/import_borrowers.pl

index bcd45a7..3203c95 100644 (file)
@@ -25,7 +25,7 @@ use strict;
 use C4::Context;
 use String::Random qw( random_string );
 use Scalar::Util qw( looks_like_number );
-use Date::Calc qw/Today Add_Delta_YM check_date Date_to_Days/;
+use Date::Calc qw/Today check_date Date_to_Days/;
 use C4::Log; # logaction
 use C4::Overdues;
 use C4::Reserves;
@@ -43,6 +43,7 @@ use Koha::Database;
 use Koha::Holds;
 use Koha::List::Patron;
 use Koha::Patrons;
+use Koha::Patron::Categories;
 
 our (@ISA,@EXPORT,@EXPORT_OK,$debug);
 
@@ -84,7 +85,6 @@ BEGIN {
         &GetBorrowersWhoHaveNeverBorrowed
         &GetBorrowersWithIssuesHistoryOlderThan
 
-        &GetExpiryDate
         &GetUpcomingMembershipExpires
 
         &IssueSlip
@@ -654,9 +654,7 @@ sub AddMember {
       if ( $data{'userid'} eq '' || !Check_Userid( $data{'userid'} ) );
 
     # add expiration date if it isn't already there
-    unless ( $data{'dateexpiry'} ) {
-        $data{'dateexpiry'} = GetExpiryDate( $data{'categorycode'}, output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } ) );
-    }
+    $data{dateexpiry} ||= Koha::Patron::Categories->find( $data{categorycode} )->get_expiry_date;
 
     # add enrollment date if it isn't already there
     unless ( $data{'dateenrolled'} ) {
@@ -1220,33 +1218,6 @@ sub GetNoticeEmailAddress {
     return $data->{'primaryemail'} || '';
 }
 
-=head2 GetExpiryDate 
-
-  $expirydate = GetExpiryDate($categorycode, $dateenrolled);
-
-Calculate expiry date given a categorycode and starting date.  Date argument must be in ISO format.
-Return date is also in ISO format.
-
-=cut
-
-sub GetExpiryDate {
-    my ( $categorycode, $dateenrolled ) = @_;
-    my $enrolments;
-    if ($categorycode) {
-        my $dbh = C4::Context->dbh;
-        my $sth = $dbh->prepare("SELECT enrolmentperiod,enrolmentperioddate FROM categories WHERE categorycode=?");
-        $sth->execute($categorycode);
-        $enrolments = $sth->fetchrow_hashref;
-    }
-    # die "GetExpiryDate: for enrollmentperiod $enrolmentperiod (category '$categorycode') starting $dateenrolled.\n";
-    my @date = split (/-/,$dateenrolled);
-    if($enrolments->{enrolmentperiod}){
-        return sprintf("%04d-%02d-%02d", Add_Delta_YM(@date,0,$enrolments->{enrolmentperiod}));
-    }else{
-        return $enrolments->{enrolmentperioddate};
-    }
-}
-
 =head2 GetUpcomingMembershipExpires
 
     my $expires = GetUpcomingMembershipExpires({
@@ -1513,7 +1484,7 @@ sub ExtendMemberSubscriptionTo {
                                         eval { output_pref( { dt => dt_from_string( $borrower->{'dateexpiry'}  ), dateonly => 1, dateformat => 'iso' } ); }
                                         :
                                         output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } );
-      $date = GetExpiryDate( $borrower->{'categorycode'}, $date );
+      $date = Koha::Patron::Categories->find( $borrower->{categorycode} )->get_expiry_date( $date );
     }
     my $sth = $dbh->do(<<EOF);
 UPDATE borrowers 
index 06012ec..399d329 100644 (file)
@@ -22,6 +22,7 @@ use Carp;
 use C4::Members::Messaging;
 
 use Koha::Database;
+use Koha::DateUtils;
 
 use base qw(Koha::Object);
 
@@ -184,6 +185,16 @@ sub _catb_resultset {
     return $self->{_catb_resultset};
 }
 
+sub get_expiry_date {
+    my ($self, $date ) = @_;
+    if ( $self->enrolmentperiod ) {
+        $date ||= dt_from_string;
+        return $date->add( months => $self->enrolmentperiod );
+    } else {
+        return $self->enrolmentperioddate;
+    }
+}
+
 =head3 type
 
 =cut
index fb48308..413920b 100755 (executable)
@@ -371,8 +371,8 @@ if ($op eq 'save' || $op eq 'insert'){
 
 if ( ($op eq 'modify' || $op eq 'insert' || $op eq 'save'|| $op eq 'duplicate') and ($step == 0 or $step == 3 )){
     unless ($newdata{'dateexpiry'}){
-        my $arg2 = $newdata{'dateenrolled'} || output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
-        $newdata{'dateexpiry'} = GetExpiryDate($newdata{'categorycode'},$arg2);
+        my $patron_category = Koha::Patron::Categories->find( $newdata{categorycode} );
+        $newdata{'dateexpiry'} = $patron_category->get_expiry_date( $newdata{dateenrolled} );
     }
 }
 
@@ -636,7 +636,8 @@ if (!defined($data{'dateenrolled'}) or $data{'dateenrolled'} eq ''){
 }
 if ( $op eq 'duplicate' ) {
     $data{'dateenrolled'} = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
-    $data{'dateexpiry'} = GetExpiryDate( $data{'categorycode'}, $data{'dateenrolled'} );
+    my $patron_category = Koha::Patron::Categories->find( $data{categorycode} );
+    $data{dateexpiry} = $patron_category->get_expiry_date( $data{dateenrolled} );
 }
 if (C4::Context->preference('uppercasesurnames')) {
     $data{'surname'} &&= uc( $data{'surname'} );
index ed5f788..f5a7921 100755 (executable)
@@ -149,7 +149,7 @@ if ( $uploadborrowers && length($uploadborrowers) > 0 ) {
     }
 
     push @feedback, {feedback=>1, name=>'headerrow', value=>join(', ', @csvcolumns)};
-    my $today_iso = output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' });
+    my $today = output_pref;
     my @criticals = qw(surname branchcode categorycode);    # there probably should be others
     my @bad_dates;  # I've had a few.
     LINE: while ( my $borrowerline = <$handle> ) {
@@ -225,8 +225,8 @@ if ( $uploadborrowers && length($uploadborrowers) > 0 ) {
                 push @missing_criticals, {key=>$_, line=>$. , lineraw=>$borrowerline, bad_date=>1};
             }
         }
-       $borrower{dateenrolled} = $today_iso unless $borrower{dateenrolled};
-       $borrower{dateexpiry} = GetExpiryDate($borrower{categorycode},$borrower{dateenrolled}) unless $borrower{dateexpiry}; 
+        $borrower{dateenrolled} ||= $today;
+        $borrower{dateexpiry}   ||= Koha::Patron::Categories->find( $borrower{categorycode} )->get_expiry_date( $borrower{dateenrolled} );
         my $borrowernumber;
         my $member;
         if ( ($matchpoint eq 'cardnumber') && ($borrower{'cardnumber'}) ) {