diff --git a/installer/data/mysql/atomicupdate/bug_34000.pl b/installer/data/mysql/atomicupdate/bug_34000.pl new file mode 100755 index 0000000000..07eec95787 --- /dev/null +++ b/installer/data/mysql/atomicupdate/bug_34000.pl @@ -0,0 +1,48 @@ +use Modern::Perl; +use Koha::Installer::Output qw(say_warning say_success say_info); + +return { + bug_number => "34000", + description => "Prevent re-issuance of auto-generated cardnumbers", + up => sub { + my ($args) = @_; + my ( $dbh, $out ) = @$args{qw(dbh out)}; + + my $exists = $dbh->selectrow_array(q{SELECT 1 FROM systempreferences WHERE variable = 'autoMemberNumValue'}); + + if ($exists) { + say_warning( $out, "System preference 'autoMemberNumValue' already exists, skipping" ); + return; + } + + # Seed from the highest numeric cardnumber ever issued, considering both live + # and deleted patrons so pre-upgrade deletions don't free up their numbers. + my ($seed) = $dbh->selectrow_array( + q{ + SELECT COALESCE( + GREATEST( + COALESCE( + (SELECT MAX(CAST(cardnumber AS SIGNED)) FROM borrowers + WHERE cardnumber REGEXP '^-?[0-9]+$'), + 0 + ), + COALESCE( + (SELECT MAX(CAST(cardnumber AS SIGNED)) FROM deletedborrowers + WHERE cardnumber REGEXP '^-?[0-9]+$'), + 0 + ) + ), + 0 + ) + } + ); + $seed //= 0; + + $dbh->do( + q{INSERT IGNORE INTO systempreferences (variable, value) VALUES ('autoMemberNumValue', ?)}, + undef, $seed + ); + + say_success( $out, "Added new system preference 'autoMemberNumValue' seeded to $seed" ); + }, +}; diff --git a/installer/data/mysql/mandatory/sysprefs.sql b/installer/data/mysql/mandatory/sysprefs.sql index b757d058d4..412efbae91 100644 --- a/installer/data/mysql/mandatory/sysprefs.sql +++ b/installer/data/mysql/mandatory/sysprefs.sql @@ -101,6 +101,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('AutomaticEmailReceipts','0','','Send email receipts for payments and write-offs','YesNo'), ('AutomaticItemReturn','1',NULL,'If ON, Koha will automatically set up a transfer of this item to its homebranch','YesNo'), ('autoMemberNum','0','','If ON, patron number is auto-calculated','YesNo'), +('autoMemberNumValue','0',NULL,'Stores the last auto-generated cardnumber to prevent re-issuance','Integer'), ('AutoRemoveOverduesRestrictions','no','no|when_no_overdue|when_no_overdue_causing_debarment', 'Defines if and on what conditions OVERDUES debarments should automatically be lifted when overdue items are returned by the patron.','Choice'), ('AutoRenewalNotices','preferences','cron|preferences|never','How should Koha determine whether to end autorenewal notices','Choice'), ('AutoResumeSuspendedHolds','1',NULL,'Allow suspended holds to be automatically resumed by a set date.','YesNo'), @@ -888,4 +889,4 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` ('z3950AuthorAuthFields','701,702,700',NULL,'Define the MARC biblio fields for Personal Name Authorities to fill biblio.author','free'), ('z3950NormalizeAuthor','0','','If ON, Personal Name Authorities will replace authors in biblio.author','YesNo'), ('z3950Status','','','This syspref allows to define custom YAML based rules for marking items unavailable in z3950 results.','Textarea') -; \ No newline at end of file +;