Bug 21975: Avoid unnecessary substitutions in automatic item modification by age
authorFridolin Somers <fridolin.somers@biblibre.com>
Fri, 7 Dec 2018 15:05:52 +0000 (16:05 +0100)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Thu, 25 Apr 2019 14:18:23 +0000 (15:18 +0100)
Automatic item modification by age cronjob is based on rules with conditions and substitutions.
When substitution value is equal to actual item value, the code should not call C4::Items::ModItem. It adds unnecessary action log and entry in zebraqueue.
With a rule than can impact all catalogue you can explode your database with action logs.

Test plan :
1) Run prove t/db_dependent/Items/AutomaticItemModificationByAge.t
2) Define a item modification by age with no condition
3) Run several times misc/cronjobs/automatic_item_modification_by_age.pl
4) Check it creates only one entry in action_logs and zebraqueue

Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>

Signed-off-by: Nick Clemens <nick@bywatersolutions.com>
(cherry picked from commit 3a3ffbc54b8dec8ee63332417fe2732ee93f3034)
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

C4/Items.pm

index 7aabf58..efbcc88 100644 (file)
@@ -2700,6 +2700,7 @@ sub ToggleNewStatus {
             my $item = C4::Items::GetItem( $itemnumber );
             for my $substitution ( @$substitutions ) {
                 next unless $substitution->{field};
+                next if ( $item->{ $substitution->{item_field} } eq $substitution->{value} );
                 C4::Items::ModItem( { $substitution->{item_field} => $substitution->{value} }, $biblionumber, $itemnumber )
                     unless $report_only;
                 push @{ $report->{$itemnumber} }, $substitution;