@@ -, +, @@ when it hasn't been run already - Create a branch 3.19.00.016 - Make sure you have a few orders where the cancellationreason is set (cancel an order, enter a reason) - Update your branch to master + this patch - Run the web installer - ORDER_CANCELLATION_REASON authorised value category is created - Reset your system preference Version to 3.19.00.015 - Run database update again - no changes are made, all is fine - Create a branch 3.18.04 with cancelled orders - Update to latest 3.18.x - Make sure ORDER_CANCELLATION_REASON has been created - Dump database - Switch to master without this patch - Run update - verify more O_C_R were created (bad) - Load database - Update to master with this patch - All should be fine --- installer/data/mysql/updatedatabase.pl | 59 +++++++++++++++++++--------------- 1 file changed, 33 insertions(+), 26 deletions(-) --- a/installer/data/mysql/updatedatabase.pl +++ a/installer/data/mysql/updatedatabase.pl @@ -9834,36 +9834,43 @@ if ( CheckVersion($DBversion) ) { $DBversion = "3.19.00.016"; if(CheckVersion($DBversion)) { - $dbh->do(q{ - INSERT INTO authorised_values (category, authorised_value, lib) VALUES - ('ORDER_CANCELLATION_REASON', 0, 'No reason provided'), - ('ORDER_CANCELLATION_REASON', 1, 'Out of stock'), - ('ORDER_CANCELLATION_REASON', 2, 'Restocking') - }); + my @order_cancellation_reason = $dbh->selectrow_array("SELECT count(*) FROM authorised_values WHERE category='ORDER_CANCELLATION_REASON'"); + if ($order_cancellation_reason[0] == 0) { + $dbh->do(q{ + INSERT INTO authorised_values (category, authorised_value, lib) VALUES + ('ORDER_CANCELLATION_REASON', 0, 'No reason provided'), + ('ORDER_CANCELLATION_REASON', 1, 'Out of stock'), + ('ORDER_CANCELLATION_REASON', 2, 'Restocking') + }); - my $already_existing_reasons = $dbh->selectcol_arrayref(q{ - SELECT DISTINCT( cancellationreason ) - FROM aqorders; - }, { Slice => {} }); + my $already_existing_reasons = $dbh->selectcol_arrayref(q{ + SELECT DISTINCT( cancellationreason ) + FROM aqorders; + }, { Slice => {} }); - my $update_orders_sth = $dbh->prepare(q{ - UPDATE aqorders - SET cancellationreason = ? - WHERE cancellationreason = ? - }); + my $update_orders_sth = $dbh->prepare(q{ + UPDATE aqorders + SET cancellationreason = ? + WHERE cancellationreason = ? + }); - my $insert_av_sth = $dbh->prepare(q{ - INSERT INTO authorised_values (category, authorised_value, lib) VALUES - ('ORDER_CANCELLATION_REASON', ?, ?) - }); - my $i = 3; - for my $reason ( @$already_existing_reasons ) { - next unless $reason; - $insert_av_sth->execute( $i, $reason ); - $update_orders_sth->execute( $i, $reason ); - $i++; + my $insert_av_sth = $dbh->prepare(q{ + INSERT INTO authorised_values (category, authorised_value, lib) VALUES + ('ORDER_CANCELLATION_REASON', ?, ?) + }); + my $i = 3; + for my $reason ( @$already_existing_reasons ) { + next unless $reason; + $insert_av_sth->execute( $i, $reason ); + $update_orders_sth->execute( $i, $reason ); + $i++; + } + print "Upgrade to $DBversion done (Bug 13380: Add the ORDER_CANCELLATION_REASON authorised value)\n"; + } + else { + print "Upgrade to $DBversion done (Bug 13380: ORDER_CANCELLATION_REASON authorised value already existed from earlier update!)\n"; } - print "Upgrade to $DBversion done (Bug 13380: Add the ORDER_CANCELLATION_REASON authorised value)\n"; + SetVersion($DBversion); } --