waitingdate => $today->ymd,
};
+ my $requested_expiration;
+ if ($self->expirationdate) {
+ $requested_expiration = dt_from_string($self->expirationdate);
+ }
+
if ( C4::Context->preference("ExpireReservesMaxPickUpDelay") ) {
my $max_pickup_delay = C4::Context->preference("ReservesMaxPickUpDelay");
my $cancel_on_holidays = C4::Context->preference('ExpireReservesOnHolidays');
$expirationdate = $calendar->days_forward( dt_from_string($self->waitingdate), $max_pickup_delay );
}
- $values->{expirationdate} = $expirationdate->ymd;
+ # If patron's requested expiration date is prior to the
+ # calculated one, we keep the patron's one.
+ my $cmp = $requested_expiration ? DateTime->compare($requested_expiration, $expirationdate) : 0;
+ $values->{expirationdate} = $cmp == -1 ? $requested_expiration->ymd : $expirationdate->ymd;
}
$self->set($values)->store();
use t::lib::Mocks;
use t::lib::TestBuilder;
-use Test::More tests => 10;
+use Test::More tests => 11;
use_ok('C4::Reserves');
title => 'Title 3', },
});
+my $biblio4 = $builder->build({
+ source => 'Biblio',
+ value => {
+ title => 'Title 4', },
+});
+
my $item1 = $builder->build({
source => 'Item',
value => {
},
});
+my $item4 = $builder->build({
+ source => 'Item',
+ value => {
+ biblionumber => $biblio4->{biblionumber},
+ },
+});
+
my $today = dt_from_string();
my $reserve1_reservedate = $today->clone;
my $special_holiday1_dt = $today->clone;
$special_holiday1_dt->add(days => 2);
-Koha::Cache->get_instance()->flush_all();
my $holiday = $builder->build({
source => 'SpecialHoliday',
value => {
my $r3 = Koha::Holds->find($reserve3->{reserve_id});
is($r3->expirationdate, $expected_expiration->ymd, 'Expiration date should be set to today + 7' );
+my $reserve4_reservedate = $today->clone;
+my $requested_expiredate = $today->clone()->add(days => 6);
+
+my $reserve4 = $builder->build({
+ source => 'Reserve',
+ value => {
+ borrowernumber => $patron2->{borrowernumber},
+ reservedate => $reserve4_reservedate->ymd,
+ expirationdate => $requested_expiredate->ymd,
+ biblionumber => $biblio4->{biblionumber},
+ branchcode => 'LIB1',
+ priority => 1,
+ found => '',
+ },
+});
+
+t::lib::Mocks::mock_preference('ReservesMaxPickUpDelay', 10);
+ModReserveAffect( $item4->{itemnumber}, $patron2->{borrowernumber}, 0, $reserve4->{reserve_id});
+
+my $r4 = Koha::Holds->find($reserve4->{reserve_id});
+is($r4->expirationdate, $requested_expiredate->ymd, 'Requested expiration date should be kept' );
+
$dbh->rollback;
\ No newline at end of file