Bug 17578: GetMemberDetails - Remove GetMemberDetails
All the values different from the ones GetMember returned has been managed outside of GetMemberDetails. It looks safe to replace all the occurrences of GetMemberDetails with GetMember. Signed-off-by: Josef Moravec <josef.moravec@gmail.com> Signed-off-by: Nick Clemens <nick@bywatersolutions.com> Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
This commit is contained in:
parent
69018a7930
commit
b59df2bce7
|
|
@ -570,7 +570,7 @@ C<$issuingimpossible> and C<$needsconfirmation> are some hashref.
|
|||
|
||||
=over 4
|
||||
|
||||
=item C<$borrower> hash with borrower informations (from GetMember or GetMemberDetails)
|
||||
=item C<$borrower> hash with borrower informations (from GetMember)
|
||||
|
||||
=item C<$barcode> is the bar code of the book being issued.
|
||||
|
||||
|
|
@ -1230,7 +1230,7 @@ Issue a book. Does no check, they are done in CanBookBeIssued. If we reach this
|
|||
|
||||
=over 4
|
||||
|
||||
=item C<$borrower> is a hash with borrower informations (from GetMember or GetMemberDetails).
|
||||
=item C<$borrower> is a hash with borrower informations (from GetMember).
|
||||
|
||||
=item C<$barcode> is the barcode of the item being issued.
|
||||
|
||||
|
|
@ -1828,7 +1828,7 @@ sub AddReturn {
|
|||
|
||||
my $issue = GetItemIssue($itemnumber);
|
||||
if ($issue and $issue->{borrowernumber}) {
|
||||
$borrower = C4::Members::GetMemberDetails($issue->{borrowernumber})
|
||||
$borrower = C4::Members::GetMember( borrowernumber => $issue->{borrowernumber} )
|
||||
or die "Data inconsistency: barcode $barcode (itemnumber:$itemnumber) claims to be issued to non-existent borrowernumber '$issue->{borrowernumber}'\n"
|
||||
. Dumper($issue) . "\n";
|
||||
} else {
|
||||
|
|
@ -2984,7 +2984,7 @@ sub AddRenewal {
|
|||
|
||||
# Send a renewal slip according to checkout alert preferencei
|
||||
if ( C4::Context->preference('RenewalSendNotice') eq '1' ) {
|
||||
$borrower = C4::Members::GetMemberDetails( $borrowernumber, 0 );
|
||||
$borrower = C4::Members::GetMember( borrowernumber => $borrowernumber );
|
||||
my $circulation_alert = 'C4::ItemCirculationAlertPreference';
|
||||
my %conditions = (
|
||||
branchcode => $branch,
|
||||
|
|
@ -3093,7 +3093,7 @@ sub GetSoonestRenewDate {
|
|||
my $itemissue = GetItemIssue($itemnumber) or return;
|
||||
|
||||
$borrowernumber ||= $itemissue->{borrowernumber};
|
||||
my $borrower = C4::Members::GetMemberDetails($borrowernumber)
|
||||
my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber )
|
||||
or return;
|
||||
|
||||
my $branchcode = _GetCircControlBranch( $item, $borrower );
|
||||
|
|
@ -3757,7 +3757,7 @@ sub LostItem{
|
|||
|
||||
# If a borrower lost the item, add a replacement cost to the their record
|
||||
if ( my $borrowernumber = $issues->{borrowernumber} ){
|
||||
my $borrower = C4::Members::GetMemberDetails( $borrowernumber );
|
||||
my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber );
|
||||
|
||||
if (C4::Context->preference('WhenLostForgiveFine')){
|
||||
my $fix = _FixOverduesOnReturn($borrowernumber, $itemnumber, 1, 0); # 1, 0 = exemptfine, no-dropbox
|
||||
|
|
@ -3853,7 +3853,7 @@ sub ProcessOfflineReturn {
|
|||
sub ProcessOfflineIssue {
|
||||
my $operation = shift;
|
||||
|
||||
my $borrower = C4::Members::GetMemberDetails( undef, $operation->{cardnumber} ); # Get borrower from operation cardnumber
|
||||
my $borrower = C4::Members::GetMember( cardnumber => $operation->{cardnumber} );
|
||||
|
||||
if ( $borrower->{borrowernumber} ) {
|
||||
my $itemnumber = C4::Items::GetItemnumberFromBarcode( $operation->{barcode} );
|
||||
|
|
|
|||
|
|
@ -456,7 +456,7 @@ sub GetPatronStatus {
|
|||
|
||||
# Get Member details
|
||||
my $borrowernumber = $cgi->param('patron_id');
|
||||
my $borrower = GetMemberDetails( $borrowernumber );
|
||||
my $borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
|
||||
|
||||
# Return the results
|
||||
|
|
@ -485,7 +485,7 @@ sub GetServices {
|
|||
|
||||
# Get the member, or return an error code if not found
|
||||
my $borrowernumber = $cgi->param('patron_id');
|
||||
my $borrower = GetMemberDetails( $borrowernumber );
|
||||
my $borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
|
||||
|
||||
# Get the item, or return an error code if not found
|
||||
|
|
@ -557,7 +557,7 @@ sub RenewLoan {
|
|||
|
||||
# Get borrower infos or return an error code
|
||||
my $borrowernumber = $cgi->param('patron_id');
|
||||
my $borrower = GetMemberDetails( $borrowernumber );
|
||||
my $borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
|
||||
|
||||
# Get the item, or return an error code
|
||||
|
|
@ -607,7 +607,7 @@ sub HoldTitle {
|
|||
|
||||
# Get the borrower or return an error code
|
||||
my $borrowernumber = $cgi->param('patron_id');
|
||||
my $borrower = GetMemberDetails( $borrowernumber );
|
||||
my $borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
|
||||
|
||||
# Get the biblio record, or return an error code
|
||||
|
|
@ -675,7 +675,7 @@ sub HoldItem {
|
|||
|
||||
# Get the borrower or return an error code
|
||||
my $borrowernumber = $cgi->param('patron_id');
|
||||
my $borrower = GetMemberDetails( $borrowernumber );
|
||||
my $borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
|
||||
|
||||
# Get the biblio or return an error code
|
||||
|
|
@ -742,7 +742,7 @@ sub CancelHold {
|
|||
|
||||
# Get the borrower or return an error code
|
||||
my $borrowernumber = $cgi->param('patron_id');
|
||||
my $borrower = GetMemberDetails( $borrowernumber );
|
||||
my $borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
return { code => 'PatronNotFound' } unless $$borrower{borrowernumber};
|
||||
|
||||
# Get the reserve or return an error code
|
||||
|
|
|
|||
|
|
@ -60,7 +60,6 @@ BEGIN {
|
|||
@ISA = qw(Exporter);
|
||||
#Get data
|
||||
push @EXPORT, qw(
|
||||
&GetMemberDetails
|
||||
&GetMember
|
||||
|
||||
&GetMemberIssuesAndFines
|
||||
|
|
@ -122,56 +121,6 @@ This module contains routines for adding, modifying and deleting members/patrons
|
|||
|
||||
=head1 FUNCTIONS
|
||||
|
||||
=head2 GetMemberDetails
|
||||
|
||||
($borrower) = &GetMemberDetails($borrowernumber, $cardnumber);
|
||||
|
||||
Looks up a patron and returns information about him or her. If
|
||||
C<$borrowernumber> is true (nonzero), C<&GetMemberDetails> looks
|
||||
up the borrower by number; otherwise, it looks up the borrower by card
|
||||
number.
|
||||
|
||||
C<$borrower> is a reference-to-hash whose keys are the fields of the
|
||||
borrowers table in the Koha database. In addition,
|
||||
|
||||
=cut
|
||||
|
||||
sub GetMemberDetails {
|
||||
my ( $borrowernumber, $cardnumber ) = @_;
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $query;
|
||||
my $sth;
|
||||
if ($borrowernumber) {
|
||||
$sth = $dbh->prepare("
|
||||
SELECT borrowers.*,
|
||||
category_type,
|
||||
categories.description,
|
||||
FROM borrowers
|
||||
LEFT JOIN categories ON borrowers.categorycode=categories.categorycode
|
||||
WHERE borrowernumber = ?
|
||||
");
|
||||
$sth->execute($borrowernumber);
|
||||
}
|
||||
elsif ($cardnumber) {
|
||||
$sth = $dbh->prepare("
|
||||
SELECT borrowers.*,
|
||||
category_type,
|
||||
categories.description,
|
||||
FROM borrowers
|
||||
LEFT JOIN categories ON borrowers.categorycode = categories.categorycode
|
||||
WHERE cardnumber = ?
|
||||
");
|
||||
$sth->execute($cardnumber);
|
||||
}
|
||||
else {
|
||||
return;
|
||||
}
|
||||
my $borrower = $sth->fetchrow_hashref;
|
||||
return unless $borrower;
|
||||
|
||||
return ($borrower);
|
||||
}
|
||||
|
||||
=head2 patronflags
|
||||
|
||||
$flags = &patronflags($patron);
|
||||
|
|
|
|||
|
|
@ -37,8 +37,8 @@ sub new {
|
|||
syslog("LOG_DEBUG", "new ILS::Patron(%s): no such patron", $patron_id);
|
||||
return;
|
||||
}
|
||||
$kp = GetMemberDetails($kp->{borrowernumber});
|
||||
$debug and warn "new Patron (GetMemberDetails): " . Dumper($kp);
|
||||
$kp = GetMember( borrowernumber => $kp->{borrowernumber});
|
||||
$debug and warn "new Patron (GetMember): " . Dumper($kp);
|
||||
my $pw = $kp->{password};
|
||||
my $flags = C4::Members::patronflags( $kp );
|
||||
my $debarred = defined($flags->{DBARRED});
|
||||
|
|
|
|||
|
|
@ -265,7 +265,7 @@ if ($findborrower) {
|
|||
my $patron;
|
||||
if ($borrowernumber) {
|
||||
$patron = Koha::Patrons->find( $borrowernumber );
|
||||
$borrower = GetMemberDetails( $borrowernumber, 0 );
|
||||
$borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
my ( $od, $issue, $fines ) = GetMemberIssuesAndFines( $borrowernumber );
|
||||
|
||||
# if the expiry date is before today ie they have expired
|
||||
|
|
@ -444,7 +444,7 @@ if (@$barcodes) {
|
|||
|
||||
# reload the borrower info for the sake of reseting the flags.....
|
||||
if ($borrowernumber) {
|
||||
$borrower = GetMemberDetails( $borrowernumber, 0 );
|
||||
$borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
}
|
||||
|
||||
##################################################################################
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
|
|||
my $borrowernumber = $input->param('borrowernumber');
|
||||
|
||||
# Set informations for the patron
|
||||
my $borrower = GetMemberDetails( $borrowernumber, 0 );
|
||||
my $borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
foreach my $key ( keys %$borrower ) {
|
||||
$template->param( $key => $borrower->{$key} );
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ my $branch = C4::Context->userenv->{'branch'};
|
|||
# get the borrower information.....
|
||||
my $borrower;
|
||||
if ($borrowernumber) {
|
||||
$borrower = GetMemberDetails( $borrowernumber, 0 );
|
||||
$borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
|
|||
my $borrowernumber = $input->param('borrowernumber');
|
||||
|
||||
# Set informations for the patron
|
||||
my $borrower = GetMemberDetails( $borrowernumber, 0 );
|
||||
my $borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
if ( not defined $borrower ) {
|
||||
$template->param (unknowuser => 1);
|
||||
output_html_with_http_headers $input, $cookie, $template->output;
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ $0 [--field=FIELD [--field=FIELD [...]]] [--separator=CHAR] [--show-header] [--w
|
|||
$0 -h
|
||||
|
||||
-f, --field=FIELD Field to export. It is repeatable and has to match
|
||||
keys returned by the GetMemberDetails function.
|
||||
keys returned by the GetMember function.
|
||||
If no field is specified, then all fields will be
|
||||
exported.
|
||||
-s, --separator=CHAR This character will be used to separate fields.
|
||||
|
|
@ -99,7 +99,8 @@ my $csv = Text::CSV->new( { sep_char => $separator, binary => 1 } );
|
|||
# If the user did not specify any field to export, we assume he wants them all
|
||||
# We retrieve the first borrower informations to get field names
|
||||
my ($borrowernumber) = $sth->fetchrow_array or die "No borrower to export";
|
||||
my $member = GetMemberDetails($borrowernumber);
|
||||
my $member = GetMember($borrowernumber); # FIXME Now is_expired is no longer available
|
||||
# We will have to use Koha::Patron and allow method calls
|
||||
@fields = keys %$member unless (@fields);
|
||||
|
||||
if ($show_header) {
|
||||
|
|
@ -120,7 +121,7 @@ die "Invalid character at borrower $borrowernumber: ["
|
|||
print $csv->string . "\n";
|
||||
|
||||
while ( my $borrowernumber = $sth->fetchrow_array ) {
|
||||
$member = GetMemberDetails($borrowernumber);
|
||||
$member = GetMember( borrowernumber => $borrowernumber );
|
||||
$csv->combine(
|
||||
map {
|
||||
( defined $member->{$_} and !ref $member->{$_} )
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ else {
|
|||
}
|
||||
|
||||
$template->param(
|
||||
borrower => GetMemberDetails($borrowernumber),
|
||||
borrower => GetMember( borrowernumber => $borrowernumber ),
|
||||
accountview => 1
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
|
|||
);
|
||||
|
||||
# get borrower information ....
|
||||
my ( $borr ) = GetMemberDetails( $borrowernumber );
|
||||
my ( $borr ) = GetMember( borrowernumber => $borrowernumber );
|
||||
|
||||
$template->param(%{$borr});
|
||||
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ else {
|
|||
$branchcode = $item->{'homebranch'};
|
||||
}
|
||||
elsif ( $renewalbranch eq 'patronhomebranch' ) {
|
||||
my $borrower = GetMemberDetails($borrowernumber);
|
||||
my $borrower = GetMember( borrowernumber => $borrowernumber );
|
||||
$branchcode = $borrower->{'branchcode'};
|
||||
}
|
||||
elsif ( $renewalbranch eq 'checkoutbranch' ) {
|
||||
|
|
|
|||
|
|
@ -70,7 +70,7 @@ sub get_out {
|
|||
}
|
||||
|
||||
# get borrower information ....
|
||||
my ( $borr ) = GetMemberDetails( $borrowernumber );
|
||||
my ( $borr ) = GetMember( borrowernumber => $borrowernumber );
|
||||
my $patron = Koha::Patrons->find( $borrowernumber );
|
||||
|
||||
# check if this user can place a reserve, -1 means use sys pref, 0 means dont block, 1 means block
|
||||
|
|
@ -449,7 +449,7 @@ foreach my $biblioNum (@biblionumbers) {
|
|||
|
||||
# checking reserve
|
||||
my ($reservedate,$reservedfor,$expectedAt,undef,$wait) = GetReservesFromItemnumber($itemNum);
|
||||
my $ItemBorrowerReserveInfo = GetMemberDetails( $reservedfor, 0);
|
||||
my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $reservedfor );
|
||||
|
||||
# the item could be reserved for this borrower vi a host record, flag this
|
||||
$reservedfor //= '';
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ use C4::Koha;
|
|||
use C4::Output;
|
||||
use C4::Circulation;
|
||||
use C4::Biblio;
|
||||
use C4::Members qw/GetMemberDetails/;
|
||||
use C4::Members qw/GetMember/;
|
||||
use Koha::DateUtils;
|
||||
use Koha::Reviews;
|
||||
use POSIX qw(ceil floor strftime);
|
||||
|
|
@ -92,7 +92,7 @@ for my $result (@$reviews){
|
|||
my $bib = &GetBiblioData($biblionumber);
|
||||
my $record = GetMarcBiblio($biblionumber);
|
||||
my $frameworkcode = GetFrameworkCode($biblionumber);
|
||||
my ( $borr ) = GetMemberDetails( $result->{borrowernumber} );
|
||||
my ( $borr ) = GetMember( borrowernumber => $result->{borrowernumber} );
|
||||
$result->{normalized_upc} = GetNormalizedUPC($record,$marcflavour);
|
||||
$result->{normalized_ean} = GetNormalizedEAN($record,$marcflavour);
|
||||
$result->{normalized_oclc} = GetNormalizedOCLCNumber($record,$marcflavour);
|
||||
|
|
|
|||
|
|
@ -195,7 +195,7 @@ my $patron_reason_loop = GetAuthorisedValues("OPAC_SUG");
|
|||
|
||||
# Is the person allowed to choose their branch
|
||||
if ( C4::Context->preference("AllowPurchaseSuggestionBranchChoice") ) {
|
||||
my ( $borr ) = GetMemberDetails( $borrowernumber );
|
||||
my ( $borr ) = GetMember( borrowernumber => $borrowernumber );
|
||||
|
||||
# pass the pickup branch along....
|
||||
my $userbranch = '';
|
||||
|
|
|
|||
|
|
@ -85,7 +85,7 @@ if (!$borrowernumber) {
|
|||
}
|
||||
|
||||
# get borrower information ....
|
||||
my ( $borr ) = GetMemberDetails( $borrowernumber );
|
||||
my ( $borr ) = GetMember( borrowernumber => $borrowernumber );
|
||||
|
||||
my ( $today_year, $today_month, $today_day) = Today();
|
||||
my ($warning_year, $warning_month, $warning_day) = split /-/, $borr->{'dateexpiry'};
|
||||
|
|
|
|||
|
|
@ -106,14 +106,14 @@ my ($op, $patronid, $patronlogin, $patronpw, $barcode, $confirmed) = (
|
|||
|
||||
my $issuenoconfirm = 1; #don't need to confirm on issue.
|
||||
#warn "issuerid: " . $issuerid;
|
||||
my $issuer = GetMemberDetails($issuerid);
|
||||
my $issuer = GetMember( borrowernumber => $issuerid );
|
||||
my $item = GetItem(undef,$barcode);
|
||||
if (C4::Context->preference('SelfCheckoutByLogin') && !$patronid) {
|
||||
my $dbh = C4::Context->dbh;
|
||||
my $resval;
|
||||
($resval, $patronid) = checkpw($dbh, $patronlogin, $patronpw);
|
||||
}
|
||||
my $borrower = GetMemberDetails(undef,$patronid);
|
||||
my $borrower = GetMember( cardnumber => $patronid );
|
||||
|
||||
my $currencySymbol = "";
|
||||
if ( my $active_currency = Koha::Acquisition::Currencies->get_active ) {
|
||||
|
|
@ -131,7 +131,7 @@ if ($op eq "logout") {
|
|||
elsif ( $op eq "returnbook" && $allowselfcheckreturns ) {
|
||||
my ($doreturn) = AddReturn( $barcode, $branch );
|
||||
#warn "returnbook: " . $doreturn;
|
||||
$borrower = GetMemberDetails(undef,$patronid);
|
||||
$borrower = GetMember( cardnumber => $patronid );
|
||||
}
|
||||
elsif ( $op eq "checkout" ) {
|
||||
my $impossible = {};
|
||||
|
|
|
|||
|
|
@ -76,7 +76,7 @@ my $borrowernumber = C4::Members::AddMember(
|
|||
userid => 'TESTUSERID'
|
||||
);
|
||||
|
||||
my $borrower = C4::Members::GetMemberDetails( $borrowernumber );
|
||||
my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber );
|
||||
|
||||
C4::Acquisition::ModOrderUsers( $ordernumber, $borrowernumber );
|
||||
|
||||
|
|
|
|||
|
|
@ -96,7 +96,7 @@ my %data = (
|
|||
my $addmem=AddMember(%data);
|
||||
ok($addmem, "AddMember()");
|
||||
|
||||
my $member=GetMemberDetails("",$CARDNUMBER)
|
||||
my $member = GetMember( cardnumber => $CARDNUMBER )
|
||||
or BAIL_OUT("Cannot read member with card $CARDNUMBER");
|
||||
|
||||
ok ( $member->{firstname} eq $FIRSTNAME &&
|
||||
|
|
@ -113,7 +113,7 @@ $member->{email} = $EMAIL;
|
|||
$member->{phone} = $PHONE;
|
||||
$member->{emailpro} = $EMAILPRO;
|
||||
ModMember(%$member);
|
||||
my $changedmember=GetMemberDetails("",$CARDNUMBER);
|
||||
my $changedmember = GetMember( cardnumber => $CARDNUMBER );
|
||||
ok ( $changedmember->{firstname} eq $CHANGED_FIRSTNAME &&
|
||||
$changedmember->{email} eq $EMAIL &&
|
||||
$changedmember->{phone} eq $PHONE &&
|
||||
|
|
|
|||
|
|
@ -41,7 +41,7 @@ SKIP: {
|
|||
sub try_issue {
|
||||
my ($cardnumber, $item ) = @_;
|
||||
my $issuedate = '2011-05-16';
|
||||
my $borrower = GetMemberDetails(0, $cardnumber);
|
||||
my $borrower = GetMember( cardnumber => $cardnumber );
|
||||
my ($issuingimpossible,$needsconfirmation) = CanBookBeIssued( $borrower, $item );
|
||||
my $issue = AddIssue($borrower, $item, undef, 0, $issuedate);
|
||||
return dt_from_string( $issue->due_date() );
|
||||
|
|
|
|||
|
|
@ -136,7 +136,7 @@ if ($do_it) {
|
|||
|
||||
#always add firstname and surname for librarian/user
|
||||
if ( $result->{'user'} ) {
|
||||
my $userdetails = C4::Members::GetMemberDetails( $result->{'user'} );
|
||||
my $userdetails = C4::Members::GetMember( borrowernumber => $result->{'user'} );
|
||||
if ($userdetails) {
|
||||
$result->{'userfirstname'} = $userdetails->{'firstname'};
|
||||
$result->{'usersurname'} = $userdetails->{'surname'};
|
||||
|
|
@ -146,7 +146,7 @@ if ($do_it) {
|
|||
#add firstname and surname for borrower, when using the CIRCULATION, MEMBERS, FINES
|
||||
if ( $result->{module} eq "CIRCULATION" || $result->{module} eq "MEMBERS" || $result->{module} eq "FINES" ) {
|
||||
if ( $result->{'object'} ) {
|
||||
my $borrowerdetails = C4::Members::GetMemberDetails( $result->{'object'} );
|
||||
my $borrowerdetails = C4::Members::GetMember( borrowernumber => $result->{'object'} );
|
||||
if ($borrowerdetails) {
|
||||
$result->{'borrowerfirstname'} = $borrowerdetails->{'firstname'};
|
||||
$result->{'borrowersurname'} = $borrowerdetails->{'surname'};
|
||||
|
|
|
|||
Loading…
Reference in New Issue