Bug 26268: (QA follow-up) Conditionally remove
authorMartin Renvoize <martin.renvoize@ptfs-europe.com>
Fri, 11 Sep 2020 11:51:47 +0000 (12:51 +0100)
committerJonathan Druart <jonathan.druart@bugs.koha-community.org>
Thu, 1 Oct 2020 08:32:15 +0000 (10:32 +0200)
This patch adds conditions to prevent the removal of items.paidfor if it
is populated and also adds the removal fo the marc_subfield_structure
row if it exists.

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
Signed-off-by: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
installer/data/mysql/atomicupdate/bug_26268.perl

index a576922..c45dc65 100644 (file)
@@ -1,13 +1,43 @@
-$DBversion = 'XXX'; # will be replaced by the RM
-if( CheckVersion( $DBversion ) ) {
+$DBversion = 'XXX';    # will be replaced by the RM
+if ( CheckVersion($DBversion) ) {
 
-    if( column_exists( 'items', 'paidfor' ) ) {
-       $dbh->do(q|ALTER TABLE items DROP COLUMN paidfor|);
+    if ( column_exists( 'items', 'paidfor' ) ) {
+        my ($count) = $dbh->selectrow_array(
+            qq|
+                SELECT COUNT(*)
+                FROM items
+                WHERE paidfor IS NOT NULL AND paidfor <> ""
+            |
+        );
+        if ($count) {
+            warn "Warning - Cannot remove column items.paidfor. At least one value exists";
+        }
+        else {
+            $dbh->do(q|ALTER TABLE items DROP COLUMN paidfor|);
+            $dbh->do(q|
+                DELETE FROM marc_subfield_structure
+                WHERE tagfield = '952'
+                AND tagsubfield = 'x'
+                AND kohafield = 'items.paidfor'
+            |);
+        }
     }
 
     if ( column_exists( 'deleteditems', 'paidfor' ) ) {
-       $dbh->do(q|ALTER TABLE deleteditems DROP COLUMN paidfor|);
+        my ($count) = $dbh->selectrow_array(
+            qq|
+                SELECT COUNT(*)
+                FROM items
+                WHERE paidfor IS NOT NULL AND paidfor <> ""
+            |
+        );
+        if ($count) {
+            warn "Warning - Cannot remove column deleteditems.paidfor. At least one value exists";
+        }
+        else {
+            $dbh->do(q|ALTER TABLE deleteditems DROP COLUMN paidfor|);
+        }
     }
 
-    NewVersion( $DBversion, 26268, "Remove items.paidfor field");
+    NewVersion( $DBversion, 26268, "Remove items.paidfor field" );
 }