Lines 27-32
use Koha::Items;
Link Here
|
27 |
use Koha::Libraries; |
27 |
use Koha::Libraries; |
28 |
use Koha::DateUtils qw( dt_from_string ); |
28 |
use Koha::DateUtils qw( dt_from_string ); |
29 |
use Koha::ArticleRequest::Status; |
29 |
use Koha::ArticleRequest::Status; |
|
|
30 |
use Koha::Exceptions; |
30 |
use Koha::Exceptions::ArticleRequest; |
31 |
use Koha::Exceptions::ArticleRequest; |
31 |
|
32 |
|
32 |
use base qw(Koha::Object); |
33 |
use base qw(Koha::Object); |
Lines 39-46
Koha::ArticleRequest - Koha Article Request Object class
Link Here
|
39 |
|
40 |
|
40 |
=head2 Class methods |
41 |
=head2 Class methods |
41 |
|
42 |
|
|
|
43 |
=head3 store |
44 |
|
45 |
Overridden I<store> method that performs some checks and triggers. |
46 |
|
42 |
=cut |
47 |
=cut |
43 |
|
48 |
|
|
|
49 |
sub store { |
50 |
my ($self) = @_; |
51 |
|
52 |
if ( !$self->in_storage ) { |
53 |
# new request |
54 |
Koha::Exceptions::MissingParameter->throw( |
55 |
"Missing mandatory parameter: borrowernumber") |
56 |
unless $self->borrowernumber; |
57 |
|
58 |
my $patron = Koha::Patrons->find( $self->borrowernumber ); |
59 |
|
60 |
Koha::Exceptions::Object::FKConstraint->throw( |
61 |
broken_fk => 'borrowernumber', |
62 |
value => $self->borrowernumber |
63 |
) unless $patron; |
64 |
|
65 |
Koha::Exceptions::ArticleRequest::LimitReached->throw( |
66 |
error => 'Patron cannot request more articles for today' ) |
67 |
unless $patron->can_request_article; |
68 |
|
69 |
$self->created_on( dt_from_string() ); |
70 |
# this is to avoid calling ->discard_changes to retrieve |
71 |
# the default value from the DB |
72 |
$self->status( Koha::ArticleRequest::Status::Requested ) |
73 |
unless $self->status; |
74 |
} |
75 |
|
76 |
$self->SUPER::store; |
77 |
$self->notify; |
78 |
|
79 |
return $self; |
80 |
} |
81 |
|
44 |
=head3 request |
82 |
=head3 request |
45 |
|
83 |
|
46 |
=cut |
84 |
=cut |
Lines 48-61
Koha::ArticleRequest - Koha Article Request Object class
Link Here
|
48 |
sub request { |
86 |
sub request { |
49 |
my ($self) = @_; |
87 |
my ($self) = @_; |
50 |
|
88 |
|
51 |
Koha::Exceptions::ArticleRequest::LimitReached->throw( |
|
|
52 |
error => 'Patron cannot request more articles for today' |
53 |
) unless $self->borrower->can_request_article; |
54 |
|
55 |
$self->status(Koha::ArticleRequest::Status::Requested); |
89 |
$self->status(Koha::ArticleRequest::Status::Requested); |
56 |
$self->SUPER::store(); |
90 |
return $self->store; |
57 |
$self->notify(); |
|
|
58 |
return $self; |
59 |
} |
91 |
} |
60 |
|
92 |
|
61 |
=head3 set_pending |
93 |
=head3 set_pending |
Lines 66-74
sub set_pending {
Link Here
|
66 |
my ($self) = @_; |
98 |
my ($self) = @_; |
67 |
|
99 |
|
68 |
$self->status(Koha::ArticleRequest::Status::Pending); |
100 |
$self->status(Koha::ArticleRequest::Status::Pending); |
69 |
$self->SUPER::store(); |
101 |
return $self->store; |
70 |
$self->notify(); |
|
|
71 |
return $self; |
72 |
} |
102 |
} |
73 |
|
103 |
|
74 |
=head3 process |
104 |
=head3 process |
Lines 79-87
sub process {
Link Here
|
79 |
my ($self) = @_; |
109 |
my ($self) = @_; |
80 |
|
110 |
|
81 |
$self->status(Koha::ArticleRequest::Status::Processing); |
111 |
$self->status(Koha::ArticleRequest::Status::Processing); |
82 |
$self->store(); |
112 |
return $self->store; |
83 |
$self->notify(); |
|
|
84 |
return $self; |
85 |
} |
113 |
} |
86 |
|
114 |
|
87 |
=head3 complete |
115 |
=head3 complete |
Lines 92-100
sub complete {
Link Here
|
92 |
my ($self) = @_; |
120 |
my ($self) = @_; |
93 |
|
121 |
|
94 |
$self->status(Koha::ArticleRequest::Status::Completed); |
122 |
$self->status(Koha::ArticleRequest::Status::Completed); |
95 |
$self->store(); |
123 |
return $self->store; |
96 |
$self->notify(); |
|
|
97 |
return $self; |
98 |
} |
124 |
} |
99 |
|
125 |
|
100 |
=head3 cancel |
126 |
=head3 cancel |
Lines 107-165
sub cancel {
Link Here
|
107 |
$self->status(Koha::ArticleRequest::Status::Canceled); |
133 |
$self->status(Koha::ArticleRequest::Status::Canceled); |
108 |
$self->cancellation_reason($cancellation_reason) if $cancellation_reason; |
134 |
$self->cancellation_reason($cancellation_reason) if $cancellation_reason; |
109 |
$self->notes($notes) if $notes; |
135 |
$self->notes($notes) if $notes; |
110 |
$self->store(); |
136 |
return $self->store; |
111 |
$self->notify(); |
|
|
112 |
return $self; |
113 |
} |
114 |
|
115 |
=head3 notify |
116 |
|
117 |
=cut |
118 |
|
119 |
sub notify { |
120 |
my ($self) = @_; |
121 |
|
122 |
my $status = $self->status; |
123 |
my $reason = $self->notes; |
124 |
if ( !defined $reason && $self->cancellation_reason ) { |
125 |
my $av = Koha::AuthorisedValues->search( |
126 |
{ |
127 |
category => 'AR_CANCELLATION', |
128 |
authorised_value => $self->cancellation_reason |
129 |
} |
130 |
)->next; |
131 |
$reason = $av->lib_opac ? $av->lib_opac : $av->lib if $av; |
132 |
} |
133 |
|
134 |
require C4::Letters; |
135 |
if ( |
136 |
my $letter = C4::Letters::GetPreparedLetter( |
137 |
module => 'circulation', |
138 |
letter_code => "AR_$status", # AR_REQUESTED, AR_PENDING, AR_PROCESSING, AR_COMPLETED, AR_CANCELED |
139 |
message_transport_type => 'email', |
140 |
lang => $self->borrower->lang, |
141 |
tables => { |
142 |
article_requests => $self->id, |
143 |
borrowers => $self->borrowernumber, |
144 |
biblio => $self->biblionumber, |
145 |
biblioitems => $self->biblionumber, |
146 |
items => $self->itemnumber, |
147 |
branches => $self->branchcode, |
148 |
}, |
149 |
substitute => { |
150 |
reason => $reason, |
151 |
}, |
152 |
) |
153 |
) |
154 |
{ |
155 |
C4::Letters::EnqueueLetter( |
156 |
{ |
157 |
letter => $letter, |
158 |
borrowernumber => $self->borrowernumber, |
159 |
message_transport_type => 'email', |
160 |
} |
161 |
) or warn "can't enqueue letter " . $letter->{code}; |
162 |
} |
163 |
} |
137 |
} |
164 |
|
138 |
|
165 |
=head3 biblio |
139 |
=head3 biblio |
Lines 171-179
Returns the Koha::Biblio object for this article request
Link Here
|
171 |
sub biblio { |
145 |
sub biblio { |
172 |
my ($self) = @_; |
146 |
my ($self) = @_; |
173 |
|
147 |
|
174 |
$self->{_biblio} ||= Koha::Biblios->find( $self->biblionumber() ); |
148 |
my $biblio = $self->_result->biblio; |
175 |
|
149 |
return Koha::Biblio->_new_from_dbic( $biblio ); |
176 |
return $self->{_biblio}; |
|
|
177 |
} |
150 |
} |
178 |
|
151 |
|
179 |
=head3 item |
152 |
=head3 item |
Lines 185-193
Returns the Koha::Item object for this article request
Link Here
|
185 |
sub item { |
158 |
sub item { |
186 |
my ($self) = @_; |
159 |
my ($self) = @_; |
187 |
|
160 |
|
188 |
$self->{_item} ||= Koha::Items->find( $self->itemnumber() ); |
161 |
my $item = $self->_result->item; |
189 |
|
162 |
return Koha::Item->_new_from_dbic( $item ); |
190 |
return $self->{_item}; |
|
|
191 |
} |
163 |
} |
192 |
|
164 |
|
193 |
=head3 borrower |
165 |
=head3 borrower |
Lines 199-207
Returns the Koha::Patron object for this article request
Link Here
|
199 |
sub borrower { |
171 |
sub borrower { |
200 |
my ($self) = @_; |
172 |
my ($self) = @_; |
201 |
|
173 |
|
202 |
$self->{_borrower} ||= Koha::Patrons->find( $self->borrowernumber() ); |
174 |
my $patron = $self->_result->patron; |
203 |
|
175 |
return Koha::Patron->_new_from_dbic( $patron ); |
204 |
return $self->{_borrower}; |
|
|
205 |
} |
176 |
} |
206 |
|
177 |
|
207 |
=head3 branch |
178 |
=head3 branch |
Lines 213-241
Returns the Koha::Library object for this article request
Link Here
|
213 |
sub branch { |
184 |
sub branch { |
214 |
my ($self) = @_; |
185 |
my ($self) = @_; |
215 |
|
186 |
|
216 |
$self->{_branch} ||= Koha::Libraries->find( $self->branchcode() ); |
187 |
my $library = $self->_result->library; |
217 |
|
188 |
return Koha::Library->_new_from_dbic( $library ); |
218 |
return $self->{_branch}; |
|
|
219 |
} |
189 |
} |
220 |
|
190 |
|
221 |
=head3 store |
191 |
=head2 Internal methods |
222 |
|
192 |
|
223 |
Override the default store behavior so that new opac requests |
193 |
=head3 notify |
224 |
will have notifications sent. |
|
|
225 |
|
194 |
|
226 |
=cut |
195 |
=cut |
227 |
|
196 |
|
228 |
sub store { |
197 |
sub notify { |
229 |
my ($self) = @_; |
198 |
my ($self) = @_; |
230 |
if ( $self->in_storage ) { |
199 |
|
231 |
return $self->SUPER::store; |
200 |
my $status = $self->status; |
232 |
} else { |
201 |
my $reason = $self->notes; |
233 |
$self->created_on( dt_from_string() ); |
202 |
if ( !defined $reason && $self->cancellation_reason ) { |
234 |
return $self->request; |
203 |
my $av = Koha::AuthorisedValues->search( |
|
|
204 |
{ |
205 |
category => 'AR_CANCELLATION', |
206 |
authorised_value => $self->cancellation_reason |
207 |
} |
208 |
)->next; |
209 |
$reason = $av->lib_opac ? $av->lib_opac : $av->lib if $av; |
210 |
} |
211 |
|
212 |
require C4::Letters; |
213 |
if ( |
214 |
my $letter = C4::Letters::GetPreparedLetter( |
215 |
module => 'circulation', |
216 |
letter_code => "AR_$status", # AR_REQUESTED, AR_PENDING, AR_PROCESSING, AR_COMPLETED, AR_CANCELED |
217 |
message_transport_type => 'email', |
218 |
lang => $self->borrower->lang, |
219 |
tables => { |
220 |
article_requests => $self->id, |
221 |
borrowers => $self->borrowernumber, |
222 |
biblio => $self->biblionumber, |
223 |
biblioitems => $self->biblionumber, |
224 |
items => $self->itemnumber, |
225 |
branches => $self->branchcode, |
226 |
}, |
227 |
substitute => { |
228 |
reason => $reason, |
229 |
}, |
230 |
) |
231 |
) |
232 |
{ |
233 |
C4::Letters::EnqueueLetter( |
234 |
{ |
235 |
letter => $letter, |
236 |
borrowernumber => $self->borrowernumber, |
237 |
message_transport_type => 'email', |
238 |
} |
239 |
) or warn "can't enqueue letter " . $letter->{code}; |
235 |
} |
240 |
} |
236 |
} |
241 |
} |
237 |
|
242 |
|
238 |
=head2 Internal methods |
243 |
|
239 |
|
244 |
|
240 |
=head3 _type |
245 |
=head3 _type |
241 |
|
246 |
|