Bug 9394: Use reserve_id where possible
[koha.git] / C4 / SIP / ILS / Transaction / Hold.pm
1 #
2 # status of a Hold transaction
3
4 package ILS::Transaction::Hold;
5
6 use warnings;
7 use strict;
8
9 use ILS;
10 use ILS::Transaction;
11
12 use C4::Reserves;       # AddReserve
13 use C4::Members;        # GetMember
14 use C4::Biblio;         # GetBiblioFromItemNumber GetBiblioItemByBiblioNumber
15 use parent qw(ILS::Transaction);
16
17
18 our $VERSION = 3.07.00.049;
19
20 my %fields = (
21         expiration_date => 0,
22         pickup_location => undef,
23         constraint_type => undef,
24 );
25
26 sub new {
27         my $class = shift;
28         my $self = $class->SUPER::new();
29     foreach my $element (keys %fields) {
30                 $self->{_permitted}->{$element} = $fields{$element};
31         }
32         @{$self}{keys %fields} = values %fields;
33         return bless $self, $class;
34 }
35
36 sub queue_position {
37     my $self = shift;
38     return $self->item->hold_queue_position($self->patron->id);
39 }
40
41 sub do_hold {
42         my $self = shift;
43         unless ($self->{patron}) {
44                 $self->screen_msg('do_hold called with undefined patron');
45                 $self->ok(0);
46                 return $self;
47         }
48         my $borrower = GetMember( 'cardnumber'=>$self->{patron}->id);
49         unless ($borrower) {
50                 $self->screen_msg('No borrower matches cardnumber "' . $self->{patron}->id . '".');
51                 $self->ok(0);
52                 return $self;
53         }
54         my $bib = GetBiblioFromItemNumber(undef, $self->{item}->id);
55         unless ($bib) {
56                 $self->screen_msg('No biblio record matches barcode "' . $self->{item}->id . '".');
57                 $self->ok(0);
58                 return $self;
59         }
60         my $branch = ($self->pickup_location || $self->{patron}->branchcode);
61         unless ($branch) {
62                 $self->screen_msg('No branch specified (or found w/ patron).');
63                 $self->ok(0);
64                 return $self;
65         }
66         my $bibno = $bib->{biblionumber};
67         AddReserve($branch, $borrower->{borrowernumber}, 
68                                 $bibno, 'a', GetBiblioItemByBiblioNumber($bibno)) ;
69                 # unfortunately no meaningful return value
70         $self->ok(1);
71         return $self;
72 }
73
74 sub drop_hold {
75         my $self = shift;
76         unless ($self->{patron}) {
77                 $self->screen_msg('drop_hold called with undefined patron');
78                 $self->ok(0);
79                 return $self;
80         }
81         my $borrower = GetMember( 'cardnumber'=>$self->{patron}->id);
82         unless ($borrower) {
83                 $self->screen_msg('No borrower matches cardnumber "' . $self->{patron}->id . '".');
84                 $self->ok(0);
85                 return $self;
86         }
87         my $bib = GetBiblioFromItemNumber(undef, $self->{item}->id);
88
89       CancelReserve({
90             biblionumber   => $bib->{biblionumber},
91         itemnumber     => $self->{item}->id,
92            borrowernumber => $borrower->{borrowernumber}
93       });
94
95         $self->ok(1);
96         return $self;
97 }
98
99 sub change_hold {
100         my $self = shift;
101         unless ($self->{patron}) {
102                 $self->screen_msg('change_hold called with undefined patron');
103                 $self->ok(0);
104                 return $self;
105         }
106         my $borrower = GetMember( 'cardnumber'=>$self->{patron}->id);
107         unless ($borrower) {
108                 $self->screen_msg('No borrower matches cardnumber "' . $self->{patron}->id . '".');
109                 $self->ok(0);
110                 return $self;
111         }
112         my $bib = GetBiblioFromItemNumber(undef, $self->{item}->id);
113         unless ($bib) {
114                 $self->screen_msg('No biblio record matches barcode "' . $self->{item}->id . '".');
115                 $self->ok(0);
116                 return $self;
117         }
118         my $branch = ($self->pickup_location || $self->{patron}->branchcode);
119         unless ($branch) {
120                 $self->screen_msg('No branch specified (or found w/ patron).');
121                 $self->ok(0);
122                 return $self;
123         }
124         my $bibno = $bib->{biblionumber};
125   ModReserve({ biblionumber => $bibno, borrowernumber => $borrower->{borrowernumber}, branchcode => $branch });
126
127         $self->ok(1);
128         return $self;
129 }
130
131 1;
132 __END__