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

(-)a/C4/Circulation.pm (-10 / +10 lines)
Lines 2668-2683 sub CanBookBeRenewed { Link Here
2668
            # can be filled with available items. We can get the union of the sets simply
2668
            # can be filled with available items. We can get the union of the sets simply
2669
            # by pushing all the elements onto an array and removing the duplicates.
2669
            # by pushing all the elements onto an array and removing the duplicates.
2670
            my @reservable;
2670
            my @reservable;
2671
            my %borrowers;
2671
            my %patrons;
2672
            ITEM: foreach my $i (@itemnumbers) {
2672
            ITEM: foreach my $itemnumber (@itemnumbers) {
2673
                my $item = Koha::Items->find($i)->unblessed;
2673
                my $item = Koha::Items->find( $itemnumber );
2674
                next if IsItemOnHoldAndFound($i);
2674
                next if IsItemOnHoldAndFound( $itemnumber );
2675
                for my $b (@borrowernumbers) {
2675
                for my $borrowernumber (@borrowernumbers) {
2676
                    my $borr = $borrowers{$b} //= Koha::Patrons->find( $b )->unblessed;
2676
                    my $patron = $patrons{$borrowernumber} //= Koha::Patrons->find( $borrowernumber );
2677
                    next unless IsAvailableForItemLevelRequest($item, $borr);
2677
                    next unless IsAvailableForItemLevelRequest($item, $patron);
2678
                    next unless CanItemBeReserved($b,$i);
2678
                    next unless CanItemBeReserved($borrowernumber,$itemnumber);
2679
2679
2680
                    push @reservable, $i;
2680
                    push @reservable, $itemnumber;
2681
                    if (@reservable >= @borrowernumbers) {
2681
                    if (@reservable >= @borrowernumbers) {
2682
                        $resfound = 0;
2682
                        $resfound = 0;
2683
                        last ITEM;
2683
                        last ITEM;
(-)a/C4/ILSDI/Services.pm (-1 / +1 lines)
Lines 545-551 sub GetServices { Link Here
545
    my $canbookbereserved = CanBookBeReserved( $borrower, $biblionumber );
545
    my $canbookbereserved = CanBookBeReserved( $borrower, $biblionumber );
546
    if ($canbookbereserved->{status} eq 'OK') {
546
    if ($canbookbereserved->{status} eq 'OK') {
547
        push @availablefor, 'title level hold';
547
        push @availablefor, 'title level hold';
548
        my $canitembereserved = IsAvailableForItemLevelRequest($item->unblessed, $borrower);
548
        my $canitembereserved = IsAvailableForItemLevelRequest($item, $patron);
549
        if ($canitembereserved) {
549
        if ($canitembereserved) {
550
            push @availablefor, 'item level hold';
550
            push @availablefor, 'item level hold';
551
        }
551
        }
(-)a/C4/Reserves.pm (-14 / +11 lines)
Lines 1163-1203 and canreservefromotherbranches. Link Here
1163
=cut
1163
=cut
1164
1164
1165
sub IsAvailableForItemLevelRequest {
1165
sub IsAvailableForItemLevelRequest {
1166
    my $item = shift;
1166
    my ( $item, $patron ) = @_;
1167
    my $borrower = shift;
1168
1167
1169
    my $dbh = C4::Context->dbh;
1168
    my $dbh = C4::Context->dbh;
1170
    # must check the notforloan setting of the itemtype
1169
    # must check the notforloan setting of the itemtype
1171
    # FIXME - a lot of places in the code do this
1170
    # FIXME - a lot of places in the code do this
1172
    #         or something similar - need to be
1171
    #         or something similar - need to be
1173
    #         consolidated
1172
    #         consolidated
1174
    my $patron = Koha::Patrons->find( $borrower->{borrowernumber} );
1173
    my $itemtype = $item->effective_itemtype;
1175
    my $item_object = Koha::Items->find( $item->{itemnumber } );
1176
    my $itemtype = $item_object->effective_itemtype;
1177
    my $notforloan_per_itemtype
1174
    my $notforloan_per_itemtype
1178
      = $dbh->selectrow_array("SELECT notforloan FROM itemtypes WHERE itemtype = ?",
1175
      = $dbh->selectrow_array("SELECT notforloan FROM itemtypes WHERE itemtype = ?",
1179
                              undef, $itemtype);
1176
                              undef, $itemtype);
1180
1177
1181
    return 0 if
1178
    return 0 if
1182
        $notforloan_per_itemtype ||
1179
        $notforloan_per_itemtype ||
1183
        $item->{itemlost}        ||
1180
        $item->itemlost        ||
1184
        $item->{notforloan} > 0  ||
1181
        $item->notforloan > 0  ||
1185
        $item->{withdrawn}        ||
1182
        $item->withdrawn        ||
1186
        ($item->{damaged} && !C4::Context->preference('AllowHoldsOnDamagedItems'));
1183
        ($item->damaged && !C4::Context->preference('AllowHoldsOnDamagedItems'));
1187
1184
1188
    my $on_shelf_holds = Koha::IssuingRules->get_onshelfholds_policy( { item => $item_object, patron => $patron } );
1185
    my $on_shelf_holds = Koha::IssuingRules->get_onshelfholds_policy( { item => $item, patron => $patron } );
1189
1186
1190
    if ( $on_shelf_holds == 1 ) {
1187
    if ( $on_shelf_holds == 1 ) {
1191
        return 1;
1188
        return 1;
1192
    } elsif ( $on_shelf_holds == 2 ) {
1189
    } elsif ( $on_shelf_holds == 2 ) {
1193
        my @items =
1190
        my @items =
1194
          Koha::Items->search( { biblionumber => $item->{biblionumber} } );
1191
          Koha::Items->search( { biblionumber => $item->biblionumber } );
1195
1192
1196
        my $any_available = 0;
1193
        my $any_available = 0;
1197
1194
1198
        foreach my $i (@items) {
1195
        foreach my $i (@items) {
1199
1196
1200
            my $circ_control_branch = C4::Circulation::_GetCircControlBranch( $i->unblessed(), $borrower );
1197
            my $circ_control_branch = C4::Circulation::_GetCircControlBranch( $i->unblessed(), $patron->unblessed );
1201
            my $branchitemrule = C4::Circulation::GetBranchItemRule( $circ_control_branch, $i->itype );
1198
            my $branchitemrule = C4::Circulation::GetBranchItemRule( $circ_control_branch, $i->itype );
1202
1199
1203
            $any_available = 1
1200
            $any_available = 1
Lines 1209-1220 sub IsAvailableForItemLevelRequest { Link Here
1209
              || ( $i->damaged
1206
              || ( $i->damaged
1210
                && !C4::Context->preference('AllowHoldsOnDamagedItems') )
1207
                && !C4::Context->preference('AllowHoldsOnDamagedItems') )
1211
              || Koha::ItemTypes->find( $i->effective_itemtype() )->notforloan
1208
              || Koha::ItemTypes->find( $i->effective_itemtype() )->notforloan
1212
              || $branchitemrule->{holdallowed} == 1 && $borrower->{branchcode} ne $i->homebranch;
1209
              || $branchitemrule->{holdallowed} == 1 && $patron->branchcode ne $i->homebranch;
1213
        }
1210
        }
1214
1211
1215
        return $any_available ? 0 : 1;
1212
        return $any_available ? 0 : 1;
1216
    } else { # on_shelf_holds == 0 "If any unavailable" (the description is rather cryptic and could still be improved)
1213
    } else { # on_shelf_holds == 0 "If any unavailable" (the description is rather cryptic and could still be improved)
1217
        return $item->{onloan} || IsItemOnHoldAndFound( $item->{itemnumber} );
1214
        return $item->onloan || IsItemOnHoldAndFound( $item->itemnumber );
1218
    }
1215
    }
1219
}
1216
}
1220
1217
(-)a/opac/opac-reserve.pl (-1 / +1 lines)
Lines 528-534 foreach my $biblioNum (@biblionumbers) { Link Here
528
528
529
        my $policy_holdallowed = !$itemLoopIter->{already_reserved};
529
        my $policy_holdallowed = !$itemLoopIter->{already_reserved};
530
        $policy_holdallowed &&=
530
        $policy_holdallowed &&=
531
            IsAvailableForItemLevelRequest($itemInfo,$patron_unblessed) &&
531
            IsAvailableForItemLevelRequest($item, $patron) &&
532
            CanItemBeReserved( $borrowernumber, $itemNum )->{status} eq 'OK';
532
            CanItemBeReserved( $borrowernumber, $itemNum )->{status} eq 'OK';
533
533
534
        if ($policy_holdallowed) {
534
        if ($policy_holdallowed) {
(-)a/reserve/request.pl (-1 / +1 lines)
Lines 480-486 foreach my $biblionumber (@biblionumbers) { Link Here
480
                if (
480
                if (
481
                       !$item->{cantreserve}
481
                       !$item->{cantreserve}
482
                    && !$exceeded_maxreserves
482
                    && !$exceeded_maxreserves
483
                    && IsAvailableForItemLevelRequest($item, $patron_unblessed)
483
                    && IsAvailableForItemLevelRequest($item_object, $patron)
484
                    && $can_item_be_reserved->{status} eq 'OK'
484
                    && $can_item_be_reserved->{status} eq 'OK'
485
                  )
485
                  )
486
                {
486
                {
(-)a/t/db_dependent/Holds/DisallowHoldIfItemsAvailable.t (-48 / +25 lines)
Lines 35-50 t::lib::Mocks::mock_userenv({ branchcode => $library1->{branchcode} }); Link Here
35
35
36
my $bib_title = "Test Title";
36
my $bib_title = "Test Title";
37
37
38
my $borrower1 = $builder->build({
38
my $patron1 = $builder->build_object({
39
    source => 'Borrower',
39
    class => 'Koha::Patrons',
40
    value => {
40
    value => {
41
        branchcode => $library1->{branchcode},
41
        branchcode => $library1->{branchcode},
42
        dateexpiry => '3000-01-01',
42
        dateexpiry => '3000-01-01',
43
    }
43
    }
44
});
44
});
45
my $borrower1 = $patron1->unblessed;
45
46
46
my $borrower2 = $builder->build({
47
my $patron2 = $builder->build_object({
47
    source => 'Borrower',
48
    class => 'Koha::Patrons',
48
    value => {
49
    value => {
49
        branchcode => $library1->{branchcode},
50
        branchcode => $library1->{branchcode},
50
        dateexpiry => '3000-01-01',
51
        dateexpiry => '3000-01-01',
Lines 53-60 my $borrower2 = $builder->build({ Link Here
53
54
54
# Test hold_fulfillment_policy
55
# Test hold_fulfillment_policy
55
my ( $itemtype ) = @{ $dbh->selectrow_arrayref("SELECT itemtype FROM itemtypes LIMIT 1") };
56
my ( $itemtype ) = @{ $dbh->selectrow_arrayref("SELECT itemtype FROM itemtypes LIMIT 1") };
56
my $borrowernumber1 = $borrower1->{borrowernumber};
57
my $borrowernumber2 = $borrower2->{borrowernumber};
58
my $library_A = $library1->{branchcode};
57
my $library_A = $library1->{branchcode};
59
my $library_B = $library2->{branchcode};
58
my $library_B = $library2->{branchcode};
60
59
Lines 69-95 my $biblioitemnumber = Link Here
69
  $dbh->selectrow_array("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber = $biblionumber")
68
  $dbh->selectrow_array("SELECT biblioitemnumber FROM biblioitems WHERE biblionumber = $biblionumber")
70
  or BAIL_OUT("Cannot find newly created biblioitems record");
69
  or BAIL_OUT("Cannot find newly created biblioitems record");
71
70
72
$dbh->do("
71
my $item1 = $builder->build_object({ class => 'Koha::Items', value => { barcode => 'AllowHoldIf1', biblionumber => $biblionumber, biblioitemnumber => $biblioitemnumber, homebranch => $library_A, holdingbranch => $library_A, notforloan => 0, damaged => 0, itemlost => 0, withdrawn => 0, onloan => undef, itype => $itemtype } });
73
    INSERT INTO items (barcode, biblionumber, biblioitemnumber, homebranch, holdingbranch, notforloan, damaged, itemlost, withdrawn, onloan, itype)
74
    VALUES ('AllowHoldIf1', $biblionumber, $biblioitemnumber, '$library_A', '$library_A', 0, 0, 0, 0, NULL, '$itemtype')
75
");
76
72
77
my $itemnumber1 =
73
my $item2 = $builder->build_object({ class => 'Koha::Items', value => { barcode => 'AllowHoldIf2', biblionumber => $biblionumber, biblioitemnumber => $biblioitemnumber, homebranch => $library_A, holdingbranch => $library_A, notforloan => 0, damaged => 0, itemlost => 0, withdrawn => 0, onloan => undef, itype => $itemtype } });
78
  $dbh->selectrow_array("SELECT itemnumber FROM items WHERE biblionumber = $biblionumber")
79
  or BAIL_OUT("Cannot find newly created item");
80
81
my $item1 = Koha::Items->find( $itemnumber1 )->unblessed;
82
83
$dbh->do("
84
    INSERT INTO items (barcode, biblionumber, biblioitemnumber, homebranch, holdingbranch, notforloan, damaged, itemlost, withdrawn, onloan, itype)
85
    VALUES ('AllowHoldIf2', $biblionumber, $biblioitemnumber, '$library_A', '$library_A', 0, 0, 0, 0, NULL, '$itemtype')
86
");
87
88
my $itemnumber2 =
89
  $dbh->selectrow_array("SELECT itemnumber FROM items WHERE biblionumber = $biblionumber ORDER BY itemnumber DESC")
90
  or BAIL_OUT("Cannot find newly created item");
91
92
my $item2 = Koha::Items->find( $itemnumber2 )->unblessed;
93
74
94
$dbh->do("DELETE FROM issuingrules");
75
$dbh->do("DELETE FROM issuingrules");
95
my $rule = Koha::IssuingRule->new(
76
my $rule = Koha::IssuingRule->new(
Lines 106-125 my $rule = Koha::IssuingRule->new( Link Here
106
);
87
);
107
$rule->store();
88
$rule->store();
108
89
109
my $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
90
my $is = IsAvailableForItemLevelRequest( $item1, $patron1);
110
is( $is, 0, "Item cannot be held, 2 items available" );
91
is( $is, 0, "Item cannot be held, 2 items available" );
111
92
112
my $issue1 = AddIssue( $borrower2, $item1->{barcode} );
93
my $issue1 = AddIssue( $patron2->unblessed, $item1->barcode );
113
94
114
$is = IsAvailableForItemLevelRequest( $item1, $borrower1);
95
$is = IsAvailableForItemLevelRequest( $item1, $patron1);
115
is( $is, 0, "Item cannot be held, 1 item available" );
96
is( $is, 0, "Item cannot be held, 1 item available" );
116
97
117
AddIssue( $borrower2, $item2->{barcode} );
98
AddIssue( $patron2->unblessed, $item2->barcode );
118
99
119
$is = IsAvailableForItemLevelRequest( $item1, $borrower1);
100
$is = IsAvailableForItemLevelRequest( $item1, $patron1);
120
is( $is, 1, "Item can be held, no items available" );
101
is( $is, 1, "Item can be held, no items available" );
121
102
122
AddReturn( $item1->{barcode} );
103
AddReturn( $item1->barcode );
123
104
124
{ # Remove the issue for the first patron, and modify the branch for item1
105
{ # Remove the issue for the first patron, and modify the branch for item1
125
    subtest 'IsAvailableForItemLevelRequest behaviours depending on ReservesControlBranch + holdallowed' => sub {
106
    subtest 'IsAvailableForItemLevelRequest behaviours depending on ReservesControlBranch + holdallowed' => sub {
Lines 133-141 AddReturn( $item1->{barcode} ); Link Here
133
        subtest 'Item is available at a different library' => sub {
114
        subtest 'Item is available at a different library' => sub {
134
            plan tests => 4;
115
            plan tests => 4;
135
116
136
            $item1 = Koha::Items->find( $item1->{itemnumber} );
137
            $item1->set({homebranch => $library_B, holdingbranch => $library_B })->store;
117
            $item1->set({homebranch => $library_B, holdingbranch => $library_B })->store;
138
            $item1 = $item1->unblessed;
139
            #Scenario is:
118
            #Scenario is:
140
            #One shelf holds is 'If all unavailable'/2
119
            #One shelf holds is 'If all unavailable'/2
141
            #Item 1 homebranch library B is available
120
            #Item 1 homebranch library B is available
Lines 149-159 AddReturn( $item1->{barcode} ); Link Here
149
                $sth_insert_rule->execute( $hold_allowed_from_home_library );
128
                $sth_insert_rule->execute( $hold_allowed_from_home_library );
150
129
151
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'ItemHomeLibrary');
130
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'ItemHomeLibrary');
152
                $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
131
                $is = IsAvailableForItemLevelRequest( $item1, $patron1);
153
                is( $is, 1, "Hold allowed from home library + ReservesControlBranch=ItemHomeLibrary, One item is available at different library, not holdable = none available => the hold is allowed at item level" );
132
                is( $is, 1, "Hold allowed from home library + ReservesControlBranch=ItemHomeLibrary, One item is available at different library, not holdable = none available => the hold is allowed at item level" );
154
133
155
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'PatronLibrary');
134
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'PatronLibrary');
156
                $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
135
                $is = IsAvailableForItemLevelRequest( $item1, $patron1);
157
                is( $is, 1, "Hold allowed from home library + ReservesControlBranch=PatronLibrary, One item is available at different library, not holdable = none available => the hold is allowed at item level" );
136
                is( $is, 1, "Hold allowed from home library + ReservesControlBranch=PatronLibrary, One item is available at different library, not holdable = none available => the hold is allowed at item level" );
158
            }
137
            }
159
138
Lines 162-172 AddReturn( $item1->{barcode} ); Link Here
162
                $sth_insert_rule->execute( $hold_allowed_from_any_libraries );
141
                $sth_insert_rule->execute( $hold_allowed_from_any_libraries );
163
142
164
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'ItemHomeLibrary');
143
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'ItemHomeLibrary');
165
                $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
144
                $is = IsAvailableForItemLevelRequest( $item1, $patron1);
166
                is( $is, 0, "Hold allowed from any library + ReservesControlBranch=ItemHomeLibrary, One item is available at the diff library, holdable = 1 available => the hold is not allowed at item level" );
145
                is( $is, 0, "Hold allowed from any library + ReservesControlBranch=ItemHomeLibrary, One item is available at the diff library, holdable = 1 available => the hold is not allowed at item level" );
167
146
168
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'PatronLibrary');
147
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'PatronLibrary');
169
                $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
148
                $is = IsAvailableForItemLevelRequest( $item1, $patron1);
170
                is( $is, 0, "Hold allowed from any library + ReservesControlBranch=PatronLibrary, One item is available at the diff library, holdable = 1 available => the hold is not allowed at item level" );
149
                is( $is, 0, "Hold allowed from any library + ReservesControlBranch=PatronLibrary, One item is available at the diff library, holdable = 1 available => the hold is not allowed at item level" );
171
            }
150
            }
172
        };
151
        };
Lines 174-182 AddReturn( $item1->{barcode} ); Link Here
174
        subtest 'Item is available at the same library' => sub {
153
        subtest 'Item is available at the same library' => sub {
175
            plan tests => 4;
154
            plan tests => 4;
176
155
177
            $item1 = Koha::Items->find( $item1->{itemnumber} );
178
            $item1->set({homebranch => $library_A, holdingbranch => $library_A })->store;
156
            $item1->set({homebranch => $library_A, holdingbranch => $library_A })->store;
179
            $item1 = $item1->unblessed;
180
            #Scenario is:
157
            #Scenario is:
181
            #One shelf holds is 'If all unavailable'/2
158
            #One shelf holds is 'If all unavailable'/2
182
            #Item 1 homebranch library A is available
159
            #Item 1 homebranch library A is available
Lines 190-200 AddReturn( $item1->{barcode} ); Link Here
190
                $sth_insert_rule->execute( $hold_allowed_from_home_library );
167
                $sth_insert_rule->execute( $hold_allowed_from_home_library );
191
168
192
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'ItemHomeLibrary');
169
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'ItemHomeLibrary');
193
                $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
170
                $is = IsAvailableForItemLevelRequest( $item1, $patron1);
194
                is( $is, 0, "Hold allowed from home library + ReservesControlBranch=ItemHomeLibrary, One item is available at the same library, holdable = 1 available  => the hold is not allowed at item level" );
171
                is( $is, 0, "Hold allowed from home library + ReservesControlBranch=ItemHomeLibrary, One item is available at the same library, holdable = 1 available  => the hold is not allowed at item level" );
195
172
196
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'PatronLibrary');
173
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'PatronLibrary');
197
                $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
174
                $is = IsAvailableForItemLevelRequest( $item1, $patron1);
198
                is( $is, 0, "Hold allowed from home library + ReservesControlBranch=PatronLibrary, One item is available at the same library, holdable = 1 available  => the hold is not allowed at item level" );
175
                is( $is, 0, "Hold allowed from home library + ReservesControlBranch=PatronLibrary, One item is available at the same library, holdable = 1 available  => the hold is not allowed at item level" );
199
            }
176
            }
200
177
Lines 203-213 AddReturn( $item1->{barcode} ); Link Here
203
                $sth_insert_rule->execute( $hold_allowed_from_any_libraries );
180
                $sth_insert_rule->execute( $hold_allowed_from_any_libraries );
204
181
205
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'ItemHomeLibrary');
182
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'ItemHomeLibrary');
206
                $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
183
                $is = IsAvailableForItemLevelRequest( $item1, $patron1);
207
                is( $is, 0, "Hold allowed from any library + ReservesControlBranch=ItemHomeLibrary, One item is available at the same library, holdable = 1 available => the hold is not allowed at item level" );
184
                is( $is, 0, "Hold allowed from any library + ReservesControlBranch=ItemHomeLibrary, One item is available at the same library, holdable = 1 available => the hold is not allowed at item level" );
208
185
209
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'PatronLibrary');
186
                t::lib::Mocks::mock_preference('ReservesControlBranch', 'PatronLibrary');
210
                $is = IsAvailableForItemLevelRequest( $item1, $borrower1);
187
                $is = IsAvailableForItemLevelRequest( $item1, $patron1);
211
                is( $is, 0, "Hold allowed from any library + ReservesControlBranch=PatronLibrary, One item is available at the same library, holdable = 1 available  => the hold is not allowed at item level" );
188
                is( $is, 0, "Hold allowed from any library + ReservesControlBranch=PatronLibrary, One item is available at the same library, holdable = 1 available  => the hold is not allowed at item level" );
212
            }
189
            }
213
        };
190
        };
Lines 218-225 my $biblio = $builder->build({ Link Here
218
    source => 'Biblio',
195
    source => 'Biblio',
219
});
196
});
220
197
221
my $item3 = $builder->build({
198
my $item3 = $builder->build_object({
222
    source => 'Item',
199
    class => 'Koha::Items',
223
    value => {
200
    value => {
224
        biblionumber => $biblio->{biblionumber},
201
        biblionumber => $biblio->{biblionumber},
225
        itemlost     => 0,
202
        itemlost     => 0,
Lines 233-239 my $item3 = $builder->build({ Link Here
233
my $hold = $builder->build({
210
my $hold = $builder->build({
234
    source => 'Reserve',
211
    source => 'Reserve',
235
    value =>{
212
    value =>{
236
        itemnumber => $item3->{itemnumber},
213
        itemnumber => $item3->itemnumber,
237
        found => 'T'
214
        found => 'T'
238
    }
215
    }
239
});
216
});
Lines 253-259 $rule = Koha::IssuingRule->new( Link Here
253
);
230
);
254
$rule->store();
231
$rule->store();
255
232
256
$is = IsAvailableForItemLevelRequest( $item3, $borrower1);
233
$is = IsAvailableForItemLevelRequest( $item3, $patron1);
257
is( $is, 1, "Item can be held, items in transit are not available" );
234
is( $is, 1, "Item can be held, items in transit are not available" );
258
235
259
# Cleanup
236
# Cleanup
(-)a/t/db_dependent/Reserves.t (-4 / +4 lines)
Lines 109-115 my %data = ( Link Here
109
);
109
);
110
Koha::Patron::Categories->find($category_1)->set({ enrolmentfee => 0})->store;
110
Koha::Patron::Categories->find($category_1)->set({ enrolmentfee => 0})->store;
111
my $borrowernumber = Koha::Patron->new(\%data)->store->borrowernumber;
111
my $borrowernumber = Koha::Patron->new(\%data)->store->borrowernumber;
112
my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed;
112
my $patron = Koha::Patrons->find( $borrowernumber );
113
my $borrower = $patron->unblessed;
113
my $biblionumber   = $bibnum;
114
my $biblionumber   = $bibnum;
114
my $barcode        = $testbarcode;
115
my $barcode        = $testbarcode;
115
116
Lines 522-530 is( C4::Reserves::CanBookBeReserved($borrowernumber, $biblio_with_no_item->{bibl Link Here
522
####### EO Bug 13113 <<<
523
####### EO Bug 13113 <<<
523
       ####
524
       ####
524
525
525
$item = Koha::Items->find($itemnumber)->unblessed;
526
$item = Koha::Items->find($itemnumber);
526
527
527
ok( C4::Reserves::IsAvailableForItemLevelRequest($item, $borrower), "Reserving a book on item level" );
528
ok( C4::Reserves::IsAvailableForItemLevelRequest($item, $patron), "Reserving a book on item level" );
528
529
529
# tests for MoveReserve in relation to ConfirmFutureHolds (BZ 14526)
530
# tests for MoveReserve in relation to ConfirmFutureHolds (BZ 14526)
530
#   hold from A pos 1, today, no fut holds: MoveReserve should fill it
531
#   hold from A pos 1, today, no fut holds: MoveReserve should fill it
531
- 

Return to bug 19302