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

(-)a/C4/Reserves.pm (+69 lines)
Lines 140-145 BEGIN { Link Here
140
        IsItemOnHoldAndFound
140
        IsItemOnHoldAndFound
141
141
142
        GetMaxPatronHoldsForRecord
142
        GetMaxPatronHoldsForRecord
143
144
        &AddReserveGroup
145
        &DeleteReserveGroup
146
        &GetReserveGroupReserves
143
    );
147
    );
144
    @EXPORT_OK = qw( MergeHolds );
148
    @EXPORT_OK = qw( MergeHolds );
145
}
149
}
Lines 189-194 sub AddReserve { Link Here
189
    my $found          = $params->{found};
193
    my $found          = $params->{found};
190
    my $itemtype       = $params->{itemtype};
194
    my $itemtype       = $params->{itemtype};
191
    my $non_priority   = $params->{non_priority};
195
    my $non_priority   = $params->{non_priority};
196
    my $reserve_group_id = $params->{reserve_group_id};
192
197
193
    $resdate = output_pref( { str => dt_from_string( $resdate ), dateonly => 1, dateformat => 'iso' })
198
    $resdate = output_pref( { str => dt_from_string( $resdate ), dateonly => 1, dateformat => 'iso' })
194
        or output_pref({ dt => dt_from_string, dateonly => 1, dateformat => 'iso' });
199
        or output_pref({ dt => dt_from_string, dateonly => 1, dateformat => 'iso' });
Lines 253-258 sub AddReserve { Link Here
253
            itemtype       => $itemtype,
258
            itemtype       => $itemtype,
254
            item_level_hold => $checkitem ? 1 : 0,
259
            item_level_hold => $checkitem ? 1 : 0,
255
            non_priority   => $non_priority ? 1 : 0,
260
            non_priority   => $non_priority ? 1 : 0,
261
            reserve_group_id => $reserve_group_id,
256
        }
262
        }
257
    )->store();
263
    )->store();
258
    $hold->set_waiting() if $found && $found eq 'W';
264
    $hold->set_waiting() if $found && $found eq 'W';
Lines 1197-1202 sub ModReserveAffect { Link Here
1197
        };
1203
        };
1198
    }
1204
    }
1199
1205
1206
    if ($hold->reserve_group_id) {
1207
        # Delete other reserves from same group
1208
        $dbh->do(q{
1209
            DELETE FROM reserves
1210
            WHERE reserve_group_id = ?
1211
              AND reserve_id != ?
1212
        }, undef, $hold->reserve_group_id, $hold->reserve_id);
1213
        DeleteReserveGroup($hold->reserve_group_id);
1214
    }
1200
1215
1201
    _FixPriority( { biblionumber => $biblionumber } );
1216
    _FixPriority( { biblionumber => $biblionumber } );
1202
    my $item = Koha::Items->find($itemnumber);
1217
    my $item = Koha::Items->find($itemnumber);
Lines 2300-2305 sub GetHoldRule { Link Here
2300
    return $rules;
2315
    return $rules;
2301
}
2316
}
2302
2317
2318
=head2 AddReserveGroup
2319
2320
    my $reserve_group_id = AddReserveGroup();
2321
2322
Creates a new reserve group and returns its ID
2323
2324
=cut
2325
2326
sub AddReserveGroup {
2327
    my $dbh = C4::Context->dbh;
2328
2329
    $dbh->do('INSERT INTO reserve_group VALUES ()');
2330
    return $dbh->last_insert_id(undef, undef, 'reserve_group', undef);
2331
}
2332
2333
=head2 DeleteReserveGroup
2334
2335
    DeleteReserveGroup($reserve_group_id);
2336
2337
Delete a reserve group. Reserves that belong to this group are not removed.
2338
2339
=cut
2340
2341
sub DeleteReserveGroup {
2342
    my ($reserve_group_id) = @_;
2343
2344
    my $dbh = C4::Context->dbh;
2345
    my $query = 'DELETE FROM reserve_group WHERE reserve_group_id = ?';
2346
    $dbh->do($query, undef, $reserve_group_id);
2347
}
2348
2349
=head2 GetReserveGroupReserves
2350
2351
    my @reserves = GetReserveGroupReserves($reserve_group_id);
2352
2353
Fetch all reserve from a reserve group.
2354
2355
=cut
2356
2357
sub GetReserveGroupReserves {
2358
    my ($reserve_group_id) = @_;
2359
2360
    my $dbh = C4::Context->dbh;
2361
2362
    my $reserves = $dbh->selectall_arrayref(q{
2363
        SELECT * FROM reserves
2364
        WHERE reserve_group_id = ?
2365
    }, { Slice => {} }, $reserve_group_id);
2366
2367
    return () unless defined $reserves;
2368
2369
    return @$reserves;
2370
}
2371
2303
=head1 AUTHOR
2372
=head1 AUTHOR
2304
2373
2305
Koha Development Team <http://koha-community.org/>
2374
Koha Development Team <http://koha-community.org/>
(-)a/Koha/Template/Plugin/Biblio.pm (+8 lines)
Lines 63-66 sub CanArticleRequest { Link Here
63
    return $biblio ? $biblio->can_article_request( $borrower ) : 0;
63
    return $biblio ? $biblio->can_article_request( $borrower ) : 0;
64
}
64
}
65
65
66
sub Get {
67
    my ($self, $biblionumber) = @_;
68
69
    my $biblio = Koha::Biblios->find($biblionumber);
70
71
    return $biblio;
72
}
73
66
1;
74
1;
(-)a/circ/pendingreserves.pl (+2 lines)
Lines 202-207 my $strsth = Link Here
202
                    ORDER BY items.itemnumber SEPARATOR '|') l_copynumber,
202
                    ORDER BY items.itemnumber SEPARATOR '|') l_copynumber,
203
            GROUP_CONCAT(DISTINCT items.barcode
203
            GROUP_CONCAT(DISTINCT items.barcode
204
                    ORDER BY items.itemnumber SEPARATOR '|') l_barcode,
204
                    ORDER BY items.itemnumber SEPARATOR '|') l_barcode,
205
            reserves.reserve_group_id,
205
            biblio.title,
206
            biblio.title,
206
            biblio.copyrightdate,
207
            biblio.copyrightdate,
207
            biblioitems.publicationyear,
208
            biblioitems.publicationyear,
Lines 279-284 while ( my $data = $sth->fetchrow_hashref ) { Link Here
279
            homebranch       => $data->{homebranch},
280
            homebranch       => $data->{homebranch},
280
            itemnumber       => $data->{itemnumber},
281
            itemnumber       => $data->{itemnumber},
281
            publicationyear  => C4::Context->preference('marcflavour') eq "MARC21" ? $data->{copyrightdate} : $data->{publicationyear},
282
            publicationyear  => C4::Context->preference('marcflavour') eq "MARC21" ? $data->{copyrightdate} : $data->{publicationyear},
283
            reserve_group_id => $data->{reserve_group_id},
282
        }
284
        }
283
    );
285
    );
284
}
286
}
(-)a/installer/data/mysql/atomicupdate/bug_15516.sql (+11 lines)
Line 0 Link Here
1
DROP TABLE IF EXISTS reserve_group;
2
CREATE TABLE reserve_group (
3
  reserve_group_id int unsigned NOT NULL AUTO_INCREMENT,
4
  PRIMARY KEY (reserve_group_id)
5
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
6
7
ALTER TABLE reserves ADD COLUMN reserve_group_id int unsigned NULL DEFAULT NULL;
8
ALTER TABLE reserves ADD CONSTRAINT reserves_ibfk_6 FOREIGN KEY (reserve_group_id) REFERENCES reserve_group (reserve_group_id) ON DELETE SET NULL ON UPDATE CASCADE;
9
10
ALTER TABLE old_reserves ADD COLUMN reserve_group_id int unsigned NULL DEFAULT NULL;
11
ALTER TABLE old_reserves ADD CONSTRAINT old_reserves_ibfk_5 FOREIGN KEY (reserve_group_id) REFERENCES reserve_group (reserve_group_id) ON DELETE SET NULL ON UPDATE CASCADE;
(-)a/installer/data/mysql/kohastructure.sql (-2 / +16 lines)
Lines 1704-1710 CREATE TABLE `old_issues` ( -- lists items that were checked out and have been r Link Here
1704
    ON DELETE SET NULL ON UPDATE SET NULL,
1704
    ON DELETE SET NULL ON UPDATE SET NULL,
1705
  CONSTRAINT `old_issues_ibfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1705
  CONSTRAINT `old_issues_ibfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1706
    ON DELETE SET NULL ON UPDATE SET NULL,
1706
    ON DELETE SET NULL ON UPDATE SET NULL,
1707
  CONSTRAINT `old_issues_ibfk_borrowers_borrowernumber` FOREIGN KEY (`issuer_id`) REFERENCES `borrowers` (`borrowernumber`)
1707
  CONSTRAINT `old_issues_ibfk_borrowers_borrowernumber` FOREIGN KEY (`issuer_id`) REFERENCES `borrowers` (`borrowernumber`),
1708
  CONSTRAINT `old_reserves_ibfk_5` FOREIGN KEY (reserve_group_id) REFERENCES reserve_group (reserve_group_id)
1708
    ON DELETE SET NULL ON UPDATE CASCADE
1709
    ON DELETE SET NULL ON UPDATE CASCADE
1709
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
1710
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
1710
1711
Lines 1813-1818 CREATE TABLE `reserves` ( -- information related to holds/reserves in Koha Link Here
1813
  `itemtype` VARCHAR(10) NULL DEFAULT NULL, -- If record level hold, the optional itemtype of the item the patron is requesting
1814
  `itemtype` VARCHAR(10) NULL DEFAULT NULL, -- If record level hold, the optional itemtype of the item the patron is requesting
1814
  `item_level_hold` tinyint(1) NOT NULL DEFAULT 0, -- Is the hpld placed at item level
1815
  `item_level_hold` tinyint(1) NOT NULL DEFAULT 0, -- Is the hpld placed at item level
1815
  `non_priority` tinyint(1) NOT NULL DEFAULT 0, -- Is this a non priority hold
1816
  `non_priority` tinyint(1) NOT NULL DEFAULT 0, -- Is this a non priority hold
1817
  `reserve_group_id` int unsigned NULL DEFAULT NULL,  -- Id used on reservations spanning multiple titles
1816
  PRIMARY KEY (`reserve_id`),
1818
  PRIMARY KEY (`reserve_id`),
1817
  KEY priorityfoundidx (priority,found),
1819
  KEY priorityfoundidx (priority,found),
1818
  KEY `borrowernumber` (`borrowernumber`),
1820
  KEY `borrowernumber` (`borrowernumber`),
Lines 1826-1832 CREATE TABLE `reserves` ( -- information related to holds/reserves in Koha Link Here
1826
  CONSTRAINT `reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1828
  CONSTRAINT `reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1827
  CONSTRAINT `reserves_ibfk_4` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
1829
  CONSTRAINT `reserves_ibfk_4` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
1828
  CONSTRAINT `reserves_ibfk_5` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE,
1830
  CONSTRAINT `reserves_ibfk_5` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE,
1829
  CONSTRAINT `reserves_ibfk_6` FOREIGN KEY (`desk_id`) REFERENCES `desks` (`desk_id`) ON DELETE SET NULL ON UPDATE CASCADE
1831
  CONSTRAINT `reserves_ibfk_6` FOREIGN KEY (`desk_id`) REFERENCES `desks` (`desk_id`) ON DELETE SET NULL ON UPDATE CASCADE,
1832
  CONSTRAINT `reserves_ibfk_7` FOREIGN KEY (`reserve_group_id`) REFERENCES `reserve_group` (`reserve_group_id`) ON DELETE SET NULL ON UPDATE CASCADE
1833
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
1834
1835
--
1836
-- Table structure for table reserve_group
1837
--
1838
1839
DROP TABLE IF EXISTS `reserve_group`;
1840
CREATE TABLE `reserve_group` (
1841
  `reserve_group_id` int unsigned NOT NULL AUTO_INCREMENT,
1842
  PRIMARY KEY(`reserve_group_id`)
1830
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
1843
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
1831
1844
1832
--
1845
--
Lines 1858-1863 CREATE TABLE `old_reserves` ( -- this table holds all holds/reserves that have b Link Here
1858
  `itemtype` VARCHAR(10) NULL DEFAULT NULL, -- If record level hold, the optional itemtype of the item the patron is requesting
1871
  `itemtype` VARCHAR(10) NULL DEFAULT NULL, -- If record level hold, the optional itemtype of the item the patron is requesting
1859
  `item_level_hold` tinyint(1) NOT NULL DEFAULT 0, -- Is the hpld placed at item level
1872
  `item_level_hold` tinyint(1) NOT NULL DEFAULT 0, -- Is the hpld placed at item level
1860
  `non_priority` tinyint(1) NOT NULL DEFAULT 0, -- Is this a non priority hold
1873
  `non_priority` tinyint(1) NOT NULL DEFAULT 0, -- Is this a non priority hold
1874
  `reserve_group_id` int unsigned NULL DEFAULT NULL,  -- The id of a group of titles reservations fulfilled when one title is picked
1861
  PRIMARY KEY (`reserve_id`),
1875
  PRIMARY KEY (`reserve_id`),
1862
  KEY `old_reserves_borrowernumber` (`borrowernumber`),
1876
  KEY `old_reserves_borrowernumber` (`borrowernumber`),
1863
  KEY `old_reserves_biblionumber` (`biblionumber`),
1877
  KEY `old_reserves_biblionumber` (`biblionumber`),
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/holds_table.inc (+3 lines)
Lines 177-182 Link Here
177
                [% IF hold.non_priority %]
177
                [% IF hold.non_priority %]
178
                    <br><i>Non priority hold</i>
178
                    <br><i>Non priority hold</i>
179
                [% END %]
179
                [% END %]
180
                [% IF hold.reserve_group_id %]
181
                    <div>(part of a <a href="/cgi-bin/koha/reserve/reserve-group.pl?reserve_group_id=[% hold.reserve_group_id %]" class="reserve-group">reserve group</a>)</div>
182
                [% END %]
180
            </td>
183
            </td>
181
184
182
            [% IF ( CAN_user_reserveforothers_modify_holds_priority ) %]
185
            [% IF ( CAN_user_reserveforothers_modify_holds_priority ) %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/reserve-group-modal.inc (+27 lines)
Line 0 Link Here
1
<div id="reserve-group-modal" class="modal hide" tabindex="-1" role="dialog" aria-labelledby="reserve-group-modal-label" aria-hidden="true">
2
    <div class="modal-header">
3
        <button type="button" class="closebtn" data-dismiss="modal" aria-hidden="true">×</button>
4
        <h3 id="reserve-group-modal-label">Reserve group</h3>
5
    </div>
6
    <div class="modal-body">
7
        <div id="loading"> <img src="[% interface %]/[% theme %]/img/loading-small.gif" alt="" /> Loading </div>
8
    </div>
9
    <div class="modal-footer">
10
        <button class="btn" data-dismiss="modal" aria-hidden="true">Close</button>
11
    </div>
12
</div>
13
14
<script>
15
  $(document).ready(function() {
16
    $('body').on('click', 'a.reserve-group', function() {
17
      var href = $(this).attr('href');
18
      $('#reserve-group-modal .modal-body').load(href + " #main");
19
      $('#reserve-group-modal').modal('show');
20
      return false;
21
    })
22
23
    $('#reserve-group-modal').on('hidden', function(){
24
        $('#reserve-group-modal .modal-body').html('<div id="loading"><img src="[% interface %]/[% theme %]/img/loading-small.gif" alt="" /> ' + _('Loading') + '</div>');
25
    });
26
  });
27
</script>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt (+1 lines)
Lines 1190-1193 Link Here
1190
    [% Asset.js("js/members-menu.js") | $raw %]
1190
    [% Asset.js("js/members-menu.js") | $raw %]
1191
[% END %]
1191
[% END %]
1192
1192
1193
[% INCLUDE 'reserve-group-modal.inc' %]
1193
[% INCLUDE 'intranet-bottom.inc' %]
1194
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/pendingreserves.tt (+5 lines)
Lines 82-87 Link Here
82
                [% IF ( reserveloo.author ) %]<p> by [% reserveloo.author | html %]</p>[% END %]
82
                [% IF ( reserveloo.author ) %]<p> by [% reserveloo.author | html %]</p>[% END %]
83
                [% IF ( reserveloo.editionstatement ) %]<p>[% reserveloo.editionstatement | html %]</p>[% END %]
83
                [% IF ( reserveloo.editionstatement ) %]<p>[% reserveloo.editionstatement | html %]</p>[% END %]
84
                [% IF ( reserveloo.publicationyear ) %]<p>[% reserveloo.publicationyear | html %]</p>[% END %]
84
                [% IF ( reserveloo.publicationyear ) %]<p>[% reserveloo.publicationyear | html %]</p>[% END %]
85
                [% IF reserveloo.reserve_group_id %]
86
                    <p>(part of a <a class="reserve-group" href="/cgi-bin/koha/reserve/reserve-group.pl?reserve_group_id=[% reserveloo.reserve_group_id | html %]">reserve group</a>)</p>
87
                [% END %]
85
            </td>
88
            </td>
86
        [% ELSE %]
89
        [% ELSE %]
87
            <td>"</td>
90
            <td>"</td>
Lines 324-327 Link Here
324
    </script>
327
    </script>
325
[% END %]
328
[% END %]
326
329
330
[%# TODO: this module needs to be separated to html and js part to be included correctly %]
331
[% INCLUDE 'reserve-group-modal.inc' %]
327
[% INCLUDE 'intranet-bottom.inc' %]
332
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt (+1 lines)
Lines 1030-1033 Link Here
1030
    </script>
1030
    </script>
1031
[% END %]
1031
[% END %]
1032
1032
1033
[% INCLUDE 'reserve-group-modal.inc' %]
1033
[% INCLUDE 'intranet-bottom.inc' %]
1034
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt (-4 / +10 lines)
Lines 452-472 Link Here
452
                                <a href="#" id="clear-date-to" class="clear-date">Clear date</a>
452
                                <a href="#" id="clear-date-to" class="clear-date">Clear date</a>
453
                            </li>
453
                            </li>
454
454
455
                            [% UNLESS ( multi_hold ) %]
456
                                <li>
455
                                <li>
457
                                    <label for="requestany">Hold next available item </label>
456
                                    <label for="requestany">Hold next available item </label>
458
                                    [% IF force_hold_level == 'item' %]
457
                                    [% IF multi_hold %]
458
                                        <input type="checkbox" id="requestany" name="requestany" value="1" />
459
                                    [% ELSE %]
460
                                      [% IF force_hold_level == 'item' %]
459
                                        <input type="checkbox" id="requestany" name="request" disabled="true" />
461
                                        <input type="checkbox" id="requestany" name="request" disabled="true" />
460
                                    [% ELSIF force_hold_level == 'record' %]
462
                                      [% ELSIF force_hold_level == 'record' %]
461
                                        <input type="checkbox" id="requestany" checked="checked" value="Any" disabled="true"/>
463
                                        <input type="checkbox" id="requestany" checked="checked" value="Any" disabled="true"/>
462
                                        <input type="hidden" name="request" value="Any"/>
464
                                        <input type="hidden" name="request" value="Any"/>
463
                                    [% ELSE %]
465
                                      [% ELSE %]
464
                                        <input type="checkbox" id="requestany" name="request" checked="checked" value="Any" />
466
                                        <input type="checkbox" id="requestany" name="request" checked="checked" value="Any" />
467
                                      [% END %]
465
                                    [% END %]
468
                                    [% END %]
466
                                    <input type="hidden" name="biblioitem" value="[% biblioitemnumber | html %]" />
469
                                    <input type="hidden" name="biblioitem" value="[% biblioitemnumber | html %]" />
467
                                    <input type="hidden" name="alreadyreserved" value="[% alreadyreserved | html %]" />
470
                                    <input type="hidden" name="alreadyreserved" value="[% alreadyreserved | html %]" />
468
                                </li>
471
                                </li>
469
472
473
                            [% UNLESS multi_hold %]
470
                                [% IF remaining_holds_for_record > 1 %]
474
                                [% IF remaining_holds_for_record > 1 %]
471
                                    <li>
475
                                    <li>
472
                                        <label for="holds_to_place_count">Holds to place (count)</label>
476
                                        <label for="holds_to_place_count">Holds to place (count)</label>
Lines 1351-1354 Link Here
1351
    </script>
1355
    </script>
1352
[% END %]
1356
[% END %]
1353
1357
1358
[% INCLUDE 'reserve-group-modal.inc' %]
1359
1354
[% INCLUDE 'intranet-bottom.inc' %]
1360
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/reserve-group.tt (+30 lines)
Line 0 Link Here
1
[% USE Biblio %]
2
[% INCLUDE 'doc-head-open.inc' %]
3
  <title>Koha &rsaquo; Circulation &rsaquo; Holds &rsaquo; Holds group ([% reserve_group_id %])</title>
4
  [% INCLUDE 'doc-head-close.inc' %]
5
</head>
6
<body id="reserve-reserve-group">
7
  <h1>Holds group ([% reserve_group_id %])</h1>
8
  <div id="main">
9
    [% IF reserves.size %]
10
      <table>
11
        <thead>
12
          <tr>
13
            <th>Title</th>
14
            <th>Priority</th>
15
            <th>Notes</th>
16
          </tr>
17
        </thead>
18
        <tbody>
19
          [% FOREACH reserve IN reserves %]
20
            [% biblio = Biblio.Get(reserve.biblionumber) %]
21
            <tr>
22
              <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% biblio.biblionumber %]">[% biblio.title %]</a></td>
23
              <td>[% reserve.priority %]</td>
24
              <td>[% reserve.reservenotes %]</td>
25
            </tr>
26
          [% END %]
27
        </tbody>
28
      <table>
29
    [% END %]
30
  [% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/js/holds.js (+6 lines)
Lines 50-55 $(document).ready(function() { Link Here
50
                                title += " - <span class='" + span_class + "'>" + oObj.itemnotes.escapeHtml() + "</span>"
50
                                title += " - <span class='" + span_class + "'>" + oObj.itemnotes.escapeHtml() + "</span>"
51
                            }
51
                            }
52
52
53
                            if (oObj.reserve_group_id) {
54
                              title += '<br>';
55
                              var link = '<a class="reserve-group" href="/cgi-bin/koha/reserve/reserve-group.pl?reserve_group_id=' + oObj.reserve_group_id + '">' + RESERVE_GROUP +'</a>'
56
                              title += '<span>' + PART_OF_A.format(link) + '</span>';
57
                            }
58
53
                            return title;
59
                            return title;
54
                        }
60
                        }
55
                    },
61
                    },
(-)a/reserve/placerequest.pl (+7 lines)
Lines 53-58 my $checkitem = $input->param('checkitem'); Link Here
53
my $expirationdate = $input->param('expiration_date');
53
my $expirationdate = $input->param('expiration_date');
54
my $itemtype       = $input->param('itemtype') || undef;
54
my $itemtype       = $input->param('itemtype') || undef;
55
my $non_priority   = $input->param('non_priority');
55
my $non_priority   = $input->param('non_priority');
56
my $requestany     = $input->param('requestany');
56
57
57
my $borrower = Koha::Patrons->find( $borrowernumber );
58
my $borrower = Koha::Patrons->find( $borrowernumber );
58
$borrower = $borrower->unblessed if $borrower;
59
$borrower = $borrower->unblessed if $borrower;
Lines 76-81 my $found; Link Here
76
77
77
if ( $type eq 'str8' && $borrower ) {
78
if ( $type eq 'str8' && $borrower ) {
78
79
80
    my $reserve_group_id;
81
    if ($multi_hold && $requestany) {
82
        $reserve_group_id = AddReserveGroup();
83
    }
84
79
    foreach my $biblionumber ( keys %bibinfos ) {
85
    foreach my $biblionumber ( keys %bibinfos ) {
80
        my $count = @bibitems;
86
        my $count = @bibitems;
81
        @bibitems = sort @bibitems;
87
        @bibitems = sort @bibitems;
Lines 138-143 if ( $type eq 'str8' && $borrower ) { Link Here
138
                        found            => $found,
144
                        found            => $found,
139
                        itemtype         => $itemtype,
145
                        itemtype         => $itemtype,
140
                        non_priority     => $non_priority,
146
                        non_priority     => $non_priority,
147
                        reserve_group_id => $reserve_group_id,
141
                    }
148
                    }
142
                );
149
                );
143
            }
150
            }
(-)a/reserve/request.pl (+1 lines)
Lines 690-695 foreach my $biblionumber (@biblionumbers) { Link Here
690
        $reserve{branchcode}       = $res->branchcode();
690
        $reserve{branchcode}       = $res->branchcode();
691
        $reserve{non_priority}     = $res->non_priority();
691
        $reserve{non_priority}     = $res->non_priority();
692
        $reserve{object}           = $res;
692
        $reserve{object}           = $res;
693
        $reserve{'reserve_group_id'} = $res->reserve_group_id;
693
694
694
        push( @reserveloop, \%reserve );
695
        push( @reserveloop, \%reserve );
695
    }
696
    }
(-)a/reserve/reserve-group.pl (+42 lines)
Line 0 Link Here
1
#!/usr/bin/env perl
2
3
# This file is part of Koha.
4
#
5
# Koha is free software; you can redistribute it and/or modify it
6
# under the terms of the GNU General Public License as published by
7
# the Free Software Foundation; either version 3 of the License, or
8
# (at your option) any later version.
9
#
10
# Koha is distributed in the hope that it will be useful, but
11
# WITHOUT ANY WARRANTY; without even the implied warranty of
12
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
# GNU General Public License for more details.
14
#
15
# You should have received a copy of the GNU General Public License
16
# along with Koha; if not, see <http://www.gnu.org/licenses>.
17
18
use Modern::Perl;
19
use CGI qw( -utf8 );
20
21
use C4::Auth;
22
use C4::Output;
23
use C4::Reserves;
24
25
my $cgi = new CGI;
26
my ($template, $loggedinuser, $cookie) = get_template_and_user({
27
    template_name   => "reserve/reserve-group.tt",
28
    query           => $cgi,
29
    type            => "intranet",
30
    authnotrequired => 0,
31
    flagsrequired   => { circulate => 'circulate_remaining_permissions' },
32
});
33
34
my $reserve_group_id = $cgi->param('reserve_group_id');
35
my @reserves = GetReserveGroupReserves($reserve_group_id);
36
37
$template->param(
38
    reserve_group_id => $reserve_group_id,
39
    reserves => \@reserves,
40
);
41
42
output_html_with_http_headers $cgi, $cookie, $template->output;
(-)a/svc/holds (-1 / +1 lines)
Lines 114-119 while ( my $h = $holds_rs->next() ) { Link Here
114
        waiting_here   => $h->branch()->branchcode() eq $branch,
114
        waiting_here   => $h->branch()->branchcode() eq $branch,
115
        priority       => $h->priority(),
115
        priority       => $h->priority(),
116
        itemtype_limit => $itemtype_limit,
116
        itemtype_limit => $itemtype_limit,
117
        reserve_group_id => $h->reserve_group_id,
117
        reservedate_formatted => $h->reservedate() ? output_pref(
118
        reservedate_formatted => $h->reservedate() ? output_pref(
118
            { dt => dt_from_string( $h->reservedate() ), dateonly => 1 }
119
            { dt => dt_from_string( $h->reservedate() ), dateonly => 1 }
119
          )
120
          )
120
- 

Return to bug 15516