Bug 35044: (QA follow-up): DRY code before set_additional_fields

Signed-off-by: Julian Maurice <julian.maurice@biblibre.com>
Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
This commit is contained in:
Pedro Amorim 2024-07-24 18:14:09 +00:00 committed by Katrin Fischer
parent 27fd0042be
commit c8cc04a397
Signed by: kfischer
GPG key ID: 0EF6E2C03357A834
10 changed files with 108 additions and 117 deletions

View file

@ -91,6 +91,34 @@ sub set_additional_fields {
}
}
=head3 prepare_cgi_additional_field_values
Prepares additional field values from CGI input for use in set_additional_fields
Usage example for aqorders:
my @additional_fields = $order->prepare_cgi_additional_field_values( $input, 'aqorders' );
=cut
sub prepare_cgi_additional_field_values {
my ( $self, $cgi, $tablename ) = @_;
my @additional_fields;
my $table_fields = Koha::AdditionalFields->search( { tablename => $tablename } );
while ( my $field = $table_fields->next ) {
my @field_values = $cgi->multi_param( 'additional_field_' . $field->id );
foreach my $value (@field_values) {
push @additional_fields, {
id => $field->id,
value => $value,
} if $value;
}
}
return @additional_fields;
}
=head3 add_additional_fields
Similar to set_additional_fields, but instead of overwriting existing fields, only adds new ones

View file

@ -386,19 +386,7 @@ if ( $op eq 'cud-order' ) {
my @order_users = split( /:/, $order_users_ids );
ModOrderUsers( $order->ordernumber, @order_users );
# Retrieve and save additional fields values
my @additional_fields;
my $order_fields = Koha::AdditionalFields->search( { tablename => 'aqorders' } );
while ( my $field = $order_fields->next ) {
my @field_values = $input->param( 'additional_field_' . $field->id );
foreach my $value (@field_values){
push @additional_fields,
{
id => $field->id,
value => $value,
} if $value;
};
}
my @additional_fields = $order->prepare_cgi_additional_field_values( $input, 'aqorders' );
$order->set_additional_fields( \@additional_fields );
# now, add items if applicable

View file

@ -162,17 +162,8 @@ if ( $op eq 'add_form' ) {
);
}
my @additional_fields;
my $basket_fields = Koha::AdditionalFields->search({ tablename => 'aqbasket' });
while ( my $field = $basket_fields->next ) {
my @field_values = $input->param( 'additional_field_' . $field->id );
foreach my $value (@field_values) {
push @additional_fields, {
id => $field->id,
value => $value,
} if $value;
}
}
my @additional_fields =
Koha::Acquisition::Baskets->find($basketno)->prepare_cgi_additional_field_values( $input, 'aqbasket' );
Koha::Acquisition::Baskets->find($basketno)->set_additional_fields(\@additional_fields);
print $input->redirect('basket.pl?basketno='.$basketno);

View file

@ -128,17 +128,8 @@ elsif ( $op && $op eq 'cud-mod' ) {
defined($invoice_files) && $invoice_files->MergeFileRecIds(@sources);
}
my @additional_fields;
my $invoice_fields = Koha::AdditionalFields->search({ tablename => 'aqinvoices' });
while ( my $field = $invoice_fields->next ) {
my @field_values = $input->param( 'additional_field_' . $field->id );
foreach my $value (@field_values) {
push @additional_fields, {
id => $field->id,
value => $value,
} if $value;
}
}
my @additional_fields =
Koha::Acquisition::Invoices->find($invoiceid)->prepare_cgi_additional_field_values( $input, 'aqinvoices' );
Koha::Acquisition::Invoices->find($invoiceid)->set_additional_fields(\@additional_fields);
$template->param( modified => 1 );

View file

@ -131,17 +131,8 @@ if ($op and $op eq 'cud-confirm') {
);
if (defined $invoiceid) {
my @additional_fields;
my $invoice_fields = Koha::AdditionalFields->search({ tablename => 'aqinvoices' });
while ( my $field = $invoice_fields->next ) {
my @field_values = $input->param( 'additional_field_' . $field->id );
foreach my $value (@field_values) {
push @additional_fields, {
id => $field->id,
value => $value,
} if $value;
}
}
my @additional_fields =
Koha::Acquisition::Invoices->find($invoiceid)->prepare_cgi_additional_field_values( $input, 'aqinvoices' );
if (@additional_fields) {
my $invoice = Koha::Acquisition::Invoices->find( $invoiceid );
$invoice->set_additional_fields(\@additional_fields);

View file

@ -99,17 +99,7 @@ if ( $op eq 'cud-add' ) {
}
);
my @additional_fields;
my $accountline_fields = Koha::AdditionalFields->search({ tablename => 'accountlines:credit' });
while ( my $field = $accountline_fields->next ) {
my @field_values = $input->param( 'additional_field_' . $field->id );
foreach my $value (@field_values) {
push @additional_fields, {
id => $field->id,
value => $value,
} if $value;
}
}
my @additional_fields = $line->prepare_cgi_additional_field_values( $input, 'accountlines:credit' );
if (@additional_fields) {
$line->set_additional_fields(\@additional_fields);
}

View file

@ -161,17 +161,7 @@ if ( $op eq 'cud-add' ) {
}
);
my @additional_fields;
my $accountline_fields = Koha::AdditionalFields->search({ tablename => 'accountlines:debit' });
while ( my $field = $accountline_fields->next ) {
my @field_values = $input->param( 'additional_field_' . $field->id );
foreach my $value (@field_values) {
push @additional_fields, {
id => $field->id,
value => $value,
} if $value;
}
}
my @additional_fields = $line->prepare_cgi_additional_field_values( $input, 'accountlines:debit' );
if (@additional_fields) {
$line->set_additional_fields(\@additional_fields);
}

View file

@ -170,19 +170,9 @@ if ( $total_paid and $total_paid ne '0.00' ) {
);
$payment_id = $pay_result->{payment_id};
my @additional_fields;
my $accountline_fields = Koha::AdditionalFields->search({ tablename => 'accountlines:credit' });
while ( my $field = $accountline_fields->next ) {
my @field_values = $input->param( 'additional_field_' . $field->id );
foreach my $value (@field_values) {
push @additional_fields, {
id => $field->id,
value => $value,
} if $value;
}
}
my $payment = Koha::Account::Lines->find($payment_id);
my @additional_fields = $payment->prepare_cgi_additional_field_values( $input, 'accountlines:credit' );
if (@additional_fields) {
my $payment = Koha::Account::Lines->find($payment_id);
$payment->set_additional_fields(\@additional_fields);
}
@ -248,19 +238,9 @@ if ( $total_paid and $total_paid ne '0.00' ) {
}
$payment_id = $pay_result->{payment_id};
my @additional_fields;
my $accountline_fields = Koha::AdditionalFields->search({ tablename => 'accountlines:credit' });
while ( my $field = $accountline_fields->next ) {
my @field_values = $input->param( 'additional_field_' . $field->id );
foreach my $value (@field_values) {
push @additional_fields, {
id => $field->id,
value => $value,
} if $value;
}
}
my $payment = Koha::Account::Lines->find($payment_id);
my @additional_fields = $payment->prepare_cgi_additional_field_values( $input, 'accountlines:credit' );
if (@additional_fields) {
my $payment = Koha::Account::Lines->find($payment_id);
$payment->set_additional_fields(\@additional_fields);
}

View file

@ -359,18 +359,8 @@ sub redirect_add_subscription {
$template->param( mana_msg => $result->{msg} );
}
my @additional_fields;
my $biblio = Koha::Biblios->find($biblionumber);
my $subscription_fields = Koha::AdditionalFields->search({ tablename => 'subscription' });
while ( my $field = $subscription_fields->next ) {
my @field_values = $query->param( 'additional_field_' . $field->id );
foreach my $value (@field_values) {
push @additional_fields, {
id => $field->id,
value => $value,
} if $value;
}
}
my @additional_fields = Koha::Subscriptions->find($subscriptionid)
->prepare_cgi_additional_field_values( $query, 'subscription' );
Koha::Subscriptions->find($subscriptionid)->set_additional_fields(\@additional_fields);
print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");
@ -475,18 +465,8 @@ sub redirect_mod_subscription {
$skip_serialseq, $itemtype, $previousitemtype, $mana_id, $ccode, $published_on_template
);
my @additional_fields;
my $biblio = Koha::Biblios->find($biblionumber);
my $subscription_fields = Koha::AdditionalFields->search({ tablename => 'subscription' });
while ( my $field = $subscription_fields->next ) {
my @field_values = $query->param( 'additional_field_' . $field->id );
foreach my $value (@field_values) {
push @additional_fields, {
id => $field->id,
value => $value,
} if $value;
}
}
my @additional_fields =
Koha::Subscriptions->find($subscriptionid)->prepare_cgi_additional_field_values( $query, 'subscription' );
Koha::Subscriptions->find($subscriptionid)->set_additional_fields(\@additional_fields);
print $query->redirect("/cgi-bin/koha/serials/subscription-detail.pl?subscriptionid=$subscriptionid");

View file

@ -1,13 +1,14 @@
#!/usr/bin/perl
use Modern::Perl;
use Test::More tests => 4;
use Test::More tests => 5;
use t::lib::TestBuilder;
use String::Random qw(random_string);
use Koha::Database;
use Koha::Subscription;
use Koha::AdditionalField;
use C4::Context;
use CGI;
my $builder = t::lib::TestBuilder->new;
my $schema = Koha::Database->schema;
@ -218,3 +219,64 @@ subtest 'add_additional_fields' => sub {
$schema->txn_rollback;
};
subtest 'prepare_cgi_additional_field_values' => sub {
plan tests => 1;
$schema->txn_begin;
my $field = Koha::AdditionalField->new(
{
tablename => 'subscription',
name => random_string( 'c' x 100 )
}
);
$field->store()->discard_changes();
my $field2 = Koha::AdditionalField->new(
{
tablename => 'subscription',
name => random_string( 'c' x 100 )
}
);
$field2->store()->discard_changes();
my $q = CGI->new;
$q->param(
-name => 'additional_field_' . $field->id,
-value => [qw/value1 value2/],
);
$q->param(
-name => 'additional_field_' . $field2->id,
-value => '0',
);
$q->param(
-name => 'irrelevant_param',
-value => 'foo',
);
my @additional_fields =
Koha::Object::Mixin::AdditionalFields->prepare_cgi_additional_field_values( $q, 'subscription' );
is_deeply(
\@additional_fields,
[
{
'value' => 'value1',
'id' => $field->id
},
{
'value' => 'value2',
'id' => $field->id
},
{
'value' => '0',
'id' => $field2->id
}
],
'Return of prepare_cgi_additional_field_values should be correct'
);
$schema->txn_rollback;
};