LP1170795: Void deposits on checkin
authorblake <blake@mobiusconsortium.org>
Fri, 3 Feb 2017 22:45:29 +0000 (16:45 -0600)
committerJason Boyer <jboyer@equinoxinitiative.org>
Wed, 11 Sep 2019 14:29:28 +0000 (10:29 -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>
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.LP1170795_Deposit_refunds_not_applying_as_expected_on_item_check_in.sql [new file with mode: 0755]

index 5c810d6..8ac26ba 100644 (file)
@@ -2769,6 +2769,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);
@@ -3025,8 +3028,10 @@ sub finish_fines_and_voiding {
 
 
 # if a deposit was payed for this item, push the event
+# handle deposit billing void
 sub check_circ_deposit {
     my $self = shift;
+    my $void = shift;
     return unless $self->circ;
     my $deposit = $self->editor->search_money_billing(
         {   btype => 5, 
@@ -3034,8 +3039,20 @@ sub check_circ_deposit {
             voided => 'f'
         }, {idlist => 1})->[0];
 
-    $self->push_events(OpenILS::Event->new(
-        'ITEM_DEPOSIT_PAID', payload => $deposit)) if $deposit;
+    if ($deposit) {
+        # We have already vetted the override event when $void is set
+        $self->push_events(OpenILS::Event->new('ITEM_DEPOSIT_PAID', payload => $deposit)) if !$void;
+        # Now do the voiding when the library setting is set
+        if ( $U->ou_ancestor_setting_value(
+             $self->circ_lib,
+             OILS_SETTING_VOID_ITEM_DEPOSIT_ON_CHECKIN,
+             $self->editor) && $void
+            ) {
+            my $circ_money = OpenSRF::AppSession->connect("open-ils.circ");
+            $circ_money->request('open-ils.circ.money.billing.void', $self->editor->authtoken, $deposit );
+            undef $circ_money;
+        }
+    }
 }
 
 sub reshelve_copy {
index 7c5fb7b..15c59bb 100644 (file)
@@ -97,6 +97,7 @@ econst OILS_SETTING_LOST_IMMEDIATELY_AVAILABLE          => 'circ.lost_immediatel
 econst OILS_SETTING_BLOCK_HOLD_FOR_EXPIRED_PATRON       => 'circ.holds.expired_patron_block';
 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 daf37c3..8d2dbad 100644 (file)
@@ -4049,6 +4049,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 depsoit fee upon checkin',
+        'coust', 'label'),
+    oils_i18n_gettext('circ.void_item_deposit',
+        'This will cause the deposit fee to be voided upon checkin',
+        '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.LP1170795_Deposit_refunds_not_applying_as_expected_on_item_check_in.sql b/Open-ILS/src/sql/Pg/upgrade/XXXX.LP1170795_Deposit_refunds_not_applying_as_expected_on_item_check_in.sql
new file mode 100755 (executable)
index 0000000..11eb4c8
--- /dev/null
@@ -0,0 +1,17 @@
+
+BEGIN;
+
+
+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 depsoit fee upon checkin',
+        'coust', 'label'),
+    oils_i18n_gettext('circ.void_item_deposit',
+        'This will cause the deposit fee to be voided upon checkin',
+        'coust', 'description'),
+    'bool', null);
+    
+COMMIT;
\ No newline at end of file