From f6989d16818934890a7c254ee63b8c8514e62224 Mon Sep 17 00:00:00 2001
From: Kyle M Hall <kyle@bywatersolutions.com>
Date: Thu, 11 May 2017 00:44:12 +0000
Subject: [PATCH] Bug 18626 - Add ability to track cardnumber changes for
 patrons

Some libraries want to keep a history of cardnumber changes for a
patron. This is a feature that another ILS has.

Test Plan:
1) Apply this patch
2) Enable the BorrowersLog
3) Modify a patron, update his or her cardnumber
4) Notice the entry in the action log containing the old and new cardnumbers
5) Edit a patron, leave the cardnumber the same
6) Note there is no cardnumber change entry in the action logs
7) Disable BorrowersLog, modify a patron cardnumber
8) Note there is no cardnumber change entry in teh action logs
---
 C4/Members.pm | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/C4/Members.pm b/C4/Members.pm
index b61f0b1..0dd107a 100644
--- a/C4/Members.pm
+++ b/C4/Members.pm
@@ -26,6 +26,7 @@ use C4::Context;
 use String::Random qw( random_string );
 use Scalar::Util qw( looks_like_number );
 use Date::Calc qw/Today check_date Date_to_Days/;
+use JSON qw(to_json);
 use C4::Log; # logaction
 use C4::Overdues;
 use C4::Reserves;
@@ -392,6 +393,25 @@ sub ModMember {
 
     my $patron = Koha::Patrons->find( $new_borrower->{borrowernumber} );
 
+    my $borrowers_log = C4::Context->preference("BorrowersLog");
+    if ( $borrowers_log && $patron->cardnumber ne $new_borrower->{cardnumber} )
+    {
+        logaction(
+            "MEMBERS",
+            "MODIFY",
+            $data{'borrowernumber'},
+            to_json(
+                {
+                    cardnumber_replaced => {
+                        previous_cardnumber => $patron->cardnumber,
+                        new_cardnumber      => $new_borrower->{cardnumber},
+                    }
+                },
+                { utf8 => 1, pretty => 1 }
+            )
+        );
+    }
+
     delete $new_borrower->{userid} if exists $new_borrower->{userid} and not $new_borrower->{userid};
 
     my $execute_success = $patron->store if $patron->set($new_borrower);
@@ -423,7 +443,7 @@ sub ModMember {
             Koha::NorwegianPatronDB::NLSync({ 'borrowernumber' => $data{'borrowernumber'} });
         }
 
-        logaction("MEMBERS", "MODIFY", $data{'borrowernumber'}, "UPDATE (executed w/ arg: $data{'borrowernumber'})") if C4::Context->preference("BorrowersLog");
+        logaction("MEMBERS", "MODIFY", $data{'borrowernumber'}, "UPDATE (executed w/ arg: $data{'borrowernumber'})") if $borrowers_log;
     }
     return $execute_success;
 }
-- 
2.1.4