Bugzilla – Attachment 64872 Details for
Bug 17829
Move GetMember to Koha::Patron
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 17829: Move GetMember to Koha::Patron
Bug-17829-Move-GetMember-to-KohaPatron.patch (text/plain), 250.53 KB, created by
Jonathan Druart
on 2017-07-06 19:16:16 UTC
(
hide
)
Description:
Bug 17829: Move GetMember to Koha::Patron
Filename:
MIME Type:
Creator:
Jonathan Druart
Created:
2017-07-06 19:16:16 UTC
Size:
250.53 KB
patch
obsolete
>From 7d23b1504da0651ce2e8602254ddae27d84b444f Mon Sep 17 00:00:00 2001 >From: Jonathan Druart <jonathan.druart@bugs.koha-community.org> >Date: Thu, 29 Dec 2016 14:24:03 +0100 >Subject: [PATCH] Bug 17829: Move GetMember to Koha::Patron > >GetMember returned a patron given a borrowernumber, cardnumber or >userid. >All of these 3 attributes are defined as a unique key at the DB level >and so we can use Koha::Patrons->find to replace this subroutine. >Additionaly GetMember set category_type and description. > >Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com> >--- > C4/Acquisition.pm | 19 ++- > C4/Auth.pm | 7 +- > C4/Budgets.pm | 5 +- > C4/Circulation.pm | 188 +++++++++++---------- > C4/HoldsQueue.pm | 11 +- > C4/ILSDI/Services.pm | 54 +++--- > C4/Letters.pm | 30 ++-- > C4/Members.pm | 63 ------- > C4/Reserves.pm | 35 ++-- > C4/SIP/ILS/Item.pm | 28 ++- > C4/SIP/ILS/Patron.pm | 10 +- > C4/SIP/ILS/Transaction/Hold.pm | 20 +-- > C4/SIP/ILS/Transaction/Renew.pm | 6 +- > C4/SIP/ILS/Transaction/RenewAll.pm | 4 +- > acqui/acqui-home.pl | 12 +- > acqui/addorderiso2709.pl | 10 +- > acqui/basket.pl | 12 +- > acqui/basketgroup.pl | 8 +- > acqui/booksellers.pl | 14 +- > acqui/neworderbiblio.pl | 6 +- > acqui/neworderempty.pl | 11 +- > acqui/orderreceive.pl | 11 +- > acqui/transferorder.pl | 5 +- > admin/aqbudgets.pl | 15 +- > catalogue/ISBDdetail.pl | 10 +- > catalogue/MARCdetail.pl | 10 +- > catalogue/detail.pl | 18 +- > catalogue/imageviewer.pl | 10 +- > catalogue/labeledMARCdetail.pl | 10 +- > catalogue/moredetail.pl | 15 +- > catalogue/search.pl | 14 +- > cataloguing/additem.pl | 3 +- > circ/branchtransfers.pl | 13 +- > circ/circulation.pl | 70 ++++---- > circ/returns.pl | 112 ++++++------ > circ/transferstoreceive.pl | 14 +- > circ/waitingreserves.pl | 15 +- > members/boraccount.pl | 18 +- > members/deletemem.pl | 54 +++--- > members/discharge.pl | 49 +++--- > members/files.pl | 11 +- > members/housebound.pl | 2 +- > members/mancredit.pl | 18 +- > members/maninvoice.pl | 20 +-- > members/member-flags.pl | 18 +- > members/member-password.pl | 19 ++- > members/member.pl | 11 +- > members/memberentry.pl | 14 +- > members/moremember.pl | 21 +-- > members/notices.pl | 11 +- > members/pay.pl | 7 +- > members/paycollect.pl | 7 +- > members/printfeercpt.pl | 12 +- > members/printinvoice.pl | 12 +- > members/purchase-suggestions.pl | 17 +- > members/readingrec.pl | 15 +- > members/routing-lists.pl | 29 ++-- > members/statistics.pl | 14 +- > members/summary-print.pl | 7 +- > members/update-child.pl | 4 +- > misc/cronjobs/advance_notices.pl | 5 +- > misc/cronjobs/notice_unprocessed_suggestions.pl | 20 +-- > misc/export_borrowers.pl | 17 +- > misc/load_testing/benchmark_staff.pl | 4 +- > offline_circ/list.pl | 9 +- > offline_circ/process_koc.pl | 15 +- > opac/opac-ISBDdetail.pl | 6 +- > opac/opac-MARCdetail.pl | 5 +- > opac/opac-account-pay-paypal-return.pl | 5 +- > opac/opac-account.pl | 10 +- > opac/opac-detail.pl | 23 +-- > opac/opac-discharge.pl | 6 +- > opac/opac-memberentry.pl | 23 +-- > opac/opac-messaging.pl | 5 +- > opac/opac-passwd.pl | 7 +- > opac/opac-readingrecord.pl | 4 +- > opac/opac-registration-verify.pl | 5 +- > opac/opac-renew.pl | 3 +- > opac/opac-reserve.pl | 30 ++-- > opac/opac-sendbasket.pl | 9 +- > opac/opac-sendshelf.pl | 7 +- > opac/opac-shelves.pl | 7 +- > opac/opac-showreviews.pl | 4 +- > opac/opac-suggestions.pl | 8 +- > opac/opac-user.pl | 2 +- > opac/sco/sco-main.pl | 8 +- > patroncards/create-pdf.pl | 4 +- > patroncards/edit-batch.pl | 5 +- > reserve/placerequest.pl | 6 +- > reserve/request.pl | 76 ++++----- > reviews/reviewswaiting.pl | 8 +- > serials/routing-preview.pl | 3 +- > serials/routing.pl | 3 +- > suggestion/suggestion.pl | 22 +-- > svc/members/search | 5 +- > t/db_dependent/Acquisition/OrderUsers.t | 2 - > t/db_dependent/Circulation.t | 23 +-- > t/db_dependent/Circulation/Branch.t | 1 - > t/db_dependent/Circulation/CheckIfIssuedToPatron.t | 5 +- > .../Circulation/GetPendingOnSiteCheckouts.t | 4 +- > t/db_dependent/Circulation/GetTopIssues.t | 3 +- > t/db_dependent/Circulation/IsItemIssued.t | 3 +- > .../Circulation/IssuingRules/maxsuspensiondays.t | 4 +- > t/db_dependent/Circulation/Returns.t | 5 +- > t/db_dependent/Circulation/issue.t | 25 +-- > t/db_dependent/Holds/RevertWaitingStatus.t | 4 +- > t/db_dependent/Koha/Patrons.t | 2 +- > t/db_dependent/Members.t | 37 ++-- > t/db_dependent/Members/GetAllIssues.t | 5 +- > t/db_dependent/Members/GetOverdues.t | 3 +- > t/db_dependent/Members/GetPendingIssues.t | 5 +- > t/db_dependent/Members/IssueSlip.t | 3 +- > t/db_dependent/Patron/Borrower_Debarments.t | 3 +- > t/db_dependent/Patron/Borrower_Discharge.t | 2 +- > t/db_dependent/Patron/Borrower_PrevCheckout.t | 13 +- > t/db_dependent/Reserves.t | 3 +- > t/db_dependent/Utils/Datatables_Members.t | 15 ++ > t/db_dependent/rollingloans.t | 7 +- > tools/batchMod.pl | 3 +- > tools/import_borrowers.pl | 4 +- > tools/modborrowers.pl | 3 +- > tools/picture-upload.pl | 1 - > tools/viewlog.pl | 26 +-- > virtualshelves/shelves.pl | 5 +- > 124 files changed, 946 insertions(+), 940 deletions(-) > >diff --git a/C4/Acquisition.pm b/C4/Acquisition.pm >index b3b72b95ce..50c91a43e4 100644 >--- a/C4/Acquisition.pm >+++ b/C4/Acquisition.pm >@@ -34,6 +34,7 @@ use Koha::Biblios; > use Koha::Number::Price; > use Koha::Libraries; > use Koha::CsvProfiles; >+use Koha::Patrons; > > use C4::Koha; > >@@ -804,7 +805,7 @@ AcqViewBaskets, user permissions and basket properties (creator, users list, > branch). > > First parameter can be either a borrowernumber or a hashref as returned by >-C4::Members::GetMember. >+Koha::Patron->unblessed > > Second parameter can be either a basketno or a hashref as returned by > C4::Acquisition::GetBasket. >@@ -821,7 +822,7 @@ sub CanUserManageBasket { > my ($borrower, $basket, $userflags) = @_; > > if (!ref $borrower) { >- $borrower = C4::Members::GetMember(borrowernumber => $borrower); >+ $borrower = Koha::Patrons->find( $borrower ); > } > if (!ref $basket) { > $basket = GetBasket($basket); >@@ -829,7 +830,7 @@ sub CanUserManageBasket { > > return 0 unless ($basket and $borrower); > >- my $borrowernumber = $borrower->{borrowernumber}; >+ my $borrowernumber = $borrower->borrowernumber; > my $basketno = $basket->{basketno}; > > my $AcqViewBaskets = C4::Context->preference('AcqViewBaskets'); >@@ -841,7 +842,7 @@ sub CanUserManageBasket { > my ($flags) = $sth->fetchrow_array; > $sth->finish; > >- $userflags = C4::Auth::getuserflags($flags, $borrower->{userid}, $dbh); >+ $userflags = C4::Auth::getuserflags($flags, $borrower->userid, $dbh); > } > > unless ($userflags->{superlibrarian} >@@ -864,7 +865,7 @@ sub CanUserManageBasket { > } > > if ($AcqViewBaskets eq 'branch' && defined $basket->{branch} >- && $basket->{branch} ne $borrower->{branchcode}) { >+ && $basket->{branch} ne $borrower->branchcode) { > return 0; > } > } >@@ -3081,17 +3082,17 @@ sub NotifyOrderUsers { > > my $order = GetOrder( $ordernumber ); > for my $borrowernumber (@borrowernumbers) { >- my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ); >- my $library = Koha::Libraries->find( $borrower->{branchcode} )->unblessed; >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ my $library = $patron->library->unblessed; > my $biblio = C4::Biblio::GetBiblio( $order->{biblionumber} ); > my $letter = C4::Letters::GetPreparedLetter( > module => 'acquisition', > letter_code => 'ACQ_NOTIF_ON_RECEIV', > branchcode => $library->{branchcode}, >- lang => $borrower->{lang}, >+ lang => $patron->lang, > tables => { > 'branches' => $library, >- 'borrowers' => $borrower, >+ 'borrowers' => $patron->unblessed, > 'biblio' => $biblio, > 'aqorders' => $order, > }, >diff --git a/C4/Auth.pm b/C4/Auth.pm >index e7b0895160..b1e7824d4f 100644 >--- a/C4/Auth.pm >+++ b/C4/Auth.pm >@@ -211,7 +211,6 @@ sub get_template_and_user { > > my $borrowernumber; > if ($user) { >- require C4::Members; > > # It's possible for $user to be the borrowernumber if they don't have a > # userid defined (and are logging in through some other method, such >@@ -219,8 +218,9 @@ sub get_template_and_user { > my $borrower; > $borrowernumber = getborrowernumber($user) if defined($user); > if ( !defined($borrowernumber) && defined($user) ) { >- $borrower = C4::Members::GetMember( borrowernumber => $user ); >+ $borrower = Koha::Patrons->find( $user ); > if ($borrower) { >+ $borrower = $borrower->unblessed; > $borrowernumber = $user; > > # A bit of a hack, but I don't know there's a nicer way >@@ -228,7 +228,8 @@ sub get_template_and_user { > $user = $borrower->{firstname} . ' ' . $borrower->{surname}; > } > } else { >- $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ); >+ $borrower = Koha::Patrons->find( $borrowernumber ); >+ $borrower->unblessed if $borrower; # FIXME Otherwise, what to do? > } > > # user info >diff --git a/C4/Budgets.pm b/C4/Budgets.pm >index c68fbecd3e..f05d234781 100644 >--- a/C4/Budgets.pm >+++ b/C4/Budgets.pm >@@ -21,6 +21,7 @@ use strict; > #use warnings; FIXME - Bug 2505 > use C4::Context; > use Koha::Database; >+use Koha::Patrons; > use C4::Debug; > use vars qw(@ISA @EXPORT); > >@@ -915,7 +916,7 @@ sub CanUserUseBudget { > my ($borrower, $budget, $userflags) = @_; > > if (not ref $borrower) { >- $borrower = C4::Members::GetMember(borrowernumber => $borrower); >+ $borrower = Koha::Patrons->find( $borrower )->unblessed; > } > if (not ref $budget) { > $budget = GetBudget($budget); >@@ -998,7 +999,7 @@ sub CanUserModifyBudget { > my ($borrower, $budget, $userflags) = @_; > > if (not ref $borrower) { >- $borrower = C4::Members::GetMember(borrowernumber => $borrower); >+ $borrower = Koha::Patrons->find( $borrower )->unblessed; > } > if (not ref $budget) { > $budget = GetBudget($budget); >diff --git a/C4/Circulation.pm b/C4/Circulation.pm >index 6303c86824..e1cf09bad7 100644 >--- a/C4/Circulation.pm >+++ b/C4/Circulation.pm >@@ -572,7 +572,7 @@ C<$issuingimpossible> and C<$needsconfirmation> are some hashref. > > =over 4 > >-=item C<$borrower> hash with borrower informations (from GetMember) >+=item C<$borrower> hash with borrower informations (from Koha::Patron->unblessed) > > =item C<$barcode> is the bar code of the book being issued. > >@@ -970,8 +970,8 @@ sub CanBookBeIssued { > elsif ( $issue ) { > > # issued to someone else >- my $currborinfo = C4::Members::GetMember( borrowernumber => $issue->borrowernumber ); > >+ my $patron = Koha::Patrons->find( $issue->borrowernumber ); > > my ( $can_be_returned, $message ) = CanBookBeReturned( $item, C4::Context->userenv->{branch} ); > >@@ -980,10 +980,10 @@ sub CanBookBeIssued { > $issuingimpossible{branch_to_return} = $message; > } else { > $needsconfirmation{ISSUED_TO_ANOTHER} = 1; >- $needsconfirmation{issued_firstname} = $currborinfo->{'firstname'}; >- $needsconfirmation{issued_surname} = $currborinfo->{'surname'}; >- $needsconfirmation{issued_cardnumber} = $currborinfo->{'cardnumber'}; >- $needsconfirmation{issued_borrowernumber} = $currborinfo->{'borrowernumber'}; >+ $needsconfirmation{issued_firstname} = $patron->firstname; >+ $needsconfirmation{issued_surname} = $patron->surname; >+ $needsconfirmation{issued_cardnumber} = $patron->cardnumber; >+ $needsconfirmation{issued_borrowernumber} = $patron->borrowernumber; > } > } > >@@ -993,28 +993,28 @@ sub CanBookBeIssued { > if ($restype) { > my $resbor = $res->{'borrowernumber'}; > if ( $resbor ne $borrower->{'borrowernumber'} ) { >- my ( $resborrower ) = C4::Members::GetMember( borrowernumber => $resbor ); >+ my $patron = Koha::Patrons->find( $resbor ); > if ( $restype eq "Waiting" ) > { > # The item is on reserve and waiting, but has been > # reserved by some other patron. > $needsconfirmation{RESERVE_WAITING} = 1; >- $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'}; >- $needsconfirmation{'ressurname'} = $resborrower->{'surname'}; >- $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'}; >- $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'}; >+ $needsconfirmation{'resfirstname'} = $patron->firstname; >+ $needsconfirmation{'ressurname'} = $patron->surname; >+ $needsconfirmation{'rescardnumber'} = $patron->cardnumber; >+ $needsconfirmation{'resborrowernumber'} = $patron->borrowernumber; > $needsconfirmation{'resbranchcode'} = $res->{branchcode}; > $needsconfirmation{'reswaitingdate'} = $res->{'waitingdate'}; > } > elsif ( $restype eq "Reserved" ) { > # The item is on reserve for someone else. > $needsconfirmation{RESERVED} = 1; >- $needsconfirmation{'resfirstname'} = $resborrower->{'firstname'}; >- $needsconfirmation{'ressurname'} = $resborrower->{'surname'}; >- $needsconfirmation{'rescardnumber'} = $resborrower->{'cardnumber'}; >- $needsconfirmation{'resborrowernumber'} = $resborrower->{'borrowernumber'}; >- $needsconfirmation{'resbranchcode'} = $res->{branchcode}; >- $needsconfirmation{'resreservedate'} = $res->{'reservedate'}; >+ $needsconfirmation{'resfirstname'} = $patron->firstname; >+ $needsconfirmation{'ressurname'} = $patron->surname; >+ $needsconfirmation{'rescardnumber'} = $patron->cardnumber; >+ $needsconfirmation{'resborrowernumber'} = $patron->borrowernumber; >+ $needsconfirmation{'resbranchcode'} = $patron->branchcode; >+ $needsconfirmation{'resreservedate'} = $res->{reservedate}; > } > } > } >@@ -1238,7 +1238,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). >+=item C<$borrower> is a hash with borrower informations (from Koha::Patron->unblessed). > > =item C<$barcode> is the barcode of the item being issued. > >@@ -1816,7 +1816,7 @@ sub AddReturn { > } > $branch = C4::Context->userenv->{'branch'} unless $branch; # we trust userenv to be a safe fallback/default > my $messages; >- my $borrower; >+ my $patron; > my $doreturn = 1; > my $validTransfert = 0; > my $stat_type = 'return'; >@@ -1835,7 +1835,7 @@ sub AddReturn { > > my $issue = Koha::Checkouts->find( { itemnumber => $itemnumber } ); > if ( $issue ) { >- $borrower = C4::Members::GetMember( borrowernumber => $issue->borrowernumber ) >+ $patron = Koha::Patrons->find( $issue->borrowernumber ) > or die "Data inconsistency: barcode $barcode (itemnumber:$itemnumber) claims to be issued to non-existent borrowernumber '" . $issue->borrowernumber . "'\n" > . Dumper($issue->unblessed) . "\n"; > } else { >@@ -1868,7 +1868,8 @@ sub AddReturn { > my $returnbranch = $item->{$hbr} || $branch ; > # if $hbr was "noreturn" or any other non-item table value, then it should 'float' (i.e. stay at this branch) > >- my $borrowernumber = $borrower->{'borrowernumber'} || undef; # we don't know if we had a borrower or not >+ my $borrowernumber = $patron ? $patron->borrowernumber : undef; # we don't know if we had a borrower or not >+ my $patron_unblessed = $patron ? $patron->unblessed : {}; > > my $yaml = C4::Context->preference('UpdateNotForLoanStatusOnCheckin'); > if ($yaml) { >@@ -1907,7 +1908,7 @@ sub AddReturn { > Rightbranch => $message > }; > $doreturn = 0; >- return ( $doreturn, $messages, $issue, $borrower ); >+ return ( $doreturn, $messages, $issue, $patron_unblessed); > } > > if ( $item->{'withdrawn'} ) { # book has been cancelled >@@ -1921,28 +1922,28 @@ sub AddReturn { > if ($doreturn) { > my $is_overdue; > die "The item is not issed and cannot be returned" unless $issue; # Just in case... >- $borrower or warn "AddReturn without current borrower"; >+ $patron or warn "AddReturn without current borrower"; > my $circControlBranch; > if ($dropbox) { > # define circControlBranch only if dropbox mode is set > # don't allow dropbox mode to create an invalid entry in issues (issuedate > today) > # FIXME: check issuedate > returndate, factoring in holidays > >- $circControlBranch = _GetCircControlBranch($item,$borrower); >+ $circControlBranch = _GetCircControlBranch($item,$patron_unblessed); > $is_overdue = $issue->is_overdue( $dropboxdate ); > } else { > $is_overdue = $issue->is_overdue; > } > >- if ($borrowernumber) { >+ if ($patron) { > eval { > my $issue_id = MarkIssueReturned( $borrowernumber, $item->{'itemnumber'}, >- $circControlBranch, $return_date, $borrower->{'privacy'} ); >+ $circControlBranch, $return_date, $patron->privacy ); > $issue->issue_id($issue_id); > }; > unless ( $@ ) { > if ( ( C4::Context->preference('CalculateFinesOnReturn') && $is_overdue ) || $return_date ) { >- _CalculateAndUpdateFine( { issue => $issue, item => $item, borrower => $borrower, return_date => $return_date } ); >+ _CalculateAndUpdateFine( { issue => $issue, item => $item, borrower => $patron_unblessed, return_date => $return_date } ); > } > } else { > $messages->{'Wrongbranch'} = { >@@ -1950,7 +1951,7 @@ sub AddReturn { > Rightbranch => $message > }; > carp $@; >- return ( 0, { WasReturned => 0 }, $issue, $borrower ); >+ return ( 0, { WasReturned => 0 }, $issue, $patron_unblessed ); > } > > # FIXME is the "= 1" right? This could be the borrower hash. >@@ -2022,22 +2023,22 @@ sub AddReturn { > if ( $issue and $issue->is_overdue ) { > # fix fine days > $today = $dropboxdate if $dropbox; >- my ($debardate,$reminder) = _debar_user_on_return( $borrower, $item, dt_from_string($issue->date_due), $today ); >+ my ($debardate,$reminder) = _debar_user_on_return( $patron_unblessed, $item, dt_from_string($issue->date_due), $today ); > if ($reminder){ > $messages->{'PrevDebarred'} = $debardate; > } else { > $messages->{'Debarred'} = $debardate if $debardate; > } > # there's no overdue on the item but borrower had been previously debarred >- } elsif ( $issue->date_due and $borrower->{'debarred'} ) { >- if ( $borrower->{debarred} eq "9999-12-31") { >- $messages->{'ForeverDebarred'} = $borrower->{'debarred'}; >+ } elsif ( $issue->date_due and $patron->debarred ) { >+ if ( $patron->debarred eq "9999-12-31") { >+ $messages->{'ForeverDebarred'} = $patron->debarred; > } else { >- my $borrower_debar_dt = dt_from_string( $borrower->{debarred} ); >+ my $borrower_debar_dt = dt_from_string( $patron->debarred ); > $borrower_debar_dt->truncate(to => 'day'); > my $today_dt = $today->clone()->truncate(to => 'day'); > if ( DateTime->compare( $borrower_debar_dt, $today_dt ) != -1 ) { >- $messages->{'PrevDebarred'} = $borrower->{'debarred'}; >+ $messages->{'PrevDebarred'} = $patron->debarred; > } > } > } >@@ -2063,29 +2064,31 @@ sub AddReturn { > ccode => $item->{ ccode } > }); > >- # Send a check-in slip. # NOTE: borrower may be undef. probably shouldn't try to send messages then. >- my $circulation_alert = 'C4::ItemCirculationAlertPreference'; >- my %conditions = ( >- branchcode => $branch, >- categorycode => $borrower->{categorycode}, >- item_type => $item->{itype}, >- notification => 'CHECKIN', >- ); >- if ($doreturn && $circulation_alert->is_enabled_for(\%conditions)) { >- SendCirculationAlert({ >- type => 'CHECKIN', >- item => $item, >- borrower => $borrower, >- branch => $branch, >- }); >- } >- >- logaction("CIRCULATION", "RETURN", $borrowernumber, $item->{'itemnumber'}) >- if C4::Context->preference("ReturnLog"); >- >+ # Send a check-in slip. # NOTE: borrower may be undef. Do not try to send messages then. >+ if ( $patron ) { >+ my $circulation_alert = 'C4::ItemCirculationAlertPreference'; >+ my %conditions = ( >+ branchcode => $branch, >+ categorycode => $patron->categorycode, >+ item_type => $item->{itype}, >+ notification => 'CHECKIN', >+ ); >+ if ($doreturn && $circulation_alert->is_enabled_for(\%conditions)) { >+ SendCirculationAlert({ >+ type => 'CHECKIN', >+ item => $item, >+ borrower => $patron->unblessed, >+ branch => $branch, >+ }); >+ } >+ >+ logaction("CIRCULATION", "RETURN", $borrowernumber, $item->{'itemnumber'}) >+ if C4::Context->preference("ReturnLog"); >+ } >+ > # Remove any OVERDUES related debarment if the borrower has no overdues > if ( $borrowernumber >- && $borrower->{'debarred'} >+ && $patron->debarred > && C4::Context->preference('AutoRemoveOverduesRestrictions') > && !Koha::Patrons->find( $borrowernumber )->has_overdues > && @{ GetDebarments({ borrowernumber => $borrowernumber, type => 'OVERDUES' }) } >@@ -2108,7 +2111,7 @@ sub AddReturn { > } > } > >- return ( $doreturn, $messages, $issue, $borrower ); >+ return ( $doreturn, $messages, $issue, ( $patron ? $patron->unblessed : {} )); > } > > =head2 MarkIssueReturned >@@ -2145,7 +2148,7 @@ sub MarkIssueReturned { > # Note that a warning should appear on the about page (System information tab). > $anonymouspatron = C4::Context->preference('AnonymousPatron'); > die "Fatal error: the patron ($borrowernumber) has requested their circulation history be anonymized on check-in, but the AnonymousPatron system preference is empty or not set correctly." >- unless C4::Members::GetMember( borrowernumber => $anonymouspatron ); >+ unless Koha::Patrons->find( $anonymouspatron ); > } > my $database = Koha::Database->new(); > my $schema = $database->schema; >@@ -2628,7 +2631,7 @@ sub CanBookBeRenewed { > return ( 0, 'onsite_checkout' ) if $issue->onsite_checkout; > > $borrowernumber ||= $issue->borrowernumber; >- my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) >+ my $patron = Koha::Patrons->find( $borrowernumber ) > or return; > > my ( $resfound, $resrec, undef ) = C4::Reserves::CheckReserves($itemnumber); >@@ -2682,7 +2685,7 @@ sub CanBookBeRenewed { > my $item = GetItem($i); > next if IsItemOnHoldAndFound($i); > for my $b (@borrowernumbers) { >- my $borr = $borrowers{$b}//= C4::Members::GetMember(borrowernumber => $b); >+ my $borr = $borrowers{$b} //= Koha::Patrons->find( $b )->unblessed; > next unless IsAvailableForItemLevelRequest($item, $borr); > next unless CanItemBeReserved($b,$i); > >@@ -2700,9 +2703,9 @@ sub CanBookBeRenewed { > > return ( 1, undef ) if $override_limit; > >- my $branchcode = _GetCircControlBranch( $item, $borrower ); >+ my $branchcode = _GetCircControlBranch( $item, $patron->unblessed ); > my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule( >- { categorycode => $borrower->{categorycode}, >+ { categorycode => $patron->categorycode, > itemtype => $item->{itype}, > branchcode => $branchcode > } >@@ -2713,7 +2716,7 @@ sub CanBookBeRenewed { > > my $overduesblockrenewing = C4::Context->preference('OverduesBlockRenewing'); > my $restrictionblockrenewing = C4::Context->preference('RestrictionBlockRenewing'); >- my $patron = Koha::Patrons->find($borrowernumber); >+ $patron = Koha::Patrons->find($borrowernumber); # FIXME Is this really useful? > my $restricted = $patron->is_debarred; > my $hasoverdues = $patron->has_overdues; > >@@ -2747,7 +2750,7 @@ sub CanBookBeRenewed { > > if ( C4::Context->preference('OPACFineNoRenewalsBlockAutoRenew') ) { > my $fine_no_renewals = C4::Context->preference("OPACFineNoRenewals"); >- my ( $amountoutstanding ) = C4::Members::GetMemberAccountRecords($borrower->{borrowernumber}); >+ my ( $amountoutstanding ) = C4::Members::GetMemberAccountRecords($patron->borrowernumber); > if ( $amountoutstanding and $amountoutstanding > $fine_no_renewals ) { > return ( 0, "auto_too_much_oweing" ); > } >@@ -2839,10 +2842,11 @@ sub AddRenewal { > return; > } > >- my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) or return; >+ my $patron = Koha::Patrons->find( $borrowernumber ) or return; # FIXME Should do more than just return >+ my $patron_unblessed = $patron->unblessed; > > if ( C4::Context->preference('CalculateFinesOnReturn') && $issue->is_overdue ) { >- _CalculateAndUpdateFine( { issue => $issue, item => $item, borrower => $borrower } ); >+ _CalculateAndUpdateFine( { issue => $issue, item => $item, borrower => $patron_unblessed } ); > } > _FixOverduesOnReturn( $borrowernumber, $itemnumber ); > >@@ -2856,7 +2860,7 @@ sub AddRenewal { > $datedue = (C4::Context->preference('RenewalPeriodBase') eq 'date_due') ? > dt_from_string( $issue->date_due, 'sql' ) : > DateTime->now( time_zone => C4::Context->tz()); >- $datedue = CalcDateDue($datedue, $itemtype, _GetCircControlBranch($item, $borrower), $borrower, 'is a renewal'); >+ $datedue = CalcDateDue($datedue, $itemtype, _GetCircControlBranch($item, $patron_unblessed), $patron_unblessed, 'is a renewal'); > } > > # Update the issues record to have the new due date, and a new count >@@ -2893,11 +2897,10 @@ sub AddRenewal { > > # Send a renewal slip according to checkout alert preferencei > if ( C4::Context->preference('RenewalSendNotice') eq '1' ) { >- $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ); > my $circulation_alert = 'C4::ItemCirculationAlertPreference'; > my %conditions = ( > branchcode => $branch, >- categorycode => $borrower->{categorycode}, >+ categorycode => $patron->categorycode, > item_type => $item->{itype}, > notification => 'CHECKOUT', > ); >@@ -2906,7 +2909,7 @@ sub AddRenewal { > { > type => 'RENEWAL', > item => $item, >- borrower => $borrower, >+ borrower => $patron->unblessed, > branch => $branch, > } > ); >@@ -2914,10 +2917,9 @@ sub AddRenewal { > } > > # Remove any OVERDUES related debarment if the borrower has no overdues >- $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ); >- if ( $borrowernumber >- && $borrower->{'debarred'} >- && !Koha::Patrons->find( $borrowernumber )->has_overdues >+ if ( $patron >+ && $patron->is_debarred >+ && ! $patron->has_overdues > && @{ GetDebarments({ borrowernumber => $borrowernumber, type => 'OVERDUES' }) } > ) { > DelUniqueDebarment({ borrowernumber => $borrowernumber, type => 'OVERDUES' }); >@@ -2949,8 +2951,10 @@ sub GetRenewCount { > my $renewsallowed = 0; > my $renewsleft = 0; > >- my $borrower = C4::Members::GetMember( borrowernumber => $bornum); >- my $item = GetItem($itemno); >+ my $patron = Koha::Patrons->find( $bornum ); >+ my $item = GetItem($itemno); >+ >+ return (0, 0, 0) unless $patron or $item; # Wrong call, no renewal allowed > > # Look in the issues table for this item, lent to this borrower, > # and not yet returned. >@@ -2965,16 +2969,16 @@ sub GetRenewCount { > my $data = $sth->fetchrow_hashref; > $renewcount = $data->{'renewals'} if $data->{'renewals'}; > # $item and $borrower should be calculated >- my $branchcode = _GetCircControlBranch($item, $borrower); >+ my $branchcode = _GetCircControlBranch($item, $patron->unblessed); > > my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule( >- { categorycode => $borrower->{categorycode}, >+ { categorycode => $patron->categorycode, > itemtype => $item->{itype}, > branchcode => $branchcode > } > ); > >- $renewsallowed = $issuing_rule ? $issuing_rule->renewalsallowed : undef; # FIXME Just replace undef with 0 to get what we expected. But what about the side-effects? TODO LATER >+ $renewsallowed = $issuing_rule ? $issuing_rule->renewalsallowed : 0; > $renewsleft = $renewsallowed - $renewcount; > if($renewsleft < 0){ $renewsleft = 0; } > return ( $renewcount, $renewsallowed, $renewsleft ); >@@ -3008,12 +3012,12 @@ sub GetSoonestRenewDate { > my $itemissue = Koha::Checkouts->find( { itemnumber => $itemnumber } ) or return; > > $borrowernumber ||= $itemissue->borrowernumber; >- my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) >+ my $patron = Koha::Patrons->find( $borrowernumber ) > or return; > >- my $branchcode = _GetCircControlBranch( $item, $borrower ); >+ my $branchcode = _GetCircControlBranch( $item, $patron->unblessed ); > my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule( >- { categorycode => $borrower->{categorycode}, >+ { categorycode => $patron->categorycode, > itemtype => $item->{itype}, > branchcode => $branchcode > } >@@ -3067,12 +3071,12 @@ sub GetLatestAutoRenewDate { > my $itemissue = Koha::Checkouts->find( { itemnumber => $itemnumber } ) or return; > > $borrowernumber ||= $itemissue->borrowernumber; >- my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ) >+ my $patron = Koha::Patrons->find( $borrowernumber ) > or return; > >- my $branchcode = _GetCircControlBranch( $item, $borrower ); >+ my $branchcode = _GetCircControlBranch( $item, $patron->unblessed ); > my $issuing_rule = Koha::IssuingRules->get_effective_issuing_rule( >- { categorycode => $borrower->{categorycode}, >+ { categorycode => $patron->categorycode, > itemtype => $item->{itype}, > branchcode => $branchcode > } >@@ -3616,12 +3620,12 @@ sub ReturnLostItem{ > my ( $borrowernumber, $itemnum ) = @_; > > MarkIssueReturned( $borrowernumber, $itemnum ); >- my $borrower = C4::Members::GetMember( 'borrowernumber'=>$borrowernumber ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); > my $item = C4::Items::GetItem( $itemnum ); > my $old_note = ($item->{'paidfor'} && ($item->{'paidfor'} ne q{})) ? $item->{'paidfor'}.' / ' : q{}; > my @datearr = localtime(time); > my $date = ( 1900 + $datearr[5] ) . "-" . ( $datearr[4] + 1 ) . "-" . $datearr[3]; >- my $bor = "$borrower->{'firstname'} $borrower->{'surname'} $borrower->{'cardnumber'}"; >+ my $bor = $patron->firstname . ' ' . $patron->surname . ' ' . $patron->cardnumber; > ModItem({ paidfor => $old_note."Paid for by $bor $date" }, undef, $itemnum); > } > >@@ -3640,7 +3644,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::GetMember( borrowernumber => $borrowernumber ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); > > if (C4::Context->preference('WhenLostForgiveFine')){ > my $fix = _FixOverduesOnReturn($borrowernumber, $itemnumber, 1, 0); # 1, 0 = exemptfine, no-dropbox >@@ -3652,7 +3656,7 @@ sub LostItem{ > #warn " $issues->{'borrowernumber'} / $itemnumber "; > } > >- MarkIssueReturned($borrowernumber,$itemnumber,undef,undef,$borrower->{'privacy'}) if $mark_returned; >+ MarkIssueReturned($borrowernumber,$itemnumber,undef,undef,$patron->privacy) if $mark_returned; > } > } > >@@ -3736,16 +3740,16 @@ sub ProcessOfflineReturn { > sub ProcessOfflineIssue { > my $operation = shift; > >- my $borrower = C4::Members::GetMember( cardnumber => $operation->{cardnumber} ); >+ my $patron = Koha::Patrons->find( { cardnumber => $operation->{cardnumber} } ); > >- if ( $borrower->{borrowernumber} ) { >+ if ( $patron ) { > my $itemnumber = C4::Items::GetItemnumberFromBarcode( $operation->{barcode} ); > unless ($itemnumber) { > return "Barcode not found."; > } > my $issue = GetOpenIssue( $itemnumber ); > >- if ( $issue and ( $issue->{borrowernumber} ne $borrower->{borrowernumber} ) ) { # Item already issued to another borrower, mark it returned >+ if ( $issue and ( $issue->{borrowernumber} ne $patron->borrowernumber ) ) { # Item already issued to another patron mark it returned > MarkIssueReturned( > $issue->{borrowernumber}, > $itemnumber, >@@ -3754,7 +3758,7 @@ sub ProcessOfflineIssue { > ); > } > AddIssue( >- $borrower, >+ $patron->unblessed, > $operation->{'barcode'}, > undef, > 1, >diff --git a/C4/HoldsQueue.pm b/C4/HoldsQueue.pm >index 0f2ad221a2..218260e0fd 100755 >--- a/C4/HoldsQueue.pm >+++ b/C4/HoldsQueue.pm >@@ -29,6 +29,7 @@ use C4::Circulation; > use C4::Members; > use C4::Biblio; > use Koha::DateUtils; >+use Koha::Patrons; > > use List::Util qw(shuffle); > use List::MoreUtils qw(any); >@@ -677,11 +678,11 @@ sub CreatePicklistFromItemMap { > my $barcode = $item->{barcode}; > my $itemcallnumber = $item->{itemcallnumber}; > >- my $borrower = GetMember('borrowernumber'=>$borrowernumber); >- my $cardnumber = $borrower->{'cardnumber'}; >- my $surname = $borrower->{'surname'}; >- my $firstname = $borrower->{'firstname'}; >- my $phone = $borrower->{'phone'}; >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ my $cardnumber = $patron->cardnumber; >+ my $surname = $patron->surname; >+ my $firstname = $patron->firstname; >+ my $phone = $patron->phone; > > my $bib = GetBiblioData($biblionumber); > my $title = $bib->{title}; >diff --git a/C4/ILSDI/Services.pm b/C4/ILSDI/Services.pm >index d4d8a96261..036cb6ca2c 100644 >--- a/C4/ILSDI/Services.pm >+++ b/C4/ILSDI/Services.pm >@@ -306,18 +306,12 @@ Parameters: > sub LookupPatron { > my ($cgi) = @_; > >- # Get the borrower... >- my $borrower = GetMember($cgi->param('id_type') => $cgi->param('id')); >- if ( not $borrower->{'borrowernumber'} ) { >+ my $patrons = Koha::Patrons->search( { $cgi->param('id_type') => $cgi->param('id') } ); >+ unless ( $patrons->count ) { > return { message => 'PatronNotFound' }; > } > >- # Build the hashref >- my $patron->{'id'} = $borrower->{'borrowernumber'}; >- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber}; >- >- # ...and return his ID >- return $patron; >+ return { id => $patrons->next->borrowernumber }; > } > > =head2 AuthenticatePatron >@@ -341,9 +335,8 @@ sub AuthenticatePatron { > my ($status, $cardnumber, $userid) = C4::Auth::checkpw( C4::Context->dbh, $username, $password ); > if ( $status ) { > # Get the borrower >- my $borrower = GetMember( cardnumber => $cardnumber ); >- my $patron->{'id'} = $borrower->{'borrowernumber'}; >- return $patron; >+ my $patron = Koha::Patrons->find( { cardnumber => $cardnumber } ); >+ return { id => $patron->borrowernumber }; > } > else { > return { code => 'PatronNotFound' }; >@@ -376,11 +369,11 @@ sub GetPatronInfo { > > # Get Member details > my $borrowernumber = $cgi->param('patron_id'); >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber}; > my $patron = Koha::Patrons->find( $borrowernumber ); >+ return { code => 'PatronNotFound' } unless $patron; > > # Cleaning the borrower hashref >+ my $borrower = $patron->unblessed; > my $flags = C4::Members::patronflags( $borrower ); > $borrower->{'charges'} = $flags->{'CHARGES'}->{'amount'}; > my $library = Koha::Libraries->find( $borrower->{branchcode} ); >@@ -473,14 +466,14 @@ sub GetPatronStatus { > > # Get Member details > my $borrowernumber = $cgi->param('patron_id'); >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber}; >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ return { code => 'PatronNotFound' } unless $patron; > > # Return the results > return { >- type => $$borrower{categorycode}, >+ type => $patron->categorycode, > status => 0, # TODO >- expiry => $$borrower{dateexpiry}, >+ expiry => $patron->dateexpiry, > }; > } > >@@ -503,11 +496,10 @@ sub GetServices { > > # Get the member, or return an error code if not found > my $borrowernumber = $cgi->param('patron_id'); >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber}; >- > my $patron = Koha::Patrons->find( $borrowernumber ); >+ return { code => 'PatronNotFound' } unless $patron; > >+ my $borrower = $patron->unblessed; > # Get the item, or return an error code if not found > my $itemnumber = $cgi->param('item_id'); > my $item = GetItem( $itemnumber ); >@@ -577,8 +569,8 @@ sub RenewLoan { > > # Get borrower infos or return an error code > my $borrowernumber = $cgi->param('patron_id'); >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber}; >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ return { code => 'PatronNotFound' } unless $patron; > > # Get the item, or return an error code > my $itemnumber = $cgi->param('item_id'); >@@ -627,8 +619,8 @@ sub HoldTitle { > > # Get the borrower or return an error code > my $borrowernumber = $cgi->param('patron_id'); >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber}; >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ return { code => 'PatronNotFound' } unless $patron; > > # Get the biblio record, or return an error code > my $biblionumber = $cgi->param('bib_id'); >@@ -647,7 +639,7 @@ sub HoldTitle { > $branch = $cgi->param('pickup_location'); > return { code => 'LocationNotFound' } unless Koha::Libraries->find($branch); > } else { # if the request provide no branch, use the borrower's branch >- $branch = $$borrower{branchcode}; >+ $branch = $patron->branchcode; > } > > # Add the reserve >@@ -695,8 +687,8 @@ sub HoldItem { > > # Get the borrower or return an error code > my $borrowernumber = $cgi->param('patron_id'); >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber}; >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ return { code => 'PatronNotFound' } unless $patron; > > # Get the biblio or return an error code > my $biblionumber = $cgi->param('bib_id'); >@@ -724,7 +716,7 @@ sub HoldItem { > $branch = $cgi->param('pickup_location'); > return { code => 'LocationNotFound' } unless Koha::Libraries->find($branch); > } else { # if the request provide no branch, use the borrower's branch >- $branch = $$borrower{branchcode}; >+ $branch = $patron->branchcode; > } > > # Add the reserve >@@ -762,8 +754,8 @@ sub CancelHold { > > # Get the borrower or return an error code > my $borrowernumber = $cgi->param('patron_id'); >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >- return { code => 'PatronNotFound' } unless $$borrower{borrowernumber}; >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ return { code => 'PatronNotFound' } unless $patron; > > # Get the reserve or return an error code > my $reserve_id = $cgi->param('item_id'); >diff --git a/C4/Letters.pm b/C4/Letters.pm >index ada27943b0..8fbe2e404d 100644 >--- a/C4/Letters.pm >+++ b/C4/Letters.pm >@@ -37,6 +37,7 @@ use Koha::SMS::Providers; > > use Koha::Email; > use Koha::DateUtils qw( format_sqldatetime dt_from_string ); >+use Koha::Patrons; > > use vars qw(@ISA @EXPORT @EXPORT_OK %EXPORT_TAGS); > >@@ -416,8 +417,9 @@ sub SendAlerts { > # find the list of borrowers to alert > my $alerts = getalert( '', 'issue', $subscriptionid ); > foreach (@$alerts) { >- my $borinfo = C4::Members::GetMember('borrowernumber' => $_->{'borrowernumber'}); >- my $email = $borinfo->{email} or next; >+ my $patron = Koha::Patrons->find( $_->{borrowernumber} ); >+ next unless $patron; # Just in case >+ my $email = $patron->email or next; > > # warn "sending issues..."; > my $userenv = C4::Context->userenv; >@@ -430,7 +432,7 @@ sub SendAlerts { > 'branches' => $_->{branchcode}, > 'biblio' => $biblionumber, > 'biblioitems' => $biblionumber, >- 'borrowers' => $borinfo, >+ 'borrowers' => $patron->unblessed, > 'subscription' => $subscriptionid, > 'serial' => $externalid, > }, >@@ -1048,15 +1050,15 @@ sub SendQueuedMessages { > } > elsif ( lc( $message->{'message_transport_type'} ) eq 'sms' ) { > if ( C4::Context->preference('SMSSendDriver') eq 'Email' ) { >- my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} ); >- my $sms_provider = Koha::SMS::Providers->find( $member->{'sms_provider_id'} ); >+ my $patron = Koha::Patrons->find( $message->{borrowernumber} ); >+ my $sms_provider = Koha::SMS::Providers->find( $patron->sms_provider_id ); > unless ( $sms_provider ) { > warn sprintf( "Patron %s has no sms provider id set!", $message->{'borrowernumber'} ) if $params->{'verbose'} or $debug; > _set_message_status( { message_id => $message->{'message_id'}, status => 'failed' } ); > next MESSAGE; > } >- $message->{to_address} ||= $member->{'smsalertnumber'}; >- unless ( $message->{to_address} && $member->{'smsalertnumber'} ) { >+ $message->{to_address} ||= $patron->smsalertnumber; >+ unless ( $message->{to_address} && $patron->smsalertnumber ) { > _set_message_status( { message_id => $message->{'message_id'}, status => 'failed' } ); > warn sprintf( "No smsalertnumber found for patron %s!", $message->{'borrowernumber'} ) if $params->{'verbose'} or $debug; > next MESSAGE; >@@ -1302,10 +1304,10 @@ sub _send_message_by_email { > my $message = shift or return; > my ($username, $password, $method) = @_; > >- my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} ); >+ my $patron = Koha::Patrons->find( $message->{borrowernumber} ); > my $to_address = $message->{'to_address'}; > unless ($to_address) { >- unless ($member) { >+ unless ($patron) { > warn "FAIL: No 'to_address' and INVALID borrowernumber ($message->{borrowernumber})"; > _set_message_status( { message_id => $message->{'message_id'}, > status => 'failed' } ); >@@ -1330,8 +1332,8 @@ sub _send_message_by_email { > my $branch_email = undef; > my $branch_replyto = undef; > my $branch_returnpath = undef; >- if ($member) { >- my $library = Koha::Libraries->find( $member->{branchcode} ); >+ if ($patron) { >+ my $library = $patron->library; > $branch_email = $library->branchemail; > $branch_replyto = $library->branchreplyto; > $branch_returnpath = $library->branchreturnpath; >@@ -1407,9 +1409,9 @@ sub _is_duplicate { > > sub _send_message_by_sms { > my $message = shift or return; >- my $member = C4::Members::GetMember( 'borrowernumber' => $message->{'borrowernumber'} ); >+ my $patron = Koha::Patrons->find( $message->{borrowernumber} ); > >- unless ( $member->{smsalertnumber} ) { >+ unless ( $patron and $patron->smsalertnumber ) { > _set_message_status( { message_id => $message->{'message_id'}, > status => 'failed' } ); > return; >@@ -1421,7 +1423,7 @@ sub _send_message_by_sms { > return; > } > >- my $success = C4::SMS->send_sms( { destination => $member->{'smsalertnumber'}, >+ my $success = C4::SMS->send_sms( { destination => $patron->smsalertnumber, > message => $message->{'content'}, > } ); > _set_message_status( { message_id => $message->{'message_id'}, >diff --git a/C4/Members.pm b/C4/Members.pm >index df5ac26fe2..e898c6fc52 100644 >--- a/C4/Members.pm >+++ b/C4/Members.pm >@@ -60,7 +60,6 @@ BEGIN { > @ISA = qw(Exporter); > #Get data > push @EXPORT, qw( >- &GetMember > > &GetPendingIssues > &GetAllIssues >@@ -280,68 +279,6 @@ sub patronflags { > } > > >-=head2 GetMember >- >- $borrower = &GetMember(%information); >- >-Retrieve the first patron record meeting on criteria listed in the >-C<%information> hash, which should contain one or more >-pairs of borrowers column names and values, e.g., >- >- $borrower = GetMember(borrowernumber => id); >- >-C<&GetBorrower> returns a reference-to-hash whose keys are the fields of >-the C<borrowers> table in the Koha database. >- >-FIXME: GetMember() is used throughout the code as a lookup >-on a unique key such as the borrowernumber, but this meaning is not >-enforced in the routine itself. >- >-=cut >- >-#' >-sub GetMember { >- my ( %information ) = @_; >- if (exists $information{borrowernumber} && !defined $information{borrowernumber}) { >- #passing mysql's kohaadmin?? Makes no sense as a query >- return; >- } >- my $dbh = C4::Context->dbh; >- my $select = >- q{SELECT borrowers.*, categories.category_type, categories.description >- FROM borrowers >- LEFT JOIN categories on borrowers.categorycode=categories.categorycode WHERE }; >- my $more_p = 0; >- my @values = (); >- for (keys %information ) { >- if ($more_p) { >- $select .= ' AND '; >- } >- else { >- $more_p++; >- } >- >- if (defined $information{$_}) { >- $select .= "$_ = ?"; >- push @values, $information{$_}; >- } >- else { >- $select .= "$_ IS NULL"; >- } >- } >- $debug && warn $select, " ",values %information; >- my $sth = $dbh->prepare("$select"); >- $sth->execute(@values); >- my $data = $sth->fetchall_arrayref({}); >- #FIXME interface to this routine now allows generation of a result set >- #so whole array should be returned but bowhere in the current code expects this >- if (@{$data} ) { >- return $data->[0]; >- } >- >- return; >-} >- > =head2 ModMember > > my $success = ModMember(borrowernumber => $borrowernumber, >diff --git a/C4/Reserves.pm b/C4/Reserves.pm >index 97dec5e1b6..6d52d6d10b 100644 >--- a/C4/Reserves.pm >+++ b/C4/Reserves.pm >@@ -226,16 +226,16 @@ sub AddReserve { > > # Send e-mail to librarian if syspref is active > if(C4::Context->preference("emailLibrarianWhenHoldIsPlaced")){ >- my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber); >- my $library = Koha::Libraries->find($borrower->{branchcode})->unblessed; >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ my $library = $patron->library; > if ( my $letter = C4::Letters::GetPreparedLetter ( > module => 'reserves', > letter_code => 'HOLDPLACED', > branchcode => $branch, >- lang => $borrower->{lang}, >+ lang => $patron->lang, > tables => { >- 'branches' => $library, >- 'borrowers' => $borrower, >+ 'branches' => $library->unblessed, >+ 'borrowers' => $patron->unblessed, > 'biblio' => $biblionumber, > 'biblioitems' => $biblionumber, > 'items' => $checkitem, >@@ -243,7 +243,7 @@ sub AddReserve { > }, > ) ) { > >- my $admin_email_address = $library->{'branchemail'} || C4::Context->preference('KohaAdminEmailAddress'); >+ my $admin_email_address = $library->branchemail || C4::Context->preference('KohaAdminEmailAddress'); > > C4::Letters::EnqueueLetter( > { letter => $letter, >@@ -331,7 +331,8 @@ sub CanItemBeReserved { > # item->{itype} will come for biblioitems if necessery > my $item = GetItem($itemnumber); > my $biblioData = C4::Biblio::GetBiblioData( $item->{biblionumber} ); >- my $borrower = C4::Members::GetMember( 'borrowernumber' => $borrowernumber ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ my $borrower = $patron->unblessed; > > # If an item is damaged and we don't allow holds on damaged items, we can stop right here > return 'damaged' >@@ -807,12 +808,12 @@ sub CheckReserves { > if ( $res->{'itemnumber'} == $itemnumber && $res->{'priority'} == 0) { > return ( "Waiting", $res, \@reserves ); # Found it > } else { >- my $borrowerinfo; >+ my $patron; > my $iteminfo; > my $local_hold_match; > > if ($LocalHoldsPriority) { >- $borrowerinfo = C4::Members::GetMember( borrowernumber => $res->{'borrowernumber'} ); >+ $patron = Koha::Patrons->find( $res->{borrowernumber} ); > $iteminfo = C4::Items::GetItem($itemnumber); > > my $local_holds_priority_item_branchcode = >@@ -821,7 +822,7 @@ sub CheckReserves { > ( $LocalHoldsPriorityPatronControl eq 'PickupLibrary' ) > ? $res->{branchcode} > : ( $LocalHoldsPriorityPatronControl eq 'HomeLibrary' ) >- ? $borrowerinfo->{branchcode} >+ ? $patron->branchcode > : undef; > $local_hold_match = > $local_holds_priority_item_branchcode eq >@@ -832,11 +833,11 @@ sub CheckReserves { > if ( ( $res->{'priority'} && $res->{'priority'} < $priority ) || $local_hold_match ) { > $iteminfo ||= C4::Items::GetItem($itemnumber); > next if $res->{itemtype} && $res->{itemtype} ne _get_itype( $iteminfo ); >- $borrowerinfo ||= C4::Members::GetMember( borrowernumber => $res->{'borrowernumber'} ); >- my $branch = GetReservesControlBranch( $iteminfo, $borrowerinfo ); >+ $patron ||= Koha::Patrons->find( $res->{borrowernumber} ); >+ my $branch = GetReservesControlBranch( $iteminfo, $patron->unblessed ); > my $branchitemrule = C4::Circulation::GetBranchItemRule($branch,$iteminfo->{'itype'}); > next if ($branchitemrule->{'holdallowed'} == 0); >- next if (($branchitemrule->{'holdallowed'} == 1) && ($branch ne $borrowerinfo->{'branchcode'})); >+ next if (($branchitemrule->{'holdallowed'} == 1) && ($branch ne $patron->branchcode)); > next if ( ($branchitemrule->{hold_fulfillment_policy} ne 'any') && ($res->{branchcode} ne $iteminfo->{ $branchitemrule->{hold_fulfillment_policy} }) ); > $priority = $res->{'priority'}; > $highest = $res; >@@ -1808,7 +1809,7 @@ sub _koha_notify_reserve { > my $hold = Koha::Holds->find($reserve_id); > my $borrowernumber = $hold->borrowernumber; > >- my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber); >+ my $patron = Koha::Patrons->find( $borrowernumber ); > > # Try to get the borrower's email address > my $to_address = C4::Members::GetNoticeEmailAddress($borrowernumber); >@@ -1825,10 +1826,10 @@ sub _koha_notify_reserve { > my %letter_params = ( > module => 'reserves', > branchcode => $hold->branchcode, >- lang => $borrower->{lang}, >+ lang => $patron->lang, > tables => { > 'branches' => $library, >- 'borrowers' => $borrower, >+ 'borrowers' => $patron->unblessed, > 'biblio' => $hold->biblionumber, > 'biblioitems' => $hold->biblionumber, > 'reserves' => $hold->unblessed, >@@ -1859,7 +1860,7 @@ sub _koha_notify_reserve { > while ( my ( $mtt, $letter_code ) = each %{ $messagingprefs->{transports} } ) { > next if ( > ( $mtt eq 'email' and not $to_address ) # No email address >- or ( $mtt eq 'sms' and not $borrower->{smsalertnumber} ) # No SMS number >+ or ( $mtt eq 'sms' and not $patron->smsalertnumber ) # No SMS number > or ( $mtt eq 'phone' and C4::Context->preference('TalkingTechItivaPhoneNotification') ) # Notice is handled by TalkingTech_itiva_outbound.pl > ); > >diff --git a/C4/SIP/ILS/Item.pm b/C4/SIP/ILS/Item.pm >index 922c24c302..b4a25b7bb8 100644 >--- a/C4/SIP/ILS/Item.pm >+++ b/C4/SIP/ILS/Item.pm >@@ -93,9 +93,9 @@ sub new { > my $issue = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } ); > if ($issue) { > $item->{due_date} = dt_from_string( $issue->date_due, 'sql' )->truncate( to => 'minute' ); >+ my $patron = Koha::Patrons->find( $issue->borrowernumber ); >+ $item->{patron} = $patron->cardnumber; > } >- my $borrower = $issue ? GetMember( borrowernumber => $issue->borrowernumber ) : {}; >- $item->{patron} = $borrower->{'cardnumber'}; > my $biblio = Koha::Biblios->find( $item->{biblionumber } ); > my $holds = $biblio->current_holds->unblessed; > $item->{hold_queue} = $holds; >@@ -176,29 +176,27 @@ sub hold_patron_name { > return $output; > } > >- my $holder = GetMember(borrowernumber=>$borrowernumber); >+ my $holder = Koha::Patrons->find( $borrowernumber ); > unless ($holder) { >- syslog("LOG_ERR", "While checking hold, GetMember failed for borrowernumber '$borrowernumber'"); >+ syslog("LOG_ERR", "While checking hold, failed to retrieve the patron with borrowernumber '$borrowernumber'"); > return; > } >- my $email = $holder->{email} || ''; >- my $phone = $holder->{phone} || ''; >+ my $email = $holder->email || ''; >+ my $phone = $holder->phone || ''; > my $extra = ($email and $phone) ? " ($email, $phone)" : # both populated, employ comma > ($email or $phone) ? " ($email$phone)" : # only 1 populated, we don't care which: no comma > "" ; # neither populated, empty string >- my $name = $holder->{firstname} ? $holder->{firstname} . ' ' : ''; >- $name .= $holder->{surname} . $extra; >+ my $name = $holder->firstname ? $holder->firstname . ' ' : ''; >+ $name .= $holder->surname . $extra; > return $name; > } > > sub hold_patron_bcode { > my $self = shift; > my $borrowernumber = (@_ ? shift: $self->hold_patron_id()) or return; >- my $holder = GetMember(borrowernumber => $borrowernumber); >- if ($holder) { >- if ($holder->{cardnumber}) { >- return $holder->{cardnumber}; >- } >+ my $holder = Koha::Patrons->find( $borrowernumber ); >+ if ($holder and $holder->cardnumber ) { >+ return $holder->cardnumber; > } > return; > } >@@ -360,8 +358,8 @@ sub available { > sub _barcode_to_borrowernumber { > my $known = shift; > return unless defined $known; >- my $member = GetMember(cardnumber=>$known) or return; >- return $member->{borrowernumber}; >+ my $patron = Koha::Patrons->find( { cardnumber => $known } ) or return; >+ return $patron->borrowernumber > } > sub barcode_is_borrowernumber { # because hold_queue only has borrowernumber... > my $self = shift; >diff --git a/C4/SIP/ILS/Patron.pm b/C4/SIP/ILS/Patron.pm >index 391926b06c..d548a18425 100644 >--- a/C4/SIP/ILS/Patron.pm >+++ b/C4/SIP/ILS/Patron.pm >@@ -32,14 +32,14 @@ sub new { > my ($class, $patron_id) = @_; > my $type = ref($class) || $class; > my $self; >- $kp = GetMember(cardnumber=>$patron_id) || GetMember(userid=>$patron_id); >- $debug and warn "new Patron (GetMember): " . Dumper($kp); >- unless (defined $kp) { >+ $kp = Koha::Patrons->find( { cardnumber => $patron_id } ) >+ or Koha::Patrons->find( { userid => $patron_id } ); >+ $debug and warn "new Patron: " . Dumper($kp->unblessed) if $kp; >+ unless ($kp) { > syslog("LOG_DEBUG", "new ILS::Patron(%s): no such patron", $patron_id); > return; > } >- $kp = GetMember( borrowernumber => $kp->{borrowernumber}); >- $debug and warn "new Patron (GetMember): " . Dumper($kp); >+ $kp = $kp->unblessed; > my $pw = $kp->{password}; > my $flags = C4::Members::patronflags( $kp ); > my $debarred = defined($flags->{DBARRED}); >diff --git a/C4/SIP/ILS/Transaction/Hold.pm b/C4/SIP/ILS/Transaction/Hold.pm >index da3ad83da3..904e6f6e73 100644 >--- a/C4/SIP/ILS/Transaction/Hold.pm >+++ b/C4/SIP/ILS/Transaction/Hold.pm >@@ -9,8 +9,8 @@ use strict; > use C4::SIP::ILS::Transaction; > > use C4::Reserves; # AddReserve >-use C4::Members; # GetMember > use C4::Biblio; # GetBiblioFromItemNumber GetBiblioItemByBiblioNumber >+use Koha::Patrons; > use parent qw(C4::SIP::ILS::Transaction); > > >@@ -43,8 +43,8 @@ sub do_hold { > $self->ok(0); > return $self; > } >- my $borrower = GetMember( 'cardnumber' => $self->{patron}->id ); >- unless ($borrower) { >+ my $patron = Koha::Patrons->find( { cardnumber => $self->{patron}->id } ); >+ unless ($patron) { > $self->screen_msg( 'No borrower matches cardnumber "' . $self->{patron}->id . '".' ); > $self->ok(0); > return $self; >@@ -62,7 +62,7 @@ sub do_hold { > return $self; > } > my $bibno = $bib->{biblionumber}; >- AddReserve( $branch, $borrower->{borrowernumber}, $bibno, GetBiblioItemByBiblioNumber($bibno) ); >+ AddReserve( $branch, $patron->borrowernumber, $bibno, GetBiblioItemByBiblioNumber($bibno) ); > > # unfortunately no meaningful return value > $self->ok(1); >@@ -76,8 +76,8 @@ sub drop_hold { > $self->ok(0); > return $self; > } >- my $borrower = GetMember( 'cardnumber'=>$self->{patron}->id); >- unless ($borrower) { >+ my $patron = Koha::Patrons->find( { cardnumber => $self->{patron}->id } ); >+ unless ($patron) { > $self->screen_msg('No borrower matches cardnumber "' . $self->{patron}->id . '".'); > $self->ok(0); > return $self; >@@ -87,7 +87,7 @@ sub drop_hold { > CancelReserve({ > biblionumber => $bib->{biblionumber}, > itemnumber => $self->{item}->id, >- borrowernumber => $borrower->{borrowernumber} >+ borrowernumber => $patron->borrowernumber > }); > > $self->ok(1); >@@ -101,8 +101,8 @@ sub change_hold { > $self->ok(0); > return $self; > } >- my $borrower = GetMember( 'cardnumber'=>$self->{patron}->id); >- unless ($borrower) { >+ my $patron = Koha::Patrons->find( { cardnumber => $self->{patron}->id } ); >+ unless ($patron) { > $self->screen_msg('No borrower matches cardnumber "' . $self->{patron}->id . '".'); > $self->ok(0); > return $self; >@@ -120,7 +120,7 @@ sub change_hold { > return $self; > } > my $bibno = $bib->{biblionumber}; >- ModReserve({ biblionumber => $bibno, borrowernumber => $borrower->{borrowernumber}, branchcode => $branch }); >+ ModReserve({ biblionumber => $bibno, borrowernumber => $patron->borrowernumber, branchcode => $branch }); > > $self->ok(1); > return $self; >diff --git a/C4/SIP/ILS/Transaction/Renew.pm b/C4/SIP/ILS/Transaction/Renew.pm >index 699f5663a4..7e1e9b7496 100644 >--- a/C4/SIP/ILS/Transaction/Renew.pm >+++ b/C4/SIP/ILS/Transaction/Renew.pm >@@ -8,7 +8,7 @@ use warnings; > use strict; > > use C4::Circulation; >-use C4::Members; >+use Koha::Patrons; > use Koha::DateUtils; > > use parent qw(C4::SIP::ILS::Transaction); >@@ -60,8 +60,8 @@ sub do_renew_for { > > sub do_renew { > my $self = shift; >- my $borrower = GetMember( cardnumber => $self->{patron}->id ); >- return $self->do_renew_for($borrower); >+ my $patron = Koha::Patrons->find( { cardnumber => $self->{patron}->id } ); >+ return $self->do_renew_for($patron->unblessed); > } > > 1; >diff --git a/C4/SIP/ILS/Transaction/RenewAll.pm b/C4/SIP/ILS/Transaction/RenewAll.pm >index 845a5092b9..ee4f978c40 100644 >--- a/C4/SIP/ILS/Transaction/RenewAll.pm >+++ b/C4/SIP/ILS/Transaction/RenewAll.pm >@@ -10,7 +10,7 @@ use Sys::Syslog qw(syslog); > > use C4::SIP::ILS::Item; > >-use C4::Members qw( GetMember ); >+use Koha::Patrons; > > use parent qw(C4::SIP::ILS::Transaction::Renew); > >@@ -34,7 +34,7 @@ sub new { > sub do_renew_all { > my $self = shift; > my $patron = $self->{patron}; # SIP's patron >- my $borrower = GetMember( cardnumber => $patron->id ); # Koha's patron >+ my $borrower = Koha::Patrons->find( { cardnumber => $patron->id } )->unblessed; # Koha's patron > my $all_ok = 1; > $self->{renewed} = []; > $self->{unrenewed} = []; >diff --git a/acqui/acqui-home.pl b/acqui/acqui-home.pl >index fe53174e3f..4da1eaf2dc 100755 >--- a/acqui/acqui-home.pl >+++ b/acqui/acqui-home.pl >@@ -38,6 +38,7 @@ use C4::Members; > use C4::Debug; > use C4::Suggestions; > use Koha::Acquisition::Currencies; >+use Koha::Patrons; > > my $query = CGI->new; > my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user( >@@ -70,11 +71,12 @@ my @budget_loop; > foreach my $budget ( @{$budget_arr} ) { > next unless (CanUserUseBudget($loggedinuser, $budget, $userflags)); > >- my $member = GetMember( borrowernumber => $budget->{budget_owner_id} ); >- if ($member) { >- $budget->{budget_owner_firstname} = $member->{'firstname'}; >- $budget->{budget_owner_surname} = $member->{'surname'}; >- $budget->{budget_owner_borrowernumber} = $member->{'borrowernumber'}; >+ my $patron = Koha::Patrons->find( $budget->{budget_owner_id} ); >+ if ( $patron ) { >+ # FIXME should pass the entire object into budget_owner >+ $budget->{budget_owner_firstname} = $patron->firstname; >+ $budget->{budget_owner_surname} = $patron->surname; >+ $budget->{budget_owner_borrowernumber} = $patron->borrowernumber; > } > > if ( !defined $budget->{budget_amount} ) { >diff --git a/acqui/addorderiso2709.pl b/acqui/addorderiso2709.pl >index 5d3ee540af..1469817891 100755 >--- a/acqui/addorderiso2709.pl >+++ b/acqui/addorderiso2709.pl >@@ -47,6 +47,7 @@ use Koha::Libraries; > use Koha::Acquisition::Currencies; > use Koha::Acquisition::Order; > use Koha::Acquisition::Booksellers; >+use Koha::Patrons; > > my $input = new CGI; > my ($template, $loggedinuser, $cookie, $userflags) = get_template_and_user({ >@@ -310,14 +311,14 @@ if ($op eq ""){ > } > } else { > # 3rd add order >- my $patron = C4::Members::GetMember( borrowernumber => $loggedinuser ); >+ my $patron = Koha::Patrons->find( $loggedinuser ); > # get quantity in the MARC record (1 if none) > my $quantity = GetMarcQuantity($marcrecord, C4::Context->preference('marcflavour')) || 1; > my %orderinfo = ( > biblionumber => $biblionumber, > basketno => $cgiparams->{'basketno'}, > quantity => $c_quantity, >- branchcode => $patron->{branchcode}, >+ branchcode => $patron->branchcode, > budget_id => $c_budget_id, > uncertainprice => 1, > sort1 => $c_sort1, >@@ -417,15 +418,14 @@ if ($op eq ""){ > my $budgets = GetBudgets(); > my $budget_id = @$budgets[0]->{'budget_id'}; > # build bookfund list >-my $borrower = GetMember( 'borrowernumber' => $loggedinuser ); >-my ( $flags, $homebranch ) = ( $borrower->{'flags'}, $borrower->{'branchcode'} ); >+my $patron = Koha::Patrons->find( $loggedinuser )->unblessed; > my $budget = GetBudget($budget_id); > > # build budget list > my $budget_loop = []; > my $budgets_hierarchy = GetBudgetHierarchy; > foreach my $r ( @{$budgets_hierarchy} ) { >- next unless (CanUserUseBudget($borrower, $r, $userflags)); >+ next unless (CanUserUseBudget($patron, $r, $userflags)); > if ( !defined $r->{budget_amount} || $r->{budget_amount} == 0 ) { > next; > } >diff --git a/acqui/basket.pl b/acqui/basket.pl >index 244e471a9b..b3dfa8bf11 100755 >--- a/acqui/basket.pl >+++ b/acqui/basket.pl >@@ -30,7 +30,6 @@ use C4::Budgets; > use C4::Contract; > use C4::Debug; > use C4::Biblio; >-use C4::Members qw/GetMember/; #needed for permissions checking for changing basketgroup of a basket > use C4::Items; > use C4::Suggestions; > use Koha::Biblios; >@@ -41,6 +40,7 @@ use Date::Calc qw/Add_Delta_Days/; > use Koha::Database; > use Koha::EDI qw( create_edi_order get_edifact_ean ); > use Koha::CsvProfiles; >+use Koha::Patrons; > > =head1 NAME > >@@ -291,8 +291,8 @@ if ( $op eq 'list' ) { > > #if the basket is closed,and the user has the permission to edit basketgroups, display a list of basketgroups > my ($basketgroup, $basketgroups); >- my $staffuser = GetMember(borrowernumber => $loggedinuser); >- if ($basket->{closedate} && haspermission($staffuser->{userid}, { acquisition => 'group_manage'} )) { >+ my $patron = Koha::Patrons->find($loggedinuser); >+ if ($basket->{closedate} && haspermission($patron->userid, { acquisition => 'group_manage'} )) { > $basketgroups = GetBasketgroups($basket->{booksellerid}); > for my $bg ( @{$basketgroups} ) { > if ($basket->{basketgroupid} && $basket->{basketgroupid} == $bg->{id}){ >@@ -321,8 +321,9 @@ if ( $op eq 'list' ) { > my @basketusers_ids = GetBasketUsers($basketno); > my @basketusers; > foreach my $basketuser_id (@basketusers_ids) { >- my $basketuser = GetMember(borrowernumber => $basketuser_id); >- push @basketusers, $basketuser if $basketuser; >+ # FIXME Could be improved with a search -in >+ my $basket_patron = Koha::Patrons->find( $basketuser_id ); >+ push @basketusers, $basket_patron if $basket_patron; > } > > my $active_currency = Koha::Acquisition::Currencies->get_active; >@@ -375,7 +376,6 @@ if ( $op eq 'list' ) { > if ($basket->{basketgroupid}){ > $basketgroup = GetBasketgroup($basket->{basketgroupid}); > } >- my $borrower= GetMember('borrowernumber' => $loggedinuser); > my $budgets = GetBudgetHierarchy; > my $has_budgets = 0; > foreach my $r (@{$budgets}) { >diff --git a/acqui/basketgroup.pl b/acqui/basketgroup.pl >index 9e50484de7..333e542e3b 100755 >--- a/acqui/basketgroup.pl >+++ b/acqui/basketgroup.pl >@@ -52,11 +52,11 @@ use C4::Output; > use CGI qw ( -utf8 ); > > use C4::Acquisition qw/CloseBasketgroup ReOpenBasketgroup GetOrders GetBasketsByBasketgroup GetBasketsByBookseller ModBasketgroup NewBasketgroup DelBasketgroup GetBasketgroups ModBasket GetBasketgroup GetBasket GetBasketGroupAsCSV/; >-use C4::Members qw/GetMember/; > use Koha::EDI qw/create_edi_order get_edifact_ean/; > > use Koha::Acquisition::Booksellers; > use Koha::ItemTypes; >+use Koha::Patrons; > > our $input=new CGI; > >@@ -273,9 +273,9 @@ if ( $op eq "add" ) { > $template->param( closedbg => 0); > } > # determine default billing and delivery places depending on librarian homebranch and existing basketgroup data >- my $borrower = GetMember( ( 'borrowernumber' => $loggedinuser ) ); >- $billingplace = $billingplace || $borrower->{'branchcode'}; >- $deliveryplace = $deliveryplace || $borrower->{'branchcode'}; >+ my $patron = Koha::Patrons->find( $loggedinuser ); # FIXME Not needed if billingplace and deliveryplace are set >+ $billingplace = $billingplace || $patron->branchcode; >+ $deliveryplace = $deliveryplace || $patron->branchcode; > > $template->param( billingplace => $billingplace ); > $template->param( deliveryplace => $deliveryplace ); >diff --git a/acqui/booksellers.pl b/acqui/booksellers.pl >index 6081269056..de39f675e6 100755 >--- a/acqui/booksellers.pl >+++ b/acqui/booksellers.pl >@@ -60,10 +60,10 @@ use C4::Output; > use CGI qw ( -utf8 ); > > use C4::Acquisition qw/ GetBasketsInfosByBookseller CanUserManageBasket /; >-use C4::Members qw/GetMember/; > use C4::Context; > > use Koha::Acquisition::Booksellers; >+use Koha::Patrons; > > my $query = CGI->new; > my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user( >@@ -99,8 +99,10 @@ if ( $supplier_count == 1 ) { > } > > my $uid; >+# FIXME This script should only be accessed by a valid logged in patron > if ($loggedinuser) { >- $uid = GetMember( borrowernumber => $loggedinuser )->{userid}; >+ # FIXME Should not be needed, logged in patron should be cached >+ $uid = Koha::Patrons->find( $loggedinuser )->userid; > } > > my $userenv = C4::Context::userenv; >@@ -130,13 +132,13 @@ for my $vendor (@suppliers) { > > for my $basket ( @{$baskets} ) { > if (CanUserManageBasket($loggedinuser, $basket, $userflags)) { >- my $member = GetMember( borrowernumber => $basket->{authorisedby} ); >+ my $patron = Koha::Patrons->find( $basket->{authorisedby} ); > foreach (qw(total_items total_biblios expected_items)) { > $basket->{$_} ||= 0; > } >- if($member) { >- $basket->{authorisedby_firstname} = $member->{firstname}; >- $basket->{authorisedby_surname} = $member->{surname}; >+ if ( $patron ) { >+ $basket->{authorisedby_firstname} = $patron->firstname; >+ $basket->{authorisedby_surname} = $patron->surname; > } > if ($basket->{basketgroupid}) { > my $basketgroup = C4::Acquisition::GetBasketgroup($basket->{basketgroupid}); >diff --git a/acqui/neworderbiblio.pl b/acqui/neworderbiblio.pl >index 8c492b74e9..2e65569b15 100755 >--- a/acqui/neworderbiblio.pl >+++ b/acqui/neworderbiblio.pl >@@ -64,13 +64,13 @@ use C4::Biblio; > use C4::Auth; > use C4::Output; > use C4::Koha; >-use C4::Members qw/ GetMember /; > use C4::Budgets qw/ GetBudgetHierarchy /; > > use Koha::Acquisition::Booksellers; > use Koha::SearchEngine; > use Koha::SearchEngine::Search; > use Koha::SearchEngine::QueryBuilder; >+use Koha::Patrons; > > my $input = new CGI; > >@@ -133,8 +133,8 @@ foreach my $result ( @{$marcresults} ) { > > } > >-my $borrower= GetMember('borrowernumber' => $loggedinuser); >-my $budgets = GetBudgetHierarchy(q{},$borrower->{branchcode},$borrower->{borrowernumber}); >+my $patron = Koha::Patrons->find( $loggedinuser ); >+my $budgets = GetBudgetHierarchy(q{},$patron->branchcode,$patron->borrowernumber); > my $has_budgets = 0; > foreach my $r (@{$budgets}) { > if (!defined $r->{budget_amount} || $r->{budget_amount} == 0) { >diff --git a/acqui/neworderempty.pl b/acqui/neworderempty.pl >index c2a5e6fe49..85e0962349 100755 >--- a/acqui/neworderempty.pl >+++ b/acqui/neworderempty.pl >@@ -90,6 +90,7 @@ use C4::ImportBatch qw/GetImportRecordMarc SetImportRecordStatus/; > use Koha::Acquisition::Booksellers; > use Koha::Acquisition::Currencies; > use Koha::ItemTypes; >+use Koha::Patrons; > > our $input = new CGI; > my $booksellerid = $input->param('booksellerid'); # FIXME: else ERROR! >@@ -198,8 +199,9 @@ else { #modify order > > @order_user_ids = GetOrderUsers($ordernumber); > foreach my $order_user_id (@order_user_ids) { >- my $order_user = GetMember(borrowernumber => $order_user_id); >- push @order_users, $order_user if $order_user; >+ # FIXME Could be improved with search -in >+ my $order_patron = Koha::Patrons->find( $order_user_id ); >+ push @order_users, $order_patron if $order_patron; > } > } > >@@ -210,15 +212,14 @@ my @currencies = Koha::Acquisition::Currencies->search; > my $active_currency = Koha::Acquisition::Currencies->get_active; > > # build bookfund list >-my $borrower= GetMember('borrowernumber' => $loggedinuser); >-my ( $flags, $homebranch )= ($borrower->{'flags'},$borrower->{'branchcode'}); >+my $patron = Koha::Patrons->find( $loggedinuser )->unblessed; > > my $budget = GetBudget($budget_id); > # build budget list > my $budget_loop = []; > my $budgets = GetBudgetHierarchy; > foreach my $r (@{$budgets}) { >- next unless (CanUserUseBudget($borrower, $r, $userflags)); >+ next unless (CanUserUseBudget($patron, $r, $userflags)); > if (!defined $r->{budget_amount} || $r->{budget_amount} <0) { > next; > } >diff --git a/acqui/orderreceive.pl b/acqui/orderreceive.pl >index 752beba2f8..f09e3644e2 100755 >--- a/acqui/orderreceive.pl >+++ b/acqui/orderreceive.pl >@@ -76,6 +76,7 @@ use C4::Koha; > use Koha::Acquisition::Booksellers; > use Koha::DateUtils qw( dt_from_string ); > use Koha::ItemTypes; >+use Koha::Patrons; > > my $input = new CGI; > >@@ -180,7 +181,7 @@ if( defined $order->{tax_rate_on_receiving} ) { > my $suggestion = GetSuggestionInfoFromBiblionumber($order->{biblionumber}); > > my $authorisedby = $order->{authorisedby}; >-my $member = GetMember( borrowernumber => $authorisedby ); >+my $authorised_patron = Koha::Patrons->find( $authorisedby ); > > my $budget = GetBudget( $order->{budget_id} ); > >@@ -213,8 +214,8 @@ $template->param( > ecost => $ecost, > unitprice => $unitprice, > tax_rate => $tax_rate, >- memberfirstname => $member->{firstname} || "", >- membersurname => $member->{surname} || "", >+ memberfirstname => $authorised_patron->firstname || "", >+ membersurname => $authorised_patron->surname || "", > invoiceid => $invoice->{invoiceid}, > invoice => $invoice->{invoicenumber}, > datereceived => $datereceived, >@@ -226,7 +227,7 @@ $template->param( > gst_values => \@gst_values, > ); > >-my $borrower = GetMember( 'borrowernumber' => $loggedinuser ); >+my $patron = Koha::Patrons->find( $loggedinuser )->unblessed; > my @budget_loop; > my $periods = GetBudgetPeriods( ); > foreach my $period (@$periods) { >@@ -237,7 +238,7 @@ foreach my $period (@$periods) { > my $budget_hierarchy = GetBudgetHierarchy( $period->{'budget_period_id'} ); > my @funds; > foreach my $r ( @{$budget_hierarchy} ) { >- next unless ( CanUserUseBudget( $borrower, $r, $userflags ) ); >+ next unless ( CanUserUseBudget( $patron, $r, $userflags ) ); > if ( !defined $r->{budget_amount} || $r->{budget_amount} == 0 ) { > next; > } >diff --git a/acqui/transferorder.pl b/acqui/transferorder.pl >index 716c721913..219fb32f99 100755 >--- a/acqui/transferorder.pl >+++ b/acqui/transferorder.pl >@@ -26,7 +26,6 @@ use C4::Auth; > use C4::Output; > use C4::Context; > use C4::Acquisition; >-use C4::Members; > use Koha::Acquisition::Booksellers; > > my $input = new CGI; >@@ -89,8 +88,8 @@ if( $basketno && $ordernumber) { > for( my $i = 0 ; $i < $basketscount ; $i++ ){ > my %line; > %line = %{ $baskets->[$i] }; >- my $createdby = GetMember(borrowernumber => $line{authorisedby}); >- $line{createdby} = "$createdby->{surname}, $createdby->{firstname}"; >+ my $createdby = Koha::Patrons->find( $line{authorisedby} ); >+ $line{createdby} = $createdby ? $createdby->surname . ', ' . $createdby->firstname : ''; > push @basketsloop, \%line unless $line{closedate}; > } > $template->param( >diff --git a/admin/aqbudgets.pl b/admin/aqbudgets.pl >index 97664df13b..0dce9ddd89 100755 >--- a/admin/aqbudgets.pl >+++ b/admin/aqbudgets.pl >@@ -29,12 +29,12 @@ use C4::Auth qw/get_user_subpermissions/; > use C4::Auth; > use C4::Acquisition; > use C4::Budgets; >-use C4::Members; > use C4::Context; > use C4::Output; > use C4::Koha; > use C4::Debug; > use Koha::Acquisition::Currencies; >+use Koha::Patrons; > > my $input = new CGI; > my $dbh = C4::Context->dbh; >@@ -89,8 +89,6 @@ if ( $budget_period_id ) { > > # USED FOR PERMISSION COMPARISON LATER > my $borrower_id = $template->{VARS}->{'USER_INFO'}->{'borrowernumber'}; >-my $user = C4::Members::GetMember( borrowernumber => $borrower_id ); >-my $user_branchcode = $user->{'branchcode'}; > > $template->param( > show_mine => $show_mine, >@@ -117,8 +115,8 @@ if ($op eq 'add_form') { > exit; > } > $dropbox_disabled = BudgetHasChildren($budget_id); >- my $borrower = &GetMember( borrowernumber=>$budget->{budget_owner_id} ); >- $budget->{budget_owner_name} = ( $borrower ? $borrower->{'firstname'} . ' ' . $borrower->{'surname'} : '' ); >+ my $patron = Koha::Patrons->find( $budget->{budget_owner_id} ); >+ $budget->{budget_owner_name} = ( $patron ? $patron->firstname . ' ' . $patron->surname : '' ); > } > > # build budget hierarchy >@@ -155,11 +153,10 @@ if ($op eq 'add_form') { > my @budgetusers = GetBudgetUsers($budget->{budget_id}); > my @budgetusers_loop; > foreach my $borrowernumber (@budgetusers) { >- my $member = C4::Members::GetMember( >- borrowernumber => $borrowernumber); >+ my $patron = Koha::Patrons->find( $borrowernumber ); > push @budgetusers_loop, { >- firstname => $member->{firstname}, >- surname => $member->{surname}, >+ firstname => $patron->firstname, # FIXME Should pass the patron object >+ surname => $patron->surname, > borrowernumber => $borrowernumber > }; > } >diff --git a/catalogue/ISBDdetail.pl b/catalogue/ISBDdetail.pl >index 60b6053dc4..f5fa00a2be 100755 >--- a/catalogue/ISBDdetail.pl >+++ b/catalogue/ISBDdetail.pl >@@ -43,12 +43,12 @@ use CGI qw ( -utf8 ); > use C4::Koha; > use C4::Biblio; > use C4::Items; >-use C4::Members; # to use GetMember > use C4::Serials; # CountSubscriptionFromBiblionumber > use C4::Search; # enabled_staff_search_views > use C4::Acquisition qw(GetOrdersByBiblionumber); > > use Koha::Biblios; >+use Koha::Patrons; > use Koha::RecordProcessor; > > >@@ -107,12 +107,12 @@ my $res = GetISBDView({ > }); > > if($query->cookie("holdfor")){ >- my $holdfor_patron = GetMember('borrowernumber' => $query->cookie("holdfor")); >+ my $holdfor_patron = Koha::Patrons->find( $query->cookie("holdfor") ); > $template->param( > holdfor => $query->cookie("holdfor"), >- holdfor_surname => $holdfor_patron->{'surname'}, >- holdfor_firstname => $holdfor_patron->{'firstname'}, >- holdfor_cardnumber => $holdfor_patron->{'cardnumber'}, >+ holdfor_surname => $holdfor_patron->surname, >+ holdfor_firstname => $holdfor_patron->firstname, >+ holdfor_cardnumber => $holdfor_patron->cardnumber, > ); > } > >diff --git a/catalogue/MARCdetail.pl b/catalogue/MARCdetail.pl >index 6a6bdb4278..2152ffd299 100755 >--- a/catalogue/MARCdetail.pl >+++ b/catalogue/MARCdetail.pl >@@ -56,12 +56,12 @@ use MARC::Record; > use C4::Biblio; > use C4::Items; > use C4::Acquisition; >-use C4::Members; # to use GetMember > use C4::Serials; #uses getsubscriptionsfrombiblionumber GetSubscriptionsFromBiblionumber > use C4::Search; # enabled_staff_search_views > > use Koha::Biblios; > use Koha::BiblioFrameworks; >+use Koha::Patrons; > > use List::MoreUtils qw( uniq ); > >@@ -105,12 +105,12 @@ my $tagslib = &GetMarcStructure(1,$frameworkcode); > my $biblio = GetBiblioData($biblionumber); > > if($query->cookie("holdfor")){ >- my $holdfor_patron = GetMember('borrowernumber' => $query->cookie("holdfor")); >+ my $holdfor_patron = Koha::Patrons->find( $query->cookie("holdfor") ); > $template->param( > holdfor => $query->cookie("holdfor"), >- holdfor_surname => $holdfor_patron->{'surname'}, >- holdfor_firstname => $holdfor_patron->{'firstname'}, >- holdfor_cardnumber => $holdfor_patron->{'cardnumber'}, >+ holdfor_surname => $holdfor_patron->surname, >+ holdfor_firstname => $holdfor_patron->firstname, >+ holdfor_cardnumber => $holdfor_patron->cardnumber, > ); > } > >diff --git a/catalogue/detail.pl b/catalogue/detail.pl >index 3a632b6049..221532fdf3 100755 >--- a/catalogue/detail.pl >+++ b/catalogue/detail.pl >@@ -29,7 +29,6 @@ use C4::Biblio; > use C4::Items; > use C4::Circulation; > use C4::Reserves; >-use C4::Members; # to use GetMember > use C4::Serials; > use C4::XISBN qw(get_xisbns get_biblionumber_from_isbn); > use C4::External::Amazon; >@@ -75,12 +74,13 @@ if ( not defined $record ) { > } > > if($query->cookie("holdfor")){ >- my $holdfor_patron = GetMember('borrowernumber' => $query->cookie("holdfor")); >+ my $holdfor_patron = Koha::Patrons->find( $query->cookie("holdfor") ); > $template->param( >+ # FIXME Should pass the patron object > holdfor => $query->cookie("holdfor"), >- holdfor_surname => $holdfor_patron->{'surname'}, >- holdfor_firstname => $holdfor_patron->{'firstname'}, >- holdfor_cardnumber => $holdfor_patron->{'cardnumber'}, >+ holdfor_surname => $holdfor_patron->surname, >+ holdfor_firstname => $holdfor_patron->firstname, >+ holdfor_cardnumber => $holdfor_patron->cardnumber, > ); > } > >@@ -262,14 +262,14 @@ foreach my $item (@items) { > my $item_object = Koha::Items->find( $item->{itemnumber} ); > my $holds = $item_object->current_holds; > if ( my $first_hold = $holds->next ) { >- my $ItemBorrowerReserveInfo = C4::Members::GetMember( borrowernumber => $first_hold->borrowernumber); # FIXME could be improved >+ my $patron = Koha::Patrons->find( $first_hold->borrowernumber ); > $item->{backgroundcolor} = 'reserved'; > $item->{reservedate} = $first_hold->reservedate; > $item->{ReservedForBorrowernumber} = $first_hold->borrowernumber; >- $item->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'}; >- $item->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'}; >+ $item->{ReservedForSurname} = $patron->surname; >+ $item->{ReservedForFirstname} = $patron->firstname; > $item->{ExpectedAtLibrary} = $first_hold->branchcode; >- $item->{Reservedcardnumber} = $ItemBorrowerReserveInfo->{'cardnumber'}; >+ $item->{Reservedcardnumber} = $patron->cardnumber; > # Check waiting status > $item->{waitingdate} = $first_hold->waitingdate; > } >diff --git a/catalogue/imageviewer.pl b/catalogue/imageviewer.pl >index 3317db1909..b71d1b12d6 100755 >--- a/catalogue/imageviewer.pl >+++ b/catalogue/imageviewer.pl >@@ -30,6 +30,7 @@ use C4::Search; > use C4::Acquisition qw(GetOrdersByBiblionumber); > > use Koha::Biblios; >+use Koha::Patrons; > > my $query = new CGI; > my ( $template, $borrowernumber, $cookie ) = get_template_and_user( >@@ -60,13 +61,12 @@ foreach my $item (@items) { > } > > if ( $query->cookie("holdfor") ) { >- my $holdfor_patron = >- GetMember( 'borrowernumber' => $query->cookie("holdfor") ); >+ my $holdfor_patron = Koha::Patrons->find( $query->cookie("holdfor") ); > $template->param( > holdfor => $query->cookie("holdfor"), >- holdfor_surname => $holdfor_patron->{'surname'}, >- holdfor_firstname => $holdfor_patron->{'firstname'}, >- holdfor_cardnumber => $holdfor_patron->{'cardnumber'}, >+ holdfor_surname => $holdfor_patron->surname, >+ holdfor_firstname => $holdfor_patron->firstname, >+ holdfor_cardnumber => $holdfor_patron->cardnumber, > ); > } > >diff --git a/catalogue/labeledMARCdetail.pl b/catalogue/labeledMARCdetail.pl >index cd07f73135..090326d450 100755 >--- a/catalogue/labeledMARCdetail.pl >+++ b/catalogue/labeledMARCdetail.pl >@@ -27,12 +27,12 @@ use C4::Context; > use C4::Output; > use C4::Biblio; > use C4::Items; >-use C4::Members; # to use GetMember > use C4::Search; # enabled_staff_search_views > use C4::Acquisition qw(GetOrdersByBiblionumber); > > use Koha::Biblios; > use Koha::BiblioFrameworks; >+use Koha::Patrons; > > my $query = new CGI; > my $dbh = C4::Context->dbh; >@@ -71,12 +71,12 @@ my $tagslib = GetMarcStructure(1,$frameworkcode); > my $biblio = GetBiblioData($biblionumber); > > if($query->cookie("holdfor")){ >- my $holdfor_patron = GetMember('borrowernumber' => $query->cookie("holdfor")); >+ my $holdfor_patron = Koha::Patrons->find( $query->cookie("holdfor") ); > $template->param( > holdfor => $query->cookie("holdfor"), >- holdfor_surname => $holdfor_patron->{'surname'}, >- holdfor_firstname => $holdfor_patron->{'firstname'}, >- holdfor_cardnumber => $holdfor_patron->{'cardnumber'}, >+ holdfor_surname => $holdfor_patron->surname, >+ holdfor_firstname => $holdfor_patron->firstname, >+ holdfor_cardnumber => $holdfor_patron->cardnumber, > ); > } > >diff --git a/catalogue/moredetail.pl b/catalogue/moredetail.pl >index 04a0e9d43f..85b491a006 100755 >--- a/catalogue/moredetail.pl >+++ b/catalogue/moredetail.pl >@@ -30,7 +30,6 @@ use C4::Acquisition; > use C4::Output; > use C4::Auth; > use C4::Serials; >-use C4::Members; # to use GetMember > use C4::Search; # enabled_staff_search_views > > use Koha::Acquisition::Booksellers; >@@ -53,12 +52,12 @@ my ($template, $loggedinuser, $cookie) = get_template_and_user( > ); > > if($query->cookie("holdfor")){ >- my $holdfor_patron = GetMember('borrowernumber' => $query->cookie("holdfor")); >+ my $holdfor_patron = Koha::Patrons->find( $query->cookie("holdfor") ); > $template->param( > holdfor => $query->cookie("holdfor"), >- holdfor_surname => $holdfor_patron->{'surname'}, >- holdfor_firstname => $holdfor_patron->{'firstname'}, >- holdfor_cardnumber => $holdfor_patron->{'cardnumber'}, >+ holdfor_surname => $holdfor_patron->surname, >+ holdfor_firstname => $holdfor_patron->firstname, >+ holdfor_cardnumber => $holdfor_patron->cardnumber, > ); > } > >@@ -190,9 +189,9 @@ foreach my $item (@items){ > > unless ($hidepatronname) { > if ( $item->{'borrowernumber'} ) { >- my $curr_borrower = GetMember('borrowernumber' => $item->{'borrowernumber'} ); >- $item->{borrowerfirstname} = $curr_borrower->{'firstname'}; >- $item->{borrowersurname} = $curr_borrower->{'surname'}; >+ my $curr_borrower = Koha::Patrons->find( $item->{borrowernumber} ); >+ $item->{borrowerfirstname} = $curr_borrower->firstname; >+ $item->{borrowersurname} = $curr_borrower->surname; > } > } > >diff --git a/catalogue/search.pl b/catalogue/search.pl >index 8488f832a0..06fb6f8579 100755 >--- a/catalogue/search.pl >+++ b/catalogue/search.pl >@@ -146,16 +146,16 @@ use C4::Auth qw(:DEFAULT get_session); > use C4::Search; > use C4::Languages qw(getLanguages); > use C4::Koha; >-use C4::Members qw(GetMember); > use URI::Escape; > use POSIX qw(ceil floor); > use C4::Search::History; > > use Koha::ItemTypes; >-use Koha::LibraryCategories; >-use Koha::Virtualshelves; >+use Koha::Library::Groups; >+use Koha::Patrons; > use Koha::SearchEngine::Search; > use Koha::SearchEngine::QueryBuilder; >+use Koha::Virtualshelves; > > use URI::Escape; > >@@ -196,12 +196,12 @@ if (C4::Context->preference("IntranetNumbersPreferPhrase")) { > } > > if($cgi->cookie("holdfor")){ >- my $holdfor_patron = GetMember('borrowernumber' => $cgi->cookie("holdfor")); >+ my $holdfor_patron = Koha::Patrons->find( $cgi->cookie("holdfor") ); > $template->param( > holdfor => $cgi->cookie("holdfor"), >- holdfor_surname => $holdfor_patron->{'surname'}, >- holdfor_firstname => $holdfor_patron->{'firstname'}, >- holdfor_cardnumber => $holdfor_patron->{'cardnumber'}, >+ holdfor_surname => $holdfor_patron->surname, >+ holdfor_firstname => $holdfor_patron->firstname, >+ holdfor_cardnumber => $holdfor_patron->cardnumber, > ); > } > >diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl >index c986b19fe5..84f24a5291 100755 >--- a/cataloguing/additem.pl >+++ b/cataloguing/additem.pl >@@ -33,6 +33,7 @@ use C4::ClassSource; > use Koha::DateUtils; > use Koha::ItemTypes; > use Koha::Libraries; >+use Koha::Patrons; > use List::MoreUtils qw/any/; > use C4::Search; > use Storable qw(thaw freeze); >@@ -401,7 +402,7 @@ my ($template, $loggedinuser, $cookie) > > > # Does the user have a restricted item editing permission? >-my $uid = $loggedinuser ? GetMember( borrowernumber => $loggedinuser )->{userid} : undef; >+my $uid = Koha::Patrons->find( $loggedinuser )->userid; > my $restrictededition = $uid ? haspermission($uid, {'editcatalogue' => 'edit_items_restricted'}) : undef; > # In case user is a superlibrarian, editing is not restricted > $restrictededition = 0 if ($restrictededition != 0 && C4::Context->IsSuperLibrarian()); >diff --git a/circ/branchtransfers.pl b/circ/branchtransfers.pl >index 0022e27e53..0e49636d2c 100755 >--- a/circ/branchtransfers.pl >+++ b/circ/branchtransfers.pl >@@ -33,6 +33,7 @@ use C4::Koha; > use C4::Members; > use Koha::BiblioFrameworks; > use Koha::AuthorisedValues; >+use Koha::Patrons; > > ############################################### > # Getting state >@@ -207,11 +208,13 @@ foreach my $code ( keys %$messages ) { > elsif ( $code eq 'WasReturned' ) { > $err{errwasreturned} = 1; > $err{borrowernumber} = $messages->{'WasReturned'}; >- my $borrower = GetMember('borrowernumber'=>$messages->{'WasReturned'}); >- $err{title} = $borrower->{'title'}; >- $err{firstname} = $borrower->{'firstname'}; >- $err{surname} = $borrower->{'surname'}; >- $err{cardnumber} = $borrower->{'cardnumber'}; >+ my $patron = Koha::Patrons->find( $messages->{'WasReturned'} ); >+ if ( $patron ) { # Just in case... >+ $err{title} = $patron->title; >+ $err{firstname} = $patron->firstname; >+ $err{surname} = $patron->surname; >+ $err{cardnumber} = $patron->cardnumber; >+ } > } > $err{errdesteqholding} = ( $code eq 'DestinationEqualsHolding' ); > push( @errmsgloop, \%err ); >diff --git a/circ/circulation.pl b/circ/circulation.pl >index ebb8d8bab1..1bec70536c 100755 >--- a/circ/circulation.pl >+++ b/circ/circulation.pl >@@ -22,6 +22,8 @@ > # You should have received a copy of the GNU General Public License > # along with Koha; if not, see <http://www.gnu.org/licenses>. > >+# FIXME There are too many calls to Koha::Patrons->find in this script >+ > use strict; > use warnings; > use CGI qw ( -utf8 ); >@@ -44,13 +46,12 @@ use CGI::Session; > use C4::Members::Attributes qw(GetBorrowerAttributes); > use Koha::AuthorisedValues; > use Koha::CsvProfiles; >-use Koha::Patron; >+use Koha::Patrons; > use Koha::Patron::Debarments qw(GetDebarments); > use Koha::DateUtils; > use Koha::Database; > use Koha::BiblioFrameworks; > use Koha::Patron::Messages; >-use Koha::Patron::Images; > use Koha::SearchEngine; > use Koha::SearchEngine::Search; > use Koha::Patron::Modifications; >@@ -104,13 +105,14 @@ $barcodes = [ uniq @$barcodes ]; > > my $template_name = q|circ/circulation.tt|; > my $borrowernumber = $query->param('borrowernumber'); >-my $borrower = $borrowernumber ? GetMember( borrowernumber => $borrowernumber ) : undef; >+my $patron = $borrowernumber ? Koha::Patrons->find( $borrowernumber ) : undef; > my $batch = $query->param('batch'); > my $batch_allowed = 0; > if ( $batch && C4::Context->preference('BatchCheckouts') ) { > $template_name = q|circ/circulation_batch_checkouts.tt|; > my @batch_category_codes = split '\|', C4::Context->preference('BatchCheckoutsValidCategories'); >- if ( grep {/^$borrower->{categorycode}$/} @batch_category_codes ) { >+ my $categorycode = $patron->categorycode; >+ if ( $categorycode && grep {/^$categorycode$/} @batch_category_codes ) { > $batch_allowed = 1; > } else { > $barcodes = []; >@@ -231,9 +233,9 @@ if ( $print eq 'yes' && $borrowernumber ne '' ) { > # > my $message; > if ($findborrower) { >- my $borrower = C4::Members::GetMember( cardnumber => $findborrower ); >- if ( $borrower ) { >- $borrowernumber = $borrower->{borrowernumber}; >+ my $patron = Koha::Patrons->find( { cardnumber => $findborrower } ); >+ if ( $patron ) { >+ $borrowernumber = $patron->borrowernumber; > } else { > my $dt_params = { iDisplayLength => -1 }; > my $results = C4::Utils::DataTables::Members::search( >@@ -258,10 +260,8 @@ if ($findborrower) { > } > > # get the borrower information..... >-my $patron; > if ($borrowernumber) { > $patron = Koha::Patrons->find( $borrowernumber ); >- $borrower = GetMember( borrowernumber => $borrowernumber ); > my $overdues = $patron->get_overdues; > my $issues = $patron->checkouts; > my $balance = $patron->account->balance; >@@ -279,7 +279,7 @@ if ($borrowernumber) { > # check for NotifyBorrowerDeparture > elsif ( $patron->is_going_to_expire ) { > # borrower card soon to expire warn librarian >- $template->param( "warndeparture" => $borrower->{dateexpiry} , >+ $template->param( "warndeparture" => $patron->dateexpiry , > ); > if (C4::Context->preference('ReturnBeforeExpiry')){ > $template->param("returnbeforeexpiry" => 1); >@@ -293,12 +293,12 @@ if ($borrowernumber) { > > if ( $patron and $patron->is_debarred ) { > $template->param( >- 'userdebarred' => $borrower->{debarred}, >- 'debarredcomment' => $borrower->{debarredcomment}, >+ 'userdebarred' => $patron->debarred, >+ 'debarredcomment' => $patron->debarredcomment, > ); > >- if ( $borrower->{debarred} ne "9999-12-31" ) { >- $template->param( 'userdebarreddate' => $borrower->{debarred} ); >+ if ( $patron->debarred ne "9999-12-31" ) { >+ $template->param( 'userdebarreddate' => $patron->debarred ); > } > } > >@@ -314,7 +314,7 @@ if (@$barcodes) { > my $template_params = { barcode => $barcode }; > # always check for blockers on issuing > my ( $error, $question, $alerts, $messages ) = CanBookBeIssued( >- $borrower, >+ $patron->unblessed, > $barcode, $datedue, > $inprocess, > undef, >@@ -399,7 +399,7 @@ if (@$barcodes) { > } > unless($confirm_required) { > my $switch_onsite_checkout = exists $messages->{ONSITE_CHECKOUT_WILL_BE_SWITCHED}; >- my $issue = AddIssue( $borrower, $barcode, $datedue, $cancelreserve, undef, undef, { onsite_checkout => $onsite_checkout, auto_renew => $session->param('auto_renew'), switch_onsite_checkout => $switch_onsite_checkout, } ); >+ my $issue = AddIssue( $patron->unblessed, $barcode, $datedue, $cancelreserve, undef, undef, { onsite_checkout => $onsite_checkout, auto_renew => $session->param('auto_renew'), switch_onsite_checkout => $switch_onsite_checkout, } ); > $template_params->{issue} = $issue; > $session->clear('auto_renew'); > $inprocess = 1; >@@ -439,11 +439,6 @@ if (@$barcodes) { > } > } > >-# reload the borrower info for the sake of reseting the flags..... >-if ($borrowernumber) { >- $borrower = GetMember( borrowernumber => $borrowernumber ); >-} >- > ################################################################################## > # BUILD HTML > # show all reserves of this borrower, and the position of the reservation .... >@@ -455,11 +450,12 @@ if ($borrowernumber) { > WaitingHolds => $waiting_holds, > ); > >- $template->param( adultborrower => 1 ) if ( $borrower->{category_type} eq 'A' || $borrower->{category_type} eq 'I' ); >+ my $category_type = $patron->category->category_type; >+ $template->param( adultborrower => 1 ) if ( $category_type eq 'A' || $category_type eq 'I' ); > } > > #title >-my $flags = $borrower ? C4::Members::patronflags( $borrower ) : {}; >+my $flags = $patron ? C4::Members::patronflags( $patron->unblessed ) : {}; > foreach my $flag ( sort keys %$flags ) { > $flags->{$flag}->{'message'} =~ s#\n#<br />#g; > if ( $flags->{$flag}->{'noissues'} ) { >@@ -547,7 +543,7 @@ $amountold =~ s/^.*\$//; # remove upto the $, if any > > my ( $total, $accts, $numaccts) = GetMemberAccountRecords( $borrowernumber ); > >-if ( $borrowernumber && $borrower->{'category_type'} eq 'C') { >+if ( $patron && $patron->category->category_type eq 'C') { > my $patron_categories = Koha::Patron::Categories->search_limited({ category_type => 'A' }, {order_by => ['categorycode']}); > $template->param( 'CATCODE_MULTI' => 1) if $patron_categories->count > 1; > $template->param( 'catcode' => $patron_categories->next ) if $patron_categories->count == 1; >@@ -595,10 +591,20 @@ my $relatives_issues_count = > Koha::Database->new()->schema()->resultset('Issue') > ->count( { borrowernumber => \@relatives } ); > >-my $av = Koha::AuthorisedValues->search({ category => 'ROADTYPE', authorised_value => $borrower->{streettype} }); >-my $roadtype = $av->count ? $av->next->lib : ''; >- >-$template->param(%$borrower); >+if ( $patron ) { >+ my $av = Koha::AuthorisedValues->search({ category => 'ROADTYPE', authorised_value => $patron->streettype }); >+ my $roadtype = $av->count ? $av->next->lib : ''; >+ $template->param( >+ %{ $patron->unblessed }, >+ borrower => $patron->unblessed, >+ roadtype => $roadtype, >+ patron => $patron, >+ categoryname => $patron->category->description, >+ expiry => $patron->dateexpiry, >+ is_child => ( $patron->category->category_type eq 'C' ), >+ picture => ( $patron->image ? 1 : 0 ), >+ ); >+} > > # Restore date if changed by holds and/or save stickyduedate to session > if ($restoreduedatespec || $stickyduedate) { >@@ -612,15 +618,10 @@ if ($restoreduedatespec || $stickyduedate) { > } > > $template->param( >- patron => $patron, > messages => $messages, >- borrower => $borrower, > borrowernumber => $borrowernumber, >- categoryname => $borrower->{'description'}, > branch => $branch, > was_renewed => scalar $query->param('was_renewed') ? 1 : 0, >- expiry => $borrower->{'dateexpiry'}, >- roadtype => $roadtype, > amountold => $amountold, > barcodes => $barcodes, > stickyduedate => $stickyduedate, >@@ -629,7 +630,6 @@ $template->param( > message => $message, > totaldue => sprintf('%.2f', $total), > inprocess => $inprocess, >- is_child => ($borrowernumber && $borrower->{'category_type'} eq 'C'), > $view => 1, > batch_allowed => $batch_allowed, > batch => $batch, >@@ -643,8 +643,6 @@ $template->param( > relatives_borrowernumbers => \@relatives, > ); > >-my $patron_image = Koha::Patron::Images->find($borrower->{borrowernumber}); >-$template->param( picture => 1 ) if $patron_image; > > if ( C4::Context->preference("ExportCircHistory") ) { > $template->param(csv_profiles => [ Koha::CsvProfiles->search({ type => 'marc' }) ]); >diff --git a/circ/returns.pl b/circ/returns.pl >index 991bf68cf8..09dda2193e 100755 >--- a/circ/returns.pl >+++ b/circ/returns.pl >@@ -30,6 +30,8 @@ script to execute returns of books > use strict; > use warnings; > >+# FIXME There are weird things going on with $patron and $borrowernumber in this script >+ > use Carp 'verbose'; > $SIG{ __DIE__ } = sub { Carp::confess( @_ ) }; > >@@ -166,8 +168,8 @@ if ( $query->param('reserve_id') ) { > # check if we have other reserves for this document, if we have a return send the message of transfer > my ( $messages, $nextreservinfo ) = GetOtherReserves($item); > >- my $borr = GetMember( borrowernumber => $nextreservinfo ); >- my $name = $borr->{'surname'} . ", " . $borr->{'title'} . " " . $borr->{'firstname'}; >+ my $patron = Koha::Patrons->find( $nextreservinfo ); >+ my $name = $patron->surname . ", " . $patron->title . " " . $patron->firstname; > if ( $messages->{'transfert'} ) { > $template->param( > itemtitle => $iteminfo->{'title'}, >@@ -176,10 +178,10 @@ if ( $query->param('reserve_id') ) { > iteminfo => $iteminfo->{'author'}, > name => $name, > borrowernumber => $borrowernumber, >- borcnum => $borr->{'cardnumber'}, >- borfirstname => $borr->{'firstname'}, >- borsurname => $borr->{'surname'}, >- borcategory => $borr->{'description'}, >+ borcnum => $patron->cardnumber, >+ borfirstname => $patron->firstname, >+ borsurname => $patron->surname, >+ borcategory => $patron->category->description, > diffbranch => 1, > ); > } >@@ -403,27 +405,31 @@ if ( $messages->{'WrongTransfer'} and not $messages->{'WasTransfered'}) { > ); > > my $reserve = $messages->{'ResFound'}; >- my $borr = C4::Members::GetMember( borrowernumber => $reserve->{'borrowernumber'} ); >- my $name = $borr->{'surname'} . ", " . $borr->{'title'} . " " . $borr->{'firstname'}; >+ if ( $reserve ) { >+ my $patron = Koha::Patrons->find( $reserve->{'borrowernumber'} ); >+ my $name = $patron->surname . ", " . $patron->title . " " . $patron->firstname; >+ $template->param( >+ # FIXME The full patron object should be passed to the template >+ wname => $name, >+ wborfirstname => $patron->firstname, >+ wborsurname => $patron->surname, >+ wborcategory => $patron->category->description, >+ wbortitle => $patron->title, >+ wborphone => $patron->phone, >+ wboremail => $patron->email, >+ streetnumber => $patron->streetnumber, >+ address => $patron->address, >+ address2 => $patron->address2, >+ city => $patron->city, >+ zipcode => $patron->zipcode, >+ state => $patron->state, >+ country => $patron->country, >+ wborrowernumber => $reserve->{'borrowernumber'}, >+ wborcnum => $patron->cardnumber, >+ ); >+ } > $template->param( >- wname => $name, >- wborfirstname => $borr->{'firstname'}, >- wborsurname => $borr->{'surname'}, >- wborcategory => $borr->{'description'}, >- wbortitle => $borr->{'title'}, >- wborphone => $borr->{'phone'}, >- wboremail => $borr->{'email'}, >- streetnumber => $borr->{streetnumber}, >- streettype => $borr->{streettype}, >- address => $borr->{'address'}, >- address2 => $borr->{'address2'}, >- city => $borr->{'city'}, >- zipcode => $borr->{'zipcode'}, >- state => $borr->{'state'}, >- country => $borr->{'country'}, >- wborrowernumber => $reserve->{'borrowernumber'}, >- wborcnum => $borr->{'cardnumber'}, >- wtransfertFrom => $userenv_branch, >+ wtransfertFrom => $userenv_branch, > ); > } > >@@ -432,7 +438,7 @@ if ( $messages->{'WrongTransfer'} and not $messages->{'WasTransfered'}) { > # > if ( $messages->{'ResFound'}) { > my $reserve = $messages->{'ResFound'}; >- my $borr = C4::Members::GetMember( borrowernumber => $reserve->{'borrowernumber'} ); >+ my $patron = Koha::Patrons->find( $reserve->{borrowernumber} ); > my $holdmsgpreferences = C4::Members::Messaging::GetMessagingPreferences( { borrowernumber => $reserve->{'borrowernumber'}, message_name => 'Hold_Filled' } ); > if ( $reserve->{'ResFound'} eq "Waiting" or $reserve->{'ResFound'} eq "Reserved" ) { > if ( $reserve->{'ResFound'} eq "Waiting" ) { >@@ -450,25 +456,25 @@ if ( $messages->{'ResFound'}) { > > # same params for Waiting or Reserved > $template->param( >+ # FIXME The full patron object should be passed to the template > found => 1, >- name => $borr->{'surname'} . ", " . $borr->{'title'} . " " . $borr->{'firstname'}, >- borfirstname => $borr->{'firstname'}, >- borsurname => $borr->{'surname'}, >- borcategory => $borr->{'description'}, >- bortitle => $borr->{'title'}, >- borphone => $borr->{'phone'}, >- boremail => $borr->{'email'}, >- streetnumber => $borr->{streetnumber}, >- streettype => $borr->{streettype}, >- address => $borr->{'address'}, >- address2 => $borr->{'address2'}, >- city => $borr->{'city'}, >- zipcode => $borr->{'zipcode'}, >- state => $borr->{'state'}, >- country => $borr->{'country'}, >- borcnum => $borr->{'cardnumber'}, >- debarred => $borr->{'debarred'}, >- gonenoaddress => $borr->{'gonenoaddress'}, >+ name => $patron->surname . ", " . $patron->title . " " . $patron->firstname, >+ borfirstname => $patron->firstname, >+ borsurname => $patron->surname, >+ borcategory => $patron->category->description, >+ bortitle => $patron->title, >+ borphone => $patron->phone, >+ boremail => $patron->email, >+ boraddress => $patron->address, >+ boraddress2 => $patron->address2, >+ streetnumber => $patron->streetnumber, >+ city => $patron->city, >+ zipcode => $patron->zipcode, >+ state => $patron->state, >+ country => $patron->country, >+ borcnum => $patron->cardnumber, >+ debarred => $patron->debarred, >+ gonenoaddress => $patron->gonenoaddress, > barcode => $barcode, > destbranch => $reserve->{'branchcode'}, > borrowernumber => $reserve->{'borrowernumber'}, >@@ -576,19 +582,19 @@ foreach ( sort { $a <=> $b } keys %returneditems ) { > $ri{hour} = $duedate->hour(); > $ri{minute} = $duedate->minute(); > $ri{duedate} = output_pref($duedate); >- my $b = C4::Members::GetMember( borrowernumber => $riborrowernumber{$_} ); >+ my $patron = Koha::Patrons->find( $riborrowernumber{$_} ); > unless ( $dropboxmode ) { > $ri{return_overdue} = 1 if (DateTime->compare($duedate, DateTime->now()) == -1); > } else { > $ri{return_overdue} = 1 if (DateTime->compare($duedate, $dropboxdate) == -1); > } >- $ri{borrowernumber} = $b->{'borrowernumber'}; >- $ri{borcnum} = $b->{'cardnumber'}; >- $ri{borfirstname} = $b->{'firstname'}; >- $ri{borsurname} = $b->{'surname'}; >- $ri{bortitle} = $b->{'title'}; >- $ri{bornote} = $b->{'borrowernotes'}; >- $ri{borcategorycode}= $b->{'categorycode'}; >+ $ri{borrowernumber} = $patron->borrowernumber; >+ $ri{borcnum} = $patron->cardnumber; >+ $ri{borfirstname} = $patron->firstname; >+ $ri{borsurname} = $patron->surname; >+ $ri{bortitle} = $patron->title; >+ $ri{bornote} = $patron->borrowernotes; >+ $ri{borcategorycode}= $patron->categorycode; > $ri{borissuescount} = Koha::Checkouts->count( { borrowernumber => $b->{'borrowernumber'} } ); > } > else { >diff --git a/circ/transferstoreceive.pl b/circ/transferstoreceive.pl >index 60bcd8bf77..3ab20e6052 100755 >--- a/circ/transferstoreceive.pl >+++ b/circ/transferstoreceive.pl >@@ -40,6 +40,7 @@ use Koha::ItemTypes; > use Koha::Libraries; > use Koha::DateUtils; > use Koha::BiblioFrameworks; >+use Koha::Patrons; > > my $input = new CGI; > my $itemnumber = $input->param('itemnumber'); >@@ -105,12 +106,13 @@ while ( my $library = $libraries->next ) { > my $item = Koha::Items->find( $num->{itemnumber} ); > my $holds = $item->current_holds; > if ( my $first_hold = $holds->next ) { >- my $getborrower = C4::Members::GetMember( borrowernumber => $first_hold->borrowernumber ); >- $getransf{'borrowernum'} = $getborrower->{'borrowernumber'}; >- $getransf{'borrowername'} = $getborrower->{'surname'}; >- $getransf{'borrowerfirstname'} = $getborrower->{'firstname'}; >- $getransf{'borrowermail'} = $getborrower->{'email'} if $getborrower->{'email'}; >- $getransf{'borrowerphone'} = $getborrower->{'phone'}; >+ my $patron = Koha::Patrons->find( $first_hold->borrowernumber ); >+ # FIXME The full patron object should be passed to the template >+ $getransf{'borrowernum'} = $patron->borrowernumber; >+ $getransf{'borrowername'} = $patron->surname; >+ $getransf{'borrowerfirstname'} = $patron->firstname; >+ $getransf{'borrowermail'} = $patron->email if $patron->email; >+ $getransf{'borrowerphone'} = $patron->phone; > } > push( @transferloop, \%getransf ); > } >diff --git a/circ/waitingreserves.pl b/circ/waitingreserves.pl >index f781869e47..30102fb9cb 100755 >--- a/circ/waitingreserves.pl >+++ b/circ/waitingreserves.pl >@@ -38,6 +38,7 @@ use C4::Koha; > use Koha::DateUtils; > use Koha::BiblioFrameworks; > use Koha::ItemTypes; >+use Koha::Patrons; > > my $input = new CGI; > >@@ -104,7 +105,7 @@ foreach my $num (@getreserves) { > > # fix up item type for display > $gettitle->{'itemtype'} = C4::Context->preference('item-level_itypes') ? $gettitle->{'itype'} : $gettitle->{'itemtype'}; >- my $getborrower = GetMember(borrowernumber => $num->{'borrowernumber'}); >+ my $patron = Koha::Patrons->find( $num->{borrowernumber} ); > my $itemtype = Koha::ItemTypes->find( $gettitle->{'itemtype'} ); # using the fixed up itype/itemtype > $getreserv{'waitingdate'} = $num->{'waitingdate'}; > my ( $expire_year, $expire_month, $expire_day ) = split (/-/, $num->{'expirationdate'}); >@@ -123,9 +124,9 @@ foreach my $num (@getreserves) { > if ( $homebranch ne $holdingbranch ) { > $getreserv{'dotransfer'} = 1; > } >- $getreserv{'borrowername'} = $getborrower->{'surname'}; >- $getreserv{'borrowerfirstname'} = $getborrower->{'firstname'}; >- $getreserv{'borrowerphone'} = $getborrower->{'phone'}; >+ $getreserv{'borrowername'} = $patron->surname; >+ $getreserv{'borrowerfirstname'} = $patron->firstname; >+ $getreserv{'borrowerphone'} = $patron->phone; > > my $borEmail = GetFirstValidEmailAddress( $borrowernum ); > >@@ -189,7 +190,7 @@ sub cancel { > # if we have a result > if ($nextreservinfo) { > my %res; >- my $borrowerinfo = C4::Members::GetMember( borrowernumber => $nextreservinfo ); >+ my $patron = Koha::Patrons->find( $nextreservinfo ); > my $iteminfo = GetBiblioFromItemNumber($item); > if ( $messages->{'transfert'} ) { > $res{messagetransfert} = $messages->{'transfert'}; >@@ -198,8 +199,8 @@ sub cancel { > > $res{message} = 1; > $res{nextreservnumber} = $nextreservinfo; >- $res{nextreservsurname} = $borrowerinfo->{'surname'}; >- $res{nextreservfirstname} = $borrowerinfo->{'firstname'}; >+ $res{nextreservsurname} = $patron->surname; >+ $res{nextreservfirstname} = $patron->firstname; > $res{nextreservitem} = $item; > $res{nextreservtitle} = $iteminfo->{'title'}; > $res{waiting} = $messages->{'waiting'} ? 1 : 0; >diff --git a/members/boraccount.pl b/members/boraccount.pl >index 4f8ddf04b0..8abb373f2e 100755 >--- a/members/boraccount.pl >+++ b/members/boraccount.pl >@@ -31,8 +31,7 @@ use CGI qw ( -utf8 ); > use C4::Members; > use C4::Accounts; > use C4::Members::Attributes qw(GetBorrowerAttributes); >-use Koha::Patron::Images; >- >+use Koha::Patrons; > use Koha::Patron::Categories; > > my $input=new CGI; >@@ -53,14 +52,14 @@ my ($template, $loggedinuser, $cookie) = get_template_and_user( > my $borrowernumber=$input->param('borrowernumber'); > my $action = $input->param('action') || ''; > >-#get borrower details >-my $data=GetMember('borrowernumber' => $borrowernumber); >+#get patron details >+my $patron = Koha::Patrons->find( $borrowernumber ); > > if ( $action eq 'reverse' ) { > ReversePayment( $input->param('accountlines_id') ); > } > >-if ( $data->{'category_type'} eq 'C') { >+if ( $patron->category->category_type eq 'C') { > my $patron_categories = Koha::Patron::Categories->search_limited({ category_type => 'A' }, {order_by => ['categorycode']}); > $template->param( 'CATCODE_MULTI' => 1) if $patron_categories->count > 1; > $template->param( 'catcode' => $patron_categories->next ) if $patron_categories->count == 1; >@@ -92,10 +91,9 @@ foreach my $accountline ( @{$accts}) { > } > } > >-$template->param( adultborrower => 1 ) if ( $data->{'category_type'} eq 'A' || $data->{'category_type'} eq 'I' ); >+$template->param( adultborrower => 1 ) if ( $patron->category->category_type =~ /^(A|I)$/ ); > >-my $patron_image = Koha::Patron::Images->find($data->{borrowernumber}); >-$template->param( picture => 1 ) if $patron_image; >+$template->param( picture => 1 ) if $patron->image; > > if (C4::Context->preference('ExtendedPatronAttributes')) { > my $attributes = GetBorrowerAttributes($borrowernumber); >@@ -105,14 +103,14 @@ if (C4::Context->preference('ExtendedPatronAttributes')) { > ); > } > >-$template->param(%$data); >+$template->param(%{ $patron->unblessed }); > > $template->param( > finesview => 1, > borrowernumber => $borrowernumber, > total => sprintf("%.2f",$total), > totalcredit => $totalcredit, >- is_child => ($data->{'category_type'} eq 'C'), >+ is_child => ($patron->category->category_type eq 'C'), > reverse_col => $reverse_col, > accounts => $accts, > RoutingSerials => C4::Context->preference('RoutingSerials'), >diff --git a/members/deletemem.pl b/members/deletemem.pl >index 00d21f02e2..5ea015ada7 100755 >--- a/members/deletemem.pl >+++ b/members/deletemem.pl >@@ -31,7 +31,6 @@ use C4::Auth; > use C4::Members; > use Module::Load; > use Koha::Patrons; >-use Koha::Patron::Images; > use Koha::Token; > > if ( C4::Context->preference('NorwegianPatronDBEnable') && C4::Context->preference('NorwegianPatronDBEnable') == 1 ) { >@@ -75,13 +74,13 @@ if ( C4::Context->preference('NorwegianPatronDBEnable') && C4::Context->preferen > my $issues = GetPendingIssues($member); # FIXME: wasteful call when really, we only want the count > my $countissues = scalar(@$issues); > >-my $bor = C4::Members::GetMember( borrowernumber => $member ); >-my $flags = C4::Members::patronflags( $bor ); >+my $patron = Koha::Patrons->find( $member ); >+my $flags = C4::Members::patronflags( $patron->unblessed ); > my $userenv = C4::Context->userenv; > > > >-if ($bor->{category_type} eq "S") { >+if ($patron->category->category_type eq "S") { > unless(C4::Auth::haspermission($userenv->{'id'},{'staffaccess'=>1})) { > print $input->redirect("/cgi-bin/koha/members/moremember.pl?borrowernumber=$member&error=CANT_DELETE_STAFF"); > exit 0; # Exit without error >@@ -95,8 +94,8 @@ if ($bor->{category_type} eq "S") { > > if (C4::Context->preference("IndependentBranches")) { > my $userenv = C4::Context->userenv; >- if ( !C4::Context->IsSuperLibrarian() && $bor->{'branchcode'}){ >- unless ($userenv->{branch} eq $bor->{'branchcode'}){ >+ if ( !C4::Context->IsSuperLibrarian() && $patron->branchcode){ >+ unless ($userenv->{branch} eq $patron->branchcode){ > print $input->redirect("/cgi-bin/koha/members/moremember.pl?borrowernumber=$member&error=CANT_DELETE_OTHERLIBRARY"); > exit 0; # Exit without error > } >@@ -107,27 +106,28 @@ my $op = $input->param('op') || 'delete_confirm'; > my $dbh = C4::Context->dbh; > my $is_guarantor = $dbh->selectrow_array("SELECT COUNT(*) FROM borrowers WHERE guarantorid=?", undef, $member); > if ( $op eq 'delete_confirm' or $countissues > 0 or $flags->{'CHARGES'} or $is_guarantor or $deletelocal == 0) { >- my $patron_image = Koha::Patron::Images->find($bor->{borrowernumber}); >- $template->param( picture => 1 ) if $patron_image; >- >- $template->param( adultborrower => 1 ) if ( $bor->{category_type} eq 'A' || $bor->{category_type} eq 'I' ); >- >- $template->param(borrowernumber => $member, >- surname => $bor->{'surname'}, >- title => $bor->{'title'}, >- cardnumber => $bor->{'cardnumber'}, >- firstname => $bor->{'firstname'}, >- categorycode => $bor->{'categorycode'}, >- category_type => $bor->{'category_type'}, >- categoryname => $bor->{'description'}, >- address => $bor->{'address'}, >- address2 => $bor->{'address2'}, >- city => $bor->{'city'}, >- zipcode => $bor->{'zipcode'}, >- country => $bor->{'country'}, >- phone => $bor->{'phone'}, >- email => $bor->{'email'}, >- branchcode => $bor->{'branchcode'}, >+ $template->param( picture => 1 ) if $patron->image; >+ >+ $template->param( adultborrower => 1 ) if $patron->category->category_type =~ /^(A|I)$/; >+ >+ $template->param( >+ # FIXME The patron object should be passed to the template >+ borrowernumber => $patron->borrowernumber, >+ surname => $patron->surname, >+ title => $patron->title, >+ cardnumber => $patron->cardnumber, >+ firstname => $patron->firstname, >+ categorycode => $patron->categorycode, >+ category_type => $patron->category->category_type, >+ categoryname => $patron->category->description, >+ address => $patron->address, >+ address2 => $patron->address2, >+ city => $patron->city, >+ zipcode => $patron->zipcode, >+ country => $patron->country, >+ phone => $patron->phone, >+ email => $patron->email, >+ branchcode => $patron->branchcode, > RoutingSerials => C4::Context->preference('RoutingSerials'), > ); > if ($countissues >0) { >diff --git a/members/discharge.pl b/members/discharge.pl >index 23b437847a..b24c41b1db 100755 >--- a/members/discharge.pl >+++ b/members/discharge.pl >@@ -37,7 +37,6 @@ use C4::Members; > use C4::Reserves; > use C4::Letters; > use Koha::Patron::Discharge; >-use Koha::Patron::Images; > use Koha::Patrons; > > use Koha::DateUtils; >@@ -59,19 +58,16 @@ unless ( C4::Context->preference('useDischarge') ) { > exit; > } > >-my $data; > if ( $input->param('borrowernumber') ) { > $borrowernumber = $input->param('borrowernumber'); > > # Getting member data >- $data = GetMember( borrowernumber => $borrowernumber ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); > > my $can_be_discharged = Koha::Patron::Discharge::can_be_discharged({ > borrowernumber => $borrowernumber > }); > >- # Getting reserves >- my $patron = Koha::Patrons->find( $borrowernumber ); > my $holds = $patron->holds; > my $has_reserves = $holds->count; > >@@ -87,7 +83,7 @@ if ( $input->param('borrowernumber') ) { > } > eval { > my $pdf_path = Koha::Patron::Discharge::generate_as_pdf( >- { borrowernumber => $borrowernumber, branchcode => $data->{'branchcode'} } ); >+ { borrowernumber => $borrowernumber, branchcode => $patron->branchcode } ); > > binmode(STDOUT); > print $input->header( >@@ -112,31 +108,30 @@ if ( $input->param('borrowernumber') ) { > borrowernumber => $borrowernumber, > }); > >- my $patron_image = Koha::Patron::Images->find($borrowernumber); >- $template->param( picture => 1 ) if $patron_image; >+ $template->param( picture => 1 ) if $patron->image; > > $template->param( >+ # FIXME The patron object should be passed to the template > borrowernumber => $borrowernumber, >- biblionumber => $data->{'biblionumber'}, >- title => $data->{'title'}, >- initials => $data->{'initials'}, >- surname => $data->{'surname'}, >+ title => $patron->title, >+ initials => $patron->initials, >+ surname => $patron->surname, > borrowernumber => $borrowernumber, >- firstname => $data->{'firstname'}, >- cardnumber => $data->{'cardnumber'}, >- categorycode => $data->{'categorycode'}, >- category_type => $data->{'category_type'}, >- categoryname => $data->{'description'}, >- address => $data->{'address'}, >- streetnumber => $data->{streetnumber}, >- streettype => $data->{streettype}, >- address2 => $data->{'address2'}, >- city => $data->{'city'}, >- zipcode => $data->{'zipcode'}, >- country => $data->{'country'}, >- phone => $data->{'phone'}, >- email => $data->{'email'}, >- branchcode => $data->{'branchcode'}, >+ firstname => $patron->firstname, >+ cardnumber => $patron->cardnumber, >+ categorycode => $patron->categorycode, >+ category_type => $patron->category->category_type, >+ categoryname => $patron->category->description, >+ address => $patron->address, >+ streetnumber => $patron->streetnumber, >+ streettype => $patron->streettype, >+ address2 => $patron->address2, >+ city => $patron->city, >+ zipcode => $patron->zipcode, >+ country => $patron->country, >+ phone => $patron->phone, >+ email => $patron->email, >+ branchcode => $patron->branchcode, > has_reserves => $has_reserves, > can_be_discharged => $can_be_discharged, > validated_discharges => $validated_discharges, >diff --git a/members/files.pl b/members/files.pl >index 5002c3ea80..ddb99f7628 100755 >--- a/members/files.pl >+++ b/members/files.pl >@@ -29,8 +29,8 @@ use C4::Members::Attributes qw(GetBorrowerAttributes); > use C4::Debug; > > use Koha::DateUtils; >+use Koha::Patrons; > use Koha::Patron::Files; >-use Koha::Patron::Images; > > my $cgi = CGI->new; > >@@ -63,8 +63,8 @@ if ( $op eq 'download' ) { > print $file->{'file_content'}; > } > else { >- my $data = GetMember( borrowernumber => $borrowernumber ); >- $template->param(%$data); >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ $template->param(%{ $patron->unblessed}); > > my %errors; > >@@ -102,7 +102,7 @@ else { > } > > $template->param( >- categoryname => $data->{'description'}, >+ categoryname => $patron->category->description, > RoutingSerials => C4::Context->preference('RoutingSerials'), > ); > >@@ -114,8 +114,7 @@ else { > ); > } > >- my $patron_image = Koha::Patron::Images->find($data->{borrowernumber}); >- $template->param( picture => 1 ) if $patron_image; >+ $template->param( picture => 1 ) if $patron->image; > > $template->param( adultborrower => 1 ) if ( $data->{category_type} eq 'A' || $data->{category_type} eq 'I' ); > $template->param( >diff --git a/members/housebound.pl b/members/housebound.pl >index 0ffe685548..b334999b9e 100755 >--- a/members/housebound.pl >+++ b/members/housebound.pl >@@ -66,7 +66,7 @@ push @messages, { type => 'error', code => 'error_on_patron_load' } > # Get supporting cast > my ( $branch, $category, $houseboundprofile, $visit, $patron_image ); > if ( $patron ) { >- $patron_image = Koha::Patron::Images->find($patron->borrowernumber); >+ $patron_image = $patron->image; > $branch = Koha::Libraries->new->find($patron->branchcode); > $category = Koha::Patron::Categories->new->find($patron->categorycode); > $houseboundprofile = $patron->housebound_profile; >diff --git a/members/mancredit.pl b/members/mancredit.pl >index f8a3681f61..4855c24cde 100755 >--- a/members/mancredit.pl >+++ b/members/mancredit.pl >@@ -33,7 +33,7 @@ use C4::Members; > use C4::Accounts; > use C4::Items; > use C4::Members::Attributes qw(GetBorrowerAttributes); >-use Koha::Patron::Images; >+use Koha::Patrons; > > use Koha::Patron::Categories; > >@@ -42,8 +42,7 @@ my $flagsrequired = { borrowers => 1, updatecharges => 1 }; > > my $borrowernumber=$input->param('borrowernumber'); > >-#get borrower details >-my $data=GetMember('borrowernumber' => $borrowernumber); >+my $patron = Koha::Patrons->find( $borrowernumber ); > my $add=$input->param('add'); > > if ($add){ >@@ -74,15 +73,14 @@ if ($add){ > } > ); > >- if ( $data->{'category_type'} eq 'C') { >+ if ( $patron->category->category_type eq 'C') { > my $patron_categories = Koha::Patron::Categories->search_limited({ category_type => 'A' }, {order_by => ['categorycode']}); > $template->param( 'CATCODE_MULTI' => 1) if $patron_categories->count > 1; > $template->param( 'catcode' => $patron_categories->next ) if $patron_categories->count == 1; > } > >- $template->param( adultborrower => 1 ) if ( $data->{category_type} eq 'A' || $data->{category_type} eq 'I' ); >- my $patron_image = Koha::Patron::Images->find($data->{borrowernumber}); >- $template->param( picture => 1 ) if $patron_image; >+ $template->param( adultborrower => 1 ) if ( $patron->category->category_type =~ /^(A|I)$/ ); >+ $template->param( picture => 1 ) if $patron->image; > > if (C4::Context->preference('ExtendedPatronAttributes')) { > my $attributes = GetBorrowerAttributes($borrowernumber); >@@ -92,13 +90,13 @@ if ($add){ > ); > } > >- $template->param(%$data); >+ $template->param(%{ $patron->unblessed}); > > $template->param( > finesview => 1, > borrowernumber => $borrowernumber, >- categoryname => $data->{'description'}, >- is_child => ($data->{'category_type'} eq 'C'), >+ categoryname => $patron->category->description, >+ is_child => ($patron->category->category_type eq 'C'), # FIXME is_child should be a Koha::Patron method > RoutingSerials => C4::Context->preference('RoutingSerials'), > ); > output_html_with_http_headers $input, $cookie, $template->output; >diff --git a/members/maninvoice.pl b/members/maninvoice.pl >index e69a1ca348..2c1c05f01f 100755 >--- a/members/maninvoice.pl >+++ b/members/maninvoice.pl >@@ -32,7 +32,8 @@ use C4::Members; > use C4::Accounts; > use C4::Items; > use C4::Members::Attributes qw(GetBorrowerAttributes); >-use Koha::Patron::Images; >+ >+use Koha::Patrons; > > use Koha::Patron::Categories; > >@@ -41,9 +42,7 @@ my $flagsrequired = { borrowers => 1 }; > > my $borrowernumber=$input->param('borrowernumber'); > >- >-# get borrower details >-my $data=GetMember('borrowernumber'=>$borrowernumber); >+my $patron = Koha::Patrons->find( $borrowernumber ); > my $add=$input->param('add'); > if ($add){ > if ( checkauth( $input, 0, $flagsrequired, 'intranet' ) ) { >@@ -100,15 +99,14 @@ if ($add){ > } > $template->param( invoice_types_loop => \@invoice_types ); > >- if ( $data->{'category_type'} eq 'C') { >+ if ( $patron->category->category_type eq 'C') { > my $patron_categories = Koha::Patron::Categories->search_limited({ category_type => 'A' }, {order_by => ['categorycode']}); > $template->param( 'CATCODE_MULTI' => 1) if $patron_categories->count > 1; > $template->param( 'catcode' => $patron_categories->next ) if $patron_categories->count == 1; > } > >- $template->param( adultborrower => 1 ) if ( $data->{'category_type'} eq 'A' || $data->{'category_type'} eq 'I' ); >- my $patron_image = Koha::Patron::Images->find($data->{borrowernumber}); >- $template->param( picture => 1 ) if $patron_image; >+ $template->param( adultborrower => 1 ) if ( $patron->category->category_type =~ /^(A|I)$/ ); >+ $template->param( picture => 1 ) if $patron->image; > > if (C4::Context->preference('ExtendedPatronAttributes')) { > my $attributes = GetBorrowerAttributes($borrowernumber); >@@ -118,12 +116,12 @@ if ($add){ > ); > } > >- $template->param(%$data); >+ $template->param(%{ $patron->unblessed }); > $template->param( > finesview => 1, > borrowernumber => $borrowernumber, >- categoryname => $data->{'description'}, >- is_child => ($data->{'category_type'} eq 'C'), >+ categoryname => $patron->category->description, >+ is_child => ($patron->category->category_type eq 'C'), > RoutingSerials => C4::Context->preference('RoutingSerials'), > ); > output_html_with_http_headers $input, $cookie, $template->output; >diff --git a/members/member-flags.pl b/members/member-flags.pl >index 95f533017d..2b872624e4 100755 >--- a/members/member-flags.pl >+++ b/members/member-flags.pl >@@ -16,6 +16,7 @@ use C4::Members::Attributes qw(GetBorrowerAttributes); > #use C4::Acquisitions; > > use Koha::Patron::Categories; >+use Koha::Patrons; > > use C4::Output; > use Koha::Patron::Images; >@@ -25,8 +26,10 @@ my $input = new CGI; > > my $flagsrequired = { permissions => 1 }; > my $member=$input->param('member'); >-my $bor = GetMember( borrowernumber => $member ); >-if( $bor->{'category_type'} eq 'S' ) { >+my $patron = Koha::Patrons->find( $member ); >+my $category_type = $patron->category->category_type; >+my $bor = $patron->unblessed; >+if( $category_type eq 'S' ) { > $flagsrequired->{'staffaccess'} = 1; > } > my ($template, $loggedinuser, $cookie) = get_template_and_user({ >@@ -170,15 +173,14 @@ if ($input->param('newflags')) { > push @loop, \%row; > } > >- if ( $bor->{'category_type'} eq 'C') { >+ if ( $category_type eq 'C') { > my $patron_categories = Koha::Patron::Categories->search_limited({ category_type => 'A' }, {order_by => ['categorycode']}); > $template->param( 'CATCODE_MULTI' => 1) if $patron_categories->count > 1; > $template->param( 'catcode' => $patron_categories->next ) if $patron_categories->count == 1; > } > >-$template->param( adultborrower => 1 ) if ( $bor->{'category_type'} eq 'A' || $bor->{'category_type'} eq 'I' ); >- my $patron_image = Koha::Patron::Images->find($bor->{borrowernumber}); >- $template->param( picture => 1 ) if $patron_image; >+$template->param( adultborrower => 1 ) if ( $category_type =~ /^(A|I)$/ ); >+ $template->param( picture => 1 ) if $patron->image; > > if (C4::Context->preference('ExtendedPatronAttributes')) { > my $attributes = GetBorrowerAttributes($bor->{'borrowernumber'}); >@@ -195,7 +197,7 @@ $template->param( > firstname => $bor->{'firstname'}, > othernames => $bor->{'othernames'}, > categorycode => $bor->{'categorycode'}, >- category_type => $bor->{'category_type'}, >+ category_type => $category_type, > categoryname => $bor->{'description'}, > address => $bor->{address}, > address2 => $bor->{'address2'}, >@@ -211,7 +213,7 @@ $template->param( > emailpro => $bor->{'emailpro'}, > branchcode => $bor->{'branchcode'}, > loop => \@loop, >- is_child => ($bor->{'category_type'} eq 'C'), >+ is_child => ($category_type eq 'C'), > RoutingSerials => C4::Context->preference('RoutingSerials'), > csrf_token => Koha::Token->new->generate_csrf( { session_id => scalar $input->cookie('CGISESSID'), } ), > ); >diff --git a/members/member-password.pl b/members/member-password.pl >index 4fdf699427..4cf00bfde4 100755 >--- a/members/member-password.pl >+++ b/members/member-password.pl >@@ -15,9 +15,9 @@ use C4::Members; > use C4::Circulation; > use CGI qw ( -utf8 ); > use C4::Members::Attributes qw(GetBorrowerAttributes); >-use Koha::Patron::Images; > use Koha::Token; > >+use Koha::Patrons; > use Koha::Patron::Categories; > > my $input = new CGI; >@@ -48,9 +48,11 @@ my $newpassword2 = $input->param('newpassword2'); > > my @errors; > >-my ($bor) = GetMember( 'borrowernumber' => $member ); >+my $patron = Koha::Patrons->find( $member ); >+my $category_type = $patron->category->category_type; >+my $bor = $patron->unblessed; > >-if ( ( $member ne $loggedinuser ) && ( $bor->{'category_type'} eq 'S' ) ) { >+if ( ( $member ne $loggedinuser ) && ( $category_type eq 'S' ) ) { > push( @errors, 'NOPERMISSION' ) > unless ( $staffflags->{'superlibrarian'} || $staffflags->{'staffaccess'} ); > >@@ -99,16 +101,15 @@ else { > $template->param( defaultnewpassword => $defaultnewpassword ); > } > >-if ( $bor->{'category_type'} eq 'C') { >+if ( $category_type eq 'C') { > my $patron_categories = Koha::Patron::Categories->search_limited({ category_type => 'A' }, {order_by => ['categorycode']}); > $template->param( 'CATCODE_MULTI' => 1) if $patron_categories->count > 1; > $template->param( 'catcode' => $patron_categories->next ) if $patron_categories->count == 1; > } > >-$template->param( adultborrower => 1 ) if ( $bor->{'category_type'} eq 'A' || $bor->{'category_type'} eq 'I' ); >+$template->param( adultborrower => 1 ) if ( $category_type =~ /^(A|I)$/ ); > >-my $patron_image = Koha::Patron::Images->find($bor->{borrowernumber}); >-$template->param( picture => 1 ) if $patron_image; >+$template->param( picture => 1 ) if $patron->image; > > if ( C4::Context->preference('ExtendedPatronAttributes') ) { > my $attributes = GetBorrowerAttributes( $bor->{'borrowernumber'} ); >@@ -125,7 +126,7 @@ $template->param( > borrowernumber => $bor->{'borrowernumber'}, > cardnumber => $bor->{'cardnumber'}, > categorycode => $bor->{'categorycode'}, >- category_type => $bor->{'category_type'}, >+ category_type => $category_type, > categoryname => $bor->{'description'}, > address => $bor->{address}, > address2 => $bor->{'address2'}, >@@ -143,7 +144,7 @@ $template->param( > branchcode => $bor->{'branchcode'}, > userid => $bor->{'userid'}, > destination => $destination, >- is_child => ( $bor->{'category_type'} eq 'C' ), >+ is_child => ( $category_type eq 'C' ), > minPasswordLength => $minpw, > RoutingSerials => C4::Context->preference('RoutingSerials'), > csrf_token => Koha::Token->new->generate_csrf({ session_id => scalar $input->cookie('CGISESSID'), }), >diff --git a/members/member.pl b/members/member.pl >index cf00f915ba..02ccbd13e7 100755 >--- a/members/member.pl >+++ b/members/member.pl >@@ -27,9 +27,9 @@ use Modern::Perl; > use C4::Auth; > use C4::Output; > use CGI qw( -utf8 ); >-use C4::Members qw( GetMember ); > use Koha::DateUtils; > use Koha::List::Patron; >+use Koha::Patrons; > > my $input = new CGI; > >@@ -52,12 +52,9 @@ if ( $quicksearch and $searchmember ) { > my $userenv = C4::Context->userenv; > $branchcode = $userenv->{'branch'}; > } >- my $member = GetMember( >- cardnumber => $searchmember, >- ( $branchcode ? ( branchcode => $branchcode ) : () ), >- ); >- if( $member ){ >- print $input->redirect("/cgi-bin/koha/members/moremember.pl?borrowernumber=" . $member->{borrowernumber}); >+ my $patron = Koha::Patrons->find( { cardnumber => $searchmember } ); >+ if( ( $branchcode and $patron->branchcode eq $branchcode ) or ( not $branchcode and $patron ) ){ >+ print $input->redirect("/cgi-bin/koha/members/moremember.pl?borrowernumber=" . $patron->borrowernumber); > exit; > } > } >diff --git a/members/memberentry.pl b/members/memberentry.pl >index 2ffea5de4c..050153442c 100755 >--- a/members/memberentry.pl >+++ b/members/memberentry.pl >@@ -42,6 +42,7 @@ use Koha::Patron::Debarments; > use Koha::Cities; > use Koha::DateUtils; > use Koha::Libraries; >+use Koha::Patrons; > use Koha::Patron::Categories; > use Koha::Patron::HouseboundRole; > use Koha::Patron::HouseboundRoles; >@@ -152,7 +153,11 @@ $template->param( "add" => 1 ) if ( $op eq 'add' ); > $template->param( "quickadd" => 1 ) if ( $quickadd ); > $template->param( "duplicate" => 1 ) if ( $op eq 'duplicate' ); > $template->param( "checked" => 1 ) if ( defined($nodouble) && $nodouble eq 1 ); >-( $borrower_data = GetMember( 'borrowernumber' => $borrowernumber ) ) if ( $op eq 'modify' or $op eq 'save' or $op eq 'duplicate' ); >+if ( $op eq 'modify' or $op eq 'save' or $op eq 'duplicate' ) { >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ $borrower_data = $patron->unblessed; >+ $borrower_data->{category_type} = $patron->category->category_type; >+} > my $categorycode = $input->param('categorycode') || $borrower_data->{'categorycode'}; > my $category_type = $input->param('category_type') || ''; > unless ($category_type or !($categorycode)){ >@@ -242,7 +247,8 @@ if ( ( $op eq 'insert' ) and !$nodouble ) { > > #recover all data from guarantor address phone ,fax... > if ( $guarantorid ) { >- if (my $guarantordata=GetMember(borrowernumber => $guarantorid)) { >+ if (my $guarantor = Koha::Patrons->find( $guarantorid )) { >+ my $guarantordata = $guarantor->unblessed; > $category_type = $guarantordata->{categorycode} eq 'I' ? 'P' : 'C'; > $guarantorinfo=$guarantordata->{'surname'}." , ".$guarantordata->{'firstname'}; > $newdata{'contactfirstname'}= $guarantordata->{'firstname'}; >@@ -307,8 +313,8 @@ if ($op eq 'save' || $op eq 'insert'){ > > my $dateofbirth; > if ($op eq 'save' && $step == 3) { >- my $borrower = C4::Members::GetMember(borrowernumber => $borrowernumber); >- $dateofbirth = $borrower->{dateofbirth}; >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ $dateofbirth = $patron->dateofbirth; > } > else { > $dateofbirth = $newdata{dateofbirth}; >diff --git a/members/moremember.pl b/members/moremember.pl >index 0649dcfd76..320feee16f 100755 >--- a/members/moremember.pl >+++ b/members/moremember.pl >@@ -120,6 +120,12 @@ my $error = $input->param('error'); > $template->param( error => $error ) if ( $error ); > > my $patron = Koha::Patrons->find($borrowernumber); >+unless ( $patron ) { >+ $template->param (unknowuser => 1); >+ output_html_with_http_headers $input, $cookie, $template->output; >+ exit; >+} >+ > my $issues = $patron->checkouts; > my $balance = $patron->account->balance; > $template->param( >@@ -127,16 +133,8 @@ $template->param( > fines => $balance, > ); > >- >-my $data = GetMember( 'borrowernumber' => $borrowernumber ); >- >-if ( not defined $data ) { >- $template->param (unknowuser => 1); >- output_html_with_http_headers $input, $cookie, $template->output; >- exit; >-} >- >-my $category_type = $data->{'category_type'}; >+my $category_type = $patron->category->category_type; >+my $data = $patron->unblessed; > > $debug and printf STDERR "dates (enrolled,expiry,birthdate) raw: (%s, %s, %s)\n", map {$data->{$_}} qw(dateenrolled dateexpiry dateofbirth); > foreach (qw(dateenrolled dateexpiry dateofbirth)) { >@@ -279,8 +277,7 @@ if ( C4::Context->preference('NorwegianPatronDBEnable') && C4::Context->preferen > # check to see if patron's image exists in the database > # basically this gives us a template var to condition the display of > # patronimage related interface on >-my $patron_image = Koha::Patron::Images->find($data->{borrowernumber}); >-$template->param( picture => 1 ) if $patron_image; >+$template->param( picture => 1 ) if $patron->image; > # Generate CSRF token for upload and delete image buttons > $template->param( > csrf_token => Koha::Token->new->generate_csrf({ session_id => $input->cookie('CGISESSID'),}), >diff --git a/members/notices.pl b/members/notices.pl >index 58d4f6ead3..977c921e89 100755 >--- a/members/notices.pl >+++ b/members/notices.pl >@@ -27,14 +27,14 @@ use CGI qw ( -utf8 ); > use C4::Members; > use C4::Letters; > use C4::Members::Attributes qw(GetBorrowerAttributes); >-use Koha::Patron::Images; >+use Koha::Patrons; > > my $input=new CGI; > > > my $borrowernumber = $input->param('borrowernumber'); >-#get borrower details >-my $borrower = GetMember(borrowernumber => $borrowernumber); >+my $patron = Koha::Patrons->find( $borrowernumber ); >+my $borrower = $patron->unblessed; > > my ($template, $loggedinuser, $cookie) > = get_template_and_user({template_name => "members/notices.tt", >@@ -46,8 +46,7 @@ my ($template, $loggedinuser, $cookie) > }); > > $template->param( $borrower ); >-my $patron_image = Koha::Patron::Images->find($borrower->{borrowernumber}); >-$template->param( picture => 1 ) if $patron_image; >+$template->param( picture => 1 ) if $patron->image; > > # Allow resending of messages in Notices tab > my $op = $input->param('op') || q{}; >@@ -78,7 +77,7 @@ $template->param( > QUEUED_MESSAGES => $queued_messages, > borrowernumber => $borrowernumber, > sentnotices => 1, >- categoryname => $borrower->{'description'}, >+ categoryname => $patron->category->description, > RoutingSerials => C4::Context->preference('RoutingSerials'), > ); > output_html_with_http_headers $input, $cookie, $template->output; >diff --git a/members/pay.pl b/members/pay.pl >index 3400ee0667..e4d0a955d3 100755 >--- a/members/pay.pl >+++ b/members/pay.pl >@@ -40,6 +40,7 @@ use C4::Stats; > use C4::Koha; > use C4::Overdues; > use C4::Members::Attributes qw(GetBorrowerAttributes); >+use Koha::Patrons; > use Koha::Patron::Images; > > use Koha::Patron::Categories; >@@ -66,7 +67,11 @@ if ( !$borrowernumber ) { > } > > # get borrower details >-our $borrower = GetMember( borrowernumber => $borrowernumber ); >+my $patron = Koha::Patrons->find( $borrowernumber ); >+my $category = $patron->category; >+our $borrower = $patron->unblessed; >+$borrower->{description} = $category->description; >+$borrower->{category_type} = $category->category_type; > our $user = $input->remote_user; > $user ||= q{}; > >diff --git a/members/paycollect.pl b/members/paycollect.pl >index 9784e88d35..3b8b9228a5 100755 >--- a/members/paycollect.pl >+++ b/members/paycollect.pl >@@ -29,6 +29,7 @@ use C4::Members::Attributes qw(GetBorrowerAttributes); > use C4::Accounts; > use C4::Koha; > use Koha::Patron::Images; >+use Koha::Patrons; > use Koha::Account; > > use Koha::Patron::Categories; >@@ -48,7 +49,11 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > > # get borrower details > my $borrowernumber = $input->param('borrowernumber'); >-my $borrower = GetMember( borrowernumber => $borrowernumber ); >+my $patron = Koha::Patrons->find( $borrowernumber ); >+my $borrower = $patron->unblessed; >+my $category = $patron->category; >+$borrower->{description} = $category->description; >+$borrower->{category_type} = $category->category_type; > my $user = $input->remote_user; > > my $branch = C4::Context->userenv->{'branch'}; >diff --git a/members/printfeercpt.pl b/members/printfeercpt.pl >index 4351aae1af..8863d1c373 100755 >--- a/members/printfeercpt.pl >+++ b/members/printfeercpt.pl >@@ -31,7 +31,7 @@ use CGI qw ( -utf8 ); > use C4::Members; > use C4::Accounts; > use Koha::DateUtils; >-use Koha::Patron::Images; >+use Koha::Patrons; > use Koha::Patron::Categories; > > my $input=new CGI; >@@ -50,8 +50,11 @@ my $borrowernumber=$input->param('borrowernumber'); > my $action = $input->param('action') || ''; > my $accountlines_id = $input->param('accountlines_id'); > >-#get borrower details >-my $data=GetMember('borrowernumber' => $borrowernumber); >+my $patron = Koha::Patrons->find( $borrowernumber ); >+my $category = $patron->category; >+my $data = $patron->unblessed; >+$data->{description} = $category->description; >+$data->{category_type} = $category->category_type; > > if ( $action eq 'print' ) { > # ReversePayment( $borrowernumber, $input->param('accountno') ); >@@ -114,8 +117,7 @@ for (my $i=0;$i<$numaccts;$i++){ > > $template->param( adultborrower => 1 ) if ( $data->{'category_type'} eq 'A' || $data->{'category_type'} eq 'I' ); > >-my $patron_image = Koha::Patron::Images->find($data->{borrowernumber}); >-$template->param( picture => 1 ) if $patron_image; >+$template->param( picture => 1 ) if $patron->image; > > $template->param( > finesview => 1, >diff --git a/members/printinvoice.pl b/members/printinvoice.pl >index 77f315630d..ad823d5005 100755 >--- a/members/printinvoice.pl >+++ b/members/printinvoice.pl >@@ -29,8 +29,8 @@ use Koha::DateUtils; > use CGI qw ( -utf8 ); > use C4::Members; > use C4::Accounts; >-use Koha::Patron::Images; > >+use Koha::Patrons; > use Koha::Patron::Categories; > > my $input = new CGI; >@@ -49,8 +49,11 @@ my $borrowernumber = $input->param('borrowernumber'); > my $action = $input->param('action') || ''; > my $accountlines_id = $input->param('accountlines_id'); > >-#get borrower details >-my $data = GetMember( 'borrowernumber' => $borrowernumber ); >+my $patron = Koha::Patrons->find( $borrowernumber ); >+my $category = $patron->category; >+my $data = $patron->unblessed; >+$data->{description} = $category->description; >+$data->{category_type} = $category->category_type; > > if ( $data->{'category_type'} eq 'C' ) { > my $patron_categories = Koha::Patron::Categories->search_limited({ category_type => 'A' }, {order_by => ['categorycode']}); >@@ -114,8 +117,7 @@ for ( my $i = 0 ; $i < $numaccts ; $i++ ) { > > $template->param( adultborrower => 1 ) if ( $data->{'category_type'} eq 'A' || $data->{'category_type'} eq 'I' ); > >-my $patron_image = Koha::Patron::Images->find($data->{borrowernumber}); >-$template->param( picture => 1 ) if $patron_image; >+$template->param( picture => 1 ) if $patron->image; > > $template->param( > finesview => 1, >diff --git a/members/purchase-suggestions.pl b/members/purchase-suggestions.pl >index f967b10a1a..9e352590e1 100755 >--- a/members/purchase-suggestions.pl >+++ b/members/purchase-suggestions.pl >@@ -26,7 +26,7 @@ use C4::Output; > use C4::Members; > use C4::Members::Attributes qw(GetBorrowerAttributes); > use C4::Suggestions; >-use Koha::Patron::Images; >+use Koha::Patrons; > > my $input = new CGI; > >@@ -43,13 +43,17 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > my $borrowernumber = $input->param('borrowernumber'); > > # Set informations for the patron >-my $borrower = GetMember( borrowernumber => $borrowernumber ); >-foreach my $key ( keys %$borrower ) { >- $template->param( $key => $borrower->{$key} ); >+my $patron = Koha::Patrons->find( $borrowernumber ); >+my $category = $patron->category; >+my $data = $patron->unblessed; >+$data->{description} = $category->description; >+$data->{category_type} = $category->category_type; >+foreach my $key ( keys %$data ) { >+ $template->param( $key => $data->{$key} ); > } > $template->param( > suggestionsview => 1, >- categoryname => $borrower->{'description'}, >+ categoryname => $data->{'description'}, > RoutingSerials => C4::Context->preference('RoutingSerials'), > ); > >@@ -61,8 +65,7 @@ if (C4::Context->preference('ExtendedPatronAttributes')) { > ); > } > >-my $patron_image = Koha::Patron::Images->find($borrowernumber); >-$template->param( picture => 1 ) if $patron_image; >+$template->param( picture => 1 ) if $patron->image; > > my $suggestions = SearchSuggestion( { suggestedby => $borrowernumber } ); > >diff --git a/members/readingrec.pl b/members/readingrec.pl >index 9daf48c314..b0b563c816 100755 >--- a/members/readingrec.pl >+++ b/members/readingrec.pl >@@ -31,8 +31,8 @@ use C4::Members; > use List::MoreUtils qw/any uniq/; > use Koha::DateUtils; > use C4::Members::Attributes qw(GetBorrowerAttributes); >-use Koha::Patron::Images; > >+use Koha::Patrons; > use Koha::Patron::Categories; > > my $input = CGI->new; >@@ -51,14 +51,17 @@ my ($template, $loggedinuser, $cookie)= get_template_and_user({template_name => > }); > > my $op = $input->param('op') || ''; >+my $patron; > if ($input->param('cardnumber')) { > $cardnumber = $input->param('cardnumber'); >- $data = GetMember(cardnumber => $cardnumber); >+ $patron = Koha::Patrons->find( { cardnumber => $cardnumber } ); >+ $data = $patron->unblessed; > $borrowernumber = $data->{'borrowernumber'}; # we must define this as it is used to retrieve other data about the patron > } > if ($input->param('borrowernumber')) { > $borrowernumber = $input->param('borrowernumber'); >- $data = GetMember(borrowernumber => $borrowernumber); >+ $patron = Koha::Patrons->find( $borrowernumber ); >+ $data = $patron->unblessed; > } > > my $order = 'date_due desc'; >@@ -79,8 +82,7 @@ if ( $op eq 'export_barcodes' ) { > my $today = output_pref({ dt => dt_from_string, dateformat => 'iso', dateonly => 1 }); > my @barcodes = > map { $_->{barcode} } grep { $_->{returndate} =~ m/^$today/o } @{$issues}; >- my $borrowercardnumber = >- GetMember( borrowernumber => $borrowernumber )->{'cardnumber'}; >+ my $borrowercardnumber = $data->{cardnumber}; > my $delimiter = "\n"; > binmode( STDOUT, ":encoding(UTF-8)" ); > print $input->header( >@@ -106,8 +108,7 @@ if (! $limit){ > $limit = 'full'; > } > >-my $patron_image = Koha::Patron::Images->find($data->{borrowernumber}); >-$template->param( picture => 1 ) if $patron_image; >+$template->param( picture => 1 ) if $patron->image; > > if (C4::Context->preference('ExtendedPatronAttributes')) { > my $attributes = GetBorrowerAttributes($borrowernumber); >diff --git a/members/routing-lists.pl b/members/routing-lists.pl >index c3e6c8d965..2f3c4aca60 100755 >--- a/members/routing-lists.pl >+++ b/members/routing-lists.pl >@@ -26,7 +26,7 @@ use C4::Members; > use C4::Members::Attributes qw(GetBorrowerAttributes); > use C4::Context; > use C4::Serials; >-use Koha::Patron::Images; >+use Koha::Patrons; > use CGI::Session; > > my $query = new CGI; >@@ -49,18 +49,14 @@ my $borrowernumber = $query->param('borrowernumber'); > my $branch = C4::Context->userenv->{'branch'}; > > # get the borrower information..... >-my $borrower; >+my ( $patron, $patron_info ); > if ($borrowernumber) { >- $borrower = GetMember( borrowernumber => $borrowernumber ); >-} >- >+ $patron = Koha::Patrons->find( $borrowernumber ); >+ my $category = $patron->category; >+ my $patron_info = $patron->unblessed; >+ $patron_info->{description} = $category->description; >+ $patron_info->{category_type} = $category->category_type; > >-################################################################################## >-# BUILD HTML >-# I'm trying to show the title of subscriptions where the borrowernumber is attached via a routing list >- >-if ($borrowernumber) { >-# new op dev > my $count; > my @borrowerSubscriptions; > ($count, @borrowerSubscriptions) = GetSubscriptionsFromBorrower($borrowernumber ); >@@ -80,19 +76,19 @@ if ($borrowernumber) { > routinglistview => 1 > ); > >- $template->param( adultborrower => 1 ) if ( $borrower->{'category_type'} eq 'A' || $borrower->{'category_type'} eq 'I' ); >+ $template->param( adultborrower => 1 ) if ( $patron_info->{category_type} =~ /^(A|I)$/ ); > } > > ################################################################################## > >-$template->param(%$borrower); >+$template->param(%$patron_info); > > $template->param( > findborrower => $findborrower, >- borrower => $borrower, >+ borrower => $patron_info, > borrowernumber => $borrowernumber, > branch => $branch, >- categoryname => $borrower->{description}, >+ categoryname => $patron_info->{description}, > RoutingSerials => C4::Context->preference('RoutingSerials'), > ); > >@@ -104,7 +100,6 @@ if (C4::Context->preference('ExtendedPatronAttributes')) { > ); > } > >-my $patron_image = Koha::Patron::Images->find($borrower->{borrowernumber}); >-$template->param( picture => 1 ) if $patron_image; >+$template->param( picture => 1 ) if $patron and $patron->image; > > output_html_with_http_headers $query, $cookie, $template->output; >diff --git a/members/statistics.pl b/members/statistics.pl >index a63d3285b3..5979e7f1dd 100755 >--- a/members/statistics.pl >+++ b/members/statistics.pl >@@ -31,7 +31,7 @@ use C4::Members; > use C4::Members::Statistics; > use C4::Members::Attributes qw(GetBorrowerAttributes); > use C4::Output; >-use Koha::Patron::Images; >+use Koha::Patrons; > > my $input = new CGI; > >@@ -48,13 +48,18 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > my $borrowernumber = $input->param('borrowernumber'); > > # Set informations for the patron >-my $borrower = GetMember( borrowernumber => $borrowernumber ); >-if ( not defined $borrower ) { >+my $patron = Koha::Patrons->find( $borrowernumber ); >+unless ( $patron ) { > $template->param (unknowuser => 1); > output_html_with_http_headers $input, $cookie, $template->output; > exit; > } > >+my $category = $patron->category; >+my $borrower= $patron->unblessed; >+$borrower->{description} = $category->description; >+$borrower->{category_type} = $category->category_type; >+ > foreach my $key ( keys %$borrower ) { > $template->param( $key => $borrower->{$key} ); > } >@@ -92,8 +97,7 @@ if (C4::Context->preference('ExtendedPatronAttributes')) { > ); > } > >-my $patron_image = Koha::Patron::Images->find($borrower->{borrowernumber}); >-$template->param( picture => 1 ) if $patron_image; >+$template->param( picture => 1 ) if $patron->image; > > $template->param(%$borrower); > >diff --git a/members/summary-print.pl b/members/summary-print.pl >index a3d438c65e..546e93121b 100755 >--- a/members/summary-print.pl >+++ b/members/summary-print.pl >@@ -27,6 +27,7 @@ use C4::Reserves; > use C4::Items; > use Koha::Holds; > use Koha::ItemTypes; >+use Koha::Patrons; > > my $input = CGI->new; > my $borrowernumber = $input->param('borrowernumber'); >@@ -42,7 +43,11 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > } > ); > >-my $data = GetMember( 'borrowernumber' => $borrowernumber ); >+my $patron = Koha::Patrons->find( $borrowernumber ); >+my $category = $patron->category; >+my $data = $patron->unblessed; >+$data->{description} = $category->description; >+$data->{category_type} = $category->category_type; > > my ( $total, $accts, $numaccts ) = GetMemberAccountRecords($borrowernumber); > foreach my $accountline (@$accts) { >diff --git a/members/update-child.pl b/members/update-child.pl >index 5d50d931b4..bedf9b5fb3 100755 >--- a/members/update-child.pl >+++ b/members/update-child.pl >@@ -33,6 +33,7 @@ use C4::Context; > use C4::Auth; > use C4::Output; > use C4::Members; >+use Koha::Patrons; > use Koha::Patron::Categories; > > # use Smart::Comments; >@@ -71,7 +72,8 @@ if ( $op eq 'multi' ) { > } > > elsif ( $op eq 'update' ) { >- my $member = GetMember('borrowernumber'=>$borrowernumber); >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ my $member = $patron->unblessed; > $member->{'guarantorid'} = 0; > $member->{'categorycode'} = $catcode; > my $borcat = Koha::Patron::Categories->find($catcode); >diff --git a/misc/cronjobs/advance_notices.pl b/misc/cronjobs/advance_notices.pl >index 2274737aaf..1f992cc2af 100755 >--- a/misc/cronjobs/advance_notices.pl >+++ b/misc/cronjobs/advance_notices.pl >@@ -509,9 +509,8 @@ sub get_branch_info { > my ( $borrowernumber ) = @_; > > ## Get branch info for borrowers home library. >- my $borrower_details = C4::Members::GetMember( borrowernumber => $borrowernumber ); >- my $borrower_branchcode = $borrower_details->{'branchcode'}; >- my $branch = Koha::Libraries->find( $borrower_branchcode )->unblessed; >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ my $branch = $patron->library->unblessed; > my %branch_info; > foreach my $key( keys %$branch ) { > $branch_info{"branches.$key"} = $branch->{$key}; >diff --git a/misc/cronjobs/notice_unprocessed_suggestions.pl b/misc/cronjobs/notice_unprocessed_suggestions.pl >index a0c42ed662..f8f2e8fb51 100755 >--- a/misc/cronjobs/notice_unprocessed_suggestions.pl >+++ b/misc/cronjobs/notice_unprocessed_suggestions.pl >@@ -6,9 +6,9 @@ use Pod::Usage; > use Getopt::Long; > > use C4::Budgets qw( GetBudget ); >-use C4::Members qw( GetMember ); > use C4::Suggestions qw( GetUnprocessedSuggestions ); > use Koha::Libraries; >+use Koha::Patrons; > > my ( $help, $verbose, $confirm, @days ); > GetOptions( >@@ -45,38 +45,38 @@ for my $number_of_days (@days) { > say "Suggestion $suggestion->{suggestionid} should be processed" if $verbose; > > my $budget = C4::Budgets::GetBudget( $suggestion->{budgetid} ); >- my $patron = C4::Members::GetMember( borrowernumber => $budget->{budget_owner_id} ); >+ my $patron = Koha::Patrons->find( $budget->{budget_owner_id} ); > my $email_address = > C4::Members::GetNoticeEmailAddress( $budget->{budget_owner_id} ); >- my $library = Koha::Libraries->find( $patron->{branchcode} ); >+ my $library = $patron->library; > my $admin_email_address = $library->branchemail > || C4::Context->preference('KohaAdminEmailAddress'); > > if ($email_address) { >- say "Patron $patron->{borrowernumber} is going to be notified" if $verbose; >+ say "Patron " . $patron->borrowernumber . " is going to be notified" if $verbose; > my $letter = C4::Letters::GetPreparedLetter( > module => 'suggestions', > letter_code => 'TO_PROCESS', >- branchcode => $patron->{branchcode}, >- lang => $patron->{lang}, >+ branchcode => $patron->branchcode, >+ lang => $patron->lang, > tables => { > suggestions => $suggestion->{suggestionid}, >- branches => $patron->{branchcode}, >- borrowers => $patron->{borrowernumber}, >+ branches => $patron->branchcode, >+ borrowers => $patron->borrowernumber, > }, > ); > if ( $confirm ) { > C4::Letters::EnqueueLetter( > { > letter => $letter, >- borrowernumber => $patron->{borrowernumber}, >+ borrowernumber => $patron->borrowernumber, > message_transport_type => 'email', > from_address => $admin_email_address, > } > ); > } > } else { >- say "Patron $patron->{borrowernumber} does not have an email address" if $verbose; >+ say "Patron " . $patron->borrowernumber . " does not have an email address" if $verbose; > } > } > >diff --git a/misc/export_borrowers.pl b/misc/export_borrowers.pl >index 5a2b92023f..5f5c7f74ed 100755 >--- a/misc/export_borrowers.pl >+++ b/misc/export_borrowers.pl >@@ -24,7 +24,7 @@ use Text::CSV; > use Getopt::Long qw(:config no_ignore_case); > > use C4::Context; >-use C4::Members; >+use Koha::Patrons; > > binmode STDOUT, ":encoding(UTF-8)"; > >@@ -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 GetMember function. >+ column names of the borrower table (also as 'description' and 'category_type' > If no field is specified, then all fields will be > exported. > -s, --separator=CHAR This character will be used to separate fields. >@@ -99,8 +99,13 @@ my $csv = Text::CSV->new( { sep_char => $separator, binary => 1 } ); > # If the user did not specify any field to export, we assume they want 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 = GetMember($borrowernumber); # FIXME Now is_expired is no longer available >+my $patron = Koha::Patrons->find( $borrowernumber ); # FIXME Now is_expired is no longer available > # We will have to use Koha::Patron and allow method calls >+my $category = $patron->category; >+my $member = $patron->unblessed; >+$member->{description} = $category->description; >+$member->{category_type} = $category->category_type; >+ > @fields = keys %$member unless (@fields); > > if ($show_header) { >@@ -121,7 +126,11 @@ die "Invalid character at borrower $borrowernumber: [" > print $csv->string . "\n"; > > while ( my $borrowernumber = $sth->fetchrow_array ) { >- $member = GetMember( borrowernumber => $borrowernumber ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ my $category = $patron->category; >+ my $member = $patron->unblessed; >+ $member->{description} = $category->description; >+ $member->{category_type} = $category->category_type; > $csv->combine( > map { > ( defined $member->{$_} and !ref $member->{$_} ) >diff --git a/misc/load_testing/benchmark_staff.pl b/misc/load_testing/benchmark_staff.pl >index 56085c82b7..f060464435 100644 >--- a/misc/load_testing/benchmark_staff.pl >+++ b/misc/load_testing/benchmark_staff.pl >@@ -18,8 +18,8 @@ use Data::Dumper; > use HTTP::Cookies; > use C4::Context; > use C4::Debug; >-use C4::Members qw ( GetMember ); > use URI::Escape; >+use Koha::Patrons; > > my ($help, $steps, $baseurl, $max_tries, $user, $password,$short_print); > GetOptions( >@@ -91,7 +91,7 @@ if( $resp->is_success and $resp->content =~ m|<status>ok</status>| ) { > } > > die "You cannot use the database administrator account to launch this script" >- unless defined C4::Members::GetMember(userid => $user); >+ unless defined Koha::Patrons->find( { userid => $user } ); > > # remove some unnecessary garbage from the cookie > $cookie =~ s/ path_spec; discard; version=0//; >diff --git a/offline_circ/list.pl b/offline_circ/list.pl >index 4a130ed302..dc4f60956d 100755 >--- a/offline_circ/list.pl >+++ b/offline_circ/list.pl >@@ -29,6 +29,7 @@ use C4::Context; > use C4::Circulation; > use C4::Members; > use C4::Biblio; >+use Koha::Patrons; > > my $query = CGI->new; > >@@ -46,10 +47,10 @@ for (@$operations) { > my $biblio = GetBiblioFromItemNumber(undef, $_->{'barcode'}); > $_->{'bibliotitle'} = $biblio->{'title'}; > $_->{'biblionumber'} = $biblio->{'biblionumber'}; >- my $borrower = C4::Members::GetMember( cardnumber => $_->{'cardnumber'} ); >- if ($borrower) { >- $_->{'borrowernumber'} = $borrower->{'borrowernumber'}; >- $_->{'borrower'} = ($borrower->{'firstname'}?$borrower->{'firstname'}:'').' '.$borrower->{'surname'}; >+ my $patron = $_->{cardnumber} ? Koha::Patrons->find( { cardnumber => $_->{cardnumber} } ) : undef; >+ if ($patron) { >+ $_->{'borrowernumber'} = $patron->borrowernumber; >+ $_->{'borrower'} = ($patron->firstname ? $patron->firstname:'').' '.$patron->surname; > } > $_->{'actionissue'} = $_->{'action'} eq 'issue'; > $_->{'actionreturn'} = $_->{'action'} eq 'return'; >diff --git a/offline_circ/process_koc.pl b/offline_circ/process_koc.pl >index 7567dd3148..87b3b2265d 100755 >--- a/offline_circ/process_koc.pl >+++ b/offline_circ/process_koc.pl >@@ -249,7 +249,8 @@ sub kocIssueItem { > > $circ->{ 'barcode' } = barcodedecode($circ->{'barcode'}) if( $circ->{'barcode'} && C4::Context->preference('itemBarcodeInputFilter')); > my $branchcode = C4::Context->userenv->{branch}; >- my $borrower = GetMember( 'cardnumber'=>$circ->{ 'cardnumber' } ); >+ my $patron = Koha::Patrons->find( { cardnumber => $circ->{ 'cardnumber' } } ); >+ my $borrower = $patron->unblessed; > my $item = GetBiblioFromItemNumber( undef, $circ->{ 'barcode' } ); > my $issue = Koha::Checkouts->find( { itemnumber => $item->{itemnumber} } ); > >@@ -330,13 +331,13 @@ sub kocReturnItem { > #warn( Data::Dumper->Dump( [ $circ, $item ], [ qw( circ item ) ] ) ); > my $borrowernumber = _get_borrowernumber_from_barcode( $circ->{'barcode'} ); > if ( $borrowernumber ) { >- my $borrower = GetMember( 'borrowernumber' => $borrowernumber ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); > C4::Circulation::MarkIssueReturned( > $borrowernumber, > $item->{'itemnumber'}, > undef, > $circ->{'date'}, >- $borrower->{'privacy'} >+ $patron->privacy > ); > > ModItem({ onloan => undef }, $item->{'biblionumber'}, $item->{'itemnumber'}); >@@ -347,10 +348,10 @@ sub kocReturnItem { > title => $item->{ 'title' }, > biblionumber => $item->{'biblionumber'}, > barcode => $item->{ 'barcode' }, >- borrowernumber => $borrower->{'borrowernumber'}, >- firstname => $borrower->{'firstname'}, >- surname => $borrower->{'surname'}, >- cardnumber => $borrower->{'cardnumber'}, >+ borrowernumber => $patron->borrowernumber, >+ firstname => $patron->firstname, >+ surname => $patron->surname, >+ cardnumber => $patron->cardnumber, > datetime => $circ->{ 'datetime' } > }; > } else { >diff --git a/opac/opac-ISBDdetail.pl b/opac/opac-ISBDdetail.pl >index 6cb502c614..175d3465ce 100755 >--- a/opac/opac-ISBDdetail.pl >+++ b/opac/opac-ISBDdetail.pl >@@ -52,8 +52,8 @@ use C4::Reserves; > use C4::Acquisition; > use C4::Serials; # uses getsubscriptionfrom biblionumber > use C4::Koha; >-use C4::Members; # GetMember > use Koha::ItemTypes; >+use Koha::Patrons; > use Koha::RecordProcessor; > > >@@ -164,7 +164,7 @@ my $res = GetISBDView({ > }); > > my $itemtypes = { map { $_->{itemtype} => $_ } @{ Koha::ItemTypes->search_with_localization->unblessed } }; >-my $borrower = GetMember( 'borrowernumber' => $loggedinuser ); >+my $patron = Koha::Patrons->find( $loggedinuser ); > for my $itm (@items) { > $norequests = 0 > if $norequests >@@ -174,7 +174,7 @@ for my $itm (@items) { > && !$itemtypes->{$itm->{'itype'}}->{notforloan} > && $itm->{'itemnumber'}; > >- $allow_onshelf_holds = C4::Reserves::OnShelfHoldsAllowed($itm, $borrower) >+ $allow_onshelf_holds = C4::Reserves::OnShelfHoldsAllowed($itm, $patron->unblessed) > unless $allow_onshelf_holds; > } > >diff --git a/opac/opac-MARCdetail.pl b/opac/opac-MARCdetail.pl >index 3c9c2c23c8..d758af2891 100755 >--- a/opac/opac-MARCdetail.pl >+++ b/opac/opac-MARCdetail.pl >@@ -57,6 +57,7 @@ use C4::Members; > use C4::Acquisition; > use C4::Koha; > use List::MoreUtils qw( any uniq ); >+use Koha::Patrons; > use Koha::RecordProcessor; > > my $query = new CGI; >@@ -126,9 +127,9 @@ if(my $cart_list = $query->cookie("bib_list")){ > } > > my $allow_onshelf_holds; >-my $borrower = GetMember( 'borrowernumber' => $loggedinuser ); >+my $patron = Koha::Patrons->find( $loggedinuser )->unblessed; > for my $itm (@all_items) { >- $allow_onshelf_holds = C4::Reserves::OnShelfHoldsAllowed($itm, $borrower); >+ $allow_onshelf_holds = C4::Reserves::OnShelfHoldsAllowed($itm, $patron); > last if $allow_onshelf_holds; > } > >diff --git a/opac/opac-account-pay-paypal-return.pl b/opac/opac-account-pay-paypal-return.pl >index eb870cc226..64292d480d 100755 >--- a/opac/opac-account-pay-paypal-return.pl >+++ b/opac/opac-account-pay-paypal-return.pl >@@ -29,9 +29,9 @@ use URI; > use C4::Auth; > use C4::Output; > use C4::Accounts; >-use C4::Members; > use Koha::Acquisition::Currencies; > use Koha::Database; >+use Koha::Patrons; > > my $cgi = new CGI; > >@@ -117,8 +117,9 @@ else { > $error = "PAYPAL_UNABLE_TO_CONNECT"; > } > >+my $patron = Koha::Patrons->find( $borrowernumber ); > $template->param( >- borrower => GetMember( borrowernumber => $borrowernumber ), >+ borrower => $patron->unblessed, > accountview => 1 > ); > >diff --git a/opac/opac-account.pl b/opac/opac-account.pl >index e02e5f398e..9888f88556 100755 >--- a/opac/opac-account.pl >+++ b/opac/opac-account.pl >@@ -19,12 +19,12 @@ > # along with Koha; if not, see <http://www.gnu.org/licenses>. > > >-use strict; >+use Modern::Perl; > use CGI qw ( -utf8 ); > use C4::Members; > use C4::Auth; > use C4::Output; >-use warnings; >+use Koha::Patrons; > > my $query = new CGI; > my ( $template, $borrowernumber, $cookie ) = get_template_and_user( >@@ -37,7 +37,11 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( > } > ); > >-my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ); >+my $patron = Koha::Patrons->find( $borrowernumber ); >+my $category = $patron->category; >+my $borrower= $patron->unblessed; >+$borrower->{description} = $category->description; >+$borrower->{category_type} = $category->category_type; > $template->param( BORROWER_INFO => $borrower ); > > #get account details >diff --git a/opac/opac-detail.pl b/opac/opac-detail.pl >index f2c2f6fe6a..a56ed6a96b 100755 >--- a/opac/opac-detail.pl >+++ b/opac/opac-detail.pl >@@ -53,6 +53,7 @@ use Koha::AuthorisedValues; > use Koha::Biblios; > use Koha::ItemTypes; > use Koha::Virtualshelves; >+use Koha::Patrons; > use Koha::Ratings; > use Koha::Reviews; > >@@ -655,7 +656,7 @@ if ( not $viewallitems and @items > $max_items_to_display ) { > ); > } else { > my $allow_onshelf_holds; >- my $borrower = GetMember( 'borrowernumber' => $borrowernumber ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); > for my $itm (@items) { > $itm->{holds_count} = $item_reserves{ $itm->{itemnumber} }; > $itm->{priority} = $priority{ $itm->{itemnumber} }; >@@ -667,7 +668,7 @@ if ( not $viewallitems and @items > $max_items_to_display ) { > && !$itemtypes->{$itm->{'itype'}}->{notforloan} > && $itm->{'itemnumber'}; > >- $allow_onshelf_holds = C4::Reserves::OnShelfHoldsAllowed( $itm, $borrower ) >+ $allow_onshelf_holds = C4::Reserves::OnShelfHoldsAllowed( $itm, $patron->unblessed ) > unless $allow_onshelf_holds; > > # get collection code description, too >@@ -839,19 +840,19 @@ if ( C4::Context->preference('reviewson') ) { > } > } > for my $review (@$reviews) { >- my $borrowerData = GetMember( 'borrowernumber' => $review->{borrowernumber} ); >+ my $patron = Koha::Patrons->find( $review->{borrowernumber} ); > > # setting some borrower info into this hash >- $review->{title} = $borrowerData->{'title'}; >- $review->{surname} = $borrowerData->{'surname'}; >- $review->{firstname} = $borrowerData->{'firstname'}; >- if ( $libravatar_enabled and $borrowerData->{'email'} ) { >- $review->{avatarurl} = libravatar_url( email => $borrowerData->{'email'}, https => $ENV{HTTPS} ); >+ $review->{title} = $patron->title; >+ $review->{surname} = $patron->surname; >+ $review->{firstname} = $patron->firstname; >+ if ( $libravatar_enabled and $patron->email ) { >+ $review->{avatarurl} = libravatar_url( email => $patron->email, https => $ENV{HTTPS} ); > } >- $review->{userid} = $borrowerData->{'userid'}; >- $review->{cardnumber} = $borrowerData->{'cardnumber'}; >+ $review->{userid} = $patron->userid; >+ $review->{cardnumber} = $patron->cardnumber; > >- if ( $borrowerData->{'borrowernumber'} eq $borrowernumber ) { >+ if ( $patron->borrowernumber eq $borrowernumber ) { > $review->{your_comment} = 1; > $loggedincommenter = 1; > } >diff --git a/opac/opac-discharge.pl b/opac/opac-discharge.pl >index e5fc49b27e..4ce1322c5f 100755 >--- a/opac/opac-discharge.pl >+++ b/opac/opac-discharge.pl >@@ -26,7 +26,7 @@ use C4::Context; > use C4::Output; > use C4::Log; > use C4::Debug; >-use C4::Members; >+use Koha::Patrons; > use Koha::Patron::Discharge; > use Koha::DateUtils; > >@@ -63,10 +63,10 @@ elsif ( $op eq 'get' ) { > eval { > > # Getting member data >- my $data = GetMember( borrowernumber => $loggedinuser ); >+ my $patron = Koha::Patrons->find( $loggedinuser ); > my $pdf_path = Koha::Patron::Discharge::generate_as_pdf({ > borrowernumber => $loggedinuser, >- branchcode => $data->{'branchcode'}, >+ branchcode => $patron->branchcode, > }); > > binmode(STDOUT); >diff --git a/opac/opac-memberentry.pl b/opac/opac-memberentry.pl >index 1e4034c6c9..957c38d539 100755 >--- a/opac/opac-memberentry.pl >+++ b/opac/opac-memberentry.pl >@@ -208,8 +208,8 @@ if ( $action eq 'create' ) { > C4::Form::MessagingPreferences::handle_form_action($cgi, { borrowernumber => $borrowernumber }, $template, 1, C4::Context->preference('PatronSelfRegistrationDefaultCategory') ) if $borrowernumber && C4::Context->preference('EnhancedMessagingPreferences'); > > $template->param( password_cleartext => $password ); >- $template->param( >- borrower => GetMember( borrowernumber => $borrowernumber ) ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ $template->param( borrower => $patron->unblessed ); > $template->param( > PatronSelfRegistrationAdditionalInstructions => > C4::Context->preference( >@@ -220,7 +220,7 @@ if ( $action eq 'create' ) { > } > elsif ( $action eq 'update' ) { > >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >+ my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > die "Wrong CSRF token" > unless Koha::Token->new->check_csrf({ > session_id => scalar $cgi->cookie('CGISESSID'), >@@ -277,15 +277,15 @@ elsif ( $action eq 'update' ) { > > my $m = Koha::Patron::Modification->new( \%borrower_changes )->store(); > >- $template->param( >- borrower => GetMember( borrowernumber => $borrowernumber ), >- ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ $template->param( borrower => $patron->unblessed ); > } > else { >+ my $patron = Koha::Patrons->find( $borrowernumber ); > $template->param( > action => 'edit', > nochanges => 1, >- borrower => GetMember( borrowernumber => $borrowernumber ), >+ borrower => $patron->unblessed, > patron_attribute_classes => GeneratePatronAttributesForm( $borrowernumber, $attributes ), > csrf_token => Koha::Token->new->generate_csrf({ > session_id => scalar $cgi->cookie('CGISESSID'), >@@ -295,7 +295,8 @@ elsif ( $action eq 'update' ) { > } > } > elsif ( $action eq 'edit' ) { #Display logged in borrower's data >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ my $borrower = $patron->unblessed; > > $template->param( > borrower => $borrower, >@@ -307,8 +308,7 @@ elsif ( $action eq 'edit' ) { #Display logged in borrower's data > ); > > if (C4::Context->preference('OPACpatronimages')) { >- my $patron_image = Koha::Patron::Images->find($borrower->{borrowernumber}); >- $template->param( display_patron_image => 1 ) if $patron_image; >+ $template->param( display_patron_image => 1 ) if $patron->image; > } > > $template->param( patron_attribute_classes => GeneratePatronAttributesForm( $borrowernumber ) ); >@@ -450,7 +450,8 @@ sub ParseCgiForBorrower { > sub DelUnchangedFields { > my ( $borrowernumber, %new_data ) = @_; > >- my $current_data = GetMember( borrowernumber => $borrowernumber ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ my $current_data = $patron->unblessed; > > foreach my $key ( keys %new_data ) { > if ( $current_data->{$key} eq $new_data{$key} ) { >diff --git a/opac/opac-messaging.pl b/opac/opac-messaging.pl >index 47b09e53f9..906d56fe4e 100755 >--- a/opac/opac-messaging.pl >+++ b/opac/opac-messaging.pl >@@ -50,7 +50,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( > } > ); > >-my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ); >+my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > my $messaging_options = C4::Members::Messaging::GetMessagingOptions(); > > if ( defined $query->param('modify') && $query->param('modify') eq 'yes' ) { >@@ -63,7 +63,8 @@ if ( defined $query->param('modify') && $query->param('modify') eq 'yes' ) { > smsalertnumber => $sms, > sms_provider_id => $sms_provider_id, > ); >- $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ); >+ # FIXME will not be needed when ModMember will be replaced >+ $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > } > > C4::Form::MessagingPreferences::handle_form_action($query, { borrowernumber => $borrowernumber }, $template); >diff --git a/opac/opac-passwd.pl b/opac/opac-passwd.pl >index 4b33413f3e..db63cd3ae5 100755 >--- a/opac/opac-passwd.pl >+++ b/opac/opac-passwd.pl >@@ -30,6 +30,7 @@ use C4::Circulation; > use C4::Members; > use C4::Output; > use Koha::AuthUtils qw(hash_password); >+use Koha::Patrons; > > my $query = new CGI; > my $dbh = C4::Context->dbh; >@@ -44,7 +45,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( > } > ); > >-my $borr = C4::Members::GetMember( borrowernumber => $borrowernumber ); >+my $patron = Koha::Patrons->find( $borrowernumber ); > my $minpasslen = C4::Context->preference("minPasswordLength"); > if ( C4::Context->preference("OpacPasswordChange") ) { > my $sth = $dbh->prepare("UPDATE borrowers SET password = ? WHERE borrowernumber=?"); >@@ -103,8 +104,8 @@ if ( C4::Context->preference("OpacPasswordChange") ) { > } > } > } >-$template->param(firstname => $borr->{'firstname'}, >- surname => $borr->{'surname'}, >+$template->param(firstname => $patron->firstname, >+ surname => $patron->surname, > minpasslen => $minpasslen, > passwdview => 1, > ); >diff --git a/opac/opac-readingrecord.pl b/opac/opac-readingrecord.pl >index 940bd91c3a..879a31ea61 100755 >--- a/opac/opac-readingrecord.pl >+++ b/opac/opac-readingrecord.pl >@@ -31,6 +31,7 @@ use MARC::Record; > > use C4::Output; > use C4::Charset qw(StripNonXmlChars); >+use Koha::Patrons; > > use Koha::ItemTypes; > >@@ -52,8 +53,7 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( > } > ); > >-# get borrower information .... >-my ( $borr ) = GetMember( borrowernumber => $borrowernumber ); >+my $borr = Koha::Patrons->find( $borrowernumber )->unblessed; > > $template->param(%{$borr}); > >diff --git a/opac/opac-registration-verify.pl b/opac/opac-registration-verify.pl >index 1098af079f..9d49c04ab1 100755 >--- a/opac/opac-registration-verify.pl >+++ b/opac/opac-registration-verify.pl >@@ -23,6 +23,7 @@ use C4::Auth; > use C4::Output; > use C4::Members; > use C4::Form::MessagingPreferences; >+use Koha::Patrons; > use Koha::Patron::Modifications; > > my $cgi = new CGI; >@@ -60,8 +61,8 @@ if ( $m ) { > C4::Form::MessagingPreferences::handle_form_action($cgi, { borrowernumber => $borrowernumber }, $template, 1, C4::Context->preference('PatronSelfRegistrationDefaultCategory') ) if C4::Context->preference('EnhancedMessagingPreferences'); > > $template->param( password_cleartext => $password ); >- $template->param( >- borrower => GetMember( borrowernumber => $borrowernumber ) ); >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ $template->param( borrower => $patron->unblessed ); > $template->param( > PatronSelfRegistrationAdditionalInstructions => > C4::Context->preference( >diff --git a/opac/opac-renew.pl b/opac/opac-renew.pl >index 03c4a714a4..ad9cacfa72 100755 >--- a/opac/opac-renew.pl >+++ b/opac/opac-renew.pl >@@ -70,8 +70,7 @@ else { > $branchcode = $item->{'homebranch'}; > } > elsif ( $renewalbranch eq 'patronhomebranch' ) { >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >- $branchcode = $borrower->{'branchcode'}; >+ $branchcode = Koha::Patrons->find( $borrowernumber )->branchcode; > } > elsif ( $renewalbranch eq 'checkoutbranch' ) { > my $issue = GetOpenIssue($itemnumber); >diff --git a/opac/opac-reserve.pl b/opac/opac-reserve.pl >index 7bb6e7a86c..b6a76d4749 100755 >--- a/opac/opac-reserve.pl >+++ b/opac/opac-reserve.pl >@@ -73,15 +73,14 @@ sub get_out { > exit; > } > >-# get borrower information .... >-my ( $borr ) = GetMember( borrowernumber => $borrowernumber ); > my $patron = Koha::Patrons->find( $borrowernumber ); > > my $can_place_hold_if_available_at_pickup = C4::Context->preference('OPACHoldsIfAvailableAtPickup'); > unless ( $can_place_hold_if_available_at_pickup ) { > my @patron_categories = split '\|', C4::Context->preference('OPACHoldsIfAvailableAtPickupExceptions'); > if ( @patron_categories ) { >- $can_place_hold_if_available_at_pickup = grep /$borr->{categorycode}/, @patron_categories; >+ my $categorycode = $patron->categorycode; >+ $can_place_hold_if_available_at_pickup = grep /^$categorycode$/, @patron_categories; > } > } > >@@ -135,7 +134,7 @@ if (($#biblionumbers < 0) && (! $query->param('place_reserve'))) { > > > # pass the pickup branch along.... >-my $branch = $query->param('branch') || $borr->{'branchcode'} || C4::Context->userenv->{branch} || '' ; >+my $branch = $query->param('branch') || $patron->branchcode || C4::Context->userenv->{branch} || '' ; > $template->param( branch => $branch ); > > # Is the person allowed to choose their branch >@@ -240,7 +239,7 @@ if ( $query->param('place_reserve') ) { > my $singleBranchMode = Koha::Libraries->search->count == 1; > if ( $singleBranchMode || !$OPACChooseBranch ) > { # single branch mode or disabled user choosing >- $branch = $borr->{'branchcode'}; >+ $branch = $patron->branchcode; > } > > #item may belong to a host biblio, if yes change biblioNum to hosts bilbionumber >@@ -335,7 +334,7 @@ if ( $amountoutstanding && ($amountoutstanding > $maxoutstanding) ) { > $template->param( too_much_oweing => $amount ); > } > >-if ( $borr->{gonenoaddress} && ($borr->{gonenoaddress} == 1) ) { >+if ( $patron->gonenoaddress && ($patron->gonenoaddress == 1) ) { > $noreserves = 1; > $template->param( > message => 1, >@@ -343,7 +342,7 @@ if ( $borr->{gonenoaddress} && ($borr->{gonenoaddress} == 1) ) { > ); > } > >-if ( $borr->{lost} && ($borr->{lost} == 1) ) { >+if ( $patron->lost && ($patron->lost == 1) ) { > $noreserves = 1; > $template->param( > message => 1, >@@ -356,8 +355,8 @@ if ( $patron->is_debarred ) { > $template->param( > message => 1, > debarred => 1, >- debarred_comment => $borr->{debarredcomment}, >- debarred_date => $borr->{debarred}, >+ debarred_comment => $patron->debarredcomment, >+ debarred_date => $patron->debarred, > ); > } > >@@ -477,12 +476,12 @@ foreach my $biblioNum (@biblionumbers) { > my $holds = $item->current_holds; > > if ( my $first_hold = $holds->next ) { >- my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $first_hold->borrowernumber ); >+ my $patron = Koha::Patrons->find( $first_hold->borrowernumber ); > $itemLoopIter->{backgroundcolor} = 'reserved'; > $itemLoopIter->{reservedate} = output_pref({ dt => dt_from_string($first_hold->reservedate), dateonly => 1 }); # FIXME Should be formatted in the template > $itemLoopIter->{ReservedForBorrowernumber} = $first_hold->borrowernumber; >- $itemLoopIter->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'}; >- $itemLoopIter->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'}; >+ $itemLoopIter->{ReservedForSurname} = $patron->surname; >+ $itemLoopIter->{ReservedForFirstname} = $patron->firstname; > $itemLoopIter->{ExpectedAtLibrary} = $first_hold->branchcode; > $itemLoopIter->{waitingdate} = $first_hold->waitingdate; > } >@@ -528,15 +527,16 @@ foreach my $biblioNum (@biblionumbers) { > # If there is no loan, return and transfer, we show a checkbox. > $itemLoopIter->{notforloan} = $itemLoopIter->{notforloan} || 0; > >- my $branch = GetReservesControlBranch( $itemInfo, $borr ); >+ my $patron_unblessed = $patron->unblessed; >+ my $branch = GetReservesControlBranch( $itemInfo, $patron_unblessed ); > > my $policy_holdallowed = !$itemLoopIter->{already_reserved}; > $policy_holdallowed &&= >- IsAvailableForItemLevelRequest($itemInfo,$borr) && >+ IsAvailableForItemLevelRequest($itemInfo,$patron_unblessed) && > CanItemBeReserved($borrowernumber,$itemNum) eq 'OK'; > > if ($policy_holdallowed) { >- if ( my $hold_allowed = OPACItemHoldsAllowed( $itemInfo, $borr ) ) { >+ if ( my $hold_allowed = OPACItemHoldsAllowed( $itemInfo, $patron_unblessed ) ) { > $itemLoopIter->{available} = 1; > $numCopiesOPACAvailable++; > $biblioLoopIter{force_hold} = 1 if $hold_allowed eq 'F'; >diff --git a/opac/opac-sendbasket.pl b/opac/opac-sendbasket.pl >index 063dd8bf06..b7167e8667 100755 >--- a/opac/opac-sendbasket.pl >+++ b/opac/opac-sendbasket.pl >@@ -33,6 +33,7 @@ use C4::Output; > use C4::Members; > use C4::Templates (); > use Koha::Email; >+use Koha::Patrons; > use Koha::Token; > > my $query = new CGI; >@@ -57,11 +58,11 @@ if ( $email_add ) { > token => scalar $query->param('csrf_token'), > }); > my $email = Koha::Email->new(); >- my $user = GetMember(borrowernumber => $borrowernumber); >+ my $patron = Koha::Patrons->find( $borrowernumber ); > my $user_email = GetFirstValidEmailAddress($borrowernumber) > || C4::Context->preference('KohaAdminEmailAddress'); > >- my $email_replyto = "$user->{firstname} $user->{surname} <$user_email>"; >+ my $email_replyto = $patron->firstname . " " . $patron->surname . " <$user_email>"; > my $comment = $query->param('comment'); > > # if you want to use the KohaAdmin address as from, that is the default no need to set it >@@ -114,8 +115,8 @@ if ( $email_add ) { > $template2->param( > BIBLIO_RESULTS => $resultsarray, > comment => $comment, >- firstname => $user->{firstname}, >- surname => $user->{surname}, >+ firstname => $patron->firstname, >+ surname => $patron->surname, > ); > > # Getting template result >diff --git a/opac/opac-sendshelf.pl b/opac/opac-sendshelf.pl >index 242caca7d0..e58ce7c6b3 100755 >--- a/opac/opac-sendshelf.pl >+++ b/opac/opac-sendshelf.pl >@@ -33,6 +33,7 @@ use C4::Items; > use C4::Output; > use C4::Members; > use Koha::Email; >+use Koha::Patrons; > use Koha::Virtualshelves; > > my $query = new CGI; >@@ -109,14 +110,14 @@ if ( $email ) { > push( @results, $dat ); > } > >- my $user = GetMember(borrowernumber => $borrowernumber); >+ my $patron = Koha::Patrons->find( $borrowernumber ); > > $template2->param( > BIBLIO_RESULTS => \@results, > comment => $comment, > shelfname => $shelf->shelfname, >- firstname => $user->{firstname}, >- surname => $user->{surname}, >+ firstname => $patron->firstname, >+ surname => $patron->surname, > ); > > # Getting template result >diff --git a/opac/opac-shelves.pl b/opac/opac-shelves.pl >index 85bc8e60eb..2e6fe6712d 100755 >--- a/opac/opac-shelves.pl >+++ b/opac/opac-shelves.pl >@@ -31,6 +31,7 @@ use C4::XSLT; > > use Koha::Biblioitems; > use Koha::ItemTypes; >+use Koha::Patrons; > use Koha::Virtualshelves; > use Koha::RecordProcessor; > >@@ -67,7 +68,7 @@ if ( $op eq 'add_form' ) { > > if ( $shelf ) { > $category = $shelf->category; >- my $patron = GetMember( 'borrowernumber' => $shelf->owner ); >+ my $patron = Koha::Patrons->find( $shelf->owner ); > $template->param( owner => $patron, ); > unless ( $shelf->can_be_managed( $loggedinuser ) ) { > push @messages, { type => 'error', code => 'unauthorized_on_update' }; >@@ -257,7 +258,7 @@ if ( $op eq 'view' ) { > @cart_list = split(/\//, $cart_list); > } > >- my $borrower = GetMember( borrowernumber => $loggedinuser ); >+ my $patron = Koha::Patrons->find( $loggedinuser ); > > # Lists display falls back to search results configuration > my $xslfile = C4::Context->preference('OPACXSLTListsDisplay'); >@@ -314,7 +315,7 @@ if ( $op eq 'view' ) { > }); > } > >- $this_item->{allow_onshelf_holds} = C4::Reserves::OnShelfHoldsAllowed($this_item, $borrower); >+ $this_item->{allow_onshelf_holds} = C4::Reserves::OnShelfHoldsAllowed($this_item, $patron); > > > if ( grep {$_ eq $biblionumber} @cart_list) { >diff --git a/opac/opac-showreviews.pl b/opac/opac-showreviews.pl >index f85a833c56..99a7ed1c5d 100755 >--- a/opac/opac-showreviews.pl >+++ b/opac/opac-showreviews.pl >@@ -27,8 +27,8 @@ use C4::Koha; > use C4::Output; > use C4::Circulation; > use C4::Biblio; >-use C4::Members qw/GetMember/; > use Koha::DateUtils; >+use Koha::Patrons; > 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 ) = GetMember( borrowernumber => $result->{borrowernumber} ); >+ my $borr = Koha::Patrons->find( $result->{borrowernumber} )->unblessed; > $result->{normalized_upc} = GetNormalizedUPC($record,$marcflavour); > $result->{normalized_ean} = GetNormalizedEAN($record,$marcflavour); > $result->{normalized_oclc} = GetNormalizedOCLCNumber($record,$marcflavour); >diff --git a/opac/opac-suggestions.pl b/opac/opac-suggestions.pl >index d300769b2c..e086b14ffb 100755 >--- a/opac/opac-suggestions.pl >+++ b/opac/opac-suggestions.pl >@@ -30,6 +30,7 @@ use C4::Scrubber; > > use Koha::AuthorisedValues; > use Koha::Libraries; >+use Koha::Patrons; > > use Koha::DateUtils qw( dt_from_string ); > >@@ -195,14 +196,17 @@ my $patron_reason_loop = GetAuthorisedValues("OPAC_SUG"); > > # Is the person allowed to choose their branch > if ( C4::Context->preference("AllowPurchaseSuggestionBranchChoice") ) { >- my ( $borr ) = GetMember( borrowernumber => $borrowernumber ); > > # pass the pickup branch along.... > my $userbranch = ''; > if (C4::Context->userenv && C4::Context->userenv->{'branch'}) { > $userbranch = C4::Context->userenv->{'branch'}; > } >- my $branchcode = $input->param('branchcode') || $borr->{'branchcode'} || $userbranch || '' ; >+ my $branchcode = $input->param('branchcode'); >+ unless ( $branchcode ) { >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ $branchcode = $patron->branchcode || $userbranch || '' ; >+ } > > $template->param( branchcode => $branchcode ); > } >diff --git a/opac/opac-user.pl b/opac/opac-user.pl >index 395b148bac..e7c3a06c34 100755 >--- a/opac/opac-user.pl >+++ b/opac/opac-user.pl >@@ -88,7 +88,7 @@ if (!$borrowernumber) { > } > > # get borrower information .... >-my ( $borr ) = GetMember( borrowernumber => $borrowernumber ); >+my $borr = Koha::Patrons->find( $borrowernumber )->unblessed; > > my ( $today_year, $today_month, $today_day) = Today(); > my ($warning_year, $warning_month, $warning_day) = split /-/, $borr->{'dateexpiry'}; >diff --git a/opac/sco/sco-main.pl b/opac/sco/sco-main.pl >index 4153277fdb..80ac47da28 100755 >--- a/opac/sco/sco-main.pl >+++ b/opac/sco/sco-main.pl >@@ -45,6 +45,7 @@ use C4::Biblio; > use C4::Items; > use Koha::DateUtils qw( dt_from_string ); > use Koha::Acquisition::Currencies; >+use Koha::Patrons; > use Koha::Patron::Images; > use Koha::Patron::Messages; > use Koha::Token; >@@ -106,15 +107,14 @@ my ($op, $patronid, $patronlogin, $patronpw, $barcode, $confirmed) = ( > ); > > my $issuenoconfirm = 1; #don't need to confirm on issue. >-#warn "issuerid: " . $issuerid; >-my $issuer = GetMember( borrowernumber => $issuerid ); >+my $issuer = Koha::Patrons->find( $issuerid )->unblessed; > 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 = GetMember( cardnumber => $patronid ); >+my $borrower = Koha::Patrons->find( { cardnumber => $patronid } )->unblessed; > > my $currencySymbol = ""; > if ( my $active_currency = Koha::Acquisition::Currencies->get_active ) { >@@ -132,7 +132,7 @@ if ($op eq "logout") { > elsif ( $op eq "returnbook" && $allowselfcheckreturns ) { > my ($doreturn) = AddReturn( $barcode, $branch ); > #warn "returnbook: " . $doreturn; >- $borrower = GetMember( cardnumber => $patronid ); >+ $borrower = Koha::Patrons->find( { cardnumber => $patronid } )->unblessed; > } > elsif ( $op eq "checkout" ) { > my $impossible = {}; >diff --git a/patroncards/create-pdf.pl b/patroncards/create-pdf.pl >index 05cfcbd9d7..6c19ce24ea 100755 >--- a/patroncards/create-pdf.pl >+++ b/patroncards/create-pdf.pl >@@ -29,10 +29,10 @@ use autouse 'Data::Dumper' => qw(Dumper); > > use C4::Debug; > use C4::Context; >-use autouse 'C4::Members' => qw(GetMember); > use C4::Creators; > use C4::Patroncards; > use Koha::List::Patron; >+use Koha::Patrons; > use Koha::Patron::Images; > > my $cgi = new CGI; >@@ -135,7 +135,7 @@ foreach my $item (@{$items}) { > > $cardscount ++; > my $borrower_number = $item->{'borrower_number'}; >- my $card_number = GetMember(borrowernumber => $borrower_number)->{'cardnumber'}; >+ my $card_number = Koha::Patrons->find( $borrower_number)->cardnumber; > > # Set barcode data > $print_layout_xml->{'barcode'}->[0]->{'data'} = $card_number if $print_layout_xml->{'barcode'}; >diff --git a/patroncards/edit-batch.pl b/patroncards/edit-batch.pl >index cd1f774b5d..56410079ae 100755 >--- a/patroncards/edit-batch.pl >+++ b/patroncards/edit-batch.pl >@@ -29,7 +29,8 @@ use C4::Auth qw(get_template_and_user); > use C4::Output qw(output_html_with_http_headers); > use C4::Creators; > use C4::Patroncards; >-use C4::Members qw(GetMember); >+use Koha::Patrons; >+ > my $cgi = new CGI; > my ( $template, $loggedinuser, $cookie ) = get_template_and_user( > { >@@ -84,7 +85,7 @@ if ($bor_num_list) { > my @bor_nums_unchecked = split /\n/, $bor_num_list; # $bor_num_list is effectively passed in as a <cr> separated list > foreach my $number (@bor_nums_unchecked) { > $number =~ s/\r$//; # strip any naughty return chars >- if ( GetMember(borrowernumber => $number)) { # we must test in case an invalid borrowernumber is passed in; we effectively disgard them atm >+ if ( Koha::Patrons->find( $number )) { # we must test in case an invalid borrowernumber is passed in; we effectively disgard them atm > my $borrower_number = $number; > push @borrower_numbers, $borrower_number; > } >diff --git a/reserve/placerequest.pl b/reserve/placerequest.pl >index 92f3c48b01..403321c818 100755 >--- a/reserve/placerequest.pl >+++ b/reserve/placerequest.pl >@@ -32,6 +32,7 @@ use C4::Reserves; > use C4::Circulation; > use C4::Members; > use C4::Auth qw/checkauth/; >+use Koha::Patrons; > > my $input = CGI->new(); > >@@ -51,7 +52,8 @@ my $checkitem = $input->param('checkitem'); > my $expirationdate = $input->param('expiration_date'); > my $itemtype = $input->param('itemtype') || undef; > >-my $borrower = GetMember( 'borrowernumber' => $borrowernumber ); >+my $borrower = Koha::Patrons->find( $borrowernumber ); >+$borrower = $borrower->unblessed if $borrower; > > my $multi_hold = $input->param('multi_hold'); > my $biblionumbers = $multi_hold ? $input->param('biblionumbers') : ($biblionumber . '/'); >@@ -128,7 +130,7 @@ if ( $type eq 'str8' && $borrower ) { > print $input->redirect("request.pl?biblionumber=$biblionumber"); > } > } >-elsif ( $borrower eq '' ) { >+elsif ( $borrowernumber eq '' ) { > print $input->header(); > print "Invalid borrower number please try again"; > >diff --git a/reserve/request.pl b/reserve/request.pl >index 791a2bdb48..b0c3329487 100755 >--- a/reserve/request.pl >+++ b/reserve/request.pl >@@ -100,9 +100,9 @@ if ( $action eq 'move' ) { > } > > if ($findborrower) { >- my $borrower = C4::Members::GetMember( cardnumber => $findborrower ); >- if ( $borrower ) { >- $borrowernumber_hold = $borrower->{borrowernumber}; >+ my $patron = Koha::Patrons->find( { cardnumber => $findborrower } ); >+ if ( $patron ) { >+ $borrowernumber_hold = $patron->borrowernumber; > } else { > my $dt_params = { iDisplayLength => -1 }; > my $results = C4::Utils::DataTables::Members::search( >@@ -134,14 +134,14 @@ if ($multihold) { > # If we have the borrowernumber because we've performed an action, then we > # don't want to try to place another reserve. > if ($borrowernumber_hold && !$action) { >- my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold ); >+ my $patron = Koha::Patrons->find( $borrowernumber_hold ); > my $diffbranch; > > # we check the reserves of the user, and if they can reserve a document > # FIXME At this time we have a simple count of reservs, but, later, we could improve the infos "title" ... > > my $reserves_count = >- GetReserveCount( $borrowerinfo->{'borrowernumber'} ); >+ GetReserveCount( $patron->borrowernumber ); > > my $new_reserves_count = scalar( @biblionumbers ); > >@@ -164,7 +164,7 @@ if ($borrowernumber_hold && !$action) { > } > > # we check the date expiry of the borrower (only if there is an expiry date, otherwise, set to 1 (warn) >- my $expiry_date = $borrowerinfo->{dateexpiry}; >+ my $expiry_date = $patron->dateexpiry; > my $expiry = 0; # flag set if patron account has expired > if ($expiry_date and $expiry_date ne '0000-00-00' and > Date_to_Days(split /-/,$date) > Date_to_Days(split /-/,$expiry_date)) { >@@ -172,38 +172,37 @@ if ($borrowernumber_hold && !$action) { > } > > # check if the borrower make the reserv in a different branch >- if ( $borrowerinfo->{'branchcode'} ne C4::Context->userenv->{'branch'} ) { >+ if ( $patron->branchcode ne C4::Context->userenv->{'branch'} ) { > $diffbranch = 1; > } > >- my $is_debarred = Koha::Patrons->find( $borrowerinfo->{borrowernumber} )->is_debarred; >+ my $is_debarred = $patron->is_debarred; > $template->param( >- borrowernumber => $borrowerinfo->{'borrowernumber'}, >- borrowersurname => $borrowerinfo->{'surname'}, >- borrowerfirstname => $borrowerinfo->{'firstname'}, >- borrowerstreetaddress => $borrowerinfo->{'address'}, >- borrowercity => $borrowerinfo->{'city'}, >- borrowerphone => $borrowerinfo->{'phone'}, >- borrowermobile => $borrowerinfo->{'mobile'}, >- borrowerfax => $borrowerinfo->{'fax'}, >- borrowerphonepro => $borrowerinfo->{'phonepro'}, >- borroweremail => $borrowerinfo->{'email'}, >- borroweremailpro => $borrowerinfo->{'emailpro'}, >- borrowercategory => $borrowerinfo->{'category'}, >- cardnumber => $borrowerinfo->{'cardnumber'}, >+ borrowernumber => $patron->borrowernumber, >+ borrowersurname => $patron->surname, >+ borrowerfirstname => $patron->firstname, >+ borrowerstreetaddress => $patron->address, >+ borrowercity => $patron->city, >+ borrowerphone => $patron->phone, >+ borrowermobile => $patron->mobile, >+ borrowerfax => $patron->fax, >+ borrowerphonepro => $patron->phonepro, >+ borroweremail => $patron->email, >+ borroweremailpro => $patron->emailpro, >+ cardnumber => $patron->cardnumber, > expiry => $expiry, > diffbranch => $diffbranch, > messages => $messages, > warnings => $warnings, > restricted => $is_debarred, >- amount_outstanding => GetMemberAccountRecords($borrowerinfo->{borrowernumber}), >+ amount_outstanding => GetMemberAccountRecords($patron->borrowernumber), > ); > } > > $template->param( messageborrower => $messageborrower ); > >-# FIXME launch another time GetMember perhaps until >-my $borrowerinfo = GetMember( borrowernumber => $borrowernumber_hold ); >+# FIXME launch another time GetMember perhaps until (Joubu: Why?) >+my $patron = Koha::Patrons->find( $borrowernumber_hold ); > > my $logged_in_patron = Koha::Patrons->find( $borrowernumber ); > >@@ -216,7 +215,7 @@ foreach my $biblionumber (@biblionumbers) { > > my $dat = GetBiblioData($biblionumber); > >- my $canReserve = CanBookBeReserved( $borrowerinfo->{borrowernumber}, $biblionumber ); >+ my $canReserve = CanBookBeReserved( $patron->borrowernumber, $biblionumber ); > $canReserve //= ''; > if ( $canReserve eq 'OK' ) { > >@@ -238,7 +237,7 @@ foreach my $biblionumber (@biblionumbers) { > } > > my $force_hold_level; >- if ( $borrowerinfo->{borrowernumber} ) { >+ if ( $patron->borrowernumber ) { > # For multiple holds per record, if a patron has previously placed a hold, > # the patron can only place more holds of the same type. That is, if the > # patron placed a record level hold, all the holds the patron places must >@@ -246,7 +245,7 @@ foreach my $biblionumber (@biblionumbers) { > # the patron places must be item level > my $holds = Koha::Holds->search( > { >- borrowernumber => $borrowerinfo->{borrowernumber}, >+ borrowernumber => $patron->borrowernumber, > biblionumber => $biblionumber, > found => undef, > } >@@ -257,7 +256,7 @@ foreach my $biblionumber (@biblionumbers) { > > # For a librarian to be able to place multiple record holds for a patron for a record, > # we must find out what the maximum number of holds they can place for the patron is >- my $max_holds_for_record = GetMaxPatronHoldsForRecord( $borrowerinfo->{borrowernumber}, $biblionumber ); >+ my $max_holds_for_record = GetMaxPatronHoldsForRecord( $patron->borrowernumber, $biblionumber ); > my $remaining_holds_for_record = $max_holds_for_record - $holds->count(); > $biblioloopiter{remaining_holds_for_record} = $max_holds_for_record; > $template->param( max_holds_for_record => $max_holds_for_record ); >@@ -268,7 +267,7 @@ foreach my $biblionumber (@biblionumbers) { > # patron already has an item from that record checked out > my $alreadypossession; > if ( !C4::Context->preference('AllowHoldsOnPatronsPossessions') >- && CheckIfIssuedToPatron( $borrowerinfo->{borrowernumber}, $biblionumber ) ) >+ && CheckIfIssuedToPatron( $patron->borrowernumber, $biblionumber ) ) > { > $template->param( alreadypossession => $alreadypossession, ); > } >@@ -393,13 +392,13 @@ foreach my $biblionumber (@biblionumbers) { > # checking reserve > my $holds = Koha::Items->find( $itemnumber )->current_holds; > if ( my $first_hold = $holds->next ) { >- my $ItemBorrowerReserveInfo = GetMember( borrowernumber => $first_hold->borrowernumber ); >+ my $patron = Koha::Patrons->find( $first_hold->borrowernumber ); > > $item->{backgroundcolor} = 'reserved'; > $item->{reservedate} = output_pref({ dt => dt_from_string( $first_hold->reservedate ), dateonly => 1 }); # FIXME Should be formatted in the template > $item->{ReservedForBorrowernumber} = $first_hold->borrowernumber; >- $item->{ReservedForSurname} = $ItemBorrowerReserveInfo->{'surname'}; >- $item->{ReservedForFirstname} = $ItemBorrowerReserveInfo->{'firstname'}; >+ $item->{ReservedForSurname} = $patron->surname; >+ $item->{ReservedForFirstname} = $patron->firstname; > $item->{ExpectedAtLibrary} = $first_hold->branchcode; > $item->{waitingdate} = $first_hold->waitingdate; > } >@@ -452,21 +451,22 @@ foreach my $biblionumber (@biblionumbers) { > } > } > >- my $branch = C4::Circulation::_GetCircControlBranch($item, $borrowerinfo); >+ my $patron_unblessed = $patron->unblessed; >+ my $branch = C4::Circulation::_GetCircControlBranch($item, $patron_unblessed); > > my $branchitemrule = GetBranchItemRule( $branch, $item->{'itype'} ); > > $item->{'holdallowed'} = $branchitemrule->{'holdallowed'}; > >- my $can_item_be_reserved = CanItemBeReserved( $borrowerinfo->{borrowernumber}, $itemnumber ); >+ my $can_item_be_reserved = CanItemBeReserved( $patron->borrowernumber, $itemnumber ); > $item->{not_holdable} = $can_item_be_reserved unless ( $can_item_be_reserved eq 'OK' ); > >- $item->{item_level_holds} = OPACItemHoldsAllowed( $item, $borrowerinfo ); >+ $item->{item_level_holds} = OPACItemHoldsAllowed( $item, $patron_unblessed); > > if ( > !$item->{cantreserve} > && !$exceeded_maxreserves >- && IsAvailableForItemLevelRequest($item, $borrowerinfo) >+ && IsAvailableForItemLevelRequest($item, $patron_unblessed) > && $can_item_be_reserved eq 'OK' > ) > { >@@ -611,8 +611,8 @@ foreach my $biblionumber (@biblionumbers) { > holdsview => 1, > C4::Search::enabled_staff_search_views, > ); >- if (defined $borrowerinfo && exists $borrowerinfo->{'branchcode'}) { >- $template->param( borrower_branchcode => $borrowerinfo->{'branchcode'},); >+ if ( $patron ) { # FIXME This test seems very useless >+ $template->param( borrower_branchcode => $patron->branchcode ); > } > > $biblioloopiter{biblionumber} = $biblionumber; >diff --git a/reviews/reviewswaiting.pl b/reviews/reviewswaiting.pl >index 452b54c283..26696645b5 100755 >--- a/reviews/reviewswaiting.pl >+++ b/reviews/reviewswaiting.pl >@@ -21,8 +21,8 @@ use CGI qw ( -utf8 ); > use C4::Auth; > use C4::Output; > use C4::Context; >-use C4::Members; > use C4::Biblio; >+use Koha::Patrons; > use Koha::Reviews; > > my $query = new CGI; >@@ -68,12 +68,12 @@ my $reviews = Koha::Reviews->search( > > foreach ( @$reviews ) { > my $borrowernumber = $_->{borrowernumber}; >- my $borrowerData = GetMember('borrowernumber' => $borrowernumber); >+ my $patron = Koha::Patrons->find( $borrowernumber); > my $biblioData = GetBiblioData($_->{biblionumber}); > # setting some borrower info into this hash > $_->{bibliotitle} = $biblioData->{'title'}; >- $_->{surname} = $borrowerData->{'surname'}; >- $_->{firstname} = $borrowerData->{'firstname'}; >+ $_->{surname} = $patron->surname; >+ $_->{firstname} = $patron->firstname; > } > > my $url = "/cgi-bin/koha/reviews/reviewswaiting.pl?status=$status"; >diff --git a/serials/routing-preview.pl b/serials/routing-preview.pl >index 491bf2b2e1..73d89dff0b 100755 >--- a/serials/routing-preview.pl >+++ b/serials/routing-preview.pl >@@ -36,6 +36,7 @@ use URI::Escape; > > use Koha::Biblios; > use Koha::Libraries; >+use Koha::Patrons; > > my $query = new CGI; > my $subscriptionid = $query->param('subscriptionid'); >@@ -121,7 +122,7 @@ if($ok){ > > my $memberloop = []; > for my $routing (@routinglist) { >- my $member = GetMember( borrowernumber => $routing->{borrowernumber} ); >+ my $member = Koha::Patrons->find( $routing->{borrowernumber} )->unblessed; > $member->{name} = "$member->{firstname} $member->{surname}"; > push @{$memberloop}, $member; > } >diff --git a/serials/routing.pl b/serials/routing.pl >index 32f42e52ab..af23b6cffd 100755 >--- a/serials/routing.pl >+++ b/serials/routing.pl >@@ -37,6 +37,7 @@ use C4::Context; > > use C4::Members; > use C4::Serials; >+use Koha::Patrons; > > use URI::Escape; > >@@ -95,7 +96,7 @@ my ($template, $loggedinuser, $cookie) > > my $member_loop = []; > for my $routing ( @routinglist ) { >- my $member=GetMember('borrowernumber' => $routing->{borrowernumber}); >+ my $member = Koha::Patrons->find( $routing->{borrowernumber} )->unblessed; > $member->{location} = $member->{branchcode}; > if ($member->{firstname} ) { > $member->{name} = $member->{firstname} . q| |; >diff --git a/suggestion/suggestion.pl b/suggestion/suggestion.pl >index fb977623e5..a897ca6bfe 100755 >--- a/suggestion/suggestion.pl >+++ b/suggestion/suggestion.pl >@@ -34,6 +34,7 @@ use Koha::DateUtils qw( dt_from_string ); > use Koha::AuthorisedValues; > use Koha::Acquisition::Currencies; > use Koha::Libraries; >+use Koha::Patrons; > > use URI::Escape; > >@@ -69,9 +70,9 @@ sub GetCriteriumDesc{ > return $av->count ? $av->next->lib : 'Unkown'; > } > if ($displayby =~/suggestedby/||$displayby =~/managedby/||$displayby =~/acceptedby/){ >- my $borr=C4::Members::GetMember(borrowernumber=>$criteriumvalue); >- return "" unless $borr; >- return $$borr{surname} . ", " . $$borr{firstname}; >+ my $patron = Koha::Patrons->find( $criteriumvalue ); >+ return "" unless $patron; >+ return $patron->surname . ", " . $patron->firstname; > } > if ( $displayby =~ /budgetid/) { > my $budget = GetBudget($criteriumvalue); >@@ -281,14 +282,15 @@ if ($op=~/else/) { > foreach my $element ( qw(managedby suggestedby acceptedby) ) { > # $debug || warn $$suggestion_ref{$element}; > if ($$suggestion_ref{$element}){ >- my $member=GetMember(borrowernumber=>$$suggestion_ref{$element}); >+ my $patron = Koha::Patrons->find( $$suggestion_ref{$element} ); >+ my $category = $patron->category; > $template->param( >- $element."_borrowernumber"=>$$member{borrowernumber}, >- $element."_firstname"=>$$member{firstname}, >- $element."_surname"=>$$member{surname}, >- $element."_branchcode"=>$$member{branchcode}, >- $element."_description"=>$$member{description}, >- $element."_category_type"=>$$member{category_type} >+ $element."_borrowernumber"=>$patron->borrowernumber, >+ $element."_firstname"=>$patron->firstname, >+ $element."_surname"=>$patron->surname, >+ $element."_branchcode"=>$patron->branchcode, >+ $element."_description"=>$category->description, >+ $element."_category_type"=>$category->category_type, > ); > } > } >diff --git a/svc/members/search b/svc/members/search >index 4f798ab871..3276cf8825 100755 >--- a/svc/members/search >+++ b/svc/members/search >@@ -25,6 +25,7 @@ use C4::Output qw( output_with_http_headers ); > use C4::Utils::DataTables qw( dt_get_params ); > use C4::Utils::DataTables::Members qw( search ); > use Koha::DateUtils qw( output_pref dt_from_string ); >+use Koha::Patrons; > > my $input = new CGI; > >@@ -63,11 +64,11 @@ if ( $searchmember > and $searchfieldstype > and $searchfieldstype eq 'standard' ) > { >- my $member = C4::Members::GetMember( cardnumber => $searchmember ); >+ my $member = Koha::Patrons->find( { cardnumber => $searchmember } ); > $results = { > iTotalRecords => 1, > iTotalDisplayRecords => 1, >- patrons => [ $member ], >+ patrons => [ $member->unblessed ], > } if $member; > } > >diff --git a/t/db_dependent/Acquisition/OrderUsers.t b/t/db_dependent/Acquisition/OrderUsers.t >index 11ed596164..1c9a4154b9 100644 >--- a/t/db_dependent/Acquisition/OrderUsers.t >+++ b/t/db_dependent/Acquisition/OrderUsers.t >@@ -77,8 +77,6 @@ my $borrowernumber = C4::Members::AddMember( > userid => 'TESTUSERID' > ); > >-my $borrower = C4::Members::GetMember( borrowernumber => $borrowernumber ); >- > C4::Acquisition::ModOrderUsers( $ordernumber, $borrowernumber ); > > my $is_added = grep { /^$borrowernumber$/ } C4::Acquisition::GetOrderUsers( $ordernumber ); >diff --git a/t/db_dependent/Circulation.t b/t/db_dependent/Circulation.t >index d1cbc36200..9319924978 100755 >--- a/t/db_dependent/Circulation.t >+++ b/t/db_dependent/Circulation.t >@@ -35,6 +35,7 @@ use Koha::DateUtils; > use Koha::Database; > use Koha::IssuingRules; > use Koha::Checkouts; >+use Koha::Patrons; > use Koha::Subscriptions; > > my $schema = Koha::Database->schema; >@@ -294,8 +295,8 @@ C4::Context->dbh->do("DELETE FROM accountlines"); > my $hold_waiting_borrowernumber = AddMember(%hold_waiting_borrower_data); > my $restricted_borrowernumber = AddMember(%restricted_borrower_data); > >- my $renewing_borrower = GetMember( borrowernumber => $renewing_borrowernumber ); >- my $restricted_borrower = GetMember( borrowernumber => $restricted_borrowernumber ); >+ my $renewing_borrower = Koha::Patrons->find( $renewing_borrowernumber )->unblessed; >+ my $restricted_borrower = Koha::Patrons->find( $restricted_borrowernumber )->unblessed; > > my $bibitems = ''; > my $priority = '1'; >@@ -377,7 +378,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); > is( $error, 'on_reserve', '(Bug 10663) Cannot renew, reserved (returned error is on_reserve)'); > > my $reserveid = C4::Reserves::GetReserveId({ biblionumber => $biblionumber, borrowernumber => $reserving_borrowernumber}); >- my $reserving_borrower = GetMember( borrowernumber => $reserving_borrowernumber ); >+ my $reserving_borrower = Koha::Patrons->find( $reserving_borrowernumber )->unblessed; > AddIssue($reserving_borrower, $barcode3); > my $reserve = $dbh->selectrow_hashref( > 'SELECT * FROM old_reserves WHERE reserve_id = ?', >@@ -841,7 +842,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); > ); > > my $a_borrower_borrowernumber = AddMember(%a_borrower_data); >- my $a_borrower = GetMember( borrowernumber => $a_borrower_borrowernumber ); >+ my $a_borrower = Koha::Patrons->find( $a_borrower_borrowernumber )->unblessed; > > my $yesterday = DateTime->today(time_zone => C4::Context->tz())->add( days => -1 ); > my $two_days_ahead = DateTime->today(time_zone => C4::Context->tz())->add( days => 2 ); >@@ -922,7 +923,8 @@ C4::Context->dbh->do("DELETE FROM accountlines"); > > my $borrowernumber = AddMember(%a_borrower_data); > >- my $issue = AddIssue( GetMember( borrowernumber => $borrowernumber ), $barcode ); >+ my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; >+ my $issue = AddIssue( $borrower, $barcode ); > UpdateFine( > { > issue_id => $issue->id(), >@@ -992,8 +994,8 @@ C4::Context->dbh->do("DELETE FROM accountlines"); > branchcode => $library2->{branchcode}, > ); > >- my $borrower1 = GetMember( borrowernumber => $borrowernumber1 ); >- my $borrower2 = GetMember( borrowernumber => $borrowernumber2 ); >+ my $borrower1 = Koha::Patrons->find( $borrowernumber1 )->unblessed; >+ my $borrower2 = Koha::Patrons->find( $borrowernumber2 )->unblessed; > > my $issue = AddIssue( $borrower1, $barcode1 ); > >@@ -1063,7 +1065,8 @@ C4::Context->dbh->do("DELETE FROM accountlines"); > branchcode => $branch, > ); > >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >+ my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; >+ > my $issue = AddIssue( $borrower, $barcode, undef, undef, undef, undef, { onsite_checkout => 1 } ); > my ( $renewed, $error ) = CanBookBeRenewed( $borrowernumber, $itemnumber ); > is( $renewed, 0, 'CanBookBeRenewed should not allow to renew on-site checkout' ); >@@ -1089,7 +1092,7 @@ C4::Context->dbh->do("DELETE FROM accountlines"); > > my $patron = $builder->build({ source => 'Borrower', value => { branchcode => $library->{branchcode} } } ); > >- my $issue = AddIssue( GetMember( borrowernumber => $patron->{borrowernumber} ), $barcode ); >+ my $issue = AddIssue( $patron, $barcode ); > UpdateFine( > { > issue_id => $issue->id(), >@@ -1393,7 +1396,7 @@ subtest 'MultipleReserves' => sub { > branchcode => $branch, > ); > my $renewing_borrowernumber = AddMember(%renewing_borrower_data); >- my $renewing_borrower = GetMember( borrowernumber => $renewing_borrowernumber ); >+ my $renewing_borrower = Koha::Patrons->find( $renewing_borrowernumber )->unblessed; > my $issue = AddIssue( $renewing_borrower, $barcode1); > my $datedue = dt_from_string( $issue->date_due() ); > is (defined $issue->date_due(), 1, "item 1 checked out"); >diff --git a/t/db_dependent/Circulation/Branch.t b/t/db_dependent/Circulation/Branch.t >index 3e4606416e..9a040d1076 100644 >--- a/t/db_dependent/Circulation/Branch.t >+++ b/t/db_dependent/Circulation/Branch.t >@@ -143,7 +143,6 @@ my $borrower_id1 = C4::Members::AddMember( > categorycode => $samplecat->{categorycode}, > branchcode => $samplebranch1->{branchcode}, > ); >-my $borrower_1 = C4::Members::GetMember(borrowernumber => $borrower_id1); > > is_deeply( > GetBranchBorrowerCircRule(), >diff --git a/t/db_dependent/Circulation/CheckIfIssuedToPatron.t b/t/db_dependent/Circulation/CheckIfIssuedToPatron.t >index d2396c9c16..f74327ffa8 100644 >--- a/t/db_dependent/Circulation/CheckIfIssuedToPatron.t >+++ b/t/db_dependent/Circulation/CheckIfIssuedToPatron.t >@@ -25,6 +25,7 @@ use C4::Biblio; > use C4::Items; > use C4::Members; > use Koha::Library; >+use Koha::Patrons; > use MARC::Record; > > BEGIN { >@@ -74,8 +75,8 @@ AddItem({ barcode => $barcode2, %item_info }, $biblionumber2); > > my $borrowernumber1 = AddMember(categorycode => $categorycode, branchcode => $branchcode); > my $borrowernumber2 = AddMember(categorycode => $categorycode, branchcode => $branchcode); >-my $borrower1 = GetMember(borrowernumber => $borrowernumber1); >-my $borrower2 = GetMember(borrowernumber => $borrowernumber2); >+my $borrower1 = Koha::Patrons->find( $borrowernumber1 )->unblessed; >+my $borrower2 = Koha::Patrons->find( $borrowernumber2 )->unblessed; > > my $module = new Test::MockModule('C4::Context'); > $module->mock('userenv', sub { { branch => $branchcode } }); >diff --git a/t/db_dependent/Circulation/GetPendingOnSiteCheckouts.t b/t/db_dependent/Circulation/GetPendingOnSiteCheckouts.t >index 30aadcb160..3d28e505c2 100644 >--- a/t/db_dependent/Circulation/GetPendingOnSiteCheckouts.t >+++ b/t/db_dependent/Circulation/GetPendingOnSiteCheckouts.t >@@ -26,8 +26,8 @@ use C4::Circulation; > use C4::Items; > use C4::Members; > >-use Koha::Library; > use Koha::Libraries; >+use Koha::Patrons; > use Koha::Patron::Categories; > > use MARC::Record; >@@ -63,7 +63,7 @@ my $borrowernumber = $builder->build( > } > )->{borrowernumber}; > >-my $borrower = GetMember(borrowernumber => $borrowernumber); >+my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > > # Need to mock userenv for AddIssue > my $module = new Test::MockModule('C4::Context'); >diff --git a/t/db_dependent/Circulation/GetTopIssues.t b/t/db_dependent/Circulation/GetTopIssues.t >index a008187457..569176b9cb 100644 >--- a/t/db_dependent/Circulation/GetTopIssues.t >+++ b/t/db_dependent/Circulation/GetTopIssues.t >@@ -29,6 +29,7 @@ use C4::Items; > use C4::Members; > > use Koha::Database; >+use Koha::Patrons; > > my $schema = Koha::Database->new()->schema(); > my $dbh = $schema->storage->dbh; >@@ -67,7 +68,7 @@ my $borrowernumber = AddMember( > categorycode => $category, > branchcode => $branch_1->{ branchcode } > ); >-my $borrower = GetMember(borrowernumber => $borrowernumber); >+my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > > AddIssue($borrower, 'GTI_BARCODE_001'); > AddIssue($borrower, 'GTI_BARCODE_002'); >diff --git a/t/db_dependent/Circulation/IsItemIssued.t b/t/db_dependent/Circulation/IsItemIssued.t >index ac98edf130..8a8ccf634a 100644 >--- a/t/db_dependent/Circulation/IsItemIssued.t >+++ b/t/db_dependent/Circulation/IsItemIssued.t >@@ -26,6 +26,7 @@ use C4::Items; > use C4::Members; > use Koha::Database; > use Koha::DateUtils; >+use Koha::Patrons; > > use t::lib::TestBuilder; > >@@ -55,7 +56,7 @@ my $borrowernumber = AddMember( > branchcode => $library->{branchcode}, > ); > >-my $borrower = GetMember( borrowernumber => $borrowernumber ); >+my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > my $record = MARC::Record->new(); > my ( $biblionumber, $biblioitemnumber ) = AddBiblio( $record, '' ); > >diff --git a/t/db_dependent/Circulation/IssuingRules/maxsuspensiondays.t b/t/db_dependent/Circulation/IssuingRules/maxsuspensiondays.t >index a5b6d6f20a..9e41b464fd 100644 >--- a/t/db_dependent/Circulation/IssuingRules/maxsuspensiondays.t >+++ b/t/db_dependent/Circulation/IssuingRules/maxsuspensiondays.t >@@ -8,7 +8,7 @@ use C4::Context; > use C4::Biblio qw( AddBiblio ); > use C4::Circulation qw( AddIssue AddReturn ); > use C4::Items qw( AddItem ); >-use C4::Members qw( AddMember GetMember ); >+use C4::Members qw( AddMember ); > use Koha::Database; > use Koha::DateUtils; > use Koha::Patron::Debarments qw( GetDebarments DelDebarment ); >@@ -51,7 +51,7 @@ my $borrowernumber = AddMember( > categorycode => $patron_category->{categorycode}, > branchcode => $branchcode, > ); >-my $borrower = GetMember( borrowernumber => $borrowernumber ); >+my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > > my $record = MARC::Record->new(); > $record->append_fields( >diff --git a/t/db_dependent/Circulation/Returns.t b/t/db_dependent/Circulation/Returns.t >index 19e6313051..b3e56e1e43 100644 >--- a/t/db_dependent/Circulation/Returns.t >+++ b/t/db_dependent/Circulation/Returns.t >@@ -32,6 +32,7 @@ use Koha::Database; > use Koha::Account::Lines; > use Koha::DateUtils; > use Koha::Items; >+use Koha::Patrons; > > use MARC::Record; > use MARC::Field; >@@ -162,7 +163,7 @@ subtest "AddReturn logging on statistics table (item-level_itypes=1)" => sub { > } > ); > >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >+ my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > AddIssue( $borrower, $item_with_itemtype->{ barcode } ); > AddReturn( $item_with_itemtype->{ barcode }, $branch ); > #Â Test item-level itemtype was recorded on the 'statistics' table >@@ -247,7 +248,7 @@ subtest "AddReturn logging on statistics table (item-level_itypes=0)" => sub { > } > }); > >- my $borrower = GetMember( borrowernumber => $borrowernumber ); >+ my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > > AddIssue( $borrower, $item_with_itemtype->{ barcode } ); > AddReturn( $item_with_itemtype->{ barcode }, $branch ); >diff --git a/t/db_dependent/Circulation/issue.t b/t/db_dependent/Circulation/issue.t >index 312f6a9afd..67195edc94 100644 >--- a/t/db_dependent/Circulation/issue.t >+++ b/t/db_dependent/Circulation/issue.t >@@ -17,7 +17,7 @@ > > use Modern::Perl; > >-use Test::More tests => 32; >+use Test::More tests => 30; > use DateTime::Duration; > > use t::lib::Mocks; >@@ -32,6 +32,7 @@ use C4::Reserves; > use Koha::Database; > use Koha::DateUtils; > use Koha::Library; >+use Koha::Patrons; > > BEGIN { > require_ok('C4::Circulation'); >@@ -147,14 +148,14 @@ my $borrower_id1 = C4::Members::AddMember( > categorycode => $categorycode, > branchcode => $branchcode_1 > ); >-my $borrower_1 = C4::Members::GetMember(borrowernumber => $borrower_id1); >+my $borrower_1 = Koha::Patrons->find( $borrower_id1 )->unblessed; > my $borrower_id2 = C4::Members::AddMember( > firstname => 'firstname2', > surname => 'surname2 ', > categorycode => $categorycode, > branchcode => $branchcode_2, > ); >-my $borrower_2 = C4::Members::GetMember(borrowernumber => $borrower_id2); >+my $borrower_2 = Koha::Patrons->find( $borrower_id2 )->unblessed; > > my @USERENV = ( > $borrower_id1, 'test', 'MASTERTEST', 'firstname', $branchcode_1, >@@ -246,19 +247,19 @@ my $issue3 = C4::Circulation::AddIssue( $borrower_1, $barcode_1 ); > @renewcount = C4::Circulation::GetRenewCount(); > is_deeply( > \@renewcount, >- [ 0, undef, 0 ], # FIXME Need to be fixed, see FIXME in GetRenewCount >+ [ 0, 0, 0 ], # FIXME Need to be fixed, see FIXME in GetRenewCount > "Without issuing rules and without parameter, GetRenewCount returns renewcount = 0, renewsallowed = undef, renewsleft = 0" > ); > @renewcount = C4::Circulation::GetRenewCount(-1); > is_deeply( > \@renewcount, >- [ 0, undef, 0 ], # FIXME Need to be fixed >+ [ 0, 0, 0 ], # FIXME Need to be fixed > "Without issuing rules and without wrong parameter, GetRenewCount returns renewcount = 0, renewsallowed = undef, renewsleft = 0" > ); > @renewcount = C4::Circulation::GetRenewCount($borrower_id1, $item_id1); > is_deeply( > \@renewcount, >- [ 2, undef, 0 ], >+ [ 2, 0, 0 ], > "Without issuing rules and with a valid parameter, renewcount = 2, renewsallowed = undef, renewsleft = 0" > ); > >@@ -291,18 +292,6 @@ is_deeply( > $dbh->do(q| > UPDATE issuingrules SET renewalsallowed = 3 > |); >-@renewcount = C4::Circulation::GetRenewCount(); >-is_deeply( >- \@renewcount, >- [ 0, 3, 3 ], >- "With issuing rules (renewal allowed) and without parameter, GetRenewCount returns renewcount = 0, renewsallowed = 3, renewsleft = 3" >-); >-@renewcount = C4::Circulation::GetRenewCount(-1); >-is_deeply( >- \@renewcount, >- [ 0, 3, 3 ], >- "With issuing rules (renewal allowed) and without wrong parameter, GetRenewCount returns renewcount = 0, renewsallowed = 3, renewsleft = 3" >-); > @renewcount = C4::Circulation::GetRenewCount($borrower_id1, $item_id1); > is_deeply( > \@renewcount, >diff --git a/t/db_dependent/Holds/RevertWaitingStatus.t b/t/db_dependent/Holds/RevertWaitingStatus.t >index 146adb8d9f..ae7fdaa8dd 100755 >--- a/t/db_dependent/Holds/RevertWaitingStatus.t >+++ b/t/db_dependent/Holds/RevertWaitingStatus.t >@@ -28,6 +28,7 @@ use C4::Members; > use C4::Reserves; > > use Koha::Libraries; >+use Koha::Patrons; > > use t::lib::TestBuilder; > >@@ -101,7 +102,8 @@ foreach my $borrowernumber (@borrowernumbers) { > } > > ModReserveAffect( $itemnumber, $borrowernumbers[0] ); >-C4::Circulation::AddIssue( GetMember( borrowernumber => $borrowernumbers[1] ), >+my $patron = Koha::Patrons->find( $borrowernumbers[1] )->unblessed; >+C4::Circulation::AddIssue( $patron, > $item_barcode, my $datedue, my $cancelreserve = 'revert' ); > > my $priorities = $dbh->selectall_arrayref( >diff --git a/t/db_dependent/Koha/Patrons.t b/t/db_dependent/Koha/Patrons.t >index a68ab6c2f7..ef34199788 100644 >--- a/t/db_dependent/Koha/Patrons.t >+++ b/t/db_dependent/Koha/Patrons.t >@@ -467,7 +467,7 @@ subtest 'checkouts + get_overdues' => sub { > is( ref($checkouts), 'Koha::Checkouts', 'checkouts should return a Koha::Checkouts object' ); > > # Not sure how this is useful, but AddIssue pass this variable to different other subroutines >- $patron = GetMember( borrowernumber => $patron->borrowernumber ); >+ $patron = Koha::Patrons->find( $patron->borrowernumber )->unblessed; > > my $module = new Test::MockModule('C4::Context'); > $module->mock( 'userenv', sub { { branch => $library->{branchcode} } } ); >diff --git a/t/db_dependent/Members.t b/t/db_dependent/Members.t >index 47d0b20fca..f75652c267 100755 >--- a/t/db_dependent/Members.t >+++ b/t/db_dependent/Members.t >@@ -17,7 +17,7 @@ > > use Modern::Perl; > >-use Test::More tests => 65; >+use Test::More tests => 63; > use Test::MockModule; > use Data::Dumper qw/Dumper/; > use C4::Context; >@@ -95,8 +95,9 @@ my %data = ( > my $addmem=AddMember(%data); > ok($addmem, "AddMember()"); > >-my $member = GetMember( cardnumber => $CARDNUMBER ) >+my $member = Koha::Patrons->find( { cardnumber => $CARDNUMBER } ) > or BAIL_OUT("Cannot read member with card $CARDNUMBER"); >+$member = $member->unblessed; > > ok ( $member->{firstname} eq $FIRSTNAME && > $member->{surname} eq $SURNAME && >@@ -112,7 +113,7 @@ $member->{email} = $EMAIL; > $member->{phone} = $PHONE; > $member->{emailpro} = $EMAILPRO; > ModMember(%$member); >-my $changedmember = GetMember( cardnumber => $CARDNUMBER ); >+my $changedmember = Koha::Patrons->find( { cardnumber => $CARDNUMBER } )->unblessed; > ok ( $changedmember->{firstname} eq $CHANGED_FIRSTNAME && > $changedmember->{email} eq $EMAIL && > $changedmember->{phone} eq $PHONE && >@@ -172,21 +173,21 @@ is( Check_Userid( 'tomasito.none', '' ), 0, > is( Check_Userid( 'tomasitoxxx', '' ), 1, > 'non-existent userid -> unique (blank borrowernumber)' ); > >-my $borrower = GetMember( borrowernumber => $borrowernumber ); >+my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > is( $borrower->{dateofbirth}, undef, 'AddMember should undef dateofbirth if empty string is given'); > is( $borrower->{debarred}, undef, 'AddMember should undef debarred if empty string is given'); > isnt( $borrower->{dateexpiry}, '0000-00-00', 'AddMember should not set dateexpiry to 0000-00-00 if empty string is given'); > isnt( $borrower->{dateenrolled}, '0000-00-00', 'AddMember should not set dateenrolled to 0000-00-00 if empty string is given'); > > ModMember( borrowernumber => $borrowernumber, dateofbirth => '', debarred => '', dateexpiry => '', dateenrolled => '' ); >-$borrower = GetMember( borrowernumber => $borrowernumber ); >+$borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > is( $borrower->{dateofbirth}, undef, 'ModMember should undef dateofbirth if empty string is given'); > is( $borrower->{debarred}, undef, 'ModMember should undef debarred if empty string is given'); > isnt( $borrower->{dateexpiry}, '0000-00-00', 'ModMember should not set dateexpiry to 0000-00-00 if empty string is given'); > isnt( $borrower->{dateenrolled}, '0000-00-00', 'ModMember should not set dateenrolled to 0000-00-00 if empty string is given'); > > ModMember( borrowernumber => $borrowernumber, dateofbirth => '1970-01-01', debarred => '2042-01-01', dateexpiry => '9999-12-31', dateenrolled => '2015-09-06' ); >-$borrower = GetMember( borrowernumber => $borrowernumber ); >+$borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > is( $borrower->{dateofbirth}, '1970-01-01', 'ModMember should correctly set dateofbirth if a valid date is given'); > is( $borrower->{debarred}, '2042-01-01', 'ModMember should correctly set debarred if a valid date is given'); > is( $borrower->{dateexpiry}, '9999-12-31', 'ModMember should correctly set dateexpiry if a valid date is given'); >@@ -199,25 +200,25 @@ is( Check_Userid( 'tomasito.none', '' ), 0, > 'userid not unique (blank borrowernumber)' ); > is( Check_Userid( 'tomasito.none', $new_borrowernumber ), 0, > 'userid not unique (second borrowernumber passed)' ); >-$borrower = GetMember( borrowernumber => $new_borrowernumber ); >+$borrower = Koha::Patrons->find( $new_borrowernumber )->unblessed; > ok( $borrower->{userid} ne 'tomasito', "Borrower with duplicate userid has new userid generated" ); > > $data{ cardnumber } = "234567890"; > $data{userid} = 'a_user_id'; > $borrowernumber = AddMember( %data ); >-$borrower = GetMember( borrowernumber => $borrowernumber ); >+$borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > is( $borrower->{userid}, $data{userid}, 'AddMember should insert the given userid' ); > > subtest 'ModMember should not update userid if not true' => sub { > plan tests => 3; > ModMember( borrowernumber => $borrowernumber, firstname => 'Tomas', userid => '' ); >- $borrower = GetMember( borrowernumber => $borrowernumber ); >+ $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > is ( $borrower->{userid}, $data{userid}, 'ModMember should not update the userid with an empty string' ); > ModMember( borrowernumber => $borrowernumber, firstname => 'Tomas', userid => 0 ); >- $borrower = GetMember( borrowernumber => $borrowernumber ); >+ $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > is ( $borrower->{userid}, $data{userid}, 'ModMember should not update the userid with an 0'); > ModMember( borrowernumber => $borrowernumber, firstname => 'Tomas', userid => undef ); >- $borrower = GetMember( borrowernumber => $borrowernumber ); >+ $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > is ( $borrower->{userid}, $data{userid}, 'ModMember should not update the userid with an undefined value'); > }; > >@@ -372,7 +373,7 @@ $dbh->do(q|UPDATE borrowers SET userid = '' WHERE borrowernumber = ?|, undef, $b > # Create another patron and verify the userid has been generated > $borrowernumber = AddMember( categorycode => $patron_category->{categorycode}, branchcode => $library2->{branchcode} ); > ok( $borrowernumber > 0, 'AddMember should have inserted the patron even if no userid is given' ); >-$borrower = GetMember( borrowernumber => $borrowernumber ); >+$borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > ok( $borrower->{userid}, 'A userid should have been generated correctly' ); > > # Regression tests for BZ12226 >@@ -478,18 +479,10 @@ my $password=""; > is( $password =~ /^[a-zA-Z]{10}$/ , 1, 'Test for autogenerated password if none submitted'); > ( $borrowernumber, $password ) = AddMember_Opac(surname=>"Deckard",firstname=>"Rick",password=>"Nexus-6",branchcode => $library2->{branchcode}); > is( $password eq "Nexus-6", 1, 'Test password used if submitted'); >-$borrower = GetMember(borrowernumber => $borrowernumber); >+$borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > my $hashed_up = Koha::AuthUtils::hash_password("Nexus-6", $borrower->{password}); > is( $borrower->{password} eq $hashed_up, 1, 'Check password hash equals hash of submitted password' ); > >-# regression test for bug 16009 >-my $patron; >-eval { >- my $patron = GetMember(cardnumber => undef); >-}; >-is($@, '', 'Bug 16009: GetMember(cardnumber => undef) works'); >-is($patron, undef, 'Bug 16009: GetMember(cardnumber => undef) returns undef'); >- > subtest 'Trivial test for AddMember_Auto' => sub { > plan tests => 3; > my $members_mock = Test::MockModule->new( 'C4::Members' ); >@@ -499,7 +492,7 @@ subtest 'Trivial test for AddMember_Auto' => sub { > my %borr = AddMember_Auto( surname=> 'Dick3', firstname => 'Philip', branchcode => $library->{branchcode}, categorycode => $category->{categorycode}, password => '34567890' ); > ok( $borr{borrowernumber}, 'Borrower hash contains borrowernumber' ); > is( $borr{cardnumber}, 12345, 'Borrower hash contains cardnumber' ); >- $patron = Koha::Patrons->find( $borr{borrowernumber} ); >+ my $patron = Koha::Patrons->find( $borr{borrowernumber} ); > isnt( $patron, undef, 'Patron found' ); > }; > >diff --git a/t/db_dependent/Members/GetAllIssues.t b/t/db_dependent/Members/GetAllIssues.t >index 56864a8cb0..e6d15eeb93 100644 >--- a/t/db_dependent/Members/GetAllIssues.t >+++ b/t/db_dependent/Members/GetAllIssues.t >@@ -27,6 +27,7 @@ use C4::Items; > use C4::Members; > use C4::Circulation; > use Koha::Libraries; >+use Koha::Patrons; > use MARC::Record; > > my $schema = Koha::Database->schema; >@@ -66,8 +67,8 @@ my $borrowernumber1 = > AddMember( categorycode => $categorycode, branchcode => $branchcode ); > my $borrowernumber2 = > AddMember( categorycode => $categorycode, branchcode => $branchcode ); >-my $borrower1 = GetMember( borrowernumber => $borrowernumber1 ); >-my $borrower2 = GetMember( borrowernumber => $borrowernumber2 ); >+my $borrower1 = Koha::Patrons->find( $borrowernumber1 )->unblessed; >+my $borrower2 = Koha::Patrons->find( $borrowernumber2 )->unblessed; > > my $module = new Test::MockModule('C4::Context'); > $module->mock( 'userenv', sub { { branch => $branchcode } } ); >diff --git a/t/db_dependent/Members/GetOverdues.t b/t/db_dependent/Members/GetOverdues.t >index 0f29b80346..c18726be95 100644 >--- a/t/db_dependent/Members/GetOverdues.t >+++ b/t/db_dependent/Members/GetOverdues.t >@@ -27,6 +27,7 @@ use C4::Items; > use C4::Members; > use C4::Circulation; > use Koha::Libraries; >+use Koha::Patrons; > use MARC::Record; > > my $schema = Koha::Database->schema; >@@ -64,7 +65,7 @@ my $itemnumber3 = > > my $borrowernumber = > AddMember( categorycode => $categorycode, branchcode => $branchcode ); >-my $borrower = GetMember( borrowernumber => $borrowernumber ); >+my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > > my $module = new Test::MockModule('C4::Context'); > $module->mock( 'userenv', sub { { branch => $branchcode } } ); >diff --git a/t/db_dependent/Members/GetPendingIssues.t b/t/db_dependent/Members/GetPendingIssues.t >index 4906118198..b2319d14b4 100644 >--- a/t/db_dependent/Members/GetPendingIssues.t >+++ b/t/db_dependent/Members/GetPendingIssues.t >@@ -27,6 +27,7 @@ use C4::Items; > use C4::Members; > use C4::Circulation; > use Koha::Library; >+use Koha::Patrons; > use MARC::Record; > > my $schema = Koha::Database->schema; >@@ -67,8 +68,8 @@ my $borrowernumber1 = > AddMember( categorycode => $categorycode, branchcode => $branchcode ); > my $borrowernumber2 = > AddMember( categorycode => $categorycode, branchcode => $branchcode ); >-my $borrower1 = GetMember( borrowernumber => $borrowernumber1 ); >-my $borrower2 = GetMember( borrowernumber => $borrowernumber2 ); >+my $borrower1 = Koha::Patrons->find( $borrowernumber1 )->unblessed; >+my $borrower2 = Koha::Patrons->find( $borrowernumber2 )->unblessed; > > my $module = new Test::MockModule('C4::Context'); > $module->mock( 'userenv', sub { { branch => $branchcode } } ); >diff --git a/t/db_dependent/Members/IssueSlip.t b/t/db_dependent/Members/IssueSlip.t >index d161602d22..c22cb5a446 100644 >--- a/t/db_dependent/Members/IssueSlip.t >+++ b/t/db_dependent/Members/IssueSlip.t >@@ -29,6 +29,7 @@ use C4::Circulation; > > use Koha::DateUtils qw( dt_from_string output_pref ); > use Koha::Library; >+use Koha::Patrons; > use DateTime::Duration; > > use MARC::Record; >@@ -117,7 +118,7 @@ my $itemnumber2 = > > my $borrowernumber = > AddMember( categorycode => $categorycode, branchcode => $branchcode ); >-my $borrower = GetMember( borrowernumber => $borrowernumber ); >+my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > > my $module = new Test::MockModule('C4::Context'); > $module->mock( 'userenv', sub { { branch => $branchcode } } ); >diff --git a/t/db_dependent/Patron/Borrower_Debarments.t b/t/db_dependent/Patron/Borrower_Debarments.t >index 2003b7e2cd..ac59f1b34c 100755 >--- a/t/db_dependent/Patron/Borrower_Debarments.t >+++ b/t/db_dependent/Patron/Borrower_Debarments.t >@@ -66,8 +66,7 @@ ModDebarment({ > $debarments = GetDebarments({ borrowernumber => $borrowernumber }); > is( $debarments->[1]->{'comment'}, 'Test 3', "ModDebarment functions correctly" ); > >- >-my $patron = GetMember( borrowernumber => $borrowernumber ); >+my $patron = Koha::Patrons->find( $borrowernumber )->unblessed; > is( $patron->{'debarred'}, '9999-06-10', "Field borrowers.debarred set correctly" ); > is( $patron->{'debarredcomment'}, "Test 1\nTest 3", "Field borrowers.debarredcomment set correctly" ); > >diff --git a/t/db_dependent/Patron/Borrower_Discharge.t b/t/db_dependent/Patron/Borrower_Discharge.t >index 88785bdeef..d5e3e2de7d 100644 >--- a/t/db_dependent/Patron/Borrower_Discharge.t >+++ b/t/db_dependent/Patron/Borrower_Discharge.t >@@ -23,7 +23,7 @@ use C4::Biblio qw( AddBiblio ); > use C4::Circulation qw( AddIssue AddReturn ); > use C4::Context; > use C4::Items qw( AddItem ); >-use C4::Members qw( AddMember GetMember ); >+use C4::Members qw( AddMember ); > > use Koha::Patron::Discharge; > use Koha::Database; >diff --git a/t/db_dependent/Patron/Borrower_PrevCheckout.t b/t/db_dependent/Patron/Borrower_PrevCheckout.t >index 453ccf1129..3ff2094505 100644 >--- a/t/db_dependent/Patron/Borrower_PrevCheckout.t >+++ b/t/db_dependent/Patron/Borrower_PrevCheckout.t >@@ -5,7 +5,6 @@ use C4::Members; > use C4::Circulation; > use Koha::Database; > use Koha::Patrons; >-use Koha::Patron; > > use Test::More tests => 59; > >@@ -303,8 +302,7 @@ my $cpvmappings = [ > test_it($cpvmappings, "PreIssue"); > > # Issue item_1 to $patron: >-my $patron_get_mem = >- GetMember(%{{borrowernumber => $patron->{borrowernumber}}}); >+my $patron_get_mem = Koha::Patrons->find( $patron->{borrowernumber} )->unblessed; > BAIL_OUT("Issue failed") > unless AddIssue($patron_get_mem, $item_1->{barcode}); > >@@ -375,14 +373,13 @@ test_it($cpvPmappings, "PostReturn"); > # [!$issuingimpossible,$needsconfirmation->{PREVISSUE}] > > # Needs: >-# - $patron_from_GetMember >+# - $patron > # - $item objects (one not issued, another prevIssued) > # - $checkprevcheckout pref (first hardno, then hardyes) > > # Our Patron > my $CBBI_patron = $builder->build({source => 'Borrower'}); >-my $p_from_GetMember = >- GetMember(%{{borrowernumber => $CBBI_patron->{borrowernumber}}}); >+$patron = Koha::Patrons->find( $CBBI_patron->{borrowernumber} )->unblessed; > # Our Items > my $new_item = $builder->build({ > source => 'Item', >@@ -402,7 +399,7 @@ my $prev_item = $builder->build({ > }); > # Second is Checked Out > BAIL_OUT("CanBookBeIssued Issue failed") >- unless AddIssue($p_from_GetMember, $prev_item->{barcode}); >+ unless AddIssue($patron, $prev_item->{barcode}); > > # Mappings > my $CBBI_mappings = [ >@@ -438,7 +435,7 @@ map { > t::lib::Mocks::mock_preference('checkprevcheckout', $_->{syspref}); > my ( $issuingimpossible, $needsconfirmation ) = > C4::Circulation::CanBookBeIssued( >- $p_from_GetMember, $_->{item}->{barcode} >+ $patron, $_->{item}->{barcode} > ); > is($needsconfirmation->{PREVISSUE}, $_->{result}, $_->{msg}); > } @{$CBBI_mappings}; >diff --git a/t/db_dependent/Reserves.t b/t/db_dependent/Reserves.t >index 0d238162a6..810050efc0 100755 >--- a/t/db_dependent/Reserves.t >+++ b/t/db_dependent/Reserves.t >@@ -37,6 +37,7 @@ use Koha::DateUtils; > use Koha::Holds; > use Koha::Libraries; > use Koha::Notice::Templates; >+use Koha::Patrons; > use Koha::Patron::Categories; > > BEGIN { >@@ -118,7 +119,7 @@ my %data = ( > ); > Koha::Patron::Categories->find($category_1)->set({ enrolmentfee => 0})->store; > my $borrowernumber = AddMember(%data); >-my $borrower = GetMember( borrowernumber => $borrowernumber ); >+my $borrower = Koha::Patrons->find( $borrowernumber )->unblessed; > my $biblionumber = $bibnum; > my $barcode = $testbarcode; > >diff --git a/t/db_dependent/Utils/Datatables_Members.t b/t/db_dependent/Utils/Datatables_Members.t >index 890c6aef4c..949d959364 100644 >--- a/t/db_dependent/Utils/Datatables_Members.t >+++ b/t/db_dependent/Utils/Datatables_Members.t >@@ -44,6 +44,9 @@ my $library = $builder->build({ > source => "Branch", > }); > >+my $patron = $builder->build_object({ class => 'Koha::Patrons', value => { flags => 1 } }); >+set_logged_in_user( $patron ); >+ > my $branchcode=$library->{branchcode}; > > my $john_doe = $builder->build({ >@@ -461,4 +464,16 @@ subtest 'ExtendedPatronAttributes' => sub { > # End > $schema->storage->txn_rollback; > >+sub set_logged_in_user { >+ my ($patron) = @_; >+ C4::Context->_new_userenv('xxx'); >+ C4::Context->set_userenv( >+ $patron->borrowernumber, $patron->userid, >+ $patron->cardnumber, 'firstname', >+ 'surname', $patron->library->branchcode, >+ 'Midway Public Library', $patron->flags, >+ '', '' >+ ); >+} >+ > 1; >diff --git a/t/db_dependent/rollingloans.t b/t/db_dependent/rollingloans.t >index 52748088a8..6be21101c1 100644 >--- a/t/db_dependent/rollingloans.t >+++ b/t/db_dependent/rollingloans.t >@@ -7,6 +7,8 @@ use C4::Circulation; > use C4::Members; > use C4::Items; > use Koha::DateUtils; >+use Koha::Patrons; >+use t::lib::TestBuilder; > > use Test::More tests => 8; > C4::Context->_new_userenv(1234567); >@@ -19,7 +21,8 @@ my $test_item_fic = '502326000402'; > my $test_item_24 = '502326000404'; > my $test_item_48 = '502326000403'; > >-my $borrower1 = GetMember(cardnumber => $test_patron); >+my $builder = t::lib::TestBuilder->new; >+my $borrower1 = $builder->build_object({ class => 'Koha::Patrons', value => { cardnumber => $test_patron } }); > my $item1 = GetItem (undef,$test_item_fic); > > SKIP: { >@@ -41,7 +44,7 @@ SKIP: { > sub try_issue { > my ($cardnumber, $item ) = @_; > my $issuedate = '2011-05-16'; >- my $borrower = GetMember( cardnumber => $cardnumber ); >+ my $borrower = Koha::Patrons->find( { cardnumber => $cardnumber } )->unblessed; > my ($issuingimpossible,$needsconfirmation) = CanBookBeIssued( $borrower, $item ); > my $issue = AddIssue($borrower, $item, undef, 0, $issuedate); > return dt_from_string( $issue->due_date() ); >diff --git a/tools/batchMod.pl b/tools/batchMod.pl >index 1dc2174951..54a69445f5 100755 >--- a/tools/batchMod.pl >+++ b/tools/batchMod.pl >@@ -38,6 +38,7 @@ use List::MoreUtils qw/uniq/; > use Koha::Biblios; > use Koha::DateUtils; > use Koha::ItemTypes; >+use Koha::Patrons; > > my $input = new CGI; > my $dbh = C4::Context->dbh; >@@ -73,7 +74,7 @@ my ($template, $loggedinuser, $cookie) > }); > > # Does the user have a restricted item edition permission? >-my $uid = $loggedinuser ? GetMember( borrowernumber => $loggedinuser )->{userid} : undef; >+my $uid = $loggedinuser ? Koha::Patrons->find( $loggedinuser )->userid : undef; > my $restrictededition = $uid ? haspermission($uid, {'tools' => 'items_batchmod_restricted'}) : undef; > # In case user is a superlibrarian, edition is not restricted > $restrictededition = 0 if ($restrictededition != 0 && C4::Context->IsSuperLibrarian()); >diff --git a/tools/import_borrowers.pl b/tools/import_borrowers.pl >index 58c2266495..76dc2995bd 100755 >--- a/tools/import_borrowers.pl >+++ b/tools/import_borrowers.pl >@@ -227,12 +227,12 @@ if ( $uploadborrowers && length($uploadborrowers) > 0 ) { > my $borrowernumber; > my $member; > if ( ($matchpoint eq 'cardnumber') && ($borrower{'cardnumber'}) ) { >- $member = GetMember( 'cardnumber' => $borrower{'cardnumber'} ); >+ $member = Koha::Patrons->find( { cardnumber => $borrower{'cardnumber'} } )->unblessed; > if ($member) { > $borrowernumber = $member->{'borrowernumber'}; > } > } elsif ( ($matchpoint eq 'userid') && ($borrower{'userid'}) ) { >- $member = GetMember( 'userid' => $borrower{'userid'} ); >+ $member = Koha::Patrons->find( { userid => $borrower{'userid'} } )->unblessed; > if ($member) { > $borrowernumber = $member->{'borrowernumber'}; > } >diff --git a/tools/modborrowers.pl b/tools/modborrowers.pl >index 8f0a567324..720e2a107e 100755 >--- a/tools/modborrowers.pl >+++ b/tools/modborrowers.pl >@@ -366,8 +366,9 @@ exit; > > sub GetBorrowerInfos { > my ( %info ) = @_; >- my $borrower = GetMember( %info ); >+ my $borrower = Koha::Patrons->find( \%info ); > if ( $borrower ) { >+ $borrower = $borrower->unblessed; > for ( qw(dateenrolled dateexpiry) ) { > my $userdate = $borrower->{$_}; > unless ($userdate && $userdate ne "0000-00-00" and $userdate ne "9999-12-31") { >diff --git a/tools/picture-upload.pl b/tools/picture-upload.pl >index e74e262480..804bd96b92 100755 >--- a/tools/picture-upload.pl >+++ b/tools/picture-upload.pl >@@ -32,7 +32,6 @@ use C4::Members; > use C4::Debug; > > use Koha::Patrons; >-use Koha::Patron::Image; > use Koha::Patron::Images; > use Koha::Token; > >diff --git a/tools/viewlog.pl b/tools/viewlog.pl >index b7ddb6a787..9af64d5fb6 100755 >--- a/tools/viewlog.pl >+++ b/tools/viewlog.pl >@@ -30,7 +30,7 @@ use C4::Log; > use C4::Items; > use C4::Debug; > use C4::Search; # enabled_staff_search_views >-use Koha::Patron::Images; >+use Koha::Patrons; > > use vars qw($debug $cgi_debug); > >@@ -73,9 +73,9 @@ if ( $src eq 'circ' ) { > use C4::Members; > use C4::Members::Attributes qw(GetBorrowerAttributes); > my $borrowernumber = $object; >- my $data = GetMember( 'borrowernumber' => $borrowernumber ); >- my $patron_image = Koha::Patron::Images->find($data->{borrowernumber}); >- $template->param( picture => 1 ) if $patron_image; >+ my $patron = Koha::Patrons->find( $borrowernumber ); >+ $template->param( picture => 1 ) if $patron->image; >+ my $data = $patron->unblessed; > > if ( C4::Context->preference('ExtendedPatronAttributes') ) { > my $attributes = GetBorrowerAttributes( $data->{'borrowernumber'} ); >@@ -90,7 +90,7 @@ if ( $src eq 'circ' ) { > $template->param( > menu => 1, > borrowernumber => $borrowernumber, >- categoryname => $data->{'description'}, >+ categoryname => $patron->category->description, > RoutingSerials => C4::Context->preference('RoutingSerials'), > ); > } >@@ -136,20 +136,20 @@ if ($do_it) { > > #always add firstname and surname for librarian/user > if ( $result->{'user'} ) { >- my $userdetails = C4::Members::GetMember( borrowernumber => $result->{'user'} ); >- if ($userdetails) { >- $result->{'userfirstname'} = $userdetails->{'firstname'}; >- $result->{'usersurname'} = $userdetails->{'surname'}; >+ my $patron = Koha::Patrons->find( $result->{'user'} ); >+ if ($patron) { >+ $result->{'userfirstname'} = $patron->firstname; >+ $result->{'usersurname'} = $patron->surname; > } > } > > #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::GetMember( borrowernumber => $result->{'object'} ); >- if ($borrowerdetails) { >- $result->{'borrowerfirstname'} = $borrowerdetails->{'firstname'}; >- $result->{'borrowersurname'} = $borrowerdetails->{'surname'}; >+ my $patron = Koha::Patrons->find( $result->{'object'} ); >+ if ($patron) { >+ $result->{'borrowerfirstname'} = $patron->firstname; >+ $result->{'borrowersurname'} = $patron->surname; > } > } > } >diff --git a/virtualshelves/shelves.pl b/virtualshelves/shelves.pl >index 86b7852b2b..e649ef7c0b 100755 >--- a/virtualshelves/shelves.pl >+++ b/virtualshelves/shelves.pl >@@ -31,6 +31,7 @@ use Koha::Biblios; > use Koha::Biblioitems; > use Koha::ItemTypes; > use Koha::CsvProfiles; >+use Koha::Patrons; > use Koha::Virtualshelves; > > use constant ANYONE => 2; >@@ -60,7 +61,7 @@ if ( $op eq 'add_form' ) { > > if ( $shelf ) { > $category = $shelf->category; >- my $patron = GetMember( 'borrowernumber' => $shelf->owner ); >+ my $patron = Koha::Patrons->find( $shelf->owner )->unblessed; > $template->param( owner => $patron, ); > unless ( $shelf->can_be_managed( $loggedinuser ) ) { > push @messages, { type => 'alert', code => 'unauthorized_on_update' }; >@@ -229,8 +230,6 @@ if ( $op eq 'view' ) { > } > ); > >- my $borrower = GetMember( borrowernumber => $loggedinuser ); >- > my $xslfile = C4::Context->preference('XSLTListsDisplay'); > my $lang = $xslfile ? C4::Languages::getlanguage() : undef; > my $sysxml = $xslfile ? C4::XSLT::get_xslt_sysprefs() : undef; >-- >2.11.0
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 17829
:
64872
|
64873
|
64971
|
64972
|
64973
|
64976
|
65002
|
65213
|
65286
|
65549
|
65778
|
66360
|
68634