Line 0
Link Here
|
0 |
- |
1 |
package Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue; |
|
|
2 |
|
3 |
# This file is part of Koha. |
4 |
# |
5 |
# Koha is free software; you can redistribute it and/or modify it |
6 |
# under the terms of the GNU General Public License as published by |
7 |
# the Free Software Foundation; either version 3 of the License, or |
8 |
# (at your option) any later version. |
9 |
# |
10 |
# Koha is distributed in the hope that it will be useful, but |
11 |
# WITHOUT ANY WARRANTY; without even the implied warranty of |
12 |
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
13 |
# GNU General Public License for more details. |
14 |
# |
15 |
# You should have received a copy of the GNU General Public License |
16 |
# along with Koha; if not, see <http://www.gnu.org/licenses>. |
17 |
|
18 |
use Modern::Perl; |
19 |
|
20 |
use JSON qw( encode_json decode_json ); |
21 |
use Try::Tiny; |
22 |
|
23 |
use Koha::BackgroundJobs; |
24 |
use Koha::Exceptions; |
25 |
|
26 |
use C4::HoldsQueue |
27 |
qw(load_branches_to_pull_from TransportCostMatrix update_queue_for_biblio); |
28 |
|
29 |
use base 'Koha::BackgroundJob'; |
30 |
|
31 |
=head1 NAME |
32 |
|
33 |
Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue - Update the holds queue |
34 |
for a specified list of biblios. |
35 |
|
36 |
This is a subclass of Koha::BackgroundJob. |
37 |
|
38 |
=head1 API |
39 |
|
40 |
=head2 Class methods |
41 |
|
42 |
=head3 job_type |
43 |
|
44 |
Returns a string representing the job type. In this case I<update_holds_queue_for_biblios>. |
45 |
|
46 |
=cut |
47 |
|
48 |
sub job_type { |
49 |
return 'update_holds_queue_for_biblios'; |
50 |
} |
51 |
|
52 |
=head3 process |
53 |
|
54 |
Perform the expected action. |
55 |
|
56 |
=cut |
57 |
|
58 |
sub process { |
59 |
my ( $self, $args ) = @_; |
60 |
|
61 |
my $job_progress = 0; |
62 |
|
63 |
$self->set( |
64 |
{ |
65 |
started_on => \'NOW()', |
66 |
progress => $job_progress, |
67 |
status => 'started', |
68 |
} |
69 |
)->store; |
70 |
|
71 |
my @biblio_ids = @{ $args->{biblio_id} }; |
72 |
|
73 |
my $report = { |
74 |
total_biblios => scalar @biblio_ids, |
75 |
total_success => 0, |
76 |
}; |
77 |
|
78 |
my $use_transport_cost_matrix = C4::Context->preference("UseTransportCostMatrix"); |
79 |
my $transport_cost_matrix = $use_transport_cost_matrix ? TransportCostMatrix() : undef; |
80 |
my $branches_to_use = load_branches_to_pull_from($use_transport_cost_matrix); |
81 |
|
82 |
my @messages; |
83 |
|
84 |
foreach my $biblio_id (@biblio_ids) { |
85 |
try { |
86 |
my $result = update_queue_for_biblio( |
87 |
{ |
88 |
biblio_id => $biblio_id, |
89 |
branches_to_use => $branches_to_use, |
90 |
delete => 1, |
91 |
transport_cost_matrix => $transport_cost_matrix |
92 |
} |
93 |
); |
94 |
push @messages, |
95 |
{ |
96 |
type => 'success', |
97 |
code => 'holds_queue_updated', |
98 |
biblio_id => $biblio_id, |
99 |
availabe_items => $result->{available_items}, |
100 |
mapped_items => $result->{mapped_items}, |
101 |
requests => $result->{requests}, |
102 |
}; |
103 |
$report->{total_success}++; |
104 |
} |
105 |
catch { |
106 |
push @messages, { |
107 |
type => 'error', |
108 |
code => 'holds_queue_update_error', |
109 |
biblio_id => $biblio_id, |
110 |
error => "$_", |
111 |
}; |
112 |
}; |
113 |
|
114 |
$self->progress( $job_progress++ )->store; |
115 |
} |
116 |
|
117 |
my $job_data = decode_json $self->data; |
118 |
$job_data->{messages} = \@messages; |
119 |
$job_data->{report} = $report; |
120 |
|
121 |
$self->set( |
122 |
{ |
123 |
ended_on => \'NOW()', |
124 |
data => encode_json $job_data, |
125 |
} |
126 |
); |
127 |
$self->status('finished') |
128 |
unless $self->status ne 'cancelled'; |
129 |
|
130 |
$self->store; |
131 |
} |
132 |
|
133 |
=head3 enqueue |
134 |
|
135 |
Enqueue the new job |
136 |
|
137 |
=cut |
138 |
|
139 |
sub enqueue { |
140 |
my ( $self, $args ) = @_; |
141 |
|
142 |
Koha::Exceptions::MissingParameter->throw( |
143 |
"Missing biblio_ids parameter is mandatory") |
144 |
unless exists $args->{biblio_ids}; |
145 |
|
146 |
my @biblio_ids = @{ $args->{biblio_ids} }; |
147 |
|
148 |
$self->SUPER::enqueue( |
149 |
{ |
150 |
job_size => scalar @biblio_ids, |
151 |
job_args => |
152 |
{ biblio_ids => \@biblio_ids, reason => $args->{reason} } |
153 |
} |
154 |
); |
155 |
} |
156 |
|
157 |
=head3 additional_report |
158 |
|
159 |
Pass the biblio's title and patron's name |
160 |
|
161 |
=cut |
162 |
|
163 |
sub additional_report { |
164 |
my ( $self, $args ) = @_; |
165 |
|
166 |
my $messages = $self->messages; |
167 |
for my $m (@$messages) { |
168 |
$m->{biblio} = Koha::Biblios->find( $m->{biblio_id} ); |
169 |
} |
170 |
return { report_messages => $messages }; |
171 |
} |
172 |
|
173 |
1; |