adding barcode NOT mandatory feature. Just run updatedatabase to get it.
authortipaul <tipaul>
Tue, 30 Sep 2003 16:22:05 +0000 (16:22 +0000)
committertipaul <tipaul>
Tue, 30 Sep 2003 16:22:05 +0000 (16:22 +0000)
Note it's impossible to issue an item without barcode, as issue/returns is based on barcode...

updater/updatedatabase

index 5507231..76543ec 100755 (executable)
@@ -258,6 +258,9 @@ my %dropable_table = (
     serialissues   => 'serialissues',
 );
 
+# the other hash contains other actions that can't be done elsewhere. they are done
+# either BEFORE of AFTER everything else, depending on "when" entry (default => AFTER)
+
 # The tabledata hash contains data that should be in the tables.
 # The uniquefieldrequired hash entry is used to determine which (if any) fields
 # must not exist in the table for this row to be inserted.  If the
@@ -616,6 +619,7 @@ while ( my ($table) = $sth->fetchrow ) {
     $existingtables{$table} = 1;
 }
 
+
 # Now add any missing tables
 foreach $table ( keys %requiretables ) {
     print "Checking $table table...\n" if $debug;
@@ -757,12 +761,13 @@ foreach $table ( keys %fielddefinitions ) {
 
 # Get list of columns from items table
 my %itemtypes;
-
+my %nullenabled;
 $sth = $dbh->prepare("show columns from items");
 $sth->execute;
 while ( my ( $column, $type, $null, $key, $default, $extra ) = $sth->fetchrow )
 {
     $itemtypes{$column} = $type;
+    $nullenabled{$column} = $null;
 }
 
 unless ( $itemtypes{'barcode'} eq 'varchar(20)' ) {
@@ -772,10 +777,23 @@ unless ( $itemtypes{'barcode'} eq 'varchar(20)' ) {
         print "Setting maximum barcode length to 20 (was $oldlength).\n";
         my $sti =
           $dbh->prepare(
-            "alter table items change barcode barcode varchar(20) not null");
+            "alter table items change barcode barcode varchar(20)");
         $sti->execute;
     }
 }
+#
+# dropping unique barcode index & setting barcode to null allowed.
+#
+$sth = $dbh->prepare("show index from items");
+$sth->execute;
+while ( my ( $table, $non_unique, $key_name, $Seq_in_index, $Column_name, $Collation, $cardinality, $sub_part, $Packed, $comment ) = $sth->fetchrow )
+{
+       if ($key_name eq 'barcode' && $non_unique eq 0) {
+               print "dropping BARCODE index to enable empty barcodes\n";
+               $dbh->do("ALTER TABLE `items` DROP INDEX `barcode`");
+       }
+}
+$dbh->do("ALTER TABLE `items` CHANGE `barcode` `barcode` VARCHAR( 20 )") unless ($nullenabled{barcode} eq 'YES');
 
 # extending the timestamp in branchtransfers...
 my %branchtransfers;
@@ -896,6 +914,10 @@ $sth->finish;
 exit;
 
 # $Log$
+# Revision 1.59  2003/09/30 16:22:05  tipaul
+# adding barcode NOT mandatory feature. Just run updatedatabase to get it.
+# Note it's impossible to issue an item without barcode, as issue/returns is based on barcode...
+#
 # Revision 1.58  2003/07/16 04:08:29  acli
 # Minor spelling correction
 #