View | Details | Raw Unified | Return to bug 29346
Collapse All | Expand All

(-)a/Koha/BackgroundJob.pm (+1 lines)
Lines 256-261 sub type_to_class_mapping { Link Here
256
        batch_item_record_deletion          => 'Koha::BackgroundJob::BatchDeleteItem',
256
        batch_item_record_deletion          => 'Koha::BackgroundJob::BatchDeleteItem',
257
        batch_item_record_modification      => 'Koha::BackgroundJob::BatchUpdateItem',
257
        batch_item_record_modification      => 'Koha::BackgroundJob::BatchUpdateItem',
258
        batch_hold_cancel                   => 'Koha::BackgroundJob::BatchCancelHold',
258
        batch_hold_cancel                   => 'Koha::BackgroundJob::BatchCancelHold',
259
        update_holds_queue_for_biblios      => 'Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue',
259
    };
260
    };
260
}
261
}
261
262
(-)a/Koha/BackgroundJob/BatchUpdateBiblioHoldsQueue.pm (-1 / +173 lines)
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;

Return to bug 29346