[Koha-patches] [PATCH 07/17] MT4004 : additem.pl Some Status were not defaulted to the correct value Status 0 was lost because test was done on value and not on the fact that a value was defined or not. when value is 0 then it was not used as default value for

paul.poulain at biblibre.com paul.poulain at biblibre.com
Thu Dec 16 15:11:13 CET 2010


From: Paul Poulain <paul.poulain at biblibre.com>

bug #4263 fix the edition of items with repeatable subfields
    The subfield management in item level is broken, fields are concatenated in one field, and if the librarian edit it, the values are not
    This big patch fix three things:
     1) saving fields that are stocked in SQL(using koha2marc mapping) are now well cut and separated in _REAL_ subfields
     2) loading records with repeatable subfields are now well returned
     3) Editing items with repeatable fields works well
---
 cataloguing/additem.pl                             |  471 +++++++++++---------
 .../prog/en/modules/cataloguing/additem.tmpl       |    1 +
 2 files changed, 255 insertions(+), 217 deletions(-)

diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl
index 6dc190a..8d0eb12 100755
--- a/cataloguing/additem.pl
+++ b/cataloguing/additem.pl
@@ -30,6 +30,7 @@ use C4::Koha; # XXX subfield_is_koha_internal_p
 use C4::Branch; # XXX subfield_is_koha_internal_p
 use C4::ClassSource;
 use C4::Dates;
+use List::MoreUtils qw/any/;
 
 use MARC::File::XML;
 
@@ -91,7 +92,172 @@ sub _increment_barcode {
 }
 
 
-my $input = new CGI;
+sub generate_subfield_form {
+        my ($tag, $subfieldtag, $value, $tagslib,$subfieldlib, $branches, $today_iso, $biblionumber, $temp, $loop_data, $i) = @_;
+        
+        my %subfield_data;
+        my $dbh = C4::Context->dbh;        
+        my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY lib");
+        
+        my $index_subfield = int(rand(1000000)); 
+        if ($subfieldtag eq '@'){
+            $subfield_data{id} = "tag_".$tag."_subfield_00_".$index_subfield;
+        } else {
+            $subfield_data{id} = "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield;
+        }
+        
+        $subfield_data{tag}        = $tag;
+        $subfield_data{subfield}   = $subfieldtag;
+        $subfield_data{random}     = int(rand(1000000));    # why do we need 2 different randoms?
+        $subfield_data{marc_lib}   ="<span id=\"error$i\" title=\"".$subfieldlib->{lib}."\">".$subfieldlib->{lib}."</span>";
+        $subfield_data{mandatory}  = $subfieldlib->{mandatory};
+        $subfield_data{repeatable} = $subfieldlib->{repeatable};
+        
+        $value =~ s/"/&quot;/g;
+        if ( ! defined( $value ) || $value eq '')  {
+            $value = $subfieldlib->{defaultvalue};
+            # get today date & replace YYYY, MM, DD if provided in the default value
+            my ( $year, $month, $day ) = split ',', $today_iso;     # FIXME: iso dates don't have commas!
+            $value =~ s/YYYY/$year/g;
+            $value =~ s/MM/$month/g;
+            $value =~ s/DD/$day/g;
+        }
+        
+        $subfield_data{visibility} = "display:none;" if (($subfieldlib->{hidden} > 4) || ($subfieldlib->{hidden} < -4));
+        
+        my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
+        if (!$value && $subfieldlib->{kohafield} eq 'items.itemcallnumber' && $pref_itemcallnumber) {
+            my $CNtag       = substr($pref_itemcallnumber, 0, 3);
+            my $CNsubfield  = substr($pref_itemcallnumber, 3, 1);
+            my $CNsubfield2 = substr($pref_itemcallnumber, 4, 1);
+            my $temp2 = $temp->field($CNtag);
+            if ($temp2) {
+                $value = ($temp2->subfield($CNsubfield)).' '.($temp2->subfield($CNsubfield2));
+                #remove any trailing space incase one subfield is used
+                $value =~ s/^\s+|\s+$//g;
+            }
+        }
+        
+        my $attributes_no_value = qq(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" );
+        my $attributes          = qq($attributes_no_value value="$value" );
+        
+        if ( $subfieldlib->{authorised_value} ) {
+            my @authorised_values;
+            my %authorised_lib;
+            # builds list, depending on authorised value...
+            if ( $subfieldlib->{authorised_value} eq "branches" ) {
+                foreach my $thisbranch (@$branches) {
+                    push @authorised_values, $thisbranch->{value};
+                    $authorised_lib{$thisbranch->{value}} = $thisbranch->{branchname};
+                    $value = $thisbranch->{value} if $thisbranch->{selected};
+                }
+            }
+            elsif ( $subfieldlib->{authorised_value} eq "itemtypes" ) {
+                  push @authorised_values, "" unless ( $subfieldlib->{mandatory} );
+                  my $sth = $dbh->prepare("SELECT itemtype,description FROM itemtypes ORDER BY description");
+                  $sth->execute;
+                  while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) {
+                      push @authorised_values, $itemtype;
+                      $authorised_lib{$itemtype} = $description;
+                  }
+        
+                  unless ( $value ) {
+                      my $itype_sth = $dbh->prepare("SELECT itemtype FROM biblioitems WHERE biblionumber = ?");
+                      $itype_sth->execute( $biblionumber );
+                      ( $value ) = $itype_sth->fetchrow_array;
+                  }
+          
+                  #---- class_sources
+            }
+            elsif ( $subfieldlib->{authorised_value} eq "cn_source" ) {
+                  push @authorised_values, "" unless ( $subfieldlib->{mandatory} );
+                    
+                  my $class_sources = GetClassSources();
+                  my $default_source = C4::Context->preference("DefaultClassificationSource");
+                  
+                  foreach my $class_source (sort keys %$class_sources) {
+                      next unless $class_sources->{$class_source}->{'used'} or
+                                  ($value and $class_source eq $value)      or
+                                  ($class_source eq $default_source);
+                      push @authorised_values, $class_source;
+                      $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'};
+                  }
+        		  $value = $default_source unless ($value);
+        
+                  #---- "true" authorised value
+            }
+            else {
+                  push @authorised_values, "" unless ( $subfieldlib->{mandatory} );
+                  $authorised_values_sth->execute( $subfieldlib->{authorised_value} );
+                  while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) {
+                      push @authorised_values, $value;
+                      $authorised_lib{$value} = $lib;
+                  }
+            }
+
+            $subfield_data{marc_value} =CGI::scrolling_list(      # FIXME: factor out scrolling_list
+                  -name     => "field_value",
+                  -values   => \@authorised_values,
+                  -default  => $value,
+                  -labels   => \%authorised_lib,
+                  -override => 1,
+                  -size     => 1,
+                  -multiple => 0,
+                  -tabindex => 1,
+                  -id       => "tag_".$tag."_subfield_".$subfieldtag."_".$index_subfield,
+                  -class    => "input_marceditor",
+            );
+
+            # it's a thesaurus / authority field
+        }
+        elsif ( $subfieldlib->{authtypecode} ) {
+                $subfield_data{marc_value} = "<input type=\"text\" $attributes />
+                    <a href=\"#\" class=\"buttonDot\"
+                        onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$subfieldlib->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
+            ";
+            # it's a plugin field
+        }
+        elsif ( $subfieldlib->{value_builder} ) {
+                # opening plugin
+                my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $subfieldlib->{'value_builder'};
+                if (do $plugin) {
+                    my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, $loop_data );
+                    my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, $loop_data );
+                    $subfield_data{marc_value} = qq[<input $attributes
+                        onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
+                         onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
+                        <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
+                        $javascript];
+                } else {
+                    warn "Plugin Failed: $plugin";
+                    $subfield_data{marc_value} = "<input $attributes />"; # supply default input form
+                }
+        }
+        elsif ( $tag eq '' ) {       # it's an hidden field
+            $subfield_data{marc_value} = qq(<input type="hidden" $attributes />);
+        }
+        elsif ( $subfieldlib->{'hidden'} ) {   # FIXME: shouldn't input type be "hidden" ?
+            $subfield_data{marc_value} = qq(<input type="text" $attributes />);
+        }
+        elsif ( length($value) > 100
+                    or (C4::Context->preference("marcflavour") eq "UNIMARC" and
+                          300 <= $tag && $tag < 400 && $subfieldtag eq 'a' )
+                    or (C4::Context->preference("marcflavour") eq "MARC21"  and
+                          500 <= $tag && $tag < 600                     )
+                  ) {
+            # oversize field (textarea)
+            $subfield_data{marc_value} = "<textarea $attributes_no_value>$value</textarea>\n";
+        } else {
+           # it's a standard field
+           $subfield_data{marc_value} = "<input $attributes />";
+        }
+        
+        return \%subfield_data;
+}
+
+
+my $input        = new CGI;
+my $dbh          = C4::Context->dbh;
 my $error        = $input->param('error');
 my $biblionumber = $input->param('biblionumber');
 my $itemnumber   = $input->param('itemnumber');
@@ -265,14 +431,28 @@ if ($op eq "additem") {
 } elsif ($op eq "delallitems") {
 #-------------------------------------------------------------------------------
     my @biblioitems = &GetBiblioItemByBiblioNumber($biblionumber);
-    foreach my $biblioitem (@biblioitems){
-        my $items = &GetItemsByBiblioitemnumber($biblioitem->{biblioitemnumber});
-
-        foreach my $item (@$items){
-            # FIXME although it won't delete items that have loans
-            # or waiting holds on them, should explicitly tell operator
-            # about items that are not deleted
-            &DelItemCheck($dbh,$biblionumber,$item->{itemnumber});
+    my $errortest=0;
+    my $itemfail;
+    foreach my $biblioitem (@biblioitems) {
+        my $items = &GetItemsByBiblioitemnumber( $biblioitem->{biblioitemnumber} );
+
+        foreach my $item (@$items) {
+            $error =&DelItemCheck( $dbh, $biblionumber, $item->{itemnumber} );
+            $itemfail =$item;
+        if($error == 1){
+            next
+            }
+        else {
+            push @errors,$error;
+            $errortest++
+            }
+        }
+        if($errortest > 0){
+            $nextop="additem";
+        } 
+        else {
+            print $input->redirect("/cgi-bin/koha/catalogue/moredetail.pl?biblionumber=$biblionumber");
+            exit;
         }
 	}
 #-------------------------------------------------------------------------------
@@ -318,30 +498,35 @@ my (  $itemtagfield,   $itemtagsubfield) = &GetMarcFromKohaField("items.itemnumb
 my ($branchtagfield, $branchtagsubfield) = &GetMarcFromKohaField("items.homebranch", $frameworkcode);
 
 foreach my $field (@fields) {
-    next if ($field->tag()<10);
-    my @subf = $field->subfields or (); # don't use ||, as that forces $field->subfelds to be interpreted in scalar context
+    next if ( $field->tag() < 10 );
+
+    my @subf = $field->subfields or ();    # don't use ||, as that forces $field->subfelds to be interpreted in scalar context
     my %this_row;
-# loop through each subfield
-    for my $i (0..$#subf) {
-        next if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab} ne 10 
-                && ($field->tag() ne $itemtagfield 
-                && $subf[$i][0]   ne $itemtagsubfield));
+    # loop through each subfield
+    my $i = 0;
+    foreach my $subfield (@subf){
+        my $subfieldcode = $subfield->[0];
+        my $subfieldvalue= $subfield->[1];
 
-        $witness{$subf[$i][0]} = $tagslib->{$field->tag()}->{$subf[$i][0]}->{lib} if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab}  eq 10);
-		if ($tagslib->{$field->tag()}->{$subf[$i][0]}->{tab}  eq 10) {
-        	$this_row{$subf[$i][0]}=GetAuthorisedValueDesc( $field->tag(),
-                        $subf[$i][0], $subf[$i][1], '', $tagslib) 
-						|| $subf[$i][1];
-		}
+        next if ($tagslib->{$field->tag()}->{$subfieldcode}->{tab} ne 10 
+                && ($field->tag() ne $itemtagfield 
+                && $subfieldcode   ne $itemtagsubfield));
+        $witness{$subfieldcode} = $tagslib->{$field->tag()}->{$subfieldcode}->{lib} if ($tagslib->{$field->tag()}->{$subfieldcode}->{tab}  eq 10);
+		if ($tagslib->{$field->tag()}->{$subfieldcode}->{tab}  eq 10) {
+		    $this_row{$subfieldcode} .= " | " if($this_row{$subfieldcode});
+        	$this_row{$subfieldcode} .= GetAuthorisedValueDesc( $field->tag(),
+                        $subfieldcode, $subfieldvalue, '', $tagslib) 
+						|| $subfieldvalue;
+        }
 
-        if (($field->tag eq $branchtagfield) && ($subf[$i][$0] eq $branchtagsubfield) && C4::Context->preference("IndependantBranches")) {
+        if (($field->tag eq $branchtagfield) && ($subfieldcode eq $branchtagsubfield) && C4::Context->preference("IndependantBranches")) {
             #verifying rights
             my $userenv = C4::Context->userenv();
-            unless (($userenv->{'flags'} == 1) or (($userenv->{'branch'} eq $subf[$i][1]))){
-                    $this_row{'nomod'}=1;
+            unless (($userenv->{'flags'} == 1) or (($userenv->{'branch'} eq $subfieldvalue))){
+                $this_row{'nomod'} = 1;
             }
         }
-        $this_row{itemnumber} = $subf[$i][1] if ($field->tag() eq $itemtagfield && $subf[$i][0] eq $itemtagsubfield);
+        $this_row{itemnumber} = $subfieldvalue if ($field->tag() eq $itemtagfield && $subfieldcode eq $itemtagsubfield);
     }
     if (%this_row) {
         push(@big_array, \%this_row);
@@ -374,202 +559,54 @@ foreach my $subfield_code (sort keys(%witness)) {
 my @loop_data =();
 my $i=0;
 
-my $branches = GetBranchesLoop();  # build once ahead of time, instead of multiple times later.
 my $pref_itemcallnumber = C4::Context->preference('itemcallnumber');
 
-# Getting the fields where the item location is
-my ($location_field, $location_subfield) = GetMarcFromKohaField('items.location', $frameworkcode);
-
-# Getting the name of the authorised values' category for item location
-my $item_location_category = $tagslib->{$location_field}->{$location_subfield}->{'authorised_value'};
-
-foreach my $tag (sort keys %{$tagslib}) {
-# loop through each subfield
-  foreach my $subfield (sort keys %{$tagslib->{$tag}}) {
-    next if subfield_is_koha_internal_p($subfield);
-    next if ($tagslib->{$tag}->{$subfield}->{'tab'} ne "10");
-    my %subfield_data;
- 
-    my $index_subfield = int(rand(1000000)); 
-    if ($subfield eq '@'){
-        $subfield_data{id} = "tag_".$tag."_subfield_00_".$index_subfield;
-    } else {
-        $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield;
-    }
-    $subfield_data{tag}        = $tag;
-    $subfield_data{subfield}   = $subfield;
-    $subfield_data{random}     = int(rand(1000000));    # why do we need 2 different randoms?
-#   $subfield_data{marc_lib}   = $tagslib->{$tag}->{$subfield}->{lib};
-    $subfield_data{marc_lib}   ="<span id=\"error$i\" title=\"".$tagslib->{$tag}->{$subfield}->{lib}."\">".$tagslib->{$tag}->{$subfield}->{lib}."</span>";
-    $subfield_data{mandatory}  = $tagslib->{$tag}->{$subfield}->{mandatory};
-    $subfield_data{repeatable} = $tagslib->{$tag}->{$subfield}->{repeatable};
-    my ($x,$value);
-    ($x,$value) = find_value($tag,$subfield,$itemrecord) if ($itemrecord);
-    $value =~ s/"/&quot;/g;
-    unless ($value) {
-        $value = $tagslib->{$tag}->{$subfield}->{defaultvalue};
-        # get today date & replace YYYY, MM, DD if provided in the default value
-        my ( $year, $month, $day ) = split ',', $today_iso;     # FIXME: iso dates don't have commas!
-        $value =~ s/YYYY/$year/g;
-        $value =~ s/MM/$month/g;
-        $value =~ s/DD/$day/g;
-    }
-    $subfield_data{visibility} = "display:none;" if (($tagslib->{$tag}->{$subfield}->{hidden} > 4) || ($tagslib->{$tag}->{$subfield}->{hidden} < -4));
-    # testing branch value if IndependantBranches.
-    if (!$value && $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' && $pref_itemcallnumber) {
-        my $CNtag       = substr($pref_itemcallnumber, 0, 3);
-        my $CNsubfield  = substr($pref_itemcallnumber, 3, 1);
-        my $CNsubfield2 = substr($pref_itemcallnumber, 4, 1);
-        my $temp2 = $temp->field($CNtag);
-        if ($temp2) {
-            $value = ($temp2->subfield($CNsubfield)).' '.($temp2->subfield($CNsubfield2));
-            #remove any trailing space incase one subfield is used
-            $value =~ s/^\s+|\s+$//g;
-        }
-    }
+my $onlymine = C4::Context->preference('IndependantBranches') && 
+               C4::Context->userenv                           && 
+               C4::Context->userenv->{flags}!=1               && 
+               C4::Context->userenv->{branch};
+my $branches = GetBranchesLoop(undef,$onlymine);  # build once ahead of time, instead of multiple times later.
 
-    my $attributes_no_value = qq(id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" );
-    my $attributes          = qq($attributes_no_value value="$value" );
-    if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) {
-      my @authorised_values;
-      my %authorised_lib;
-      # builds list, depending on authorised value...
-  
-      if ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "branches" ) {
-          foreach my $thisbranch (@$branches) {
-              push @authorised_values, $thisbranch->{value};
-              $authorised_lib{$thisbranch->{value}} = $thisbranch->{branchname};
-              # in edit item this is set to the data value otherwise use default
-              if ($op ne 'edititem' && $thisbranch->{selected} ) {
-                  $value = $thisbranch->{value};
-              }
-          }
-      }
-      elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) {
-          push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
-          my $sth = $dbh->prepare("select itemtype,description from itemtypes order by description");
-          $sth->execute;
-          while ( my ( $itemtype, $description ) = $sth->fetchrow_array ) {
-              push @authorised_values, $itemtype;
-              $authorised_lib{$itemtype} = $description;
-          }
-
-          unless ( $value ) {
-              my $itype_sth = $dbh->prepare("SELECT itemtype FROM biblioitems WHERE biblionumber = ?");
-              $itype_sth->execute( $biblionumber );
-              ( $value ) = $itype_sth->fetchrow_array;
-          }
-  
-          #---- class_sources
-      }
-      elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "cn_source" ) {
-          push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
-            
-          my $class_sources = GetClassSources();
-          my $default_source = C4::Context->preference("DefaultClassificationSource");
-          
-          foreach my $class_source (sort keys %$class_sources) {
-              next unless $class_sources->{$class_source}->{'used'} or
-                          ($value and $class_source eq $value)      or
-                          ($class_source eq $default_source);
-              push @authorised_values, $class_source;
-              $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'};
-          }
-		  $value = $default_source unless ($value);
-
-          #---- "true" authorised value
-      }
-      else {
-          push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} );
-
-	  # Are we dealing with item location ?
-          my $item_location = ($tagslib->{$tag}->{$subfield}->{authorised_value} eq $item_location_category) ? 1 : 0;
-
-          # If so, we sort by authorised_value, else by libelle
-          my $orderby = $item_location ? 'authorised_value' : 'lib';
-
-          my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY $orderby");
-
-          $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value});
-
-
-          while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) {
-            push @authorised_values, $value;
-	      	if ($tagslib->{$tag}->{$subfield}->{authorised_value} eq $item_location_category) {
-		  		$authorised_lib{$value} = $value . " - " . $lib;
-	      	} else {
-		  		$authorised_lib{$value} = $lib;
-	      	}
-
-	      	# For item location, we show the code and the libelle
-	      	$authorised_lib{$value} = ($item_location) ? $value . " - " . $lib : $lib;
-          }
-      }
-      $subfield_data{marc_value} =CGI::scrolling_list(      # FIXME: factor out scrolling_list
-          -name     => "field_value",
-          -values   => \@authorised_values,
-          -default  => $value,
-          -labels   => \%authorised_lib,
-          -override => 1,
-          -size     => 1,
-          -multiple => 0,
-         # -tabindex => 1,
-          -id       => "tag_".$tag."_subfield_".$subfield."_".$index_subfield,
-          -class    => "input_marceditor",
-      );
-    # it's a thesaurus / authority field
-    }
-    elsif ( $tagslib->{$tag}->{$subfield}->{authtypecode} ) {
-        $subfield_data{marc_value} = "<input type=\"text\" $attributes />
-            <a href=\"#\" class=\"buttonDot\"
-                onclick=\"Dopop('/cgi-bin/koha/authorities/auth_finder.pl?authtypecode=".$tagslib->{$tag}->{$subfield}->{authtypecode}."&index=$subfield_data{id}','$subfield_data{id}'); return false;\" title=\"Tag Editor\">...</a>
-    ";
-    # it's a plugin field
-    }
-    elsif ( $tagslib->{$tag}->{$subfield}->{value_builder} ) {
-        # opening plugin
-        my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $tagslib->{$tag}->{$subfield}->{'value_builder'};
-        if (do $plugin) {
-            my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
-            my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, \@loop_data );
-            my $change = index($javascript, 'function Change') > -1 ?
-                "return Change$function_name($subfield_data{random}, '$subfield_data{id}');" :
-                'return 1;';
-            $subfield_data{marc_value} = qq[<input $attributes
-                onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
-                onchange=" $change"
-                 onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />
-                <a href="#" class="buttonDot" onclick="Clic$function_name('$subfield_data{id}'); return false;" title="Tag Editor">...</a>
-                $javascript];
-        } else {
-            warn "Plugin Failed: $plugin";
-            $subfield_data{marc_value} = "<input $attributes />"; # supply default input form
-        }
-    }
-    elsif ( $tag eq '' ) {       # it's an hidden field
-        $subfield_data{marc_value} = qq(<input type="hidden" $attributes />);
-    }
-    elsif ( $tagslib->{$tag}->{$subfield}->{'hidden'} ) {   # FIXME: shouldn't input type be "hidden" ?
-        $subfield_data{marc_value} = qq(<input type="text" $attributes />);
-    }
-    elsif ( length($value) > 100
-            or (C4::Context->preference("marcflavour") eq "UNIMARC" and
-                  300 <= $tag && $tag < 400 && $subfield eq 'a' )
-            or (C4::Context->preference("marcflavour") eq "MARC21"  and
-                  500 <= $tag && $tag < 600                     )
-          ) {
-        # oversize field (textarea)
-        $subfield_data{marc_value} = "<textarea $attributes_no_value>$value</textarea>\n";
-    } else {
-        # it's a standard field
-         $subfield_data{marc_value} = "<input $attributes />";
-    }
-#   $subfield_data{marc_value}="<input type=\"text\" name=\"field_value\">";
-    push (@loop_data, \%subfield_data);
-    $i++
+# We generate form, from actuel record
+my @fields;
+if($itemrecord){
+    foreach my $field ($itemrecord->fields()){
+        my $tag = $field->{_tag};
+        foreach my $subfield ( $field->subfields() ){
+
+            my $subfieldtag = $subfield->[0];
+            my $value       = $subfield->[1];
+            my $subfieldlib = $tagslib->{$tag}->{$subfieldtag};
+
+            next if subfield_is_koha_internal_p($subfieldtag);
+            next if ($tagslib->{$tag}->{$subfieldtag}->{'tab'} ne "10");
+
+            my $subfield_data = generate_subfield_form($tag, $subfieldtag, $value, $tagslib, $subfieldlib, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i);        
+
+            push @fields, "$tag$subfieldtag";
+            push (@loop_data, $subfield_data);
+            $i++;
+                    }
+
+                }
+            }
+    # and now we add fields that are empty
+
+foreach my $tag ( keys %{$tagslib}){
+    foreach my $subtag (keys %{$tagslib->{$tag}}){
+        next if subfield_is_koha_internal_p($subtag);
+        next if ($tagslib->{$tag}->{$subtag}->{'tab'} ne "10");
+        next if any { /^$tag$subtag$/ }  @fields;
+
+        my @values = (undef);
+        @values = $itemrecord->field($tag)->subfield($subtag) if ($itemrecord && defined($itemrecord->field($tag)->subfield($subtag)));
+        for my $value (@values){
+            my $subfield_data = generate_subfield_form($tag, $subtag, $value, $tagslib, $tagslib->{$tag}->{$subtag}, $branches, $today_iso, $biblionumber, $temp, \@loop_data, $i); 
+            push (@loop_data, $subfield_data);
+            $i++;
+        } 
   }
 }
-
 # what's the next op ? it's what we are not in : an add if we're editing, otherwise, and edit.
 $template->param( title => $record->title() ) if ($record ne "-1");
 $template->param(
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tmpl b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tmpl
index d0be875..6929787 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/additem.tmpl
@@ -191,6 +191,7 @@ function set_to_today(id, force) {
 <!-- TMPL_IF NAME="no_next_barcode" --><div class="dialog alert"><strong>Error saving items</strong>: Unable to automatically determine values for barcodes. No item has been inserted.</div><!-- /TMPL_IF -->
 <!-- TMPL_IF NAME="book_on_loan" --><div class="dialog alert"><strong>Cannot Delete</strong>: item is checked out.</div><!-- /TMPL_IF -->
 <!-- TMPL_IF NAME="book_reserved" --><div class="dialogalert"><strong>Cannot Delete</strong>: item has a waiting hold.</div><!-- /TMPL_IF -->
+<!-- TMPL_IF Name="not_same_branch" --><div class="dialog alert"><strong>Cannot Delete</strong>: branch of item is not yours.</div><!-- /TMPL_IF -->
 
 <div id="cataloguing_additem_itemlist">
     <!-- TMPL_IF name="item_loop" -->
-- 
1.7.1



More information about the Koha-patches mailing list