|
Lines 19-25
use Modern::Perl;
Link Here
|
| 19 |
|
19 |
|
| 20 |
use Mojo::Base 'Mojolicious::Controller'; |
20 |
use Mojo::Base 'Mojolicious::Controller'; |
| 21 |
|
21 |
|
| 22 |
use Try::Tiny qw( catch try ); |
22 |
use Scalar::Util qw( blessed ); |
|
|
23 |
use Try::Tiny qw( catch try ); |
| 24 |
|
| 25 |
use Koha::Exceptions::Object; |
| 23 |
|
26 |
|
| 24 |
=head1 API |
27 |
=head1 API |
| 25 |
|
28 |
|
|
Lines 39-112
sub populate_empty_callnumbers {
Link Here
|
| 39 |
return $c->render_resource_not_found("Bibliographic record") |
42 |
return $c->render_resource_not_found("Bibliographic record") |
| 40 |
unless $biblio; |
43 |
unless $biblio; |
| 41 |
|
44 |
|
| 42 |
my $items = $biblio->items->search( |
45 |
my $filter = { |
| 43 |
{ |
46 |
-or => [ |
| 44 |
-or => [ |
47 |
itemcallnumber => undef, |
| 45 |
itemcallnumber => undef, |
48 |
itemcallnumber => q{}, |
| 46 |
itemcallnumber => q{}, |
49 |
] |
| 47 |
] |
50 |
}; |
| 48 |
} |
|
|
| 49 |
); |
| 50 |
|
51 |
|
| 51 |
$items = $items->search( { itemnumber => $c->param('item_id') } ) |
52 |
$filter->{itemnumber} = $c->param('item_id') |
| 52 |
if $c->param('item_id'); |
53 |
if $c->param('item_id'); |
| 53 |
|
54 |
|
| 54 |
return try { |
55 |
return try { |
| 55 |
|
56 |
|
| 56 |
my $cn_fields = C4::Context->preference('itemcallnumber'); |
57 |
$biblio->populate_item_callnumbers($filter); |
| 57 |
return $c->render( |
|
|
| 58 |
status => 409, |
| 59 |
openapi => { |
| 60 |
error => "Callnumber fields not found", |
| 61 |
error_code => 'missing_configuration', |
| 62 |
} |
| 63 |
) unless $cn_fields; |
| 64 |
|
| 65 |
my $record = $biblio->record; |
| 66 |
my $callnumber; |
| 67 |
|
58 |
|
| 68 |
foreach my $callnumber_marc_field ( split( /,/, $cn_fields ) ) { |
59 |
my ($message) = |
| 69 |
my $callnumber_tag = substr( $callnumber_marc_field, 0, 3 ); |
60 |
grep { $_->message eq 'populate_item_callnumbers' } @{ $biblio->object_messages }; |
| 70 |
my $callnumber_subfields = substr( $callnumber_marc_field, 3 ); |
|
|
| 71 |
|
61 |
|
| 72 |
next unless $callnumber_tag && $callnumber_subfields; |
62 |
Koha::Exceptions::Object::MissingMessage->throw( type => 'populate_item_callnumbers' ) |
| 73 |
|
63 |
unless $message; |
| 74 |
my $field = $record->field($callnumber_tag); |
|
|
| 75 |
|
| 76 |
next unless $field; |
| 77 |
|
| 78 |
$callnumber = $field->as_string( $callnumber_subfields, '' ); |
| 79 |
last if $callnumber; |
| 80 |
} |
| 81 |
|
| 82 |
return $c->render( |
| 83 |
status => 409, |
| 84 |
openapi => { |
| 85 |
error => "Callnumber empty in bibliographic record", |
| 86 |
error_code => 'callnumber_empty', |
| 87 |
} |
| 88 |
) unless $callnumber; |
| 89 |
|
| 90 |
return $c->render( |
| 91 |
status => 200, |
| 92 |
openapi => { |
| 93 |
updated_items_count => 0, |
| 94 |
callnumber => $callnumber |
| 95 |
}, |
| 96 |
) unless $items->count; |
| 97 |
|
| 98 |
my ($res) = $items->batch_update( { new_values => { itemcallnumber => $callnumber } } ); |
| 99 |
my @modified_itemnumbers = @{ $res->{modified_itemnumbers} }; |
| 100 |
|
64 |
|
| 101 |
return $c->render( |
65 |
return $c->render( |
| 102 |
status => 200, |
66 |
status => 200, |
| 103 |
openapi => { |
67 |
openapi => $message->payload, |
| 104 |
updated_items_count => scalar @modified_itemnumbers, |
|
|
| 105 |
callnumber => $callnumber, |
| 106 |
modified_item_ids => \@modified_itemnumbers, |
| 107 |
}, |
| 108 |
); |
68 |
); |
|
|
69 |
|
| 109 |
} catch { |
70 |
} catch { |
|
|
71 |
if ( blessed $_ ) { |
| 72 |
if ( ref($_) eq 'Koha::Exceptions::SysPref::NotSet' ) { |
| 73 |
return $c->render( |
| 74 |
status => 409, |
| 75 |
openapi => { |
| 76 |
error => "Callnumber fields not found", |
| 77 |
error_code => 'missing_configuration', |
| 78 |
} |
| 79 |
); |
| 80 |
} elsif ( ref($_) eq 'Koha::Exceptions::Biblio::MissingField' ) { |
| 81 |
return $c->render( |
| 82 |
status => 409, |
| 83 |
openapi => { |
| 84 |
error => "Callnumber empty in bibliographic record", |
| 85 |
error_code => 'callnumber_empty', |
| 86 |
} |
| 87 |
); |
| 88 |
} |
| 89 |
} |
| 90 |
|
| 110 |
$c->unhandled_exception($_); |
91 |
$c->unhandled_exception($_); |
| 111 |
}; |
92 |
}; |
| 112 |
} |
93 |
} |
| 113 |
- |
|
|