sub LostItem{
- my ($itemnumber, $mark_returned) = @_;
+ my ($itemnumber, $mark_lost_from, $force_mark_returned) = @_;
- $mark_returned //= C4::Context->preference('MarkLostItemsAsReturned');
+ unless ( $mark_lost_from ) {
+ # Temporary check to avoid regressions
+ die q|LostItem called without $mark_lost_from, check the API.|;
+ }
+
+ my $mark_returned;
+ if ( $force_mark_returned ) {
+ $mark_returned = 1;
+ } else {
+ my $pref = C4::Context->preference('MarkLostItemsAsReturned') // q{};
+ $mark_returned = ( $pref =~ m|$mark_lost_from| );
+ }
my $dbh = C4::Context->dbh();
my $sth=$dbh->prepare("SELECT issues.*,items.*,biblio.title
ModItem($item_changes, $biblionumber, $itemnumber);
-LostItem($itemnumber) if $itemlost;
+LostItem($itemnumber, 'moredetail') if $itemlost;
print $cgi->redirect("moredetail.pl?biblionumber=$biblionumber&itemnumber=$itemnumber#item$itemnumber");
$itemnumber = q{};
my $olditemlost = $item->{itemlost};
my $newitemlost = $newitem->{itemlost};
- LostItem( $item->{itemnumber} )
+ LostItem( $item->{itemnumber}, 'additem' )
if $newitemlost && $newitemlost ge '1' && !$olditemlost;
}
$nextop="additem";
--- /dev/null
+$DBversion = 'XXX'; # will be replaced by the RM
+if( CheckVersion( $DBversion ) ) {
+ my ( $original_value ) = $dbh->selectrow_array(q|
+ SELECT value FROM systempreferences WHERE variable="MarkLostItemsAsReturned"
+ |);
+ if ( $original_value and $original_value eq '1' ) {
+ $dbh->do(q{
+ UPDATE systempreferences
+ SET type="multiple",
+ options="batchmod|moredetail|cronjob|additem",
+ value="batchmod|moredetail|cronjob|additem"
+ WHERE variable="MarkLostItemsAsReturned"
+ });
+ } else {
+ $dbh->do(q{
+ UPDATE systempreferences
+ SET type="multiple",
+ options="batchmod|moredetail|cronjob|additem",
+ value=""
+ WHERE variable="MarkLostItemsAsReturned"
+ });
+ }
+
+ SetVersion( $DBversion );
+ print "Upgrade to $DBversion done (Bug 19974 - Make MarkLostItemsAsReturned multiple)\n";
+}
('MarcFieldDocURL', NULL, NULL, 'URL used for MARC field documentation. Following substitutions are available: {MARC} = marc flavour, eg. "MARC21" or "UNIMARC". {FIELD} = field number, eg. "000" or "048". {LANG} = user language, eg. "en" or "fi-FI"', 'free'),
('MarcFieldsToOrder','',NULL,'Set the mapping values for a new order line created from a MARC record in a staged file. In a YAML format.','textarea'),
('MarcItemFieldsToOrder','',NULL,'Set the mapping values for new item records created from a MARC record in a staged file. In a YAML format.','textarea'),
-('MarkLostItemsAsReturned','1','','Mark items as returned when flagged as lost','YesNo'),
+('MarkLostItemsAsReturned','batchmod|moredetail|cronjob|additem','batchmod|moredetail|cronjob|additem','Mark items as returned when flagged as lost','multiple'),
('MARCOrgCode','OSt','','Define MARC Organization Code for MARC21 records - http://www.loc.gov/marc/organizations/orgshome.html','free'),
('MaxFine',NULL,'','Maximum fine a patron can have for all late returns at one moment. Single item caps are specified in the circulation rules matrix.','Integer'),
('MaxItemsToDisplayForBatchDel','1000',NULL,'Display up to a given number of items in a single item deletionbatch.','Integer'),
nothing : "do nothing"
- .
-
+ - "Mark items as returned when flagged as lost "
- pref: MarkLostItemsAsReturned
- choices:
- yes: "Mark"
- no: "Do not mark"
- - "items as returned when flagged as lost"
+ multiple:
+ cronjob: "from the longoverdue cronjob"
+ batchmod: "from the batch item modification tool"
+ additem: "when cataloguing an item"
+ moredetail: "from the items tab of the catalog module"
+ - .
-
- pref: AllowMultipleIssuesOnABiblio
choices:
if($confirm) {
ModItem({ itemlost => $lostvalue }, $row->{'biblionumber'}, $row->{'itemnumber'});
if ( $charge && $charge eq $lostvalue ) {
- LostItem( $row->{'itemnumber'}, $mark_returned );
+ LostItem( $row->{'itemnumber'}, 'cronjob', $mark_returned );
} elsif ( $mark_returned ) {
my $patron = Koha::Patrons->find( $row->{borrowernumber} );
MarkIssueReturned($row->{borrowernumber},$row->{itemnumber},undef,undef,$patron->privacy)
use Modern::Perl;
-use Test::More tests => 114;
+use Test::More tests => 116;
use DateTime;
use POSIX qw( floor );
t::lib::Mocks::mock_preference('WhenLostForgiveFine','0');
t::lib::Mocks::mock_preference('WhenLostChargeReplacementFee','0');
- LostItem( $itemnumber, 1 );
+ LostItem( $itemnumber, 'test', 1 );
my $item = Koha::Database->new()->schema()->resultset('Item')->find($itemnumber);
ok( !$item->onloan(), "Lost item marked as returned has false onloan value" );
+ my $checkout = Koha::Checkouts->find({ itemnumber => $itemnumber });
+ is( $checkout, undef, 'LostItem called with forced return has checked in the item' );
my $total_due = $dbh->selectrow_array(
'SELECT SUM( amountoutstanding ) FROM accountlines WHERE borrowernumber = ?',
}
);
- LostItem( $itemnumber2, 0 );
+ LostItem( $itemnumber2, 'test', 0 );
my $item2 = Koha::Database->new()->schema()->resultset('Item')->find($itemnumber2);
ok( $item2->onloan(), "Lost item *not* marked as returned has true onloan value" );
+ ok( Koha::Checkouts->find({ itemnumber => $itemnumber2 }), 'LostItem called without forced return has checked in the item' );
$total_due = $dbh->selectrow_array(
'SELECT SUM( amountoutstanding ) FROM accountlines WHERE borrowernumber = ?',
if ( $modified ) {
eval {
if ( my $item = ModItemFromMarc( $localmarcitem, $itemdata->{biblionumber}, $itemnumber ) ) {
- LostItem($itemnumber) if $item->{itemlost} and not $itemdata->{itemlost};
+ LostItem($itemnumber, 'batchmod') if $item->{itemlost} and not $itemdata->{itemlost};
}
};
}