From f64cf1b8de3f28a3b6d4144579628bd7b08acb96 Mon Sep 17 00:00:00 2001
From: Baptiste <baptiste.wojtkowski@biblibre.com>
Date: Mon, 25 Nov 2024 16:41:14 +0100
Subject: [PATCH] Bug 34989: Subscription cannot be added if a control field is
 set up in Additional Fields parameter

Test plan for main and MARC21:
1 - Apply bug 38528
2 - Create a subscription
3 - Go to administration -> aditional fields add a field for any CONTROL
  field existing in your subscription for example 005
4 - Also create an additional field for 245$a (check non regression)
5 - On the subscription page: Edit -> Edit subscription -> Next
  -> Save subscription -> You get: "Internal server error"
6 - Apply patch
7 - Repeat 4, you have no error anymore. On the subscription page you
  can see both additional fields.
---
 Koha/Object/Mixin/AdditionalFields.pm | 14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/Koha/Object/Mixin/AdditionalFields.pm b/Koha/Object/Mixin/AdditionalFields.pm
index 4c2e25afe20..6bf50314d32 100644
--- a/Koha/Object/Mixin/AdditionalFields.pm
+++ b/Koha/Object/Mixin/AdditionalFields.pm
@@ -67,13 +67,21 @@ sub set_additional_fields {
             my ( $tag, $subfield ) = split /\$/, $field->marcfield;
             my $marc_field = $record->field($tag);
             if ( $field->marcfield_mode eq 'get' ) {
-                $value = $marc_field ? $marc_field->subfield($subfield) : '';
+                if ($subfield) {
+                    $value = $marc_field ? $marc_field->subfield($subfield) : '';
+                } else {
+                    $value = $marc_field ? $marc_field->data() : '';
+                }
             } elsif ( $field->marcfield_mode eq 'set' ) {
-                if ($marc_field) {
+                if ( $marc_field and $subfield ) {
                     $marc_field->update( $subfield => $value );
-                } else {
+                } elsif ($marc_field) {
+                    $marc_field->update($value);
+                } elsif ($subfield) {
                     $marc_field = MARC::Field->new( $tag, '', '', $subfield => $value );
                     $record->append_fields($marc_field);
+                } else {
+                    $marc_field = MARC::Field->new( $tag, '', '', $value );
                 }
                 $record_updated = 1;
             }
-- 
2.30.2