View | Details | Raw Unified | Return to bug 16911
Collapse All | Expand All

(-)a/C4/Members.pm (-33 / +4 lines)
Lines 25-31 use strict; Link Here
25
use C4::Context;
25
use C4::Context;
26
use String::Random qw( random_string );
26
use String::Random qw( random_string );
27
use Scalar::Util qw( looks_like_number );
27
use Scalar::Util qw( looks_like_number );
28
use Date::Calc qw/Today Add_Delta_YM check_date Date_to_Days/;
28
use Date::Calc qw/Today check_date Date_to_Days/;
29
use C4::Log; # logaction
29
use C4::Log; # logaction
30
use C4::Overdues;
30
use C4::Overdues;
31
use C4::Reserves;
31
use C4::Reserves;
Lines 43-48 use Koha::Database; Link Here
43
use Koha::Holds;
43
use Koha::Holds;
44
use Koha::List::Patron;
44
use Koha::List::Patron;
45
use Koha::Patrons;
45
use Koha::Patrons;
46
use Koha::Patron::Categories;
46
47
47
our (@ISA,@EXPORT,@EXPORT_OK,$debug);
48
our (@ISA,@EXPORT,@EXPORT_OK,$debug);
48
49
Lines 87-93 BEGIN { Link Here
87
        &GetBorrowersWhoHaveNeverBorrowed
88
        &GetBorrowersWhoHaveNeverBorrowed
88
        &GetBorrowersWithIssuesHistoryOlderThan
89
        &GetBorrowersWithIssuesHistoryOlderThan
89
90
90
        &GetExpiryDate
91
        &GetUpcomingMembershipExpires
91
        &GetUpcomingMembershipExpires
92
92
93
        &IssueSlip
93
        &IssueSlip
Lines 657-665 sub AddMember { Link Here
657
      if ( $data{'userid'} eq '' || !Check_Userid( $data{'userid'} ) );
657
      if ( $data{'userid'} eq '' || !Check_Userid( $data{'userid'} ) );
658
658
659
    # add expiration date if it isn't already there
659
    # add expiration date if it isn't already there
660
    unless ( $data{'dateexpiry'} ) {
660
    $data{dateexpiry} ||= Koha::Patron::Categories->find( $data{categorycode} )->get_expiry_date;
661
        $data{'dateexpiry'} = GetExpiryDate( $data{'categorycode'}, output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } ) );
662
    }
663
661
664
    # add enrollment date if it isn't already there
662
    # add enrollment date if it isn't already there
665
    unless ( $data{'dateenrolled'} ) {
663
    unless ( $data{'dateenrolled'} ) {
Lines 1223-1255 sub GetNoticeEmailAddress { Link Here
1223
    return $data->{'primaryemail'} || '';
1221
    return $data->{'primaryemail'} || '';
1224
}
1222
}
1225
1223
1226
=head2 GetExpiryDate 
1227
1228
  $expirydate = GetExpiryDate($categorycode, $dateenrolled);
1229
1230
Calculate expiry date given a categorycode and starting date.  Date argument must be in ISO format.
1231
Return date is also in ISO format.
1232
1233
=cut
1234
1235
sub GetExpiryDate {
1236
    my ( $categorycode, $dateenrolled ) = @_;
1237
    my $enrolments;
1238
    if ($categorycode) {
1239
        my $dbh = C4::Context->dbh;
1240
        my $sth = $dbh->prepare("SELECT enrolmentperiod,enrolmentperioddate FROM categories WHERE categorycode=?");
1241
        $sth->execute($categorycode);
1242
        $enrolments = $sth->fetchrow_hashref;
1243
    }
1244
    # die "GetExpiryDate: for enrollmentperiod $enrolmentperiod (category '$categorycode') starting $dateenrolled.\n";
1245
    my @date = split (/-/,$dateenrolled);
1246
    if($enrolments->{enrolmentperiod}){
1247
        return sprintf("%04d-%02d-%02d", Add_Delta_YM(@date,0,$enrolments->{enrolmentperiod}));
1248
    }else{
1249
        return $enrolments->{enrolmentperioddate};
1250
    }
1251
}
1252
1253
=head2 GetUpcomingMembershipExpires
1224
=head2 GetUpcomingMembershipExpires
1254
1225
1255
    my $expires = GetUpcomingMembershipExpires({
1226
    my $expires = GetUpcomingMembershipExpires({
Lines 1624-1630 sub ExtendMemberSubscriptionTo { Link Here
1624
                                        eval { output_pref( { dt => dt_from_string( $borrower->{'dateexpiry'}  ), dateonly => 1, dateformat => 'iso' } ); }
1595
                                        eval { output_pref( { dt => dt_from_string( $borrower->{'dateexpiry'}  ), dateonly => 1, dateformat => 'iso' } ); }
1625
                                        :
1596
                                        :
1626
                                        output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } );
1597
                                        output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } );
1627
      $date = GetExpiryDate( $borrower->{'categorycode'}, $date );
1598
      $date = Koha::Patron::Categories->find( $borrower->{categorycode} )->get_expiry_date( $date );
1628
    }
1599
    }
1629
    my $sth = $dbh->do(<<EOF);
1600
    my $sth = $dbh->do(<<EOF);
1630
UPDATE borrowers 
1601
UPDATE borrowers 
(-)a/Koha/Patron/Category.pm (+11 lines)
Lines 22-27 use Carp; Link Here
22
use C4::Members::Messaging;
22
use C4::Members::Messaging;
23
23
24
use Koha::Database;
24
use Koha::Database;
25
use Koha::DateUtils;
25
26
26
use base qw(Koha::Object);
27
use base qw(Koha::Object);
27
28
Lines 184-189 sub _catb_resultset { Link Here
184
    return $self->{_catb_resultset};
185
    return $self->{_catb_resultset};
185
}
186
}
186
187
188
sub get_expiry_date {
189
    my ($self, $date ) = @_;
190
    if ( $self->enrolmentperiod ) {
191
        $date ||= dt_from_string;
192
        return $date->add( months => $self->enrolmentperiod );
193
    } else {
194
        return $self->enrolmentperioddate;
195
    }
196
}
197
187
=head3 type
198
=head3 type
188
199
189
=cut
200
=cut
(-)a/members/memberentry.pl (-3 / +4 lines)
Lines 370-377 if ($op eq 'save' || $op eq 'insert'){ Link Here
370
370
371
if ( ($op eq 'modify' || $op eq 'insert' || $op eq 'save'|| $op eq 'duplicate') and ($step == 0 or $step == 3 )){
371
if ( ($op eq 'modify' || $op eq 'insert' || $op eq 'save'|| $op eq 'duplicate') and ($step == 0 or $step == 3 )){
372
    unless ($newdata{'dateexpiry'}){
372
    unless ($newdata{'dateexpiry'}){
373
        my $arg2 = $newdata{'dateenrolled'} || output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
373
        my $patron_category = Koha::Patron::Categories->find( $newdata{categorycode} );
374
        $newdata{'dateexpiry'} = GetExpiryDate($newdata{'categorycode'},$arg2);
374
        $newdata{'dateexpiry'} = $patron_category->get_expiry_date( $newdata{dateenrolled} );
375
    }
375
    }
376
}
376
}
377
377
Lines 632-638 if (!defined($data{'dateenrolled'}) or $data{'dateenrolled'} eq ''){ Link Here
632
}
632
}
633
if ( $op eq 'duplicate' ) {
633
if ( $op eq 'duplicate' ) {
634
    $data{'dateenrolled'} = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
634
    $data{'dateenrolled'} = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
635
    $data{'dateexpiry'} = GetExpiryDate( $data{'categorycode'}, $data{'dateenrolled'} );
635
    my $patron_category = Koha::Patron::Categories->find( $data{categorycode} );
636
    $data{dateexpiry} = $patron_category->get_expiry_date( $data{dateenrolled} );
636
}
637
}
637
if (C4::Context->preference('uppercasesurnames')) {
638
if (C4::Context->preference('uppercasesurnames')) {
638
    $data{'surname'} &&= uc( $data{'surname'} );
639
    $data{'surname'} &&= uc( $data{'surname'} );
(-)a/tools/import_borrowers.pl (-4 / +3 lines)
Lines 151-157 if ( $uploadborrowers && length($uploadborrowers) > 0 ) { Link Here
151
    }
151
    }
152
152
153
    push @feedback, {feedback=>1, name=>'headerrow', value=>join(', ', @csvcolumns)};
153
    push @feedback, {feedback=>1, name=>'headerrow', value=>join(', ', @csvcolumns)};
154
    my $today_iso = output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' });
154
    my $today = output_pref;
155
    my @criticals = qw(surname branchcode categorycode);    # there probably should be others
155
    my @criticals = qw(surname branchcode categorycode);    # there probably should be others
156
    my @bad_dates;  # I've had a few.
156
    my @bad_dates;  # I've had a few.
157
    LINE: while ( my $borrowerline = <$handle> ) {
157
    LINE: while ( my $borrowerline = <$handle> ) {
Lines 227-234 if ( $uploadborrowers && length($uploadborrowers) > 0 ) { Link Here
227
                push @missing_criticals, {key=>$_, line=>$. , lineraw=>$borrowerline, bad_date=>1};
227
                push @missing_criticals, {key=>$_, line=>$. , lineraw=>$borrowerline, bad_date=>1};
228
            }
228
            }
229
        }
229
        }
230
	$borrower{dateenrolled} = $today_iso unless $borrower{dateenrolled};
230
        $borrower{dateenrolled} ||= $today;
231
	$borrower{dateexpiry} = GetExpiryDate($borrower{categorycode},$borrower{dateenrolled}) unless $borrower{dateexpiry}; 
231
        $borrower{dateexpiry}   ||= Koha::Patron::Categories->find( $borrower{categorycode} )->get_expiry_date( $borrower{dateenrolled} );
232
        my $borrowernumber;
232
        my $borrowernumber;
233
        my $member;
233
        my $member;
234
        if ( ($matchpoint eq 'cardnumber') && ($borrower{'cardnumber'}) ) {
234
        if ( ($matchpoint eq 'cardnumber') && ($borrower{'cardnumber'}) ) {
235
- 

Return to bug 16911