|
Lines 33-38
use C4::Acquisition qw( ModOrder GetOrdersByBiblionumber );
Link Here
|
| 33 |
use Koha::Database; |
33 |
use Koha::Database; |
| 34 |
use Koha::DateUtils qw( dt_from_string ); |
34 |
use Koha::DateUtils qw( dt_from_string ); |
| 35 |
use Koha::Exception; |
35 |
use Koha::Exception; |
|
|
36 |
use Koha::Exceptions::Biblio; |
| 37 |
use Koha::Exceptions::SysPref; |
| 36 |
|
38 |
|
| 37 |
use base qw(Koha::Object); |
39 |
use base qw(Koha::Object); |
| 38 |
|
40 |
|
|
Lines 2230-2238
sub merge_with {
Link Here
|
| 2230 |
return \%results; |
2232 |
return \%results; |
| 2231 |
} |
2233 |
} |
| 2232 |
|
2234 |
|
|
|
2235 |
=head3 populate_item_callnumbers |
| 2236 |
|
| 2237 |
$biblio->populate_item_callnumbers( [ $filter ] ); |
| 2238 |
|
| 2239 |
Populates the linked items callnumbers following the I<itemcallnumber> |
| 2240 |
system preference. Optionally, this action can be restricted by appliying |
| 2241 |
a I<$filter> on the items iterator. |
| 2242 |
|
| 2243 |
=cut |
| 2244 |
|
| 2245 |
sub populate_item_callnumbers { |
| 2246 |
my ( $self, $filter ) = @_; |
| 2247 |
|
| 2248 |
my $callnumber = $self->get_first_callnumber(); |
| 2249 |
my $items = $self->items->search($filter); |
| 2250 |
|
| 2251 |
if ( $items->count ) { |
| 2252 |
my ($res) = $items->batch_update( { new_values => { itemcallnumber => $callnumber } } ); |
| 2253 |
my @modified_itemnumbers = @{ $res->{modified_itemnumbers} }; |
| 2254 |
$self->add_message( |
| 2255 |
{ |
| 2256 |
message => q{populate_item_callnumbers}, |
| 2257 |
type => q{info}, |
| 2258 |
payload => { |
| 2259 |
updated_items_count => scalar @modified_itemnumbers, |
| 2260 |
callnumber => $callnumber, |
| 2261 |
modified_item_ids => \@modified_itemnumbers, |
| 2262 |
} |
| 2263 |
} |
| 2264 |
); |
| 2265 |
} else { |
| 2266 |
$self->add_message( |
| 2267 |
{ |
| 2268 |
message => q{populate_item_callnumbers}, |
| 2269 |
type => q{info}, |
| 2270 |
payload => { |
| 2271 |
updated_items_count => 0, |
| 2272 |
callnumber => $callnumber, |
| 2273 |
} |
| 2274 |
} |
| 2275 |
); |
| 2276 |
} |
| 2277 |
|
| 2278 |
return $self; |
| 2279 |
} |
| 2280 |
|
| 2281 |
=head3 get_first_callnumber |
| 2282 |
|
| 2283 |
my $callnumber = $biblio->get_first_callnumber(); |
| 2284 |
|
| 2285 |
Retrieves the first callnumber it finds using the I<itemcallnumber> system |
| 2286 |
preference. Returns undef if it doesn't find any. |
| 2287 |
|
| 2288 |
Throws a I<Koha::Exceptions::SysPrefs::NotSet> exception if the relevant |
| 2289 |
system preference is not set. |
| 2290 |
|
| 2291 |
Throws a I<Koha::Exceptions::Biblio::MissingField> exception if the record |
| 2292 |
doesn't contain a callnumber. |
| 2293 |
|
| 2294 |
=cut |
| 2295 |
|
| 2296 |
sub get_first_callnumber { |
| 2297 |
my ($self) = @_; |
| 2298 |
|
| 2299 |
my $cn_fields = C4::Context->preference(q{itemcallnumber}); |
| 2300 |
Koha::Exceptions::SysPref::NotSet->throw( syspref => q{itemcallnumber} ) |
| 2301 |
unless $cn_fields; |
| 2302 |
|
| 2303 |
my $record = $self->record; |
| 2304 |
my $callnumber; |
| 2305 |
|
| 2306 |
foreach my $callnumber_marc_field ( split( /,/, $cn_fields ) ) { |
| 2307 |
|
| 2308 |
my $callnumber_tag = substr( $callnumber_marc_field, 0, 3 ); |
| 2309 |
my $callnumber_subfields = substr( $callnumber_marc_field, 3 ); |
| 2310 |
|
| 2311 |
next unless $callnumber_tag && $callnumber_subfields; |
| 2312 |
|
| 2313 |
my $field = $record->field($callnumber_tag); |
| 2314 |
|
| 2315 |
next unless $field; |
| 2316 |
|
| 2317 |
$callnumber = $field->as_string( $callnumber_subfields, '' ); |
| 2318 |
last if $callnumber; |
| 2319 |
} |
| 2320 |
|
| 2321 |
Koha::Exceptions::Biblio::MissingField->throw( field => q{callnumber} ) |
| 2322 |
unless defined $callnumber; |
| 2323 |
|
| 2324 |
return $callnumber; |
| 2325 |
} |
| 2326 |
|
| 2233 |
=head2 Internal methods |
2327 |
=head2 Internal methods |
| 2234 |
|
2328 |
|
| 2235 |
=head3 type |
2329 |
=head3 _type |
| 2236 |
|
2330 |
|
| 2237 |
=cut |
2331 |
=cut |
| 2238 |
|
2332 |
|