LP1170795: Void deposits on checkin
authorblake <blake@mobiusconsortium.org>
Fri, 3 Feb 2017 22:45:29 +0000 (16:45 -0600)
committerJason Boyer <JBoyer@equinoxOLI.org>
Wed, 8 Sep 2021 19:30:48 +0000 (15:30 -0400)
Introduce a library setting circ.void_item_deposit. When set, the money.billing
deposit row will be voided on checkin.

Signed-off-by: blake <blake@mobiusconsortium.org>
Signed-off-by: Jason Boyer <jboyer@equinoxinitiative.org>
Signed-off-by: Terran McCanna <tmccanna@georgialibraries.org>
Signed-off-by: Jason Boyer <jboyer@equinoxOLI.org>

Open-ILS/src/perlmods/lib/OpenILS/Application/Circ/Circulate.pm
Open-ILS/src/perlmods/lib/OpenILS/Const.pm
Open-ILS/src/sql/Pg/950.data.seed-values.sql
Open-ILS/src/sql/Pg/upgrade/XXXX.data.void_deposit_on_checkin.sql [new file with mode: 0755]

index 7a6751d..40fe4b0 100644 (file)
@@ -2788,6 +2788,9 @@ sub do_checkin {
             $self->handle_fines;
         }
 
+        # Void any item deposits if the library wants to
+        $self->check_circ_deposit(1);
+
         $self->checkin_handle_circ_finish;
         return if $self->bail_out;
         $self->checkin_changed(1);
@@ -3043,18 +3046,32 @@ sub finish_fines_and_voiding {
 }
 
 
-# if a deposit was payed for this item, push the event
+# if a deposit was paid for this item, push the event
+# if called with a truthy param perform the void, depending on settings
 sub check_circ_deposit {
     my $self = shift;
+    my $void = shift;
+
     return unless $self->circ;
+
     my $deposit = $self->editor->search_money_billing(
         {   btype => 5, 
             xact => $self->circ->id, 
             voided => 'f'
         }, {idlist => 1})->[0];
 
-    $self->push_events(OpenILS::Event->new(
-        'ITEM_DEPOSIT_PAID', payload => $deposit)) if $deposit;
+    return unless $deposit;
+
+    if ($void) {
+         my $void_on_checkin = $U->ou_ancestor_setting_value(
+             $self->circ_lib,OILS_SETTING_VOID_ITEM_DEPOSIT_ON_CHECKIN,$self->editor);
+         if ( $void_on_checkin ) {
+            my $evt = $CC->void_bills($self->editor,[$deposit], "DEPOSIT ITEM RETURNED");
+            return $evt if $evt;
+        }
+    } else { # if void is unset this is just a check, notify that there was a deposit billing
+        $self->push_events(OpenILS::Event->new('ITEM_DEPOSIT_PAID', payload => $deposit));
+    }
 }
 
 sub reshelve_copy {
index 85e8b71..f65118e 100644 (file)
@@ -98,6 +98,7 @@ econst OILS_SETTING_BLOCK_HOLD_FOR_EXPIRED_PATRON       => 'circ.holds.expired_p
 econst OILS_SETTING_ALLOW_RENEW_FOR_EXPIRED_PATRON      => 'circ.renew.expired_patron_allow';
 econst OILS_SETTING_GENERATE_OVERDUE_ON_LOST_RETURN     => 'circ.lost.generate_overdue_on_checkin';
 econst OILS_SETTING_MAX_DUPLICATE_HOLDS => 'circ.holds.max_duplicate_holds';
+econst OILS_SETTING_VOID_ITEM_DEPOSIT_ON_CHECKIN => 'circ.void_item_deposit';
 
 
 
index 027aecb..7b27f5d 100644 (file)
@@ -4239,6 +4239,15 @@ INSERT into config.org_unit_setting_type
         'coust', 'description'),
     'bool', null)
 
+,( 'circ.void_item_deposit', 'circ',
+    oils_i18n_gettext('circ.void_item_deposit',
+        'Void item deposit fee on checkin',
+        'coust', 'label'),
+    oils_i18n_gettext('circ.void_item_deposit',
+        'If a deposit was charged when checking out an item, void it when the item is returned',
+        'coust', 'description'),
+    'bool', null)
+
 ,( 'circ.void_lost_proc_fee_on_checkin', 'circ',
     oils_i18n_gettext('circ.void_lost_proc_fee_on_checkin',
         'Void processing fee on lost item return',
diff --git a/Open-ILS/src/sql/Pg/upgrade/XXXX.data.void_deposit_on_checkin.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.data.void_deposit_on_checkin.sql
new file mode 100755 (executable)
index 0000000..d9329bf
--- /dev/null
@@ -0,0 +1,17 @@
+BEGIN;
+
+SELECT evergreen.upgrade_deps_block_check('XXXX', :eg_version); -- blake / jboyer
+
+INSERT INTO config.org_unit_setting_type
+( name, grp, label, description, datatype, fm_class ) VALUES
+( 'circ.void_item_deposit', 'circ',
+    oils_i18n_gettext('circ.void_item_deposit',
+        'Void item deposit fee on checkin',
+        'coust', 'label'),
+    oils_i18n_gettext('circ.void_item_deposit',
+        'If a deposit was charged when checking out an item, void it when the item is returned',
+        'coust', 'description'),
+    'bool', null);
+
+COMMIT;
+