|
Lines 414-457
If log_action is true or undefined, the action will be logged.
Link Here
|
| 414 |
sub ModItem { |
414 |
sub ModItem { |
| 415 |
my ( $item, $biblionumber, $itemnumber, $additional_params ) = @_; |
415 |
my ( $item, $biblionumber, $itemnumber, $additional_params ) = @_; |
| 416 |
my $log_action = $additional_params->{log_action} // 1; |
416 |
my $log_action = $additional_params->{log_action} // 1; |
| 417 |
my $unlinked_item_subfields = $additional_params->{unlinked_item_subfields}; |
|
|
| 418 |
|
| 419 |
return unless %$item; |
| 420 |
$item->{'itemnumber'} = $itemnumber or return; |
| 421 |
|
| 422 |
# if $biblionumber is undefined, get it from the current item |
| 423 |
unless (defined $biblionumber) { |
| 424 |
$biblionumber = _get_single_item_column('biblionumber', $itemnumber); |
| 425 |
} |
| 426 |
|
| 427 |
if ($unlinked_item_subfields) { |
| 428 |
$item->{'more_subfields_xml'} = _get_unlinked_subfields_xml($unlinked_item_subfields); |
| 429 |
}; |
| 430 |
|
| 431 |
my @fields = qw( itemlost withdrawn damaged ); |
| 432 |
|
| 433 |
# Only retrieve the item if we need to set an "on" date field |
| 434 |
if ( $item->{itemlost} || $item->{withdrawn} || $item->{damaged} ) { |
| 435 |
my $pre_mod_item = Koha::Items->find( $item->{'itemnumber'} ); |
| 436 |
for my $field (@fields) { |
| 437 |
if ( defined( $item->{$field} ) |
| 438 |
and not $pre_mod_item->$field |
| 439 |
and $item->{$field} ) |
| 440 |
{ |
| 441 |
$item->{ $field . '_on' } = |
| 442 |
DateTime::Format::MySQL->format_datetime( dt_from_string() ); |
| 443 |
} |
| 444 |
} |
| 445 |
} |
| 446 |
|
| 447 |
# If the field is defined but empty, we are removing and, |
| 448 |
# and thus need to clear out the 'on' field as well |
| 449 |
for my $field (@fields) { |
| 450 |
if ( defined( $item->{$field} ) && !$item->{$field} ) { |
| 451 |
$item->{ $field . '_on' } = undef; |
| 452 |
} |
| 453 |
} |
| 454 |
|
| 455 |
|
417 |
|
| 456 |
_set_derived_columns_for_mod($item); |
418 |
_set_derived_columns_for_mod($item); |
| 457 |
_do_column_fixes_for_mod($item); |
419 |
_do_column_fixes_for_mod($item); |
|
Lines 1305-1357
sub _set_derived_columns_for_add {
Link Here
|
| 1305 |
} |
1267 |
} |
| 1306 |
} |
1268 |
} |
| 1307 |
|
1269 |
|
| 1308 |
=head2 _set_derived_columns_for_mod |
|
|
| 1309 |
|
| 1310 |
_set_derived_column_for_mod($item); |
| 1311 |
|
| 1312 |
Given an item hash representing a new item to be modified. |
| 1313 |
calculate any derived columns. Currently the only |
| 1314 |
such column is C<items.cn_sort>. |
| 1315 |
|
| 1316 |
This routine differs from C<_set_derived_columns_for_add> |
| 1317 |
in that it needs to handle partial item records. In other |
| 1318 |
words, the caller of C<ModItem> may have supplied only one |
| 1319 |
or two columns to be changed, so this function needs to |
| 1320 |
determine whether any of the columns to be changed affect |
| 1321 |
any of the derived columns. Also, if a derived column |
| 1322 |
depends on more than one column, but the caller is not |
| 1323 |
changing all of then, this routine retrieves the unchanged |
| 1324 |
values from the database in order to ensure a correct |
| 1325 |
calculation. |
| 1326 |
|
| 1327 |
=cut |
| 1328 |
|
| 1329 |
sub _set_derived_columns_for_mod { |
| 1330 |
my $item = shift; |
| 1331 |
|
| 1332 |
foreach my $column (keys %derived_columns) { |
| 1333 |
my $builder = $derived_columns{$column}->{'BUILDER'}; |
| 1334 |
my $source_values = {}; |
| 1335 |
my %missing_sources = (); |
| 1336 |
my $must_recalc = 0; |
| 1337 |
foreach my $source_column (keys %{ $derived_columns{$column} }) { |
| 1338 |
next if $source_column eq 'BUILDER'; |
| 1339 |
if (exists $item->{$source_column}) { |
| 1340 |
$must_recalc = 1; |
| 1341 |
$source_values->{$source_column} = $item->{$source_column}; |
| 1342 |
} else { |
| 1343 |
$missing_sources{$source_column} = 1; |
| 1344 |
} |
| 1345 |
} |
| 1346 |
if ($must_recalc) { |
| 1347 |
foreach my $source_column (keys %missing_sources) { |
| 1348 |
$source_values->{$source_column} = _get_single_item_column($source_column, $item->{'itemnumber'}); |
| 1349 |
} |
| 1350 |
$builder->($item, $source_values); |
| 1351 |
} |
| 1352 |
} |
| 1353 |
} |
| 1354 |
|
| 1355 |
=head2 _do_column_fixes_for_mod |
1270 |
=head2 _do_column_fixes_for_mod |
| 1356 |
|
1271 |
|
| 1357 |
_do_column_fixes_for_mod($item); |
1272 |
_do_column_fixes_for_mod($item); |
| 1358 |
- |
|
|