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

(-)a/C4/Reserves.pm (-33 / +33 lines)
Lines 144-152 BEGIN { Link Here
144
144
145
        IsItemOnHoldAndFound
145
        IsItemOnHoldAndFound
146
146
147
        &AddReserveGroup
147
        &AddHoldGroup
148
        &DeleteReserveGroup
148
        &DeleteHoldGroup
149
        &GetReserveGroupReserves
149
        &GetHoldGroupReserves
150
    );
150
    );
151
    @EXPORT_OK = qw( MergeHolds );
151
    @EXPORT_OK = qw( MergeHolds );
152
}
152
}
Lines 172-178 sub AddReserve { Link Here
172
        $branch,   $borrowernumber, $biblionumber, $bibitems,
172
        $branch,   $borrowernumber, $biblionumber, $bibitems,
173
        $priority, $resdate,        $expdate,      $notes,
173
        $priority, $resdate,        $expdate,      $notes,
174
        $title,    $checkitem,      $found,        $itemtype,
174
        $title,    $checkitem,      $found,        $itemtype,
175
        $reserve_group_id
175
        $hold_group_id
176
    ) = @_;
176
    ) = @_;
177
177
178
    if ( Koha::Holds->search( { borrowernumber => $borrowernumber, biblionumber => $biblionumber } )->count() > 0 ) {
178
    if ( Koha::Holds->search( { borrowernumber => $borrowernumber, biblionumber => $biblionumber } )->count() > 0 ) {
Lines 217-223 sub AddReserve { Link Here
217
            waitingdate    => $waitingdate,
217
            waitingdate    => $waitingdate,
218
            expirationdate => $expdate,
218
            expirationdate => $expdate,
219
            itemtype       => $itemtype,
219
            itemtype       => $itemtype,
220
            reserve_group_id => $reserve_group_id,
220
            hold_group_id  => $hold_group_id,
221
        }
221
        }
222
    )->store();
222
    )->store();
223
223
Lines 630-636 sub GetReserveCount { Link Here
630
        SELECT COUNT(*) AS counter
630
        SELECT COUNT(*) AS counter
631
        FROM reserves
631
        FROM reserves
632
        WHERE borrowernumber = ?
632
        WHERE borrowernumber = ?
633
        AND reserve_group_id is NULL
633
        AND hold_group_id is NULL
634
    ";
634
    ";
635
    my $sth = $dbh->prepare($query);
635
    my $sth = $dbh->prepare($query);
636
    $sth->execute($borrowernumber);
636
    $sth->execute($borrowernumber);
Lines 638-647 sub GetReserveCount { Link Here
638
    $count += $row->{counter};
638
    $count += $row->{counter};
639
639
640
    $query = "
640
    $query = "
641
        SELECT COUNT(DISTINCT reserve_group_id) AS counter
641
        SELECT COUNT(DISTINCT hold_group_id) AS counter
642
        FROM reserves
642
        FROM reserves
643
        WHERE borrowernumber = ?
643
        WHERE borrowernumber = ?
644
        AND reserve_group_id is not NULL
644
        AND hold_group_id is not NULL
645
    ";
645
    ";
646
    $sth = $dbh->prepare($query);
646
    $sth = $dbh->prepare($query);
647
    $sth->execute($borrowernumber);
647
    $sth->execute($borrowernumber);
Lines 1384-1397 sub ModReserveAffect { Link Here
1384
    $sth = $dbh->prepare($query);
1384
    $sth = $dbh->prepare($query);
1385
    $sth->execute( $itemnumber, $borrowernumber,$biblionumber);
1385
    $sth->execute( $itemnumber, $borrowernumber,$biblionumber);
1386
1386
1387
    if ($request->{reserve_group_id}) {
1387
    if ($request->{hold_group_id}) {
1388
        # Delete other reserves from same group
1388
        # Delete other reserves from same group
1389
        $dbh->do(q{
1389
        $dbh->do(q{
1390
            DELETE FROM reserves
1390
            DELETE FROM reserves
1391
            WHERE reserve_group_id = ?
1391
            WHERE hold_group_id = ?
1392
              AND reserve_id != ?
1392
              AND reserve_id != ?
1393
        }, undef, $request->{reserve_group_id}, $request->{reserve_id});
1393
        }, undef, $request->{hold_group_id}, $request->{reserve_id});
1394
        DeleteReserveGroup($request->{reserve_group_id});
1394
        DeleteHoldGroup($request->{hold_group_id});
1395
    }
1395
    }
1396
1396
1397
    _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo && !$already_on_shelf );
1397
    _koha_notify_reserve( $itemnumber, $borrowernumber, $biblionumber ) if ( !$transferToDo && !$already_on_shelf );
Lines 1473-1479 sub GetReserveInfo { Link Here
1473
                   reminderdate,
1473
                   reminderdate,
1474
                   priority,
1474
                   priority,
1475
                   found,
1475
                   found,
1476
                   reserve_group_id,
1476
                   hold_group_id,
1477
                   firstname,
1477
                   firstname,
1478
                   surname,
1478
                   surname,
1479
                   phone,
1479
                   phone,
Lines 2529-2582 sub IsItemOnHoldAndFound { Link Here
2529
    return $found;
2529
    return $found;
2530
}
2530
}
2531
2531
2532
=head2 AddReserveGroup
2532
=head2 AddHoldGroup
2533
2533
2534
    my $reserve_group_id = AddReserveGroup();
2534
    my $hold_group_id = AddHoldGroup();
2535
2535
2536
Creates a new reserve group and returns its ID
2536
Creates a new hold group and returns its ID
2537
2537
2538
=cut
2538
=cut
2539
2539
2540
sub AddReserveGroup {
2540
sub AddHoldGroup {
2541
    my $dbh = C4::Context->dbh;
2541
    my $dbh = C4::Context->dbh;
2542
2542
2543
    $dbh->do('INSERT INTO reserve_group VALUES ()');
2543
    $dbh->do('INSERT INTO hold_group VALUES ()');
2544
    return $dbh->last_insert_id(undef, undef, 'reserve_group', undef);
2544
    return $dbh->last_insert_id(undef, undef, 'hold_group', undef);
2545
}
2545
}
2546
2546
2547
=head2 DeleteReserveGroup
2547
=head2 DeleteHoldGroup
2548
2548
2549
    DeleteReserveGroup($reserve_group_id);
2549
    DeleteHoldGroup($hold_group_id);
2550
2550
2551
Delete a reserve group. Reserves that belong to this group are not removed.
2551
Delete a hold group. Holds that belong to this group are not removed.
2552
2552
2553
=cut
2553
=cut
2554
2554
2555
sub DeleteReserveGroup {
2555
sub DeleteHoldGroup {
2556
    my ($reserve_group_id) = @_;
2556
    my ($hold_group_id) = @_;
2557
2557
2558
    my $dbh = C4::Context->dbh;
2558
    my $dbh = C4::Context->dbh;
2559
    my $query = 'DELETE FROM reserve_group WHERE reserve_group_id = ?';
2559
    my $query = 'DELETE FROM hold_group WHERE hold_group_id = ?';
2560
    $dbh->do($query, undef, $reserve_group_id);
2560
    $dbh->do($query, undef, $hold_group_id);
2561
}
2561
}
2562
2562
2563
=head2 GetReserveGroupReserves
2563
=head2 GetHoldGroupHolds
2564
2564
2565
    my @reserves = GetReserveGroupReserves($reserve_group_id);
2565
    my @holds = GetHoldGroupHolds($hold_group_id);
2566
2566
2567
Fetch all reserve from a reserve group.
2567
Fetch all holds from a hold group.
2568
2568
2569
=cut
2569
=cut
2570
2570
2571
sub GetReserveGroupReserves {
2571
sub GetHoldGroupHolds {
2572
    my ($reserve_group_id) = @_;
2572
    my ($hold_group_id) = @_;
2573
2573
2574
    my $dbh = C4::Context->dbh;
2574
    my $dbh = C4::Context->dbh;
2575
2575
2576
    my $reserves = $dbh->selectall_arrayref(q{
2576
    my $reserves = $dbh->selectall_arrayref(q{
2577
        SELECT * FROM reserves
2577
        SELECT * FROM reserves
2578
        WHERE reserve_group_id = ?
2578
        WHERE hold_group_id = ?
2579
    }, { Slice => {} }, $reserve_group_id);
2579
    }, { Slice => {} }, $hold_group_id);
2580
2580
2581
    return () unless defined $reserves;
2581
    return () unless defined $reserves;
2582
2582
(-)a/circ/pendingreserves.pl (-2 / +2 lines)
Lines 118-124 if ( $run_report ) { Link Here
118
            reminderdate,
118
            reminderdate,
119
            max(priority) as priority,
119
            max(priority) as priority,
120
            reserves.found,
120
            reserves.found,
121
            reserves.reserve_group_id,
121
            reserves.hold_group_id,
122
            biblio.title,
122
            biblio.title,
123
            biblio.author,
123
            biblio.author,
124
            count(DISTINCT items.itemnumber) as icount,
124
            count(DISTINCT items.itemnumber) as icount,
Lines 168-174 if ( $run_report ) { Link Here
168
                biblionumber    => $data->{biblionumber},
168
                biblionumber    => $data->{biblionumber},
169
                statusw         => ( $data->{found} eq "W" ),
169
                statusw         => ( $data->{found} eq "W" ),
170
                statusf         => ( $data->{found} eq "F" ),
170
                statusf         => ( $data->{found} eq "F" ),
171
                reserve_group_id => $data->{reserve_group_id},
171
                hold_group_id   => $data->{hold_group_id},
172
                holdingbranches => [split('\|', $data->{l_holdingbranch})],
172
                holdingbranches => [split('\|', $data->{l_holdingbranch})],
173
                branch          => $data->{l_branch},
173
                branch          => $data->{l_branch},
174
                itemcallnumber  => $data->{l_itemcallnumber},
174
                itemcallnumber  => $data->{l_itemcallnumber},
(-)a/installer/data/mysql/atomicupdate/bug_15516.sql (-8 / +8 lines)
Lines 1-11 Link Here
1
DROP TABLE IF EXISTS reserve_group;
1
DROP TABLE IF EXISTS hold_group;
2
CREATE TABLE reserve_group (
2
CREATE TABLE hold_group (
3
  reserve_group_id int unsigned NOT NULL AUTO_INCREMENT,
3
  hold_group_id int unsigned NOT NULL AUTO_INCREMENT,
4
  PRIMARY KEY (reserve_group_id)
4
  PRIMARY KEY (hold_group_id)
5
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
5
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
6
6
7
ALTER TABLE reserves ADD COLUMN reserve_group_id int unsigned NULL DEFAULT NULL;
7
ALTER TABLE reserves ADD COLUMN hold_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;
8
ALTER TABLE reserves ADD CONSTRAINT reserves_ibfk_6 FOREIGN KEY (hold_group_id) REFERENCES hold_group (hold_group_id) ON DELETE SET NULL ON UPDATE CASCADE;
9
9
10
ALTER TABLE old_reserves ADD COLUMN reserve_group_id int unsigned NULL DEFAULT NULL;
10
ALTER TABLE old_reserves ADD COLUMN hold_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;
11
ALTER TABLE old_reserves ADD CONSTRAINT old_reserves_ibfk_5 FOREIGN KEY (hold_group_id) REFERENCES hold_group (hold_group_id) ON DELETE SET NULL ON UPDATE CASCADE;
(-)a/installer/data/mysql/kohastructure.sql (-9 / +9 lines)
Lines 1766-1772 CREATE TABLE `old_issues` ( -- lists items that were checked out and have been r Link Here
1766
    ON DELETE SET NULL ON UPDATE SET NULL,
1766
    ON DELETE SET NULL ON UPDATE SET NULL,
1767
  CONSTRAINT `old_issues_ibfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1767
  CONSTRAINT `old_issues_ibfk_2` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`)
1768
    ON DELETE SET NULL ON UPDATE SET NULL
1768
    ON DELETE SET NULL ON UPDATE SET NULL
1769
  CONSTRAINT `old_reserves_ibfk_5` FOREIGN KEY (reserve_group_id) REFERENCES reserve_group (reserve_group_id)
1769
  CONSTRAINT `old_reserves_ibfk_5` FOREIGN KEY (hold_group_id) REFERENCES hold_group (hold_group_id)
1770
    ON DELETE SET NULL ON UPDATE CASCADE
1770
    ON DELETE SET NULL ON UPDATE CASCADE
1771
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1771
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1772
1772
Lines 1869-1875 CREATE TABLE `reserves` ( -- information related to holds/reserves in Koha Link Here
1869
  `suspend` BOOLEAN NOT NULL DEFAULT 0,
1869
  `suspend` BOOLEAN NOT NULL DEFAULT 0,
1870
  `suspend_until` DATETIME NULL DEFAULT NULL,
1870
  `suspend_until` DATETIME NULL DEFAULT NULL,
1871
  `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
1872
  `reserve_group_id` int unsigned NULL DEFAULT NULL,  -- Id used on reservations spanning multiple titles
1872
  `hold_group_id` int unsigned NULL DEFAULT NULL,  -- Id used on reservations spanning multiple titles
1873
  PRIMARY KEY (`reserve_id`),
1873
  PRIMARY KEY (`reserve_id`),
1874
  KEY priorityfoundidx (priority,found),
1874
  KEY priorityfoundidx (priority,found),
1875
  KEY `borrowernumber` (`borrowernumber`),
1875
  KEY `borrowernumber` (`borrowernumber`),
Lines 1882-1898 CREATE TABLE `reserves` ( -- information related to holds/reserves in Koha Link Here
1882
  CONSTRAINT `reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1882
  CONSTRAINT `reserves_ibfk_3` FOREIGN KEY (`itemnumber`) REFERENCES `items` (`itemnumber`) ON DELETE CASCADE ON UPDATE CASCADE,
1883
  CONSTRAINT `reserves_ibfk_4` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
1883
  CONSTRAINT `reserves_ibfk_4` FOREIGN KEY (`branchcode`) REFERENCES `branches` (`branchcode`) ON DELETE CASCADE ON UPDATE CASCADE,
1884
  CONSTRAINT `reserves_ibfk_5` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE,
1884
  CONSTRAINT `reserves_ibfk_5` FOREIGN KEY (`itemtype`) REFERENCES `itemtypes` (`itemtype`) ON DELETE CASCADE ON UPDATE CASCADE,
1885
  CONSTRAINT `reserves_ibfk_6` FOREIGN KEY (`reserve_group_id`) REFERENCES `reserve_group` (`reserve_group_id`) ON DELETE SET NULL ON UPDATE CASCADE
1885
  CONSTRAINT `reserves_ibfk_6` FOREIGN KEY (`hold_group_id`) REFERENCES `hold_group` (`hold_group_id`) ON DELETE SET NULL ON UPDATE CASCADE
1886
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1886
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1887
1887
1888
--
1888
--
1889
-- Table structure for table reserve_group
1889
-- Table structure for table hold_group
1890
--
1890
--
1891
1891
1892
DROP TABLE IF EXISTS `reserve_group`;
1892
DROP TABLE IF EXISTS `hold_group`;
1893
CREATE TABLE `reserve_group` (
1893
CREATE TABLE `hold_group` (
1894
  `reserve_group_id` int unsigned NOT NULL AUTO_INCREMENT,
1894
  `hold_group_id` int unsigned NOT NULL AUTO_INCREMENT,
1895
  PRIMARY KEY(`reserve_group_id`)
1895
  PRIMARY KEY(`hold_group_id`)
1896
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1896
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1897
1897
1898
--
1898
--
Lines 1920-1926 CREATE TABLE `old_reserves` ( -- this table holds all holds/reserves that have b Link Here
1920
  `suspend` BOOLEAN NOT NULL DEFAULT 0, -- in this hold suspended (1 for yes, 0 for no)
1920
  `suspend` BOOLEAN NOT NULL DEFAULT 0, -- in this hold suspended (1 for yes, 0 for no)
1921
  `suspend_until` DATETIME NULL DEFAULT NULL, -- the date this hold is suspended until (NULL for infinitely)
1921
  `suspend_until` DATETIME NULL DEFAULT NULL, -- the date this hold is suspended until (NULL for infinitely)
1922
  `itemtype` VARCHAR(10) NULL DEFAULT NULL, -- If record level hold, the optional itemtype of the item the patron is requesting
1922
  `itemtype` VARCHAR(10) NULL DEFAULT NULL, -- If record level hold, the optional itemtype of the item the patron is requesting
1923
  `reserve_group_id` int unsigned NULL DEFAULT NULL,  -- The id of a group of titles reservations fulfilled when one title is picked
1923
  `hold_group_id` int unsigned NULL DEFAULT NULL,  -- The id of a group of titles reservations fulfilled when one title is picked
1924
  PRIMARY KEY (`reserve_id`),
1924
  PRIMARY KEY (`reserve_id`),
1925
  KEY `old_reserves_borrowernumber` (`borrowernumber`),
1925
  KEY `old_reserves_borrowernumber` (`borrowernumber`),
1926
  KEY `old_reserves_biblionumber` (`biblionumber`),
1926
  KEY `old_reserves_biblionumber` (`biblionumber`),
(-)a/koha-tmpl/intranet-tmpl/prog/en/includes/hold-group-modal.inc (+27 lines)
Line 0 Link Here
1
<div id="hold-group-modal" class="modal hide" tabindex="-1" role="dialog" aria-labelledby="hold-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="hold-group-modal-label">Hold 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.hold-group', function() {
17
      var href = $(this).attr('href');
18
      $('#hold-group-modal .modal-body').load(href + " #main");
19
      $('#hold-group-modal').modal('show');
20
      return false;
21
    })
22
23
    $('#hold-group-modal').on('hidden', function(){
24
        $('#hold-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/includes/reserve-group-modal.inc (-27 lines)
Lines 1-27 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/includes/strings.inc (-1 / +1 lines)
Lines 40-45 Link Here
40
    var SUSPEND_HOLD_ERROR_NOT_FOUND = _("Unable to suspend hold, hold not found");
40
    var SUSPEND_HOLD_ERROR_NOT_FOUND = _("Unable to suspend hold, hold not found");
41
    var RESUME_HOLD_ERROR_NOT_FOUND = _("Unable to resume, hold not found");
41
    var RESUME_HOLD_ERROR_NOT_FOUND = _("Unable to resume, hold not found");
42
    var PART_OF_A = _("(part of a %s)");
42
    var PART_OF_A = _("(part of a %s)");
43
    var RESERVE_GROUP = _("reserve group");
43
    var HOLD_GROUP = _("hold group");
44
//]]>
44
//]]>
45
</script>
45
</script>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/circulation.tt (-1 / +1 lines)
Lines 988-992 No patron matched <span class="ex">[% message | html %]</span> Link Here
988
        <p>You have already submitted a barcode, please wait for the checkout to process...</p>
988
        <p>You have already submitted a barcode, please wait for the checkout to process...</p>
989
    </div>
989
    </div>
990
</div>
990
</div>
991
[% INCLUDE 'reserve-group-modal.inc' %]
991
[% INCLUDE 'hold-group-modal.inc' %]
992
[% INCLUDE 'intranet-bottom.inc' %]
992
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/circ/pendingreserves.tt (-3 / +3 lines)
Lines 119-126 $(document).ready(function() { Link Here
119
                [% IF ( reserveloo.author ) %]
119
                [% IF ( reserveloo.author ) %]
120
                    <p> by [% reserveloo.author %]</p>
120
                    <p> by [% reserveloo.author %]</p>
121
                [% END %]
121
                [% END %]
122
                [% IF reserveloo.reserve_group_id %]
122
                [% IF reserveloo.hold_group_id %]
123
                    <p>(part of a <a class="reserve-group" href="/cgi-bin/koha/reserve/reserve-group.pl?reserve_group_id=[% reserveloo.reserve_group_id %]">reserve group</a>)</p>
123
                    <p>(part of a <a class="hold-group" href="/cgi-bin/koha/reserve/hold-group.pl?hold_group_id=[% reserveloo.hold_group_id %]">hold group</a>)</p>
124
                [% END %]
124
                [% END %]
125
            </td>
125
            </td>
126
        [% ELSE %]
126
        [% ELSE %]
Lines 205-209 $(document).ready(function() { Link Here
205
</div>
205
</div>
206
</div>
206
</div>
207
</div>
207
</div>
208
[% INCLUDE 'reserve-group-modal.inc' %]
208
[% INCLUDE 'hold-group-modal.inc' %]
209
[% INCLUDE 'intranet-bottom.inc' %]
209
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/members/moremember.tt (-1 / +1 lines)
Lines 581-585 function validate1(date) { Link Here
581
[% INCLUDE 'circ-menu.inc' %]
581
[% INCLUDE 'circ-menu.inc' %]
582
</div>
582
</div>
583
</div>
583
</div>
584
[% INCLUDE 'reserve-group-modal.inc' %]
584
[% INCLUDE 'hold-group-modal.inc' %]
585
[% INCLUDE 'intranet-bottom.inc' %]
585
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/reserve-group.tt (-8 / +8 lines)
Lines 1-12 Link Here
1
[% USE Biblio %]
1
[% USE Biblio %]
2
[% INCLUDE 'doc-head-open.inc' %]
2
[% INCLUDE 'doc-head-open.inc' %]
3
  <title>Koha &rsaquo; Circulation &rsaquo; Holds &rsaquo; Holds group ([% reserve_group_id %])</title>
3
  <title>Koha &rsaquo; Circulation &rsaquo; Holds &rsaquo; Holds group ([% hold_group_id %])</title>
4
  [% INCLUDE 'doc-head-close.inc' %]
4
  [% INCLUDE 'doc-head-close.inc' %]
5
</head>
5
</head>
6
<body id="reserve-reserve-group">
6
<body id="reserve-hold-group">
7
  <h1>Holds group ([% reserve_group_id %])</h1>
7
  <h1>Holds group ([% hold_group_id %])</h1>
8
  <div id="main">
8
  <div id="main">
9
    [% IF reserves.size %]
9
    [% IF holds.size %]
10
      <table>
10
      <table>
11
        <thead>
11
        <thead>
12
          <tr>
12
          <tr>
Lines 16-27 Link Here
16
          </tr>
16
          </tr>
17
        </thead>
17
        </thead>
18
        <tbody>
18
        <tbody>
19
          [% FOREACH reserve IN reserves %]
19
          [% FOREACH hold IN holds %]
20
            [% biblio = Biblio.Get(reserve.biblionumber) %]
20
            [% biblio = Biblio.Get(hold.biblionumber) %]
21
            <tr>
21
            <tr>
22
              <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% biblio.biblionumber %]">[% biblio.title %]</a></td>
22
              <td><a href="/cgi-bin/koha/reserve/request.pl?biblionumber=[% biblio.biblionumber %]">[% biblio.title %]</a></td>
23
              <td>[% reserve.priority %]</td>
23
              <td>[% hold.priority %]</td>
24
              <td>[% reserve.reservenotes %]</td>
24
              <td>[% hold.reservenotes %]</td>
25
            </tr>
25
            </tr>
26
          [% END %]
26
          [% END %]
27
        </tbody>
27
        </tbody>
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/reserve/request.tt (-3 / +3 lines)
Lines 785-792 function checkMultiHold() { Link Here
785
                 <input type="hidden" name="itemnumber" value="" />
785
                 <input type="hidden" name="itemnumber" value="" />
786
            [% END %]
786
            [% END %]
787
    [% END %]
787
    [% END %]
788
            [% IF reserveloo.reserve_group_id %]
788
            [% IF reserveloo.hold_group_id %]
789
                <div>(part of a <a href="/cgi-bin/koha/reserve/reserve-group.pl?reserve_group_id=[% reserveloo.reserve_group_id %]" class="reserve-group">reserve group</a>)</div>
789
                <div>(part of a <a href="/cgi-bin/koha/reserve/hold-group.pl?hold_group_id=[% reserveloo.hold_group_id %]" class="hold-group">hold group</a>)</div>
790
            [% END %]
790
            [% END %]
791
        </td>
791
        </td>
792
792
Lines 851-856 function checkMultiHold() { Link Here
851
</div>
851
</div>
852
</div>
852
</div>
853
853
854
[% INCLUDE 'reserve-group-modal.inc' %]
854
[% INCLUDE 'hold-group-modal.inc' %]
855
855
856
[% INCLUDE 'intranet-bottom.inc' %]
856
[% INCLUDE 'intranet-bottom.inc' %]
(-)a/koha-tmpl/intranet-tmpl/prog/js/holds.js (-2 / +2 lines)
Lines 42-50 $(document).ready(function() { Link Here
42
                                title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>"
42
                                title += " - <span class='" + span_class + "'>" + oObj.itemnotes + "</span>"
43
                            }
43
                            }
44
44
45
                            if (oObj.reserve_group_id) {
45
                            if (oObj.hold_group_id) {
46
                              title += '<br>';
46
                              title += '<br>';
47
                              var link = '<a class="reserve-group" href="/cgi-bin/koha/reserve/reserve-group.pl?reserve_group_id=' + oObj.reserve_group_id + '">' + RESERVE_GROUP +'</a>'
47
                              var link = '<a class="hold-group" href="/cgi-bin/koha/reserve/hold-group.pl?hold_group_id=' + oObj.hold_group_id + '">' + HOLD_GROUP +'</a>'
48
                              title += '<span>' + PART_OF_A.format(link) + '</span>';
48
                              title += '<span>' + PART_OF_A.format(link) + '</span>';
49
                            }
49
                            }
50
50
(-)a/reserve/reserve-group.pl (-5 / +5 lines)
Lines 24-42 use C4::Reserves; Link Here
24
24
25
my $cgi = new CGI;
25
my $cgi = new CGI;
26
my ($template, $loggedinuser, $cookie) = get_template_and_user({
26
my ($template, $loggedinuser, $cookie) = get_template_and_user({
27
    template_name   => "reserve/reserve-group.tt",
27
    template_name   => "reserve/hold-group.tt",
28
    query           => $cgi,
28
    query           => $cgi,
29
    type            => "intranet",
29
    type            => "intranet",
30
    authnotrequired => 0,
30
    authnotrequired => 0,
31
    flagsrequired   => { circulate => 'circulate_remaining_permissions' },
31
    flagsrequired   => { circulate => 'circulate_remaining_permissions' },
32
});
32
});
33
33
34
my $reserve_group_id = $cgi->param('reserve_group_id');
34
my $hold_group_id = $cgi->param('hold_group_id');
35
my @reserves = GetReserveGroupReserves($reserve_group_id);
35
my @holds = GetHoldGroupHolds($hold_group_id);
36
36
37
$template->param(
37
$template->param(
38
    reserve_group_id => $reserve_group_id,
38
    hold_group_id => $hold_group_id,
39
    reserves => \@reserves,
39
    holds => \@holds,
40
);
40
);
41
41
42
output_html_with_http_headers $cgi, $cookie, $template->output;
42
output_html_with_http_headers $cgi, $cookie, $template->output;
(-)a/reserve/placerequest.pl (-3 / +3 lines)
Lines 82-90 if (defined $checkitem && $checkitem ne ''){ Link Here
82
82
83
if ($type eq 'str8' && $borrower){
83
if ($type eq 'str8' && $borrower){
84
84
85
    my $reserve_group_id;
85
    my $hold_group_id;
86
    if ($multi_hold && $requestany) {
86
    if ($multi_hold && $requestany) {
87
        $reserve_group_id = AddReserveGroup();
87
        $hold_group_id = AddHoldGroup();
88
    }
88
    }
89
89
90
    foreach my $biblionumber (keys %bibinfos) {
90
    foreach my $biblionumber (keys %bibinfos) {
Lines 115-121 if ($type eq 'str8' && $borrower){ Link Here
115
            AddReserve($branch, $borrower->{'borrowernumber'}, $biblionumber,
115
            AddReserve($branch, $borrower->{'borrowernumber'}, $biblionumber,
116
                [$biblionumber], $bibinfo->{rank}, $startdate, $expirationdate,
116
                [$biblionumber], $bibinfo->{rank}, $startdate, $expirationdate,
117
                $notes, $bibinfo->{title}, $checkitem, $found, $itemtype,
117
                $notes, $bibinfo->{title}, $checkitem, $found, $itemtype,
118
                $reserve_group_id);
118
                $hold_group_id);
119
        } else {
119
        } else {
120
            # place a request on 1st available
120
            # place a request on 1st available
121
            AddReserve($branch,$borrower->{'borrowernumber'},$biblionumber,\@realbi,$rank[0],$startdate,$expirationdate,$notes,$title,$checkitem,$found, $itemtype);
121
            AddReserve($branch,$borrower->{'borrowernumber'},$biblionumber,\@realbi,$rank[0],$startdate,$expirationdate,$notes,$title,$checkitem,$found, $itemtype);
(-)a/reserve/request.pl (-1 / +1 lines)
Lines 569-575 foreach my $biblionumber (@biblionumbers) { Link Here
569
        $reserve{'suspend_until'}  = $res->suspend_until();
569
        $reserve{'suspend_until'}  = $res->suspend_until();
570
        $reserve{'reserve_id'}     = $res->reserve_id();
570
        $reserve{'reserve_id'}     = $res->reserve_id();
571
        $reserve{itemtype}         = $res->itemtype();
571
        $reserve{itemtype}         = $res->itemtype();
572
        $reserve{'reserve_group_id'} = $res->reserve_group_id;
572
        $reserve{'hold_group_id'}  = $res->hold_group_id;
573
573
574
        if ( C4::Context->preference('IndependentBranches') && $flags->{'superlibrarian'} != 1 ) {
574
        if ( C4::Context->preference('IndependentBranches') && $flags->{'superlibrarian'} != 1 ) {
575
            $reserve{'branchloop'} = [ Koha::Libraries->find( $res->branchcode() ) ];
575
            $reserve{'branchloop'} = [ Koha::Libraries->find( $res->branchcode() ) ];
(-)a/svc/holds (-1 / +1 lines)
Lines 96-102 while ( my $h = $holds_rs->next() ) { Link Here
96
        waiting_here   => $h->branch()->branchcode() eq $branch,
96
        waiting_here   => $h->branch()->branchcode() eq $branch,
97
        priority       => $h->priority(),
97
        priority       => $h->priority(),
98
        itemtype_limit => $itemtype_limit,
98
        itemtype_limit => $itemtype_limit,
99
        reserve_group_id => $h->reserve_group_id,
99
        hold_group_id  => $h->hold_group_id,
100
        subtitle       => GetRecordValue(
100
        subtitle       => GetRecordValue(
101
            'subtitle', GetMarcBiblio($biblionumber),
101
            'subtitle', GetMarcBiblio($biblionumber),
102
            GetFrameworkCode($biblionumber)
102
            GetFrameworkCode($biblionumber)
(-)a/t/db_dependent/Reserves/ReserveCount.t (-14 / +13 lines)
Lines 50-66 my $biblio = $builder->build( { source => 'Biblio', } ); Link Here
50
my $biblionumber = $biblio->{biblionumber};
50
my $biblionumber = $biblio->{biblionumber};
51
51
52
# Use AddReserve instead of TestBuilder because i don't manage
52
# Use AddReserve instead of TestBuilder because i don't manage
53
# to make TestBuilder set reserve_group_id to null. Idea ?
53
# to make TestBuilder set hold_group_id to null. Idea ?
54
my $reserve_id = AddReserve($branchcode, $borrowernumber,
54
my $reserve_id = AddReserve($branchcode, $borrowernumber,
55
$biblionumber, $biblionumber, 1, undef, undef, undef
55
$biblionumber, $biblionumber, 1, undef, undef, undef
56
$biblio->{title}, undef, undef, undef);
56
$biblio->{title}, undef, undef, undef);
57
57
58
is(GetReserveCount($borrowernumber), 1, 'Test borrower has 1 reserve.');
58
is(GetReserveCount($borrowernumber), 1, 'Test borrower has 1 reserve.');
59
59
60
my $reserves_group = $builder->build({
60
my $holds_group = $builder->build({
61
    source => 'ReserveGroup',
61
    source => 'HoldGroup',
62
    value => {
62
    value => {
63
        reserve_group_id => 1
63
        hold_group_id => 1
64
    }
64
    }
65
});
65
});
66
66
Lines 68-113 my $reserve2 = $builder->build({ Link Here
68
    source => 'Reserve',
68
    source => 'Reserve',
69
    value => {
69
    value => {
70
        borrowernumber => $borrowernumber,
70
        borrowernumber => $borrowernumber,
71
        reserve_group_id => 1
71
        hold_group_id => 1
72
    }
72
    }
73
});
73
});
74
my $reserve3 = $builder->build({
74
my $reserve3 = $builder->build({
75
    source => 'Reserve',
75
    source => 'Reserve',
76
    value => {
76
    value => {
77
        borrowernumber => $borrowernumber,
77
        borrowernumber => $borrowernumber,
78
        reserve_group_id => 1
78
        hold_group_id => 1
79
    }
79
    }
80
});
80
});
81
81
82
is(GetReserveCount($borrowernumber), 2, 'Test borrower has 2 reserve.');
82
is(GetReserveCount($borrowernumber), 2, 'Test borrower has 2 reserve.');
83
83
84
my $reserves_group2 = $builder->build({
84
my $holds_group2 = $builder->build({
85
    source => 'ReserveGroup',
85
    source => 'HoldGroup',
86
    value => {
86
    value => {
87
        reserve_group_id => 2
87
        hold_group_id => 2
88
    }
88
    }
89
});
89
});
90
my $reserve_group_id2 = $reserves_group2->{reserve_group_id};
90
my $hold_group_id2 = $holds_group2->{hold_group_id};
91
91
92
my $reserve4 = $builder->build({
92
my $reserve4 = $builder->build({
93
    source => 'Reserve',
93
    source => 'Reserve',
94
    value => {
94
    value => {
95
        borrowernumber => $borrowernumber,
95
        borrowernumber => $borrowernumber,
96
        reserve_group_id => 2
96
        hold_group_id => 2
97
    }
97
    }
98
});
98
});
99
my $reserve5 = $builder->build({
99
my $reserve5 = $builder->build({
100
    source => 'Reserve',
100
    source => 'Reserve',
101
    value => {
101
    value => {
102
        borrowernumber => $borrowernumber,
102
        borrowernumber => $borrowernumber,
103
        reserve_group_id => 2
103
        hold_group_id => 2
104
    }
104
    }
105
});
105
});
106
my $reserve6 = $builder->build({
106
my $reserve6 = $builder->build({
107
    source => 'Reserve',
107
    source => 'Reserve',
108
    value => {
108
    value => {
109
        borrowernumber => $borrowernumber,
109
        borrowernumber => $borrowernumber,
110
        reserve_group_id => 2
110
        hold_group_id => 2
111
    }
111
    }
112
});
112
});
113
113
114
- 

Return to bug 15516