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

(-)a/C4/Circulation.pm (+24 lines)
Lines 3679-3684 sub LostItem{ Link Here
3679
3679
3680
        MarkIssueReturned($borrowernumber,$itemnumber,undef,undef,$patron->privacy) if $mark_returned;
3680
        MarkIssueReturned($borrowernumber,$itemnumber,undef,undef,$patron->privacy) if $mark_returned;
3681
    }
3681
    }
3682
3683
    my $transfers = GetTransfers($itemnumber);
3684
    if ( C4::Context->preference('LostItemCancelOutstandingTransfers') && $transfers ) {
3685
         my $deletedtransfer = DeleteTransfer($itemnumber);
3686
    }
3687
3688
    my ( $restype, $res ) = C4::Reserves::CheckReserves( $itemnumber );
3689
    my $LostItemLevelHold;
3690
    my $transfers;
3691
    if ( $restype eq "Waiting" || $restype eq "Reserved" ) {
3692
        if ( $res->{originalholdtype} eq "B" ) {
3693
            #originalholdtype equalling "B" means this is a bib level hold
3694
            C4::Reserves::RevertWaitingStatus({itemnumber => $itemnumber});
3695
3696
            #If the LostBibLevelHoldsRevert syspref is enabled then revert the allocated reserve back to an unallocated bib-level hold
3697
            if ( C4::Context->preference('LostBibLevelHoldsRevert')) {
3698
                C4::Reserves::RevertItemLevelHoldToBibLevelHold({ reserveid => $res->{reserve_id} });
3699
            }
3700
        } else {
3701
            #Otherwise originalholdtype equals "I" and is an item level hold
3702
            $LostItemLevelHold = 1;
3703
        }
3704
    }
3705
    return $LostItemLevelHold;
3682
}
3706
}
3683
3707
3684
sub GetOfflineOperations {
3708
sub GetOfflineOperations {
(-)a/C4/Reserves.pm (-21 / +89 lines)
Lines 198-220 sub AddReserve { Link Here
198
    # Don't add itemtype limit if specific item is selected
198
    # Don't add itemtype limit if specific item is selected
199
    $itemtype = undef if $checkitem;
199
    $itemtype = undef if $checkitem;
200
200
201
    # updates take place here
201
    # Create reserves with with originalholdtype="B" if biblio level hold and "I" if item level hold
202
    my $hold = Koha::Hold->new(
202
    my $hold;
203
        {
203
    if (!($checkitem)) {
204
            borrowernumber => $borrowernumber,
204
        # updates take place here
205
            biblionumber   => $biblionumber,
205
        $hold = Koha::Hold->new(
206
            reservedate    => $resdate,
206
         {
207
            branchcode     => $branch,
207
           borrowernumber => $borrowernumber,
208
            priority       => $priority,
208
           biblionumber   => $biblionumber,
209
            reservenotes   => $notes,
209
           reservedate    => $resdate,
210
            itemnumber     => $checkitem,
210
           branchcode     => $branch,
211
            found          => $found,
211
           priority       => $priority,
212
            waitingdate    => $waitingdate,
212
           reservenotes   => $notes,
213
            expirationdate => $expdate,
213
           itemnumber     => $checkitem,
214
            itemtype       => $itemtype,
214
           found          => $found,
215
        }
215
           waitingdate    => $waitingdate,
216
    )->store();
216
           expirationdate => $expdate,
217
    $hold->set_waiting() if $found eq 'W';
217
           itemtype       => $itemtype,
218
           originalholdtype => 'B',
219
         }
220
        )->store();
221
        $hold->set_waiting() if $found eq 'W';
222
    } else {
223
        # updates take place here
224
        $hold = Koha::Hold->new(
225
         {
226
          borrowernumber => $borrowernumber,
227
          biblionumber   => $biblionumber,
228
          reservedate    => $resdate,
229
          branchcode     => $branch,
230
          priority       => $priority,
231
          reservenotes   => $notes,
232
          itemnumber     => $checkitem,
233
          found          => $found,
234
          waitingdate    => $waitingdate,
235
          expirationdate => $expdate,
236
          itemtype       => $itemtype,
237
          originalholdtype  => 'I',
238
         }
239
        )->store();
240
        $hold->set_waiting() if $found eq 'W';
241
    }
218
242
219
    logaction( 'HOLDS', 'CREATE', $hold->id, Dumper($hold->unblessed) )
243
    logaction( 'HOLDS', 'CREATE', $hold->id, Dumper($hold->unblessed) )
220
        if C4::Context->preference('HoldsLog');
244
        if C4::Context->preference('HoldsLog');
Lines 1379-1384 when _FixPriority calls itself. Link Here
1379
1403
1380
sub _FixPriority {
1404
sub _FixPriority {
1381
    my ( $params ) = @_;
1405
    my ( $params ) = @_;
1406
    warn Dumper($params);
1382
    my $reserve_id = $params->{reserve_id};
1407
    my $reserve_id = $params->{reserve_id};
1383
    my $rank = $params->{rank} // '';
1408
    my $rank = $params->{rank} // '';
1384
    my $ignoreSetLowestRank = $params->{ignoreSetLowestRank};
1409
    my $ignoreSetLowestRank = $params->{ignoreSetLowestRank};
Lines 1387-1397 sub _FixPriority { Link Here
1387
    my $dbh = C4::Context->dbh;
1412
    my $dbh = C4::Context->dbh;
1388
1413
1389
    my $hold;
1414
    my $hold;
1415
    warn $reserve_id;
1390
    if ( $reserve_id ) {
1416
    if ( $reserve_id ) {
1391
        $hold = Koha::Holds->find( $reserve_id );
1417
        $hold = Koha::Holds->find( $reserve_id );
1392
        return unless $hold;
1418
        return unless $hold;
1393
    }
1419
    }
1394
1420
    warn Dumper($hold);
1395
    unless ( $biblionumber ) { # FIXME This is a very weird API
1421
    unless ( $biblionumber ) { # FIXME This is a very weird API
1396
        $biblionumber = $hold->biblionumber;
1422
        $biblionumber = $hold->biblionumber;
1397
    }
1423
    }
Lines 1507-1513 sub _Findgroupreserve { Link Here
1507
               biblioitems.biblioitemnumber AS biblioitemnumber,
1533
               biblioitems.biblioitemnumber AS biblioitemnumber,
1508
               reserves.itemnumber          AS itemnumber,
1534
               reserves.itemnumber          AS itemnumber,
1509
               reserves.reserve_id          AS reserve_id,
1535
               reserves.reserve_id          AS reserve_id,
1510
               reserves.itemtype            AS itemtype
1536
               reserves.itemtype            AS itemtype,
1537
               reserves.originalholdtype    AS originalholdtype
1511
        FROM reserves
1538
        FROM reserves
1512
        JOIN biblioitems USING (biblionumber)
1539
        JOIN biblioitems USING (biblionumber)
1513
        JOIN hold_fill_targets USING (biblionumber, borrowernumber, itemnumber)
1540
        JOIN hold_fill_targets USING (biblionumber, borrowernumber, itemnumber)
Lines 1542-1548 sub _Findgroupreserve { Link Here
1542
               biblioitems.biblioitemnumber AS biblioitemnumber,
1569
               biblioitems.biblioitemnumber AS biblioitemnumber,
1543
               reserves.itemnumber          AS itemnumber,
1570
               reserves.itemnumber          AS itemnumber,
1544
               reserves.reserve_id          AS reserve_id,
1571
               reserves.reserve_id          AS reserve_id,
1545
               reserves.itemtype            AS itemtype
1572
               reserves.itemtype            AS itemtype,
1573
               reserves.originalholdtype    AS originalholdtype
1546
        FROM reserves
1574
        FROM reserves
1547
        JOIN biblioitems USING (biblionumber)
1575
        JOIN biblioitems USING (biblionumber)
1548
        JOIN hold_fill_targets USING (biblionumber, borrowernumber)
1576
        JOIN hold_fill_targets USING (biblionumber, borrowernumber)
Lines 1576-1582 sub _Findgroupreserve { Link Here
1576
               reserves.timestamp                  AS timestamp,
1604
               reserves.timestamp                  AS timestamp,
1577
               reserves.itemnumber                 AS itemnumber,
1605
               reserves.itemnumber                 AS itemnumber,
1578
               reserves.reserve_id                 AS reserve_id,
1606
               reserves.reserve_id                 AS reserve_id,
1579
               reserves.itemtype                   AS itemtype
1607
               reserves.itemtype                   AS itemtype,
1608
               reserves.originalholdtype           AS originalholdtype
1580
        FROM reserves
1609
        FROM reserves
1581
        WHERE reserves.biblionumber = ?
1610
        WHERE reserves.biblionumber = ?
1582
          AND (reserves.itemnumber IS NULL OR reserves.itemnumber = ?)
1611
          AND (reserves.itemnumber IS NULL OR reserves.itemnumber = ?)
Lines 1893-1901 sub RevertWaitingStatus { Link Here
1893
    ";
1922
    ";
1894
    $sth = $dbh->prepare( $query );
1923
    $sth = $dbh->prepare( $query );
1895
    $sth->execute( $reserve->{'reserve_id'} );
1924
    $sth->execute( $reserve->{'reserve_id'} );
1925
    warn $reserve->{reserve_id};
1896
    _FixPriority( { biblionumber => $reserve->{biblionumber} } );
1926
    _FixPriority( { biblionumber => $reserve->{biblionumber} } );
1897
}
1927
}
1898
1928
1929
1930
=head2 RevertItemLevelHoldToBibLevelHold
1931
1932
  RevertItemLevelHoldToBibLevelHold({ reserveid => $reserveid });
1933
1934
  Reverts a item level hold (which was originally a bib-level hold, which is determined by the value of reserves.originalholdtype) back to a bib-level hold.
1935
1936
=cut
1937
1938
sub RevertItemLevelHoldToBibLevelHold {
1939
    my ( $params ) = @_;
1940
    my $reserve_id = $params->{'reserveid'};
1941
1942
    return unless ( $reserve_id );
1943
    my $dbh = C4::Context->dbh;
1944
1945
    #Get the waiting reserve we want to revert
1946
    my $query = "
1947
        SELECT * FROM reserves
1948
        WHERE reserve_id = ?
1949
        AND itemnumber IS NOT NULL
1950
    ";
1951
     my $sth = $dbh->prepare( $query );
1952
     $sth->execute( $reserve_id );
1953
     my $reserve = $sth->fetchrow_hashref();
1954
1955
     ## Set the itemnumber to 'NULL'
1956
     $query = "
1957
         UPDATE reserves
1958
         SET
1959
         itemnumber = NULL
1960
         WHERE
1961
         reserve_id =  ?
1962
     ";
1963
     $sth = $dbh->prepare( $query );
1964
     $sth->execute( $reserve_id );
1965
}
1966
1899
=head2 ReserveSlip
1967
=head2 ReserveSlip
1900
1968
1901
ReserveSlip(
1969
ReserveSlip(
(-)a/Koha/Schema/Result/OldReserve.pm (-2 / +10 lines)
Lines 137-142 __PACKAGE__->table("old_reserves"); Link Here
137
  is_nullable: 1
137
  is_nullable: 1
138
  size: 10
138
  size: 10
139
139
140
=head2 originalholdtype
141
142
  data_type: 'varchar'
143
  is_nullable: 1
144
  size: 1
145
140
=cut
146
=cut
141
147
142
__PACKAGE__->add_columns(
148
__PACKAGE__->add_columns(
Lines 192-197 __PACKAGE__->add_columns( Link Here
192
  },
198
  },
193
  "itemtype",
199
  "itemtype",
194
  { data_type => "varchar", is_foreign_key => 1, is_nullable => 1, size => 10 },
200
  { data_type => "varchar", is_foreign_key => 1, is_nullable => 1, size => 10 },
201
  "originalholdtype",
202
  { data_type => "varchar", is_nullable => 1, size => 1 },
195
);
203
);
196
204
197
=head1 PRIMARY KEY
205
=head1 PRIMARY KEY
Lines 289-296 __PACKAGE__->belongs_to( Link Here
289
);
297
);
290
298
291
299
292
# Created by DBIx::Class::Schema::Loader v0.07042 @ 2018-02-16 17:54:54
300
# Created by DBIx::Class::Schema::Loader v0.07042 @ 2018-09-02 09:48:38
293
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:ynb6NtiTN8ZZur2YCvxlNg
301
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:cc4o9r7wLXapCJJ3WfDy4g
294
302
295
303
296
# You can replace this text with custom content, and it will be preserved on regeneration
304
# You can replace this text with custom content, and it will be preserved on regeneration
(-)a/Koha/Schema/Result/Reserve.pm (-2 / +10 lines)
Lines 141-146 __PACKAGE__->table("reserves"); Link Here
141
  is_nullable: 1
141
  is_nullable: 1
142
  size: 10
142
  size: 10
143
143
144
=head2 originalholdtype
145
146
  data_type: 'varchar'
147
  is_nullable: 1
148
  size: 1
149
144
=cut
150
=cut
145
151
146
__PACKAGE__->add_columns(
152
__PACKAGE__->add_columns(
Lines 206-211 __PACKAGE__->add_columns( Link Here
206
  },
212
  },
207
  "itemtype",
213
  "itemtype",
208
  { data_type => "varchar", is_foreign_key => 1, is_nullable => 1, size => 10 },
214
  { data_type => "varchar", is_foreign_key => 1, is_nullable => 1, size => 10 },
215
  "originalholdtype",
216
  { data_type => "varchar", is_nullable => 1, size => 1 },
209
);
217
);
210
218
211
=head1 PRIMARY KEY
219
=head1 PRIMARY KEY
Lines 313-320 __PACKAGE__->belongs_to( Link Here
313
);
321
);
314
322
315
323
316
# Created by DBIx::Class::Schema::Loader v0.07042 @ 2018-02-16 17:54:54
324
# Created by DBIx::Class::Schema::Loader v0.07042 @ 2018-08-25 12:05:26
317
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:2GCET9quFpUvzuN7MUWZNw
325
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:YIZXhPQwRJXrzYkdmVQH7Q
318
326
319
__PACKAGE__->belongs_to(
327
__PACKAGE__->belongs_to(
320
  "item",
328
  "item",
(-)a/catalogue/moredetail.pl (+7 lines)
Lines 71-76 my $itemnumber = $query->param('itemnumber'); Link Here
71
my $data = &GetBiblioData($biblionumber);
71
my $data = &GetBiblioData($biblionumber);
72
my $dewey = $data->{'dewey'};
72
my $dewey = $data->{'dewey'};
73
my $showallitems = $query->param('showallitems');
73
my $showallitems = $query->param('showallitems');
74
my $lostitemlevelhold = $query->param('LostItemLevelHold');
75
my $lostitemnumber = $query->param('lostitemnumber');
76
my $itemlost = $query->param('itemlost');
77
78
if ($lostitemlevelhold && $itemlost) {
79
    $template->param(LostItemLevelHold => $lostitemlevelhold, itemlost => $itemlost, lostitemnumber => $lostitemnumber, biblionumber => $biblionumber);
80
}
74
81
75
#coping with subscriptions
82
#coping with subscriptions
76
my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber);
83
my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber);
(-)a/catalogue/updateitem.pl (-2 / +21 lines)
Lines 26-31 use C4::Items; Link Here
26
use C4::Output;
26
use C4::Output;
27
use C4::Circulation;
27
use C4::Circulation;
28
use C4::Reserves;
28
use C4::Reserves;
29
use Data::Dumper;
29
30
30
my $cgi= new CGI;
31
my $cgi= new CGI;
31
32
Lines 39-44 my $itemnotes=$cgi->param('itemnotes'); Link Here
39
my $itemnotes_nonpublic=$cgi->param('itemnotes_nonpublic');
40
my $itemnotes_nonpublic=$cgi->param('itemnotes_nonpublic');
40
my $withdrawn=$cgi->param('withdrawn');
41
my $withdrawn=$cgi->param('withdrawn');
41
my $damaged=$cgi->param('damaged');
42
my $damaged=$cgi->param('damaged');
43
my $cancelhold = $cgi->param('CancelHold');
44
my $retainhold = $cgi->param('RetainHold');
42
45
43
my $confirm=$cgi->param('confirm');
46
my $confirm=$cgi->param('confirm');
44
my $dbh = C4::Context->dbh;
47
my $dbh = C4::Context->dbh;
Lines 53-60 for ($damaged,$itemlost,$withdrawn) { Link Here
53
    }
56
    }
54
}
57
}
55
58
59
if ($cancelhold) {
60
    my ($restype, $res ) = C4::Reserves::CheckReserves( $itemnumber );
61
    my $hold = Koha::Holds->find($res->{reserve_id});
62
    $hold->cancel;
63
}
64
65
#Assigning variables for use in cancelling item level holds when item marked as 'Lost'
66
my $LostItemLevelHold;
67
my $originalitemnumber = $itemnumber;
68
56
# modify MARC item if input differs from items table.
69
# modify MARC item if input differs from items table.
57
my $item_changes = {};
70
my $item_changes = {};
71
58
if (defined $itemnotes_nonpublic) { # i.e., itemnotes_nonpublic parameter passed from form
72
if (defined $itemnotes_nonpublic) { # i.e., itemnotes_nonpublic parameter passed from form
59
    checkauth($cgi, 0, {editcatalogue => 'edit_items'}, 'intranet');
73
    checkauth($cgi, 0, {editcatalogue => 'edit_items'}, 'intranet');
60
    if ((not defined  $item_data_hashref->{'itemnotes_nonpublic'}) or $itemnotes_nonpublic ne $item_data_hashref->{'itemnotes_nonpublic'}) {
74
    if ((not defined  $item_data_hashref->{'itemnotes_nonpublic'}) or $itemnotes_nonpublic ne $item_data_hashref->{'itemnotes_nonpublic'}) {
Lines 79-85 elsif (defined $itemnotes) { # i.e., itemnotes parameter passed from form Link Here
79
}
93
}
80
94
81
ModItem($item_changes, $biblionumber, $itemnumber);
95
ModItem($item_changes, $biblionumber, $itemnumber);
96
$LostItemLevelHold = LostItem($itemnumber, 'moredetail') if $itemlost;
97
98
if ( $LostItemLevelHold) {
99
    print $cgi->redirect("moredetail.pl?biblionumber=$biblionumber&LostItemLevelHold=$LostItemLevelHold&itemlost=$itemlost&lostitemnumber=$itemnumber#item$itemnumber");
100
} else {
101
    print $cgi->redirect("moredetail.pl?biblionumber=$biblionumber&itemnumber=$itemnumber#item$itemnumber");
102
}
82
103
83
LostItem($itemnumber, 'moredetail') if $itemlost;
84
104
85
print $cgi->redirect("moredetail.pl?biblionumber=$biblionumber&itemnumber=$itemnumber#item$itemnumber");
(-)a/cataloguing/additem.pl (-3 / +31 lines)
Lines 40-46 use C4::Search; Link Here
40
use Storable qw(thaw freeze);
40
use Storable qw(thaw freeze);
41
use URI::Escape;
41
use URI::Escape;
42
use C4::Members;
42
use C4::Members;
43
43
use Data::Dumper;
44
use MARC::File::XML;
44
use MARC::File::XML;
45
use URI::Escape;
45
use URI::Escape;
46
46
Lines 385-393 my $fa_barcode = $input->param('barcode'); Link Here
385
my $fa_branch             = $input->param('branch');
385
my $fa_branch             = $input->param('branch');
386
my $fa_stickyduedate      = $input->param('stickyduedate');
386
my $fa_stickyduedate      = $input->param('stickyduedate');
387
my $fa_duedatespec        = $input->param('duedatespec');
387
my $fa_duedatespec        = $input->param('duedatespec');
388
388
my $cancelhold            = $input->param('CancelHold');
389
my $retainhold            = $input->param('RetainHold');
389
my $frameworkcode = &GetFrameworkCode($biblionumber);
390
my $frameworkcode = &GetFrameworkCode($biblionumber);
390
391
392
if ($cancelhold || $retainhold) {
393
    $op ='';
394
}
395
396
#Assigning variables for use in cancelling item level holds when item marked as 'Lost'
397
my $LostItemLevelHold;
398
my $originalitemnumber = $itemnumber;
399
391
# Defining which userflag is needing according to the framework currently used
400
# Defining which userflag is needing according to the framework currently used
392
my $userflags;
401
my $userflags;
393
if (defined $input->param('frameworkcode')) {
402
if (defined $input->param('frameworkcode')) {
Lines 692-697 if ($op eq "additem") { Link Here
692
    # check that the barcode don't exist already
701
    # check that the barcode don't exist already
693
    my $addedolditem = TransformMarcToKoha($itemtosave);
702
    my $addedolditem = TransformMarcToKoha($itemtosave);
694
    my $exist_itemnumber = get_item_from_barcode($addedolditem->{'barcode'});
703
    my $exist_itemnumber = get_item_from_barcode($addedolditem->{'barcode'});
704
    my $lostitemnumber;
695
    if ($exist_itemnumber && $exist_itemnumber != $itemnumber) {
705
    if ($exist_itemnumber && $exist_itemnumber != $itemnumber) {
696
        push @errors,"barcode_not_unique";
706
        push @errors,"barcode_not_unique";
697
    } else {
707
    } else {
Lines 700-708 if ($op eq "additem") { Link Here
700
        $itemnumber = q{};
710
        $itemnumber = q{};
701
        my $olditemlost = $item->{itemlost};
711
        my $olditemlost = $item->{itemlost};
702
        my $newitemlost = $newitem->{itemlost};
712
        my $newitemlost = $newitem->{itemlost};
703
        LostItem( $item->{itemnumber}, 'additem' )
713
        $LostItemLevelHold = LostItem( $item->{itemnumber}, 'additem' )
704
            if $newitemlost && $newitemlost ge '1' && !$olditemlost;
714
            if $newitemlost && $newitemlost ge '1' && !$olditemlost;
705
    }
715
    }
716
717
    if ($LostItemLevelHold) {
718
        $lostitemnumber = $originalitemnumber;
719
    }
720
    $template->param( LostItemLevelHold  => $LostItemLevelHold, itemnumber => $originalitemnumber );
706
    $nextop="additem";
721
    $nextop="additem";
707
} elsif ($op eq "delinkitem"){
722
} elsif ($op eq "delinkitem"){
708
    my $analyticfield = '773';
723
    my $analyticfield = '773';
Lines 720-725 if ($op eq "additem") { Link Here
720
	my $modbibresult = ModBiblio($record, $biblionumber,'');
735
	my $modbibresult = ModBiblio($record, $biblionumber,'');
721
}
736
}
722
737
738
if ($cancelhold) {
739
    my ( $restype, $res ) = C4::Reserves::CheckReserves( $originalitemnumber );
740
    my $hold = Koha::Holds->find($res->{reserve_id});
741
    $hold->cancel;
742
}
743
723
#
744
#
724
#-------------------------------------------------------------------------------
745
#-------------------------------------------------------------------------------
725
# build screen with existing items. and "new" one
746
# build screen with existing items. and "new" one
Lines 905-910 foreach my $tag ( keys %{$tagslib}){ Link Here
905
926
906
my $item = Koha::Items->find($itemnumber); # We certainly want to fetch it earlier
927
my $item = Koha::Items->find($itemnumber); # We certainly want to fetch it earlier
907
928
929
#If you are trying to mark an item as lost which has an item level hold on it return $originalitemnumber
930
if ($LostItemLevelHold) {
931
    $template->param( itemnumber => $originalitemnumber);
932
} else {
933
    $template->param( itemnumber => $itemnumber );
934
}
935
908
# what's the next op ? it's what we are not in : an add if we're editing, otherwise, and edit.
936
# what's the next op ? it's what we are not in : an add if we're editing, otherwise, and edit.
909
$template->param(
937
$template->param(
910
    biblionumber => $biblionumber,
938
    biblionumber => $biblionumber,
(-)a/installer/data/mysql/atomicupdate/bug_20844-added-holdtype-field-to-reserves.sql (+3 lines)
Line 0 Link Here
1
ALTER TABLE reserves ADD originalholdtype VARCHAR(1);
2
ALTER TABLE old_reserves ADD originalholdtype VARCHAR(1);
3
INSERT INTO systempreferences (variable, value, options, explanation, type) VALUES ('LostBibLevelHoldsRevert', 1, 'Enable|Disable', 'If the item which has an allocated hold on it which was originally a bib-level hold then when the item is marked as lost revert the hold to a bib-level hold', 'YesNo');
(-)a/installer/data/mysql/atomicupdate/bug_20844-cancel_outstanding_branch_transfers_when_marked_as_lost_syspref.sql (+1 lines)
Line 0 Link Here
1
INSERT INTO systempreferences (variable, value, options, explanation, type) VALUES ('LostItemCancelOutstandingTransfers', 0, 'Enable|Disable', 'When an item marked as lost has a outstanding branch transfer, cancel the outstanding transfer', 'YesNo');
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/circulation.pref (+12 lines)
Lines 596-601 Circulation: Link Here
596
              class: integer
596
              class: integer
597
            - days.
597
            - days.
598
        -
598
        -
599
            - If the item which has an allocated hold on it which was originally a bib-level hold is marked as lost then revert the hold to a bib-level hold
600
            - pref: LostBibLevelHoldsRevert
601
              choices:
602
                  yes: "Enable"
603
                  no: "Disable"
604
        -
605
            - pref: LostItemCancelOutstandingTransfers
606
              choices:
607
                  yes: "Enable"
608
                  no: "Disable"
609
            - When an item marked as lost has a outstanding branch transfer, cancel the outstanding transfer
610
        -
599
            - pref: ExpireReservesMaxPickUpDelay
611
            - pref: ExpireReservesMaxPickUpDelay
600
              choices:
612
              choices:
601
                  yes: Allow
613
                  yes: Allow
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tt (-2 / +17 lines)
Lines 42-55 Link Here
42
<a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% biblionumber | html %]&amp;showallitems=1">Show all items</a>[% END %]</li>
42
<a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% biblionumber | html %]&amp;showallitems=1">Show all items</a>[% END %]</li>
43
    </ol>
43
    </ol>
44
44
45
45
    <br clear="all" />
46
    <br clear="all" />
46
    [% IF ( ONLY_ONE ) %]
47
    [% IF ( ONLY_ONE ) %]
47
        <div class="dialog message">You are only viewing one item.  <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% biblionumber | html %]&amp;bi=[% biblioitemnumber | html %]#item[% itemnumber | html %]">View All</a></div>
48
        <div class="dialog message">You are only viewing one item.  <a href="/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=[% biblionumber | html %]&amp;bi=[% biblioitemnumber | html %]#item[% itemnumber | html %]">View All</a></div>
48
    [% END %]
49
    [% END %]
50
49
    [% FOREACH ITEM_DAT IN ITEM_DATA %]
51
    [% FOREACH ITEM_DAT IN ITEM_DATA %]
50
    <div class="yui-g">
52
    <div class="yui-g">
51
        <h3 id="item[% ITEM_DAT.itemnumber | html %]">Barcode [% ITEM_DAT.barcode | html %]  [% IF ( ITEM_DAT.notforloantext ) %][% ITEM_DAT.notforloantext | html %] [% END %]</h3>
53
         <h3 id="item[% ITEM_DAT.itemnumber %]">Barcode [% ITEM_DAT.barcode %]  [% IF ( ITEM_DAT.notforloantext ) %][% ITEM_DAT.notforloantext %] [% END %]</h3>
52
        <div class="listgroup"><h4>Item information [% IF ( CAN_user_editcatalogue_edit_catalogue ) %][% UNLESS ( ITEM_DAT.nomod ) %]
54
        [% IF ((ITEM_DAT.itemnumber == lostitemnumber) && (LostItemLevelHold)) %]
55
        <div class="alert alert-warning">
56
            <form id="DeallocateLostItemLevelHold" method="post" action="updateitem.pl" name="DeallocateLostItemLevelHold">
57
                <input type="hidden" name="biblionumber" value="[% biblionumber %]"/>
58
                <input type="hidden" name="itemnumber" value="[% lostitemnumber %]"/>
59
                <input type="hidden" name="itemlost" value="[% itemlost %]"/>
60
                This item has an item-level hold on it:
61
                <input type="submit" name="RetainHold" value="Retain Hold"/>
62
                <input type="submit" name="CancelHold" value="Cancel Hold"/>
63
            </form>
64
        </div>
65
    [% END %]
66
67
    <div class="listgroup"><h4>Item information [% IF ( CAN_user_editcatalogue_edit_catalogue ) %][% UNLESS ( ITEM_DAT.nomod ) %]
53
         [% IF ( CAN_user_editcatalogue_edit_items ) %]
68
         [% IF ( CAN_user_editcatalogue_edit_items ) %]
54
         <a href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&amp;biblionumber=[% ITEM_DAT.biblionumber | html %]&amp;itemnumber=[% ITEM_DAT.itemnumber | html %]">[Edit Item]</a>
69
         <a href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&amp;biblionumber=[% ITEM_DAT.biblionumber | html %]&amp;itemnumber=[% ITEM_DAT.itemnumber | html %]">[Edit Item]</a>
55
         [% END %]
70
         [% END %]
(-)a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tt (-1 / +14 lines)
Lines 258-263 function confirm_deletion() { Link Here
258
    [% ELSE %]
258
    [% ELSE %]
259
        <h2 id="edititem">Edit Item #[% itemnumber | html %][% IF ( barcode ) %] / Barcode [% barcode | html %][% END %]</h2>
259
        <h2 id="edititem">Edit Item #[% itemnumber | html %][% IF ( barcode ) %] / Barcode [% barcode | html %][% END %]</h2>
260
    [% END %]
260
    [% END %]
261
262
263
    [% IF (LostItemLevelHold) %]
264
        <div class="alert alert-warning">
265
            <form id="DeallocateLostItemLevelHold" method="post" action="/cgi-bin/koha/cataloguing/additem.pl" name="DeallocateLostItemLevelHold">
266
                <input type="hidden" id="itemnumber" name="itemnumber" value="[% itemnumber %]"/>
267
                This item has an item-level hold on it:
268
                <input type="submit" name="RetainHold" value="Retain Hold"/>
269
                <input type="submit" name="CancelHold" value="Cancel hold"/>
270
            </form>
271
        </div>
272
    [% END %]
273
274
261
	<fieldset class="rows">
275
	<fieldset class="rows">
262
	<ol>
276
	<ol>
263
        [% FOREACH ite IN item %]
277
        [% FOREACH ite IN item %]
264
- 

Return to bug 20844