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