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

(-)a/C4/Members.pm (-33 / +5 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::AuthUtils qw(hash_password); Link Here
43
use Koha::Database;
43
use Koha::Database;
44
use Koha::Holds;
44
use Koha::Holds;
45
use Koha::List::Patron;
45
use Koha::List::Patron;
46
use Koha::Patrons;
47
use Koha::Patron::Categories;
46
48
47
our (@ISA,@EXPORT,@EXPORT_OK,$debug);
49
our (@ISA,@EXPORT,@EXPORT_OK,$debug);
48
50
Lines 89-95 BEGIN { Link Here
89
        &GetBorrowersWhoHaveNeverBorrowed
91
        &GetBorrowersWhoHaveNeverBorrowed
90
        &GetBorrowersWithIssuesHistoryOlderThan
92
        &GetBorrowersWithIssuesHistoryOlderThan
91
93
92
        &GetExpiryDate
93
        &GetUpcomingMembershipExpires
94
        &GetUpcomingMembershipExpires
94
95
95
        &IssueSlip
96
        &IssueSlip
Lines 694-702 sub AddMember { Link Here
694
      if ( $data{'userid'} eq '' || !Check_Userid( $data{'userid'} ) );
695
      if ( $data{'userid'} eq '' || !Check_Userid( $data{'userid'} ) );
695
696
696
    # add expiration date if it isn't already there
697
    # add expiration date if it isn't already there
697
    unless ( $data{'dateexpiry'} ) {
698
    $data{dateexpiry} ||= Koha::Patron::Categories->find( $data{categorycode} )->get_expiry_date;
698
        $data{'dateexpiry'} = GetExpiryDate( $data{'categorycode'}, output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } ) );
699
    }
700
699
701
    # add enrollment date if it isn't already there
700
    # add enrollment date if it isn't already there
702
    unless ( $data{'dateenrolled'} ) {
701
    unless ( $data{'dateenrolled'} ) {
Lines 1327-1359 sub GetNoticeEmailAddress { Link Here
1327
    return $data->{'primaryemail'} || '';
1326
    return $data->{'primaryemail'} || '';
1328
}
1327
}
1329
1328
1330
=head2 GetExpiryDate 
1331
1332
  $expirydate = GetExpiryDate($categorycode, $dateenrolled);
1333
1334
Calculate expiry date given a categorycode and starting date.  Date argument must be in ISO format.
1335
Return date is also in ISO format.
1336
1337
=cut
1338
1339
sub GetExpiryDate {
1340
    my ( $categorycode, $dateenrolled ) = @_;
1341
    my $enrolments;
1342
    if ($categorycode) {
1343
        my $dbh = C4::Context->dbh;
1344
        my $sth = $dbh->prepare("SELECT enrolmentperiod,enrolmentperioddate FROM categories WHERE categorycode=?");
1345
        $sth->execute($categorycode);
1346
        $enrolments = $sth->fetchrow_hashref;
1347
    }
1348
    # die "GetExpiryDate: for enrollmentperiod $enrolmentperiod (category '$categorycode') starting $dateenrolled.\n";
1349
    my @date = split (/-/,$dateenrolled);
1350
    if($enrolments->{enrolmentperiod}){
1351
        return sprintf("%04d-%02d-%02d", Add_Delta_YM(@date,0,$enrolments->{enrolmentperiod}));
1352
    }else{
1353
        return $enrolments->{enrolmentperioddate};
1354
    }
1355
}
1356
1357
=head2 GetUpcomingMembershipExpires
1329
=head2 GetUpcomingMembershipExpires
1358
1330
1359
    my $expires = GetUpcomingMembershipExpires({
1331
    my $expires = GetUpcomingMembershipExpires({
Lines 1728-1734 sub ExtendMemberSubscriptionTo { Link Here
1728
                                        eval { output_pref( { dt => dt_from_string( $borrower->{'dateexpiry'}  ), dateonly => 1, dateformat => 'iso' } ); }
1700
                                        eval { output_pref( { dt => dt_from_string( $borrower->{'dateexpiry'}  ), dateonly => 1, dateformat => 'iso' } ); }
1729
                                        :
1701
                                        :
1730
                                        output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } );
1702
                                        output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' } );
1731
      $date = GetExpiryDate( $borrower->{'categorycode'}, $date );
1703
      $date = Koha::Patron::Categories->find( $borrower->{categorycode} )->get_expiry_date( $date );
1732
    }
1704
    }
1733
    my $sth = $dbh->do(<<EOF);
1705
    my $sth = $dbh->do(<<EOF);
1734
UPDATE borrowers 
1706
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 177-182 sub _catb_resultset { Link Here
177
    return $self->{_catb_resultset};
178
    return $self->{_catb_resultset};
178
}
179
}
179
180
181
sub get_expiry_date {
182
    my ($self, $date ) = @_;
183
    if ( $self->enrolmentperiod ) {
184
        $date ||= dt_from_string;
185
        return $date->add( months => $self->enrolmentperiod );
186
    } else {
187
        return $self->enrolmentperioddate;
188
    }
189
}
190
180
=head3 type
191
=head3 type
181
192
182
=cut
193
=cut
(-)a/members/memberentry.pl (-3 / +4 lines)
Lines 364-371 if ($op eq 'save' || $op eq 'insert'){ Link Here
364
364
365
if ( ($op eq 'modify' || $op eq 'insert' || $op eq 'save'|| $op eq 'duplicate') and ($step == 0 or $step == 3 )){
365
if ( ($op eq 'modify' || $op eq 'insert' || $op eq 'save'|| $op eq 'duplicate') and ($step == 0 or $step == 3 )){
366
    unless ($newdata{'dateexpiry'}){
366
    unless ($newdata{'dateexpiry'}){
367
        my $arg2 = $newdata{'dateenrolled'} || output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
367
        my $patron_category = Koha::Patron::Categories->find( $newdata{categorycode} );
368
        $newdata{'dateexpiry'} = GetExpiryDate($newdata{'categorycode'},$arg2);
368
        $newdata{'dateexpiry'} = $patron_category->get_expiry_date( $newdata{dateenrolled} );
369
    }
369
    }
370
}
370
}
371
371
Lines 634-640 if (!defined($data{'dateenrolled'}) or $data{'dateenrolled'} eq ''){ Link Here
634
}
634
}
635
if ( $op eq 'duplicate' ) {
635
if ( $op eq 'duplicate' ) {
636
    $data{'dateenrolled'} = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
636
    $data{'dateenrolled'} = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 });
637
    $data{'dateexpiry'} = GetExpiryDate( $data{'categorycode'}, $data{'dateenrolled'} );
637
    my $patron_category = Koha::Patron::Categories->find( $data{categorycode} );
638
    $data{dateexpiry} = $patron_category->get_expiry_date( $data{dateenrolled} );
638
}
639
}
639
if (C4::Context->preference('uppercasesurnames')) {
640
if (C4::Context->preference('uppercasesurnames')) {
640
    $data{'surname'} &&= uc( $data{'surname'} );
641
    $data{'surname'} &&= uc( $data{'surname'} );
(-)a/tools/import_borrowers.pl (-4 / +3 lines)
Lines 141-147 if ( $uploadborrowers && length($uploadborrowers) > 0 ) { Link Here
141
    }
141
    }
142
142
143
    push @feedback, {feedback=>1, name=>'headerrow', value=>join(', ', @csvcolumns)};
143
    push @feedback, {feedback=>1, name=>'headerrow', value=>join(', ', @csvcolumns)};
144
    my $today_iso = output_pref( { dt => dt_from_string, dateonly => 1, dateformat => 'iso' });
144
    my $today = output_pref;
145
    my @criticals = qw(surname branchcode categorycode);    # there probably should be others
145
    my @criticals = qw(surname branchcode categorycode);    # there probably should be others
146
    my @bad_dates;  # I've had a few.
146
    my @bad_dates;  # I've had a few.
147
    LINE: while ( my $borrowerline = <$handle> ) {
147
    LINE: while ( my $borrowerline = <$handle> ) {
Lines 217-224 if ( $uploadborrowers && length($uploadborrowers) > 0 ) { Link Here
217
                push @missing_criticals, {key=>$_, line=>$. , lineraw=>$borrowerline, bad_date=>1};
217
                push @missing_criticals, {key=>$_, line=>$. , lineraw=>$borrowerline, bad_date=>1};
218
            }
218
            }
219
        }
219
        }
220
	$borrower{dateenrolled} = $today_iso unless $borrower{dateenrolled};
220
        $borrower{dateenrolled} ||= $today;
221
	$borrower{dateexpiry} = GetExpiryDate($borrower{categorycode},$borrower{dateenrolled}) unless $borrower{dateexpiry}; 
221
        $borrower{dateexpiry}   ||= Koha::Patron::Categories->find( $borrower{categorycode} )->get_expiry_date( $borrower{dateenrolled} );
222
        my $borrowernumber;
222
        my $borrowernumber;
223
        my $member;
223
        my $member;
224
        if ( ($matchpoint eq 'cardnumber') && ($borrower{'cardnumber'}) ) {
224
        if ( ($matchpoint eq 'cardnumber') && ($borrower{'cardnumber'}) ) {
225
- 

Return to bug 16911