Bug 17600: Standardize our EXPORT_OK
[srvgit] / C4 / SIP / ILS / Transaction / Hold.pm
index 3352c1c..82fddf1 100644 (file)
@@ -1,24 +1,18 @@
 #
 # status of a Hold transaction
 
-package ILS::Transaction::Hold;
+package C4::SIP::ILS::Transaction::Hold;
 
-use warnings;
-use strict;
+use Modern::Perl;
 
-use ILS;
-use ILS::Transaction;
+use C4::SIP::ILS::Transaction;
 
-use C4::Reserves;      # AddReserve
-use C4::Members;       # GetMember
-use C4::Biblio;                # GetBiblioFromItemNumber GetBiblioItemByBiblioNumber
+use C4::Reserves qw( CalculatePriority AddReserve ModReserve );
+use Koha::Holds;
+use Koha::Patrons;
+use Koha::Items;
 
-use vars qw($VERSION @ISA);
-
-BEGIN {
-    $VERSION = 3.07.00.049;
-           @ISA = qw(ILS::Transaction);
-}
+use parent qw(C4::SIP::ILS::Transaction);
 
 my %fields = (
        expiration_date => 0,
@@ -42,75 +36,76 @@ sub queue_position {
 }
 
 sub do_hold {
-       my $self = shift;
-       unless ($self->{patron}) {
-               $self->screen_msg('do_hold called with undefined patron');
-               $self->ok(0);
-               return $self;
-       }
-       my $borrower = GetMember( 'cardnumber'=>$self->{patron}->id);
-       unless ($borrower) {
-               $self->screen_msg('No borrower matches cardnumber "' . $self->{patron}->id . '".');
-               $self->ok(0);
-               return $self;
-       }
-       my $bib = GetBiblioFromItemNumber(undef, $self->{item}->id);
-       unless ($bib) {
-               $self->screen_msg('No biblio record matches barcode "' . $self->{item}->id . '".');
-               $self->ok(0);
-               return $self;
-       }
-       my $branch = ($self->pickup_location || $self->{patron}->branchcode);
-       unless ($branch) {
-               $self->screen_msg('No branch specified (or found w/ patron).');
-               $self->ok(0);
-               return $self;
-       }
-       my $bibno = $bib->{biblionumber};
-       AddReserve($branch, $borrower->{borrowernumber}, 
-                               $bibno, 'a', GetBiblioItemByBiblioNumber($bibno)) ;
-               # unfortunately no meaningful return value
-       $self->ok(1);
-       return $self;
+    my $self = shift;
+    my $patron = Koha::Patrons->find( $self->{patron}->borrowernumber );
+    unless ( $patron ) {
+        $self->screen_msg('do_hold called with undefined patron');
+        $self->ok(0);
+        return $self;
+    }
+    my $item = Koha::Items->find({ barcode => $self->{item}->id });
+    unless ($item) {
+        $self->screen_msg( 'No biblio record matches barcode "' . $self->{item}->id . '".' );
+        $self->ok(0);
+        return $self;
+    }
+    my $branch = ( $self->pickup_location || $self->{patron}->{branchcode} );
+    unless ($branch) {
+        $self->screen_msg('No branch specified (or found w/ patron).');
+        $self->ok(0);
+        return $self;
+    }
+    unless ( $item->can_be_transferred( { to => Koha::Libraries->find( $branch ) } ) ) {
+        $self->screen_msg('Item cannot be transferred.');
+        $self->ok(0);
+        return $self;
+    }
+
+    my $priority = C4::Reserves::CalculatePriority($item->biblionumber);
+    AddReserve(
+        {
+            priority       => $priority,
+            branchcode     => $branch,
+            borrowernumber => $patron->borrowernumber,
+            biblionumber   => $item->biblionumber
+        }
+    );
+
+    # unfortunately no meaningful return value
+    $self->ok(1);
+    return $self;
 }
 
 sub drop_hold {
        my $self = shift;
-       unless ($self->{patron}) {
-               $self->screen_msg('drop_hold called with undefined patron');
-               $self->ok(0);
-               return $self;
-       }
-       my $borrower = GetMember( 'cardnumber'=>$self->{patron}->id);
-       unless ($borrower) {
-               $self->screen_msg('No borrower matches cardnumber "' . $self->{patron}->id . '".');
-               $self->ok(0);
-               return $self;
-       }
-       my $bib = GetBiblioFromItemNumber(undef, $self->{item}->id);
-       # FIXME: figure out if it is a item or title hold.  Till then, cancel both.
-       CancelReserve($bib->{biblionumber}, undef, $borrower->{borrowernumber});
-       CancelReserve(undef, $self->{item}->id, $borrower->{borrowernumber});
-               # unfortunately no meaningful return value here either
+    my $patron = Koha::Patrons->find( $self->{patron}->borrowernumber );
+    unless ($patron) {
+        $self->screen_msg('drop_hold called with undefined patron');
+        $self->ok(0);
+        return $self;
+    }
+
+    my $item = Koha::Items->find({ barcode => $self->{item}->id });
+    my $holds = $item->holds->search({ borrowernumber => $patron->borrowernumber });
+
+    return $self unless $holds->count;
+
+    $holds->next->cancel;
+
        $self->ok(1);
        return $self;
 }
 
 sub change_hold {
        my $self = shift;
-       unless ($self->{patron}) {
-               $self->screen_msg('change_hold called with undefined patron');
-               $self->ok(0);
-               return $self;
-       }
-       my $borrower = GetMember( 'cardnumber'=>$self->{patron}->id);
-       unless ($borrower) {
-               $self->screen_msg('No borrower matches cardnumber "' . $self->{patron}->id . '".');
-               $self->ok(0);
-               return $self;
-       }
-       my $bib = GetBiblioFromItemNumber(undef, $self->{item}->id);
-       unless ($bib) {
+    my $patron = Koha::Patrons->find( $self->{patron}->borrowernumber );
+    unless ($patron) {
+        $self->screen_msg('change_hold called with undefined patron');
+        $self->ok(0);
+        return $self;
+    }
+    my $item = Koha::Items->find({ barcode => $self->{item}->id });
+    unless ($item) {
                $self->screen_msg('No biblio record matches barcode "' . $self->{item}->id . '".');
                $self->ok(0);
                return $self;
@@ -121,18 +116,11 @@ sub change_hold {
                $self->ok(0);
                return $self;
        }
-       my $bibno = $bib->{biblionumber};
-       ModReserve($bibno, $borrower->{borrowernumber}, $branch, GetBiblioItemByBiblioNumber($bibno));
-               # unfortunately no meaningful return value
-               # ModReserve needs to be fixed to maintain priority by iteself (Feb 2008)
+    ModReserve({ biblionumber => $item->biblionumber, borrowernumber => $patron->borrowernumber, branchcode => $branch });
+
        $self->ok(1);
        return $self;
 }
+
 1;
 __END__
-
-# 11 friggin arguments
-AddReserve($branch,$borrowernumber,$biblionumber,$constraint,$bibitems,$priority,$startdate,$notes,$title,$checkitem,$found)
-
-ModReserve($rank, $biblio, $borrower, $branch , $itemnumber)
-