Bugzilla – Attachment 132284 Details for
Bug 16223
Automatically remove any borrower debarments after a payment
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 16223: Automatically remove any borrower debarments after a payment
0001-Bug-16223-Automatically-remove-any-borrower-debarmen.patch (text/plain), 11.03 KB, created by
Emmi Takkinen
on 2022-03-28 06:16:44 UTC
(
hide
)
Description:
Bug 16223: Automatically remove any borrower debarments after a payment
Filename:
MIME Type:
Creator:
Emmi Takkinen
Created:
2022-03-28 06:16:44 UTC
Size:
11.03 KB
patch
obsolete
>From 0aa24e2e2f7ed7250bed9a55a07d5cb5696cd00e Mon Sep 17 00:00:00 2001 >From: Lari Taskula <larit@student.uef.fi> >Date: Thu, 7 Apr 2016 11:47:02 +0000 >Subject: [PATCH 1/4] Bug 16223: Automatically remove any borrower debarments > after a payment > >Some libraries debar Patrons at the end of the year for having unpaid fines, >like in Bug 15157. Currently librarians have to manually remove this type of >debarments after Patron has paid his/her fines. Add a system preference to >define debarments that should be automatically removed after a payment is made, >and add functionality to actually remove the defined debarments from Patron. >Also let libraries to define the amount of outstanding fines after payment >after which the debarment will be removed. > >This patch introduces a system preference DebarmentsToLiftAfterPayment, which >allows libraries to define rules for removing debarments after paying fines. >The system preference uses YAML and is defined as follows: > >Debarment with this comments will be removed: > outstanding: 5 > >Which means that if a Patron has a debarment "Debarment with this comment will >be removed", and he pays his fines and charges until his outstanding fees are >equal or less than 5.00, this debarment will be lifted. The parameter outstanding >is optional - if not given, the debarment will be lifted until Patron has paid >all of his outstanding fees (in other words, equal to "outstanding: 0"). > >To test: >1. Set a debarment to a Patron >2. Set a fine for Patron >3. Define rule(s) for removing debarment(s) in system preference > DebarmentsToLiftAfterPayment >4. Pay the fine you set in step 2 >5. Note that the debarment is now lifted > >Also prove t/db_dependent/Patron/Borrower_Debarments.t > >Rebased-by: Emmi Takkinen <emmi.takkinen@koha-suomi.fi> > >Signed-off-by: Katariina Hanhisalo <katariina.hanhisalo@xamk.fi> >--- > Koha/Account.pm | 3 + > Koha/Patron/Debarments.pm | 65 +++++++++++++++++++ > ...y_borrower_debarments_after_a_payment.perl | 10 +++ > installer/data/mysql/mandatory/sysprefs.sql | 1 + > .../en/modules/admin/preferences/patrons.pref | 12 +++- > t/db_dependent/Patron/Borrower_Debarments.t | 24 ++++++- > 6 files changed, 113 insertions(+), 2 deletions(-) > create mode 100644 installer/data/mysql/atomicupdate/Bug_16223-Automatically_remove_any_borrower_debarments_after_a_payment.perl > >diff --git a/Koha/Account.pm b/Koha/Account.pm >index c7cf9e58db..9fb9211bea 100644 >--- a/Koha/Account.pm >+++ b/Koha/Account.pm >@@ -35,6 +35,7 @@ use Koha::Account::Offsets; > use Koha::Account::DebitTypes; > use Koha::Exceptions; > use Koha::Exceptions::Account; >+use Koha::Patron::Debarments; > > =head1 NAME > >@@ -101,6 +102,8 @@ sub pay { > } > ); > >+ Koha::Patron::Debarments::DelDebarmentsAfterPayment({ borrowernumber => $self->{patron_id} }); >+ > # NOTE: Pay historically always applied as much credit as it could to all > # existing outstanding debits, whether passed specific debits or otherwise. > if ( $payment->amountoutstanding ) { >diff --git a/Koha/Patron/Debarments.pm b/Koha/Patron/Debarments.pm >index 52e1036850..1148ffcf4f 100644 >--- a/Koha/Patron/Debarments.pm >+++ b/Koha/Patron/Debarments.pm >@@ -20,6 +20,11 @@ package Koha::Patron::Debarments; > use Modern::Perl; > > use C4::Context; >+use C4::Members; >+use Koha::Patrons; >+use Koha::Account::Lines; >+ >+use YAML::XS; > > our ( @ISA, @EXPORT_OK ); > >@@ -286,6 +291,66 @@ sub UpdateBorrowerDebarmentFlags { > return $dbh->do( "UPDATE borrowers SET debarred = ?, debarredcomment = ? WHERE borrowernumber = ?", {}, ( $expiration, $comment, $borrowernumber ) ); > } > >+=head2 DelDebarmentsAfterPayment >+ >+my $success = DelDebarmentsAfterPayment({ >+ borrowernumber => $borrowernumber, >+}); >+ >+Deletes any debarments from Borrower by following the rules >+defined in system preference DebarmentsToLiftAfterPayment >+ >+Debarments are defined in the system preference by comment. >+ >+=cut >+ >+sub DelDebarmentsAfterPayment { >+ my ($params) = @_; >+ >+ my $borrowernumber = $params->{'borrowernumber'}; >+ return unless ( $borrowernumber ); >+ >+ my $debarments = GetDebarments( { borrowernumber => $borrowernumber } ); >+ return unless ( $debarments ); >+ >+ my $liftDebarmentRules = C4::Context->preference("DebarmentsToLiftAfterPayment"); >+ return unless ( $liftDebarmentRules ); >+ >+ my $borrower = Koha::Patrons->find( $borrowernumber ); >+ return unless ( $borrower ); >+ >+ $liftDebarmentRules = YAML::XS::Load( >+ Encode::encode( >+ 'UTF-8', >+ $liftDebarmentRules, >+ Encode::FB_CROAK >+ )); >+ >+ my $lines = Koha::Account::Lines->search({ borrowernumber => $borrowernumber }); >+ my $total_due = $lines->total_outstanding; >+ >+ foreach my $debarment (@{ $debarments }){ >+ if (exists $liftDebarmentRules->{$debarment->{'comment'}}) { >+ # Delete debarment IF: >+ # 1. there is no maximum outstanding fines defined for the liftDebarmentRule >+ # and there is no outstanding fines. >+ # 2. there is a maximum outstanding fines amount defined >+ # and total_due is smaller or equal than the defined maximum outstanding amount >+ # Otherwise, do not lift the debarment. >+ if (not defined $liftDebarmentRules->{$debarment->{'comment'}}->{'outstanding'}){ >+ if ($total_due <= 0) { >+ DelDebarment($debarment->{'borrower_debarment_id'}); >+ } >+ } >+ else { >+ if ($total_due <= $liftDebarmentRules->{$debarment->{'comment'}}->{'outstanding'}) { >+ DelDebarment($debarment->{'borrower_debarment_id'}); >+ } >+ } >+ } >+ } >+} >+ > =head2 _GetBorrowernumberByDebarmentId > > my $borrowernumber = _GetBorrowernumberByDebarmentId( $borrower_debarment_id ); >diff --git a/installer/data/mysql/atomicupdate/Bug_16223-Automatically_remove_any_borrower_debarments_after_a_payment.perl b/installer/data/mysql/atomicupdate/Bug_16223-Automatically_remove_any_borrower_debarments_after_a_payment.perl >new file mode 100644 >index 0000000000..7038eaa585 >--- /dev/null >+++ b/installer/data/mysql/atomicupdate/Bug_16223-Automatically_remove_any_borrower_debarments_after_a_payment.perl >@@ -0,0 +1,10 @@ >+$DBversion = 'XXX'; # will be replaced by the RM >+if( CheckVersion( $DBversion ) ) { >+ # you can use $dbh here like: >+ # $dbh->do( "ALTER TABLE biblio ADD COLUMN badtaste int" ); >+ >+ $dbh->do("INSERT INTO systempreferences (variable, value, options, explanation, type) VALUES ('DebarmentsToLiftAfterPayment', '', '', 'Lift these debarments after Borrower has paid his/her fees', 'textarea')"); >+ >+ # Always end with this (adjust the bug info) >+ NewVersion( $DBversion, 16223, "Automatically remove any borrower debarments after a payment"); >+} >diff --git a/installer/data/mysql/mandatory/sysprefs.sql b/installer/data/mysql/mandatory/sysprefs.sql >index 94e2463434..ca8bc5a9ad 100644 >--- a/installer/data/mysql/mandatory/sysprefs.sql >+++ b/installer/data/mysql/mandatory/sysprefs.sql >@@ -151,6 +151,7 @@ INSERT INTO systempreferences ( `variable`, `value`, `options`, `explanation`, ` > ('CustomCoverImages','0',NULL,'If enabled, the custom cover images will be displayed in the staff interface. CustomCoverImagesURL must be defined.','YesNo'), > ('CustomCoverImagesURL','',NULL,'Define an URL serving book cover images, using the following patterns: %issn%, %isbn%, FIXME ADD MORE (use it with CustomCoverImages and/or OPACCustomCoverImages)','free'), > ('dateformat','us','metric|us|iso|dmydot','Define global date format (us mm/dd/yyyy, metric dd/mm/yyy, ISO yyyy-mm-dd, dmydot dd.mm.yyyy)','Choice'), >+('DebarmentsToLiftAfterPayment', '', '', 'Lift these debarments after Borrower has paid his/her fees', 'textarea'), > ('DebugLevel','2','0|1|2','Define the level of debugging information sent to the browser when errors are encountered (set to 0 in production). 0=none, 1=some, 2=most','Choice'), > ('decreaseLoanHighHolds','0','','Decreases the loan period for items with number of holds above the threshold specified in decreaseLoanHighHoldsValue','YesNo'), > ('decreaseLoanHighHoldsControl', 'static', 'static|dynamic', "Chooses between static and dynamic high holds checking", 'Choice'), >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref >index 9ef410f24c..7e74556366 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/preferences/patrons.pref >@@ -106,7 +106,17 @@ Patrons: > class: integer > - days. Leave empty to disable this behavior. > - "<br><strong>NOTE:</strong> This system preference requires the misc/cronjobs/cleanup_database.pl cronjob. Ask your system administrator to schedule it." >- >+ - >+ - pref: DebarmentsToLiftAfterPayment >+ type: textarea >+ class: code >+ - Lift these debarments after Borrower has paid his/her fees >+ - "<p>Example, debarment is lifted after all fees are paid:</p>" >+ - "<pre>Debarment message:</pre> >+ <pre> outstanding: 0</pre>" >+ - "<p>Example, debarment is lifted after payment with outstanding fees less or equal than 5:</p>" >+ - "<pre>Another debarment:</pre> >+ <pre> outstanding: 5.00</pre>" > Membership expiry: > - > - When renewing borrowers, base the new expiry date on >diff --git a/t/db_dependent/Patron/Borrower_Debarments.t b/t/db_dependent/Patron/Borrower_Debarments.t >index 21a54eff23..74616a19f1 100755 >--- a/t/db_dependent/Patron/Borrower_Debarments.t >+++ b/t/db_dependent/Patron/Borrower_Debarments.t >@@ -8,7 +8,7 @@ use Koha::Patrons; > > use t::lib::TestBuilder; > >-use Test::More tests => 33; >+use Test::More tests => 35; > > use_ok('Koha::Patron::Debarments'); > >@@ -194,3 +194,25 @@ is( Koha::Patrons->find($borrowernumber3)->debarred, > $debarreddate2, 'Koha::Patron->merge_with() transfers well debarred' ); > is( Koha::Patrons->find($borrowernumber3)->debarredcomment, > $debarredcomment2, 'Koha::Patron->merge_with() transfers well debarredcomment' ); >+ >+# Test removing debartments after payment >+my $debarmentsRulesPref = C4::Context->preference("DebarmentsToLiftAfterPayment"); >+C4::Context->set_preference("DebarmentsToLiftAfterPayment", "Test debarment:\n outstanding: 0\nTest debarment 2:"); >+ >+AddDebarment({ >+ borrowernumber => $borrowernumber, >+ comment => 'Test debarment', >+}); >+AddDebarment({ >+ borrowernumber => $borrowernumber, >+ comment => 'Test debarment 2', >+}); >+ >+$debarments = GetDebarments({ borrowernumber => $borrowernumber }); >+is( @$debarments, 2, "GetDebarments returns 2 debarments before payment" ); >+ >+DelDebarmentsAfterPayment({ borrowernumber => $borrowernumber }); >+C4::Context->set_preference("DebarmentsToLiftAfterPayment", $debarmentsRulesPref); >+ >+$debarments = GetDebarments({ borrowernumber => $borrowernumber }); >+is( @$debarments, 0, "GetDebarments returns 0 debarments after payment" ); >\ No newline at end of file >-- >2.25.1 >
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 16223
:
50078
|
50084
|
99697
|
99698
|
104399
|
104400
|
114272
|
114273
|
118526
|
118572
|
118574
|
118575
|
122768
|
122769
|
127252
|
128005
|
132284
|
132285
|
132286
|
132287
|
143388
|
143389
|
143390
|
143462
|
143670
|
143671
|
143672
|
143688
|
143689
|
143690
|
143765
|
143766
|
143767
|
143768
|
143769
|
143770
|
143936
|
146051
|
146052
|
146053
|
146054
|
146055
|
146056
|
146057
|
148307
|
148308
|
148309
|
148310
|
148311
|
148312
|
148313
|
150024
|
150025
|
150026
|
150027
|
150028
|
150029
|
153024
|
153025
|
153026
|
153027
|
153028
|
153029
|
155644
|
155645
|
155646
|
155647
|
155648
|
155649
|
155650
|
156841
|
156842
|
156843
|
156844
|
156845
|
156846
|
156847
|
156848
|
156849
|
156850