Bug 13380: Follow-up - only run database update, when it hasn't been run already

As the ORDER_CANCELLATION_REASON authorised value has been
backported to 3.18.5, we need to make sure that the database
update is only run once.

This patch adds a check for the existance of the authorised
value in order to decide if the databaes update can be run.

To test:
- 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

Or:
- 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

Signed-off-by: Jonathan Druart <jonathan.druart@biblibre.com>

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
Katrin Fischer 2015-03-23 21:42:14 +01:00 committed by Tomas Cohen Arazi
parent 56a147da32
commit ab326b368b

View file

@ -9876,36 +9876,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";
}
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";
}
SetVersion($DBversion);
}