X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FSIP%2FILS%2FTransaction%2FCheckin.pm;h=a4e09304aca73b92b164bc94a92933b755617268;hb=9d6d641d1f8b77271800f43bc027b651f9aea52b;hp=49ce9260bf2633027c2b2729fec03d34e3997e33;hpb=aeb48e2534663e36e488713feaac96dd794836ab;p=srvgit diff --git a/C4/SIP/ILS/Transaction/Checkin.pm b/C4/SIP/ILS/Transaction/Checkin.pm index 49ce9260bf..a4e09304ac 100644 --- a/C4/SIP/ILS/Transaction/Checkin.pm +++ b/C4/SIP/ILS/Transaction/Checkin.pm @@ -1,23 +1,23 @@ -# + # An object to handle checkin status # -package ILS::Transaction::Checkin; +package C4::SIP::ILS::Transaction::Checkin; use warnings; use strict; # use POSIX qw(strftime); -use ILS; -use ILS::Transaction; +use C4::SIP::ILS::Transaction; -use C4::Circulation; -use C4::Reserves qw( ModReserveAffect ); +use C4::Circulation qw( AddReturn LostItem ); use C4::Items qw( ModItemTransfer ); -use C4::Debug; +use C4::Reserves qw( ModReserve ModReserveAffect ); +use Koha::DateUtils qw( dt_from_string ); +use Koha::Items; -use parent qw(ILS::Transaction); +use parent qw(C4::SIP::ILS::Transaction); my %fields = ( magnetic => 0, @@ -47,59 +47,130 @@ sub new { sub do_checkin { my $self = shift; my $branch = shift; + my $return_date = shift; + my $account = shift; + + my $checked_in_ok = $account->{checked_in_ok}; + my $cv_triggers_alert = $account->{cv_triggers_alert}; + my $holds_block_checkin = $account->{holds_block_checkin}; + 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 + + if ( $return_date ) { + $return_date = substr( $return_date, 0, 4 ) + . '-' + . substr( $return_date, 4, 2 ) + . '-' + . substr( $return_date, 6, 2 ) + . q{ } + . substr( $return_date, 12, 2 ) + . ':' + . substr( $return_date, 14, 2 ) + . ':' + . substr( $return_date, 16, 2 ); + $return_date = dt_from_string($return_date); + } + + my ( $return, $messages, $issue, $borrower ); + + my $item = Koha::Items->find( { barcode => $barcode } ); + + my $human_required = 0; + if ( C4::Context->preference("CircConfirmItemParts") + && defined($item) + && $item->materials ) + { + $human_required = 1; + $messages->{additional_materials} = 1; + } + + my $checkin_blocked_by_holds = $holds_block_checkin && $item->biblio->holds->count; + + ( $return, $messages, $issue, $borrower ) = + AddReturn( $barcode, $branch, undef, $return_date ) + unless $human_required || $checkin_blocked_by_holds; + + if ( $checked_in_ok ) { + delete $messages->{ItemLocationUpdated}; + delete $messages->{NotIssued}; + delete $messages->{LocalUse}; + $return = 1 unless keys %$messages; + } # biblionumber, biblioitemnumber, itemnumber # borrowernumber, reservedate, branchcode # cancellationdate, found, reservenotes, priority, timestamp - + if ($messages->{additional_materials}) { + $self->alert_type('99'); + } + if( $messages->{DataCorrupted} ) { + $self->alert_type('98'); + } if ($messages->{BadBarcode}) { $self->alert_type('99'); } - if ($messages->{wthdrawn}) { + if ($messages->{withdrawn}) { $self->alert_type('99'); } + if ($messages->{WasLost}) { + $self->alert_type('99') if C4::Context->preference("BlockReturnOfLostItems"); + } if ($messages->{Wrongbranch}) { - $self->destination_loc($messages->{Wrongbranch}->{Rightbranch}); + $self->{item}->destination_loc($messages->{Wrongbranch}->{Rightbranch}); $self->alert_type('04'); # send to other branch } if ($messages->{WrongTransfer}) { - $self->destination_loc($messages->{WrongTransfer}); + $self->{item}->destination_loc($messages->{WrongTransfer}); $self->alert_type('04'); # send to other branch } if ($messages->{NeedsTransfer}) { - $self->destination_loc($iteminformation->{homebranch}); + $self->{item}->destination_loc($messages->{NeedsTransfer}); + $self->alert_type('04'); # send to other branch + } + if ($messages->{WasTransfered}) { # set into transit so tell unit + $self->{item}->destination_loc($item->homebranch); $self->alert_type('04'); # send to other branch } - if ($messages->{ResFound}) { - $self->hold($messages->{ResFound}); - if ($branch eq $messages->{ResFound}->{branchcode}) { + if ($messages->{ResFound} || $checkin_blocked_by_holds ) { + if ($checkin_blocked_by_holds) { + $self->alert_type('99'); + $return = 0; + } elsif ($branch eq $messages->{ResFound}->{branchcode}) { + $self->hold($messages->{ResFound}); $self->alert_type('01'); ModReserveAffect( $messages->{ResFound}->{itemnumber}, - $messages->{ResFound}->{borrowernumber}, 0); + $messages->{ResFound}->{borrowernumber}, 0, $messages->{ResFound}->{reserve_id}); } else { + $self->hold($messages->{ResFound}); $self->alert_type('02'); - ModReserveAffect( $messages->{ResFound}->{itemnumber}, - $messages->{ResFound}->{borrowernumber}, 1); - ModItemTransfer( $messages->{ResFound}->{itemnumber}, + ModReserveAffect( $item->itemnumber, + $messages->{ResFound}->{borrowernumber}, 1, $messages->{ResFound}->{reserve_id}); + ModItemTransfer( $item->itemnumber, $branch, - $messages->{ResFound}->{branchcode} + $messages->{ResFound}->{branchcode}, + 'Reserve', ); } $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 + # ignoring messages: NotIssued, WasTransfered + + if ($cv_triggers_alert) { + $self->alert( defined $self->alert_type ); # Overwrites existing alert value, should set to 0 if there is no alert type + } + else { + $self->alert( !$return || defined $self->alert_type ); + } + $self->ok($return); + + return { messages => $messages }; } sub resensitize {