Description
Kyle M Hall (khall)
2025-04-02 15:46:56 UTC
Created attachment 180419 [details] [review] Bug 39532: Script debar_patrons_with_fines.pl creates repeat restrictions, uses wrong restriction type The cronjob debar_patrons_with_fines.pl is meant to add a restriction based on a fines threshold. The problem is that the script adds a MANUAL restriction, which makes no sense. MANUAL restrictions are meant to be manually created, never automatic as this script does. In addition, they are repeatable, not unique. Every time this script runs, it will add an additional restriction. There is already a restriction type meant for this type of use case: SUSPENSION We should change this script to create SUSPENSION restrictions instead of MANUAL restrictions. In summary, this script should use the unique restriction type SUSPENSION to prevent multiple additional restrictions from being created on each run. Test Plan: 1) Set up a patron with fines 2) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" 3) Note the restriction is created 4) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" again 5) Note another restriction is created 6) Delete the restrictions 7) Apply this patch 8) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" 9) Note the restriction is created 10) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" again 11) Note another restriction is *not* created! Created attachment 180493 [details] [review] Bug 39532: Script debar_patrons_with_fines.pl creates repeat restrictions, uses wrong restriction type The cronjob debar_patrons_with_fines.pl is meant to add a restriction based on a fines threshold. The problem is that the script adds a MANUAL restriction, which makes no sense. MANUAL restrictions are meant to be manually created, never automatic as this script does. In addition, they are repeatable, not unique. Every time this script runs, it will add an additional restriction. There is already a restriction type meant for this type of use case: SUSPENSION We should change this script to create SUSPENSION restrictions instead of MANUAL restrictions. In summary, this script should use the unique restriction type SUSPENSION to prevent multiple additional restrictions from being created on each run. Test Plan: 1) Set up a patron with fines 2) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" 3) Note the restriction is created 4) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" again 5) Note another restriction is created 6) Delete the restrictions 7) Apply this patch 8) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" 9) Note the restriction is created 10) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" again 11) Note another restriction is *not* created! Signed-off-by: Magnus Enger <magnus@libriotech.no> Created attachment 181335 [details] [review] Bug 39532: Script debar_patrons_with_fines.pl creates repeat restrictions, uses wrong restriction type The cronjob debar_patrons_with_fines.pl is meant to add a restriction based on a fines threshold. The problem is that the script adds a MANUAL restriction, which makes no sense. MANUAL restrictions are meant to be manually created, never automatic as this script does. In addition, they are repeatable, not unique. Every time this script runs, it will add an additional restriction. There is already a restriction type meant for this type of use case: SUSPENSION We should change this script to create SUSPENSION restrictions instead of MANUAL restrictions. In summary, this script should use the unique restriction type SUSPENSION to prevent multiple additional restrictions from being created on each run. Test Plan: 1) Set up a patron with fines 2) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" 3) Note the restriction is created 4) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" again 5) Note another restriction is created 6) Delete the restrictions 7) Apply this patch 8) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" 9) Note the restriction is created 10) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" again 11) Note another restriction is *not* created! Signed-off-by: Magnus Enger <magnus@libriotech.no> Signed-off-by: Emmi Takkinen <emmi.takkinen@koha-suomi.fi> Created attachment 182271 [details] [review] Bug 39532: Script debar_patrons_with_fines.pl creates repeat restrictions, uses wrong restriction type The cronjob debar_patrons_with_fines.pl is meant to add a restriction based on a fines threshold. The problem is that the script adds a MANUAL restriction, which makes no sense. MANUAL restrictions are meant to be manually created, never automatic as this script does. In addition, they are repeatable, not unique. Every time this script runs, it will add an additional restriction. There is already a restriction type meant for this type of use case: SUSPENSION We should change this script to create SUSPENSION restrictions instead of MANUAL restrictions. In summary, this script should use the unique restriction type SUSPENSION to prevent multiple additional restrictions from being created on each run. Test Plan: 1) Set up a patron with fines 2) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" 3) Note the restriction is created 4) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" again 5) Note another restriction is created 6) Delete the restrictions 7) Apply this patch 8) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" 9) Note the restriction is created 10) Run misc/cronjobs/debar_patrons_with_fines.pl -c -m "Test message" again 11) Note another restriction is *not* created! Signed-off-by: Magnus Enger <magnus@libriotech.no> Signed-off-by: Emmi Takkinen <emmi.takkinen@koha-suomi.fi> Signed-off-by: Martin Renvoize <martin.renvoize@openfifth.co.uk> Have to confess I am a bit worried about this interfering with any existing SUSPENSION restrictions that are set with specific expiration dates. See: _calculate_new_debar_dt As I see it running this scripts will just overwrite any existing SUSPENSION restriction with a date provided in the script when run. It feels to risky especially as a change in behavior that might not be noticed in time. I feel like we should not reuse the code here but make the code to use configurable. If we need to pick I think OVERDUES would be the better choice as this is just an indefinite one where the risk of interfering is lower. Pushed and reverted... sorry! > As I see it running this scripts will just overwrite any existing SUSPENSION
> restriction with a date provided in the script when run. It feels to risky
> especially as a change in behavior that might not be noticed in time.
That is actually a feature of the SUSPENSION restriction. It's a singleton that should be updated to the longer of the new date or the existing date ( if there is one ). This is its very purpose.
(In reply to Kyle M Hall (khall) from comment #7) > > As I see it running this scripts will just overwrite any existing SUSPENSION > > restriction with a date provided in the script when run. It feels to risky > > especially as a change in behavior that might not be noticed in time. > > That is actually a feature of the SUSPENSION restriction. It's a singleton > that should be updated to the longer of the new date or the existing date ( > if there is one ). This is its very purpose. Yes, I am aware, but I will we are mixing use cases here that are different and we might "disturb" the original use of SUSPENSION with this feature. Say we have a library system with mulitple branches. Some use the fine in days feature that sets the SUSPENSION restriction on checkin for overdue items. Some use fines (only for those the CLI script would be interesting) OR: we have one library, that has some item types they charge fines for and fine days for others. They run the script and it will overwrite the existing time limited SUSPENSION to be indefinite. What happens if more overdue items are returned that would add days to that indefinite suspension? Do libraries really expect the time limited SUSPENSION to be turned into INDEFINITE? I agree that you need a unique restriction type here to avoid the repeat restrictions. I just argue against re-using the existing SUSPENSION. |