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 / +180 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::Exceptions;
24
25
use C4::HoldsQueue
26
  qw(load_branches_to_pull_from TransportCostMatrix update_queue_for_biblio);
27
28
use base 'Koha::BackgroundJob';
29
30
=head1 NAME
31
32
Koha::BackgroundJob::BatchUpdateBiblioHoldsQueue - Update the holds queue
33
for a specified list of biblios.
34
35
This is a subclass of Koha::BackgroundJob.
36
37
=head1 API
38
39
=head2 Class methods
40
41
=head3 job_type
42
43
Returns a string representing the job type. In this case I<update_holds_queue_for_biblios>.
44
45
=cut
46
47
sub job_type {
48
    return 'update_holds_queue_for_biblios';
49
}
50
51
=head3 process
52
53
Perform the expected action.
54
55
=cut
56
57
sub process {
58
    my ( $self, $args ) = @_;
59
60
    my $schema = Koha::Database->new->schema;
61
62
    my $job_progress = 0;
63
64
    $self->set(
65
        {
66
            started_on => \'NOW()',
67
            progress   => $job_progress,
68
            status     => 'started',
69
        }
70
    )->store;
71
72
    my @biblio_ids = @{ $args->{biblio_id} };
73
74
    my $report = {
75
        total_biblios => scalar @biblio_ids,
76
        total_success => 0,
77
    };
78
79
    my $use_transport_cost_matrix = C4::Context->preference("UseTransportCostMatrix");
80
    my $transport_cost_matrix = $use_transport_cost_matrix ? TransportCostMatrix() : undef;
81
    my $branches_to_use = load_branches_to_pull_from($use_transport_cost_matrix);
82
83
    my @messages;
84
85
    foreach my $biblio_id (@biblio_ids) {
86
        try {
87
88
            $schema->storage->txn_begin;
89
90
            my $result = update_queue_for_biblio(
91
                {
92
                    biblio_id             => $biblio_id,
93
                    branches_to_use       => $branches_to_use,
94
                    delete                => 1,
95
                    transport_cost_matrix => $transport_cost_matrix
96
                }
97
            );
98
            push @messages,
99
              {
100
                type           => 'success',
101
                code           => 'holds_queue_updated',
102
                biblio_id      => $biblio_id,
103
                availabe_items => $result->{available_items},
104
                mapped_items   => $result->{mapped_items},
105
                requests       => $result->{requests},
106
              };
107
            $report->{total_success}++;
108
109
            $schema->storage->txn_commit;
110
        }
111
        catch {
112
            push @messages, {
113
                type      => 'error',
114
                code      => 'holds_queue_update_error',
115
                biblio_id => $biblio_id,
116
                error     => "$_",
117
            };
118
119
            $schema->storage->txn_rollback;
120
        };
121
122
        $self->progress( $job_progress++ )->store;
123
    }
124
125
    my $job_data = decode_json $self->data;
126
    $job_data->{messages} = \@messages;
127
    $job_data->{report}   = $report;
128
129
    $self->set(
130
        {
131
            ended_on => \'NOW()',
132
            data     => encode_json $job_data,
133
        }
134
    );
135
    $self->status('finished')
136
      unless $self->status ne 'cancelled';
137
138
    $self->store;
139
}
140
141
=head3 enqueue
142
143
Enqueue the new job
144
145
=cut
146
147
sub enqueue {
148
    my ( $self, $args ) = @_;
149
150
    Koha::Exceptions::MissingParameter->throw(
151
        "Missing biblio_ids parameter is mandatory")
152
      unless exists $args->{biblio_ids};
153
154
    my @biblio_ids = @{ $args->{biblio_ids} };
155
156
    $self->SUPER::enqueue(
157
        {
158
            job_size => scalar @biblio_ids,
159
            job_args => { biblio_ids => \@biblio_ids }
160
        }
161
    );
162
}
163
164
=head3 additional_report
165
166
Pass the biblio's title and patron's name
167
168
=cut
169
170
sub additional_report {
171
    my ( $self, $args ) = @_;
172
173
    my $messages = $self->messages;
174
    for my $m (@$messages) {
175
        $m->{biblio} = Koha::Biblios->find( $m->{biblio_id} );
176
    }
177
    return { report_messages => $messages };
178
}
179
180
1;

Return to bug 29346