Bugzilla – Attachment 161489 Details for
Bug 32029
Automatic item modifications by age missing biblio table
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 32029: Automatic item modifications by age add biblio table
Bug-32029-Automatic-item-modifications-by-age-add-.patch (text/plain), 8.83 KB, created by
Marcel de Rooy
on 2024-01-26 08:15:08 UTC
(
hide
)
Description:
Bug 32029: Automatic item modifications by age add biblio table
Filename:
MIME Type:
Creator:
Marcel de Rooy
Created:
2024-01-26 08:15:08 UTC
Size:
8.83 KB
patch
obsolete
>From 92cc55e3a288c2937cd948a939407fdaafed7641 Mon Sep 17 00:00:00 2001 >From: Fridolin Somers <fridolin.somers@biblibre.com> >Date: Thu, 27 Oct 2022 21:59:26 -1000 >Subject: [PATCH] Bug 32029: Automatic item modifications by age add biblio > table >Content-Type: text/plain; charset=utf-8 > >In automatic item modifications by age missing, >conditions can be on columns of tables items or biblioitems. >Table biblio is missing. > >Test plan : >1) Create an automatic item modifications by age with a condition on a column of biblio table >2) Create a record and item matching the rule >3) Run misc/cronjobs/automatic_item_modification_by_age.pl -c -v >=> Check only matching items are impacted > >Signed-off-by: Philip Orr <philip.orr@lmscloud.de> > >Bug 32029: (follow-up) unit test > >Signed-off-by: matthias le gac <matthias.le-gac@inlibro.com> > >Bug 32029: (follow-up) tidy > >Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> >--- > C4/Items.pm | 43 ++++++++++--------- > .../Items/AutomaticItemModificationByAge.t | 33 ++++++++++++-- > tools/automatic_item_modification_by_age.pl | 19 +++++--- > 3 files changed, 64 insertions(+), 31 deletions(-) > >diff --git a/C4/Items.pm b/C4/Items.pm >index c640b63baa..d2fa257ef5 100644 >--- a/C4/Items.pm >+++ b/C4/Items.pm >@@ -1560,23 +1560,25 @@ sub PrepareItemrecordDisplay { > } > > sub ToggleNewStatus { >- my ( $params ) = @_; >- my @rules = @{ $params->{rules} }; >+ my ($params) = @_; >+ my @rules = @{ $params->{rules} }; > my $report_only = $params->{report_only}; > > my $dbh = C4::Context->dbh; > my @errors; >- my @item_columns = map { "items.$_" } Koha::Items->columns; >+ my @item_columns = map { "items.$_" } Koha::Items->columns; > my @biblioitem_columns = map { "biblioitems.$_" } Koha::Biblioitems->columns; >+ my @biblio_columns = map { "biblio.$_" } Koha::Biblios->columns; > my $report; >- for my $rule ( @rules ) { >+ for my $rule (@rules) { > my $age = $rule->{age}; >+ > # Default to using items.dateaccessioned if there's an old item modification rule > # missing an agefield value >- my $agefield = $rule->{agefield} ? $rule->{agefield} : 'items.dateaccessioned'; >- my $conditions = $rule->{conditions}; >+ my $agefield = $rule->{agefield} ? $rule->{agefield} : 'items.dateaccessioned'; >+ my $conditions = $rule->{conditions}; > my $substitutions = $rule->{substitutions}; >- foreach ( @$substitutions ) { >+ foreach (@$substitutions) { > ( $_->{item_field} ) = ( $_->{field} =~ /items\.(.*)/ ); > } > my @params; >@@ -1585,19 +1587,18 @@ sub ToggleNewStatus { > SELECT items.* > FROM items > LEFT JOIN biblioitems ON biblioitems.biblionumber = items.biblionumber >+ LEFT JOIN biblio ON biblio.biblionumber = biblioitems.biblionumber > WHERE 1 > |; >- for my $condition ( @$conditions ) { >+ for my $condition (@$conditions) { > next unless $condition->{field}; >- if ( >- grep { $_ eq $condition->{field} } @item_columns >- or grep { $_ eq $condition->{field} } @biblioitem_columns >- ) { >+ if ( grep { $_ eq $condition->{field} } @item_columns >+ or grep { $_ eq $condition->{field} } @biblioitem_columns >+ or grep { $_ eq $condition->{field} } @biblio_columns ) >+ { > if ( $condition->{value} =~ /\|/ ) { > my @values = split /\|/, $condition->{value}; >- $query .= qq| AND $condition->{field} IN (| >- . join( ',', ('?') x scalar @values ) >- . q|)|; >+ $query .= qq| AND $condition->{field} IN (| . join( ',', ('?') x scalar @values ) . q|)|; > push @params, @values; > } else { > $query .= qq| AND $condition->{field} = ?|; >@@ -1610,16 +1611,18 @@ sub ToggleNewStatus { > push @params, $age; > } > my $sth = $dbh->prepare($query); >- $sth->execute( @params ); >+ $sth->execute(@params); > while ( my $values = $sth->fetchrow_hashref ) { > my $biblionumber = $values->{biblionumber}; >- my $itemnumber = $values->{itemnumber}; >- my $item = Koha::Items->find($itemnumber); >- for my $substitution ( @$substitutions ) { >+ my $itemnumber = $values->{itemnumber}; >+ my $item = Koha::Items->find($itemnumber); >+ for my $substitution (@$substitutions) { > my $field = $substitution->{item_field}; > my $value = $substitution->{value}; > next unless $substitution->{field}; >- next if ( defined $values->{ $substitution->{item_field} } and $values->{ $substitution->{item_field} } eq $substitution->{value} ); >+ next >+ if ( defined $values->{ $substitution->{item_field} } >+ and $values->{ $substitution->{item_field} } eq $substitution->{value} ); > $item->$field($value); > push @{ $report->{$itemnumber} }, $substitution; > } >diff --git a/t/db_dependent/Items/AutomaticItemModificationByAge.t b/t/db_dependent/Items/AutomaticItemModificationByAge.t >index 60507a478a..a1c6f73004 100755 >--- a/t/db_dependent/Items/AutomaticItemModificationByAge.t >+++ b/t/db_dependent/Items/AutomaticItemModificationByAge.t >@@ -1,7 +1,7 @@ > #!/usr/bin/perl > > use Modern::Perl; >-use Test::More tests => 19; >+use Test::More tests => 20; > use MARC::Record; > use MARC::Field; > use DateTime; >@@ -46,9 +46,9 @@ $cache->clear_from_cache("MarcSubfieldStructure-$frameworkcode"); > > my $record = MARC::Record->new(); > $record->append_fields( >- MARC::Field->new('100', ' ', ' ', a => 'Moffat, Steven'), >- MARC::Field->new('245', ' ', ' ', a => 'Silence in the library'), >- MARC::Field->new('942', ' ', ' ', c => 'ITEMTYPE_T'), >+ MARC::Field->new( '100', ' ', ' ', a => 'Moffat, Steven' ), >+ MARC::Field->new( '245', ' ', ' ', a => 'Silence in the library', h => 'Book' ), >+ MARC::Field->new( '942', ' ', ' ', c => 'ITEMTYPE_T' ), > ); > my ($biblionumber, undef) = C4::Biblio::AddBiblio($record, $frameworkcode); > >@@ -330,6 +330,31 @@ C4::Items::ToggleNewStatus( { rules => \@rules } ); > $modified_item = Koha::Items->find( $itemnumber ); > is( $modified_item->new_status, 'agefield_new_value', q|ToggleNewStatus: Age = 2, agefield = 'items.datelastseen' : The new_status value is updated|); > >+# Condition on biblio column >+@rules = ( >+ { >+ # does not exist >+ conditions => [ >+ { >+ field => 'biblio.medium', >+ value => 'Book', >+ }, >+ ], >+ substitutions => [ >+ { >+ field => 'items.new_status', >+ value => 'new_updated_value_biblio', >+ }, >+ ], >+ age => '0', >+ }, >+); >+ >+C4::Items::ToggleNewStatus( { rules => \@rules } ); >+ >+$modified_item = Koha::Items->find( $itemnumber ); >+is( $modified_item->new_status, 'new_updated_value_biblio', q|ToggleNewStatus: conditions on biblio|); >+ > # Run twice > t::lib::Mocks::mock_preference('CataloguingLog', 1); > my $actions_nb = $schema->resultset('ActionLog')->count(); >diff --git a/tools/automatic_item_modification_by_age.pl b/tools/automatic_item_modification_by_age.pl >index a3138091d3..ed3b84611a 100755 >--- a/tools/automatic_item_modification_by_age.pl >+++ b/tools/automatic_item_modification_by_age.pl >@@ -42,6 +42,7 @@ use C4::Koha; > > use Koha::Items; > use Koha::Biblioitems; >+use Koha::Biblios; > > my $cgi = CGI->new; > >@@ -113,16 +114,20 @@ if ( $@ ) { > exit; > } > >-my @item_fields = map { "items.$_" } Koha::Items->columns; >+my @item_fields = map { "items.$_" } Koha::Items->columns; > my @biblioitem_fields = map { "biblioitems.$_" } Koha::Biblioitems->columns; >-my @age_fields = ('items.dateaccessioned', 'items.replacementpricedate', 'items.datelastborrowed', 'items.datelastseen', 'items.damaged_on', 'items.itemlost_on', 'items.withdrawn_on'); >+my @biblio_fields = map { "biblio.$_" } Koha::Biblios->columns; >+my @age_fields = ( >+ 'items.dateaccessioned', 'items.replacementpricedate', 'items.datelastborrowed', 'items.datelastseen', >+ 'items.damaged_on', 'items.itemlost_on', 'items.withdrawn_on' >+); > $template->param( >- op => $op, >- messages => \@messages, >- agefields => [ @age_fields ], >- condition_fields => [ @item_fields, @biblioitem_fields ], >+ op => $op, >+ messages => \@messages, >+ agefields => [@age_fields], >+ condition_fields => [ @item_fields, @biblioitem_fields, @biblio_fields ], > substitution_fields => \@item_fields, >- rules => $rules, >+ rules => $rules, > ); > > output_html_with_http_headers $cgi, $cookie, $template->output; >-- >2.30.2
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 32029
:
142752
|
151073
|
159574
|
159575
|
160977
|
161053
|
161054
|
161055
| 161489