Bugzilla – Attachment 153012 Details for
Bug 18855
Fines cronjob can cause duplicate fines if run during active circulation
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 18855: Don't create duplicate overdue fines if an issue is returned
Bug-18855-Dont-create-duplicate-overdue-fines-if-a.patch (text/plain), 5.67 KB, created by
Marcel de Rooy
on 2023-07-04 11:29:33 UTC
(
hide
)
Description:
Bug 18855: Don't create duplicate overdue fines if an issue is returned
Filename:
MIME Type:
Creator:
Marcel de Rooy
Created:
2023-07-04 11:29:33 UTC
Size:
5.67 KB
patch
obsolete
>From 281a15319e6d6829f20f48238b4d02c83880cd9a Mon Sep 17 00:00:00 2001 >From: Michael Hafen <michael.hafen@washk12.org> >Date: Thu, 19 Jan 2023 14:56:31 -0700 >Subject: [PATCH] Bug 18855: Don't create duplicate overdue fines if an issue > is returned >Content-Type: text/plain; charset=utf-8 > >This includes Jonathan's followup > >If cronjobs/fines.pl is running during circulation hours, then an issue may >be considered for having it's overdue fine updated after the issue has been >returned and it's fine status flipped from 'UNRETURNED' to 'RETURNED'. In >this case UpdateFine will create a duplicate fine because it can't find the >specific accountline for the (formerly) overdue issue. > >This changes cronjobs/fines.pl to double check the issue before updating >the fine. If the issue has changed between starting the script and updating >the fine, then the script will skip it. > >There is a small amount of time between the check and calling UpdateFine >where the issue can be changed and this problem can reoccure. The chance >of that happening is so small that it's probably fine to leave as is. > >It is also possible that the fine won't be updated because the issue was >returned. In this case the fine payed by the patron will be lower, but that >is better then the patron finding later that there is more to a fine they >thought they had paid all of. > >Test plan (by Caroline): >0. Preliminary settings > 0.1. finesMode system preference must be set to Calculate and charge > 0.2. There must be a circulation rule that will charge fines (beware of bug 32271) > 0.3. In Tools > Calendar, today must not be a holiday > >1. Make a lot of overdue checkouts - I used the batch checkout feature, but if your system already has a lot of overdue checkouts, you can skip to step 2 > > 1.1. Enable batch checkouts > 1.1.1. Go to Administration > Global system preferences > 1.1.2. Search for BatchCheckouts > 1.1.3. Set BatchCheckouts to Allow > 1.1.4. Select all categories in BatchCheckoutsValidCategories > 1.1.5. Click "Save all Circulation preferences" > > 1.2. Get a list of barcodes > 1.2.1. Go to Reports > 1.2.2. Click "Create from SQL" > 1.2.3. Give the report a name > 1.2.4. For the SQL query, enter > > SELECT barcode FROM items WHERE onloan IS NULL LIMIT 60; > > 1.2.5. Click "Save report" > 1.2.6. Click "Run report" > 1.2.7. Click "Download" > "Tab separated text" > > 1.3. Go to a patron's file > 1.3.1. Go to Patrons > 1.3.2. Click on "Search" > 1.3.3. Click on a patron's name > > 1.4. Do a batch checkout with a due date in the past > 1.4.1. Click on the "Batch check out" tab on the left > 1.4.2. In "Use a file", click "Choose file" > 1.4.3. Choose the file downloaded from the report > 1.4.4. In "Hard due date", choose a date in the past > 1.4.5. Click "Check out" > 1.4.6. Click "Checkout or renew" > >2. Find the last issue in the database > > 2.1. In the database (or in reports), type the following query > > SELECT issues.*, items.itype as itemtype, items.homebranch, items.barcode, items.itemlost, items.replacementprice, items.biblionumber FROM issues LEFT JOIN items USING (itemnumber) WHERE date_due < NOW() \G; > > 2.2. Copy the barcode from the last entry > >3. Set up so that you can run fines.pl and check in the item at the same time (or very close to the same time) > > 3.1. In Koha, click the "Check in" option in the search bar at the top of the page > 3.2. Paste the barcode in the search bar BUT DO NOT PRESS ENTER OR THE ARROW RIGHT AWAY > 3.3. In a terminal, enter the fines.pl command > > ./misc/cronjobs/fines.pl > > 3.4. Execute the command and immediately click on the arrow in the staff interface to check in the item > >4. Check the patron's fines > > 4.1. Click on the patron's name in the check in screen > 4.2. Go to the Accounting tab on the left > 4.3. In the search box just above the table, paste in the returned item's barcode > > --> Without the patch, there are two fines, one Fine (Accruing) and one Fine (Returned) for the same item at the same time > --> With the patch, there is only one fine, Fine (Returned) > >Signed-off-by: Sam Lau <samalau@gmail.com> > >Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl> >--- > misc/cronjobs/fines.pl | 12 ++++++++++++ > 1 file changed, 12 insertions(+) > >diff --git a/misc/cronjobs/fines.pl b/misc/cronjobs/fines.pl >index 75adbe0d7a..a32562ad3a 100755 >--- a/misc/cronjobs/fines.pl >+++ b/misc/cronjobs/fines.pl >@@ -48,6 +48,7 @@ my $verbose; > my $output_dir; > my $log; > my $maxdays; >+my $verify_issue; > > my $command_line_options = join(" ",@ARGV); > >@@ -57,6 +58,7 @@ GetOptions( > 'l|log' => \$log, > 'o|out:s' => \$output_dir, > 'm|maxdays:i' => \$maxdays, >+ 'i|verifyissue' => \$verify_issue, > ); > my $usage = << 'ENDUSAGE'; > >@@ -71,6 +73,8 @@ This script has the following parameters : > -o --out: ouput directory for logs (defaults to env or /tmp if !exist) > -v --verbose > -m --maxdays: how many days back of overdues to process >+ -i --verifyissue: verify the issue before updating the fine in case the >+ item is returned while the fines job is running > > ENDUSAGE > >@@ -160,6 +164,14 @@ for my $overdue ( @{$overdues} ) { > && ( $amount && $amount > 0 ) > ) > { >+ if ( $verify_issue ) { >+ # if the issue changed before the script got to it, then pass on it. >+ my $issue = Koha::Checkouts->find({ issue_id => $overdue->{issue_id} }); >+ if ( ! $issue or $issue->date_due ne $overdue->{date_due} ) { >+ $counted--; >+ next; >+ } >+ } > UpdateFine( > { > issue_id => $overdue->{issue_id}, >-- >2.30.2
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 18855
:
127816
|
127851
|
127852
|
128187
|
131304
|
131961
|
144083
|
144084
|
145496
|
151647
|
152907
|
152987
|
152991
| 153012