dbd2713ff0
If a discharged item is captured for a hold at another branch the selfcheck should generate a branchtransfer for it. This was complicated as the checkin routine was setting its own location from a field not set in many scm machines (e.g. 3M) also in ILS::Transaction the test for location was incorrect assuming that an empty string or undefined was a valid location Signed-off-by: Chris Cormack <chris@bigballofwax.co.nz> Signed-off-by: Paul Poulain <paul.poulain@biblibre.com>
123 lines
3.4 KiB
Perl
123 lines
3.4 KiB
Perl
#
|
|
# An object to handle checkin status
|
|
#
|
|
|
|
package ILS::Transaction::Checkin;
|
|
|
|
use warnings;
|
|
use strict;
|
|
|
|
# use POSIX qw(strftime);
|
|
|
|
use ILS;
|
|
use ILS::Transaction;
|
|
|
|
use C4::Circulation;
|
|
use C4::Reserves qw( ModReserveAffect );
|
|
use C4::Items qw( ModItemTransfer );
|
|
use C4::Debug;
|
|
|
|
our @ISA = qw(ILS::Transaction);
|
|
|
|
my %fields = (
|
|
magnetic => 0,
|
|
sort_bin => undef,
|
|
collection_code => undef,
|
|
# 3M extensions:
|
|
call_number => undef,
|
|
destination_loc => undef,
|
|
alert_type => undef, # 00,01,02,03,04 or 99
|
|
hold_patron_id => undef,
|
|
hold_patron_name => "",
|
|
hold => undef,
|
|
);
|
|
|
|
sub new {
|
|
my $class = shift;
|
|
my $self = $class->SUPER::new(); # start with an ILS::Transaction object
|
|
|
|
foreach (keys %fields) {
|
|
$self->{_permitted}->{$_} = $fields{$_}; # overlaying _permitted
|
|
}
|
|
|
|
@{$self}{keys %fields} = values %fields; # copying defaults into object
|
|
return bless $self, $class;
|
|
}
|
|
|
|
sub do_checkin {
|
|
my $self = shift;
|
|
my $branch = shift;
|
|
if (!$branch) {
|
|
$branch = 'SIP2';
|
|
}
|
|
my $barcode = $self->{item}->id;
|
|
$debug and warn "do_checkin() calling AddReturn($barcode, $branch)";
|
|
my ($return, $messages, $iteminformation, $borrower) = AddReturn($barcode, $branch);
|
|
$self->alert(!$return);
|
|
# ignoring messages: NotIssued, IsPermanent, WasLost, WasTransfered
|
|
|
|
# biblionumber, biblioitemnumber, itemnumber
|
|
# borrowernumber, reservedate, branchcode
|
|
# cancellationdate, found, reservenotes, priority, timestamp
|
|
|
|
if ($messages->{BadBarcode}) {
|
|
$self->alert_type('99');
|
|
}
|
|
if ($messages->{wthdrawn}) {
|
|
$self->alert_type('99');
|
|
}
|
|
if ($messages->{Wrongbranch}) {
|
|
$self->destination_loc($messages->{Wrongbranch}->{Rightbranch});
|
|
$self->alert_type('04'); # send to other branch
|
|
}
|
|
if ($messages->{WrongTransfer}) {
|
|
$self->destination_loc($messages->{WrongTransfer});
|
|
$self->alert_type('04'); # send to other branch
|
|
}
|
|
if ($messages->{NeedsTransfer}) {
|
|
$self->destination_loc($iteminformation->{homebranch});
|
|
$self->alert_type('04'); # send to other branch
|
|
}
|
|
if ($messages->{ResFound}) {
|
|
$self->hold($messages->{ResFound});
|
|
if ($branch eq $messages->{ResFound}->{branchcode}) {
|
|
$self->alert_type('01');
|
|
ModReserveAffect( $messages->{ResFound}->{itemnumber},
|
|
$messages->{ResFound}->{borrowernumber}, 0);
|
|
|
|
} else {
|
|
$self->alert_type('02');
|
|
ModReserveAffect( $messages->{ResFound}->{itemnumber},
|
|
$messages->{ResFound}->{borrowernumber}, 1);
|
|
ModItemTransfer( $messages->{ResFound}->{itemnumber},
|
|
$branch,
|
|
$messages->{ResFound}->{branchcode}
|
|
);
|
|
|
|
}
|
|
$self->{item}->hold_patron_id( $messages->{ResFound}->{borrowernumber} );
|
|
$self->{item}->destination_loc( $messages->{ResFound}->{branchcode} );
|
|
}
|
|
$self->alert(1) if defined $self->alert_type; # alert_type could be "00", hypothetically
|
|
$self->ok($return);
|
|
}
|
|
|
|
sub resensitize {
|
|
my $self = shift;
|
|
unless ($self->{item}) {
|
|
warn "resensitize(): no item found in object to resensitize";
|
|
return;
|
|
}
|
|
return !$self->{item}->magnetic_media;
|
|
}
|
|
|
|
sub patron_id {
|
|
my $self = shift;
|
|
unless ($self->{patron}) {
|
|
warn "patron_id(): no patron found in object";
|
|
return;
|
|
}
|
|
return $self->{patron}->id;
|
|
}
|
|
|
|
1;
|