Koha/installer/data/mysql/db_revs/221200047.pl
Tomas Cohen Arazi 3da43b850b
Bug 32450: DBRev 22.12.00.047
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
2023-05-17 10:25:10 -03:00

79 lines
3.6 KiB
Perl
Executable file

use Modern::Perl;
return {
bug_number => "32450",
description => "Create a database flag for whether a debit type should be included in the noissuescharge block on circulation and remove redundant sysprefs.",
up => sub {
my ($args) = @_;
my ($dbh, $out) = @$args{qw(dbh out)};
if( !column_exists( 'account_debit_types', 'restricts_checkouts' ) ) {
$dbh->do(q{
ALTER TABLE account_debit_types ADD COLUMN `restricts_checkouts` tinyint(1) NOT NULL DEFAULT 1
COMMENT 'boolean flag to denote if the noissuescharge syspref for this debit type is active'
AFTER `archived`;
});
say $out "Added column 'account_debit_types.restricts_checkouts'";
}
# Before deleting the redundant system preferences we need to check if they had been modified and update the new database flags accordingly
my @sysprefs = ('ManInvInNoissuesCharge', 'RentalsInNoissuesCharge', 'HoldsInNoissuesCharge');
# Hardcoded values from sub non_issues_charges
my @holds = ('RESERVE');
my @rentals = ('RENT', 'RENT_DAILY', 'RENT_RENEW', 'RENT_DAILY_RENEW');
my @manual;
my $sth = $dbh->prepare("SELECT code FROM account_debit_types WHERE is_system = 0");
$sth->execute;
while (my $code = $sth->fetchrow_array) {
push @manual, $code;
}
for (@sysprefs){
# Check if the syspref exists in the database
my $check_syspref_exists = "SELECT COUNT(*) FROM systempreferences WHERE variable = '$_'";
my $sth = $dbh->prepare($check_syspref_exists);
$sth->execute;
my $exists = $sth->fetchrow();
$sth->finish;
if($exists) {
# If it exists, retrieve its value
my $find_syspref_value = "SELECT value FROM systempreferences WHERE variable = '$_'";
my $sth = $dbh->prepare($find_syspref_value);
$sth->execute;
my $value = $sth->fetchrow();
$sth->finish;
if($value){
say $out "$_ is included in the charge, default database value of 1 can be applied.";
} else {
# Update account_debit_types to reflect existing syspref value.
my @debit_types_to_update;
if($_ eq 'ManInvInNoissuesCharge') { push @debit_types_to_update, @manual};
if($_ eq 'RentalsInNoissuesCharge') { push @debit_types_to_update, @rentals};
if($_ eq 'HoldsInNoissuesCharge') { push @debit_types_to_update, @holds};
my $string = join(",", map { $dbh->quote($_) } @debit_types_to_update);
my $update_query = "UPDATE account_debit_types SET restricts_checkouts = 0 WHERE code IN (" . $string . ")";
my $sth = $dbh->prepare($update_query);
$sth->execute;
$sth->finish;
say $out "$_ has been updated to not be included in the charge, account_debit_types has been updated to match this.";
}
# Delete syspref as it is no longer required and the value has been transferred to account_debit_types
my $delete_redundant_syspref = "DELETE FROM systempreferences WHERE variable = '$_'";
$dbh->do($delete_redundant_syspref);
} else {
# If it doesn't exist then revert to default value in the database schema
say $out "$_ was not found in this Koha instance, default value has been applied.";
}
}
},
};