Bug 10490: Overdue fines cap can't store decimal values
When overduefinescap was added to the issuingrules the datatype given was decimal. This translates in MySQL to decimal(10,0). This doesn't allow you to store decimal values and therefore values like 4.5 are saved as 5 in the database. To test: On a current installation: 1) Try to enter 4.5 as Overdue fines cap. Verify that the value is not correctly saved. 2) Apply patch and run database update. 3) Try adding/changing an issuing rule setting Overdue fines cap to 4.5 again. 4) Verify the value is saved correctly. Create a new Koha installation from scratch: 1) Verify that the issuingrules table has been created correctly and that you can add/mofidy issuingrules correctly. Because this bug can create data loss, the old database update has also been changed to avoid this problem for people updating at a later point in time. Checkout an older version of Koha pre 3.09.00.027. 1) Run the database updates. 2) Verify again, that adding/modifying issuingrules works correctly. Signed-off-by: Srdjan <srdjan@catalyst.net.nz> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com> Signed-off-by: Galen Charlton <gmc@esilibrary.com>
This commit is contained in:
parent
986f7a24e8
commit
16c5794044
2 changed files with 10 additions and 2 deletions
|
@ -1130,7 +1130,7 @@ CREATE TABLE `issuingrules` ( -- circulation and fine rules
|
||||||
`renewalperiod` int(4) default NULL, -- renewal period in the unit set in issuingrules.lengthunit
|
`renewalperiod` int(4) default NULL, -- renewal period in the unit set in issuingrules.lengthunit
|
||||||
`reservesallowed` smallint(6) NOT NULL default "0", -- how many holds are allowed
|
`reservesallowed` smallint(6) NOT NULL default "0", -- how many holds are allowed
|
||||||
`branchcode` varchar(10) NOT NULL default '', -- the branch this rule is for (branches.branchcode)
|
`branchcode` varchar(10) NOT NULL default '', -- the branch this rule is for (branches.branchcode)
|
||||||
overduefinescap decimal default NULL, -- the maximum amount of an overdue fine
|
overduefinescap decimal(28,6) default NULL, -- the maximum amount of an overdue fine
|
||||||
PRIMARY KEY (`branchcode`,`categorycode`,`itemtype`),
|
PRIMARY KEY (`branchcode`,`categorycode`,`itemtype`),
|
||||||
KEY `categorycode` (`categorycode`),
|
KEY `categorycode` (`categorycode`),
|
||||||
KEY `itemtype` (`itemtype`)
|
KEY `itemtype` (`itemtype`)
|
||||||
|
|
|
@ -5561,7 +5561,7 @@ if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
|
||||||
|
|
||||||
$DBversion = '3.09.00.027';
|
$DBversion = '3.09.00.027';
|
||||||
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
|
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
|
||||||
$dbh->do("ALTER TABLE issuingrules ADD overduefinescap decimal DEFAULT NULL");
|
$dbh->do("ALTER TABLE issuingrules ADD overduefinescap decimal(28,6) DEFAULT NULL");
|
||||||
my $maxfine = C4::Context->preference('MaxFine');
|
my $maxfine = C4::Context->preference('MaxFine');
|
||||||
if ($maxfine && $maxfine < 900) { # an arbitrary value that tells us it's not "some huge value"
|
if ($maxfine && $maxfine < 900) { # an arbitrary value that tells us it's not "some huge value"
|
||||||
$dbh->do("UPDATE issuingrules SET overduefinescap=?",undef,$maxfine);
|
$dbh->do("UPDATE issuingrules SET overduefinescap=?",undef,$maxfine);
|
||||||
|
@ -7036,6 +7036,14 @@ if ( CheckVersion($DBversion) ) {
|
||||||
SetVersion($DBversion);
|
SetVersion($DBversion);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
$DBversion = "3.13.00.XXX";
|
||||||
|
if ( CheckVersion($DBversion) ) {
|
||||||
|
$dbh->do("ALTER TABLE issuingrules MODIFY COLUMN overduefinescap decimal(28,6) DEFAULT NULL;");
|
||||||
|
print "Upgrade to $DBversion done (Bug 10490: Correct datatype for overduefinescap in issuingrules)\n";
|
||||||
|
SetVersion($DBversion);
|
||||||
|
}
|
||||||
|
|
||||||
=head1 FUNCTIONS
|
=head1 FUNCTIONS
|
||||||
|
|
||||||
=head2 TableExists($table)
|
=head2 TableExists($table)
|
||||||
|
|
Loading…
Reference in a new issue