JBAS-2153 Limit lost refund tracking by ptype/cirdmod
authorBill Erickson <berickxx@gmail.com>
Wed, 28 Nov 2018 16:14:00 +0000 (11:14 -0500)
committerBill Erickson <berickxx@gmail.com>
Thu, 21 Mar 2019 19:46:23 +0000 (15:46 -0400)
Only track as refundable cash/check payments for checkouts on refunable
circ modifiers.

Signed-off-by: Bill Erickson <berickxx@gmail.com>
Open-ILS/xul/staff_client/server/patron/bill2.js

index f2ca8e8..708e821 100644 (file)
@@ -263,6 +263,8 @@ function event_listeners() {
  * being processed OR if the dialog is manually skipped.
  * Returns payment args (with 2ndry auth data) on successful Submit.
  */
+// TODO: move this designation into the database
+var NO_REFUND_CIRC_MODIFIERS = ['1', '7', '45', '46', '66', '40', '41'];
 function handle_lost_payment_dialog(payment_blob) {
 
     var lostpaid_xacts = [];
@@ -274,11 +276,16 @@ function handle_lost_payment_dialog(payment_blob) {
         row_ids.forEach(function(row_id) {
             var row_params = g.row_map[row_id];
             var circ = row_params.row.my.circ;
-            if (!circ) return;
-            if (circ.id() == xact[0]) {
-                if (circ.stop_fines() == 'LOST' && !circ.checkin_time()) {
-                    lostpaid_xacts.push(xact[0]);
-                }
+            var copy = row_params.row.my.acp;
+
+            if (!circ || !copy) return;
+            if (circ.id() != xact[0]) return;
+
+            if (circ.stop_fines() == 'LOST' && // lost payment
+                !circ.checkin_time()        && // still checked out
+                NO_REFUND_CIRC_MODIFIERS.indexOf(''+copy.circ_modifier()) < 0) {
+
+                lostpaid_xacts.push(xact[0]);
             }
         });
     });
@@ -1185,8 +1192,12 @@ function apply_payment() {
             return;
         }
 
-        payment_blob = handle_lost_payment_dialog(payment_blob);
-        if (payment_blob === null) return; // payment canceled via dialog
+        if (payment_blob.payment_type == 'cash_payment' || 
+            payment_blob.payment_type == 'check_payment') {
+            payment_blob = handle_lost_payment_dialog(payment_blob);
+
+            if (payment_blob === null) return; // canceled via dialog
+        }
 
         if ( pay( payment_blob ) ) {