Bug 22509: Add the --unless-exists option to the script
authorJonathan Druart <jonathan.druart@bugs.koha-community.org>
Fri, 5 Apr 2019 02:02:09 +0000 (23:02 -0300)
committerMartin Renvoize <martin.renvoize@ptfs-europe.com>
Mon, 24 Jun 2019 14:06:23 +0000 (15:06 +0100)
It will avoid to create the fields several times if it is not needed.

Signed-off-by: Hugo Agud <hagud@orex.es>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>

misc/add_date_fields_to_marc_records.pl

index 03d3d66..6368c36 100755 (executable)
@@ -29,7 +29,7 @@ use MARC::Field;
 use C4::Biblio;
 use Koha::DateUtils qw( dt_from_string );
 
-my ( $verbose, $help, $confirm, $where, @fields );
+my ( $verbose, $help, $confirm, $where, @fields, $unless_exists_field );
 my $dbh = C4::Context->dbh;
 
 GetOptions(
@@ -38,6 +38,7 @@ GetOptions(
     'confirm|c' => \$confirm,
     'where=s'   => \$where,
     'field=s@'  => \@fields,
+    'unless-exists=s' => \$unless_exists_field,
 ) || podusage(1);
 
 pod2usage(0) if $help;
@@ -51,7 +52,7 @@ for my $field (@fields) {
       MARC::Field->new( $tag, '', '', $subfield => $dt->strftime($value) );
 }
 
-say "Confirm flag not passed, running in dry-run mode...";
+say "Confirm flag not passed, running in dry-run mode..." unless $confirm;
 if ($verbose) {
     say "The following MARC fields will be added:";
     say "\t" . $_->as_formatted for @fields_to_add;
@@ -66,6 +67,10 @@ while ( my ( $biblionumber, $frameworkcode ) = $sth->fetchrow_array ) {
     my $marc_record =
       C4::Biblio::GetMarcBiblio( { biblionumber => $biblionumber } );
     next unless $marc_record;
+    if ( $unless_exists_field ) {
+        my ( $tag,  $subfield ) = split '\$', $unless_exists_field;
+        next if $marc_record->subfield($tag, $subfield);
+    }
     $marc_record->append_fields(@fields_to_add);
     if ($confirm) {
         my $modified =
@@ -86,7 +91,7 @@ add_date_fields_to_marc_records.pl
 
   perl add_date_fields_to_marc_records.pl --help
 
-  perl add_date_fields_to_marc_records.pl --field='905$a=0/%Y' --field='905$a=1/%Y/%b-%m' --field='905$a=2/%Y/%b-%m/%d' --verbose --confirm
+  perl add_date_fields_to_marc_records.pl --field='905$a=0/%Y' --field='905$a=1/%Y/%b-%m' --field='905$a=2/%Y/%b-%m/%d' --unless-exists='905$a' --verbose --confirm
 
 =head1 DESCRIPTION
 
@@ -123,6 +128,10 @@ For instance:
 
 905$a=2/%Y/%b-%m/%d'will a a new field 905$a with the value '2/2019/Mar-03/13' if run on March 13th 2019
 
+=item B<--unless-exists>
+
+Will only create the new fields if this field does not exist
+
 =back
 
 =cut