From cae4b980607be083e5e0fb163c4949c73d6347db Mon Sep 17 00:00:00 2001 From: Jonathan Druart Date: Tue, 22 Dec 2015 10:12:48 +0000 Subject: [PATCH] Bug 15407: Koha::Patron::Categories - replace GetborCatFromCatType This unnecessary complicated subroutine returned an arrayref and an hashref of the patron categories available for the logged in user, for a given category_type, ordered by categorycode. This can now be done with the search_limited method. Test plan: - Same prerequisite as before For the following pages, you should not see patron categories limited to other libraries. They should be ordered as before this patch, by categorycode. - Add/edit a patron, change his/her patron category value. - On the 3 following reports: reports/bor_issues_top.pl reports/borrowers_out.pl reports/cat_issues_top.pl The display for these 3 reports are different than the 2 from the first patch (borrowers_stats.pl issues_avg_stats.pl): they are ordered by categorycode and the ones limited to other libraries are not displayed (should certainly be fixed). Note that the big part of this patch has already been tested before (update child related: CATCODE_MULTI). Signed-off-by: Chris Cormack Signed-off-by: Marcel de Rooy Signed-off-by: Kyle M Hall --- C4/Members.pm | 55 --------------- Koha/Patron/Categories.pm | 16 ++--- circ/circulation.pl | 7 +- .../prog/en/modules/members/update-child.tt | 69 ++++++++++--------- .../prog/en/modules/reports/bor_issues_top.tt | 6 +- .../prog/en/modules/reports/borrowers_out.tt | 6 +- .../prog/en/modules/reports/cat_issues_top.tt | 6 +- .../reports/issues_by_borrower_category.tt | 4 +- members/boraccount.pl | 9 +-- members/mancredit.pl | 9 +-- members/maninvoice.pl | 9 +-- members/member-flags.pl | 9 +-- members/member-password.pl | 11 +-- members/memberentry.pl | 42 ++++++----- members/moremember.pl | 9 ++- members/pay.pl | 14 ++-- members/paycollect.pl | 14 ++-- members/printfeercpt.pl | 8 +-- members/printinvoice.pl | 9 +-- members/readingrec.pl | 9 +-- members/update-child.pl | 24 ++----- reports/bor_issues_top.pl | 19 ++--- reports/borrowers_out.pl | 15 ++-- reports/cat_issues_top.pl | 16 +---- reports/issues_by_borrower_category.plugin | 15 ++-- t/db_dependent/Koha/Patron/Categories.t | 8 +++ 26 files changed, 168 insertions(+), 250 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index 138d244ef7..bcd45a77cd 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -78,7 +78,6 @@ BEGIN { &GetMemberAccountRecords &GetBorNotifyAcctRecord - &GetborCatFromCatType GetBorrowerCategorycode &GetBorrowersToExpunge @@ -1295,60 +1294,6 @@ sub GetUpcomingMembershipExpires { return $results; } -=head2 GetborCatFromCatType - - ($codes_arrayref, $labels_hashref) = &GetborCatFromCatType(); - -Looks up the different types of borrowers in the database. Returns two -elements: a reference-to-array, which lists the borrower category -codes, and a reference-to-hash, which maps the borrower category codes -to category descriptions. - -=cut - -#' -sub GetborCatFromCatType { - my ( $category_type, $action, $no_branch_limit ) = @_; - - my $branch_limit = $no_branch_limit - ? 0 - : C4::Context->userenv ? C4::Context->userenv->{"branch"} : ""; - - # FIXME - This API seems both limited and dangerous. - my $dbh = C4::Context->dbh; - - my $request = qq{ - SELECT DISTINCT categories.categorycode, categories.description - FROM categories - }; - $request .= qq{ - LEFT JOIN categories_branches ON categories.categorycode = categories_branches.categorycode - } if $branch_limit; - if($action) { - $request .= " $action "; - $request .= " AND (branchcode = ? OR branchcode IS NULL)" if $branch_limit; - } else { - $request .= " WHERE branchcode = ? OR branchcode IS NULL" if $branch_limit; - } - $request .= " ORDER BY categorycode"; - - my $sth = $dbh->prepare($request); - $sth->execute( - $action ? $category_type : (), - $branch_limit ? $branch_limit : () - ); - - my %labels; - my @codes; - - while ( my $data = $sth->fetchrow_hashref ) { - push @codes, $data->{'categorycode'}; - $labels{ $data->{'categorycode'} } = $data->{'description'}; - } - $sth->finish; - return ( \@codes, \%labels ); -} - =head2 GetBorrowerCategorycode $categorycode = &GetBorrowerCategoryCode( $borrowernumber ); diff --git a/Koha/Patron/Categories.pm b/Koha/Patron/Categories.pm index ee4d2acfa8..3673ce0211 100644 --- a/Koha/Patron/Categories.pm +++ b/Koha/Patron/Categories.pm @@ -38,16 +38,14 @@ Koha::Patron::Categories - Koha Patron Category Object set class =cut sub search_limited { - my ( $self ) = @_; + my ( $self, $params, $attributes ) = @_; my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : ""; - return $self->search({}, {order_by => ['description']}) unless $branch_limit; - return $self->search({ - 'categories_branches.branchcode' => [$branch_limit, undef]}, - { - join => 'categories_branches', - order_by => ['description'], - } - ); + if ( $branch_limit ) { + $params->{'categories_branches.branchcode'} = [ $branch_limit, undef ]; + $attributes->{join} = 'categories_branches'; + } + $attributes->{order_by} = ['description'] unless $attributes->{order_by}; + return $self->search($params, $attributes); } =head3 type diff --git a/circ/circulation.pl b/circ/circulation.pl index 867466e8f0..a83ca11eb8 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -556,10 +556,9 @@ $amountold =~ s/^.*\$//; # remove upto the $, if any my ( $total, $accts, $numaccts) = GetMemberAccountRecords( $borrowernumber ); if ( $borrowernumber && $borrower->{'category_type'} eq 'C') { - my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - my $cnt = scalar(@$catcodes); - $template->param( 'CATCODE_MULTI' => 1) if $cnt > 1; - $template->param( 'catcode' => $catcodes->[0]) if $cnt == 1; + 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; } my $librarian_messages = Koha::Patron::Messages->search( diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/update-child.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/update-child.tt index ccb49cee1b..8dcd682bb0 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/update-child.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/update-child.tt @@ -49,40 +49,43 @@ window.close(); [% IF ( MULTI ) %] -

Choose Adult category

+

Choose Adult category

-[% IF ( CAT_LOOP ) %] - -
-
- - - - - - - - - -[% FOREACH CAT_LOO IN CAT_LOOP %] - - - - - -[% END %] - -
 CodeDescription
-[% CAT_LOO.catcode %]
- - - - - -
Cancel
-[% END %] -
-
+ [% IF patron_categories %] +
+
+ + + + + + + + + + [% FOREACH patron_category IN patron_categories %] + + + + + + [% END %] + +
 CodeDescription
+ + [% patron_category.categorycode %]
+ + + + + +
+ + Cancel +
+
+
+ [% END %] [% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/bor_issues_top.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/bor_issues_top.tt index e6663ed820..88cdeb0e7f 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/bor_issues_top.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/bor_issues_top.tt @@ -154,9 +154,9 @@ function Dopop(link) {
  • diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/borrowers_out.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/borrowers_out.tt index f9c5aa0194..e269042caa 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/borrowers_out.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/borrowers_out.tt @@ -56,9 +56,9 @@ $(document).ready(function(){
    1. diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/cat_issues_top.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/cat_issues_top.tt index 27d2d28ff8..0d1fb5ff77 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/cat_issues_top.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/cat_issues_top.tt @@ -143,9 +143,9 @@
    2. diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/issues_by_borrower_category.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/issues_by_borrower_category.tt index 4af5165b1f..a07077fb44 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/reports/issues_by_borrower_category.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/reports/issues_by_borrower_category.tt @@ -59,8 +59,8 @@ diff --git a/members/boraccount.pl b/members/boraccount.pl index 0b64083faa..7fb52b9b2d 100755 --- a/members/boraccount.pl +++ b/members/boraccount.pl @@ -34,6 +34,8 @@ use C4::Accounts; use C4::Members::Attributes qw(GetBorrowerAttributes); use Koha::Patron::Images; +use Koha::Patron::Categories; + my $input=new CGI; @@ -60,10 +62,9 @@ if ( $action eq 'reverse' ) { } if ( $data->{'category_type'} eq 'C') { - my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - my $cnt = scalar(@$catcodes); - $template->param( 'CATCODE_MULTI' => 1) if $cnt > 1; - $template->param( 'catcode' => $catcodes->[0]) if $cnt == 1; + 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; } #get account details diff --git a/members/mancredit.pl b/members/mancredit.pl index c48f8cd219..a4efd50286 100755 --- a/members/mancredit.pl +++ b/members/mancredit.pl @@ -36,6 +36,8 @@ use C4::Items; use C4::Members::Attributes qw(GetBorrowerAttributes); use Koha::Patron::Images; +use Koha::Patron::Categories; + my $input=new CGI; my $flagsrequired = { borrowers => 1, updatecharges => 1 }; @@ -74,10 +76,9 @@ if ($add){ ); if ( $data->{'category_type'} eq 'C') { - my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - my $cnt = scalar(@$catcodes); - $template->param( 'CATCODE_MULTI' => 1) if $cnt > 1; - $template->param( 'catcode' => $catcodes->[0]) if $cnt == 1; + 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' ); diff --git a/members/maninvoice.pl b/members/maninvoice.pl index 355887116e..12dcb9fb3d 100755 --- a/members/maninvoice.pl +++ b/members/maninvoice.pl @@ -35,6 +35,8 @@ use C4::Branch; use C4::Members::Attributes qw(GetBorrowerAttributes); use Koha::Patron::Images; +use Koha::Patron::Categories; + my $input=new CGI; my $flagsrequired = { borrowers => 1 }; @@ -100,10 +102,9 @@ if ($add){ $template->param( invoice_types_loop => \@invoice_types ); if ( $data->{'category_type'} eq 'C') { - my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - my $cnt = scalar(@$catcodes); - $template->param( 'CATCODE_MULTI' => 1) if $cnt > 1; - $template->param( 'catcode' => $catcodes->[0]) if $cnt == 1; + 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' ); diff --git a/members/member-flags.pl b/members/member-flags.pl index 629a5c922c..a9563410ac 100755 --- a/members/member-flags.pl +++ b/members/member-flags.pl @@ -16,6 +16,8 @@ use C4::Branch; use C4::Members::Attributes qw(GetBorrowerAttributes); #use C4::Acquisitions; +use Koha::Patron::Categories; + use C4::Output; use Koha::Patron::Images; @@ -151,10 +153,9 @@ if ($input->param('newflags')) { } if ( $bor->{'category_type'} eq 'C') { - my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - my $cnt = scalar(@$catcodes); - $template->param( 'CATCODE_MULTI' => 1) if $cnt > 1; - $template->param( 'catcode' => $catcodes->[0]) if $cnt == 1; + 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' ); diff --git a/members/member-password.pl b/members/member-password.pl index 43c4489c4c..6f380812e2 100755 --- a/members/member-password.pl +++ b/members/member-password.pl @@ -19,6 +19,8 @@ use C4::Members::Attributes qw(GetBorrowerAttributes); use Koha::Patron::Images; use Koha::Token; +use Koha::Patron::Categories; + use Digest::MD5 qw(md5_base64); my $input = new CGI; @@ -101,11 +103,10 @@ else { $template->param( defaultnewpassword => $defaultnewpassword ); } -if ( $bor->{'category_type'} eq 'C' ) { - my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - my $cnt = scalar(@$catcodes); - $template->param( 'CATCODE_MULTI' => 1 ) if $cnt > 1; - $template->param( 'catcode' => $catcodes->[0] ) if $cnt == 1; +if ( $bor->{'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' ); diff --git a/members/memberentry.pl b/members/memberentry.pl index 5aa0b4a544..7d36e2f97c 100755 --- a/members/memberentry.pl +++ b/members/memberentry.pl @@ -521,27 +521,31 @@ if(!defined($data{'sex'})){ my @typeloop; my $no_categories = 1; my $no_add; -foreach (qw(C A S P I X)) { - my $action="WHERE category_type=?"; - my ($categories,$labels)=GetborCatFromCatType($_,$action); - if(scalar(@$categories) > 0){ $no_categories = 0; } - my @categoryloop; - foreach my $cat (@$categories){ - push @categoryloop,{'categorycode' => $cat, - 'categoryname' => $labels->{$cat}, - 'categorycodeselected' => ((defined($borrower_data->{'categorycode'}) && - $cat eq $borrower_data->{'categorycode'}) - || (defined($categorycode) && $cat eq $categorycode)), - }; - } - my %typehash; - $typehash{'typename'}=$_; - my $typedescription = "typename_".$typehash{'typename'}; - $typehash{'categoryloop'}=\@categoryloop; - push @typeloop,{'typename' => $_, +foreach my $category_type (qw(C A S P I X)) { + my $patron_categories = Koha::Patron::Categories->search_limited({ category_type => $category_type }, {order_by => ['categorycode']}); + $no_categories = 0 if $patron_categories->count > 0; + $template->param( 'catcode' => $patron_categories->next ) if $patron_categories->count == 1; + + my @categoryloop; + while ( my $patron_category = $patron_categories->next ) { + push @categoryloop, + { 'categorycode' => $patron_category->categorycode, + 'categoryname' => $patron_category->description, + 'categorycodeselected' => + ( ( defined( $borrower_data->{'categorycode'} ) && $patron_category->categorycode eq $borrower_data->{'categorycode'} ) || ( defined($categorycode) && $patron_category->categorycode eq $categorycode ) ), + }; + } + my %typehash; + $typehash{'typename'} = $category_type; + my $typedescription = "typename_" . $typehash{'typename'}; + $typehash{'categoryloop'} = \@categoryloop; + push @typeloop, + { 'typename' => $category_type, $typedescription => 1, - 'categoryloop' => \@categoryloop}; + 'categoryloop' => \@categoryloop + }; } + $template->param('typeloop' => \@typeloop, no_categories => $no_categories); if($no_categories){ $no_add = 1; } diff --git a/members/moremember.pl b/members/moremember.pl index 98286a052a..6e087ad3c2 100755 --- a/members/moremember.pl +++ b/members/moremember.pl @@ -62,6 +62,7 @@ if ( C4::Context->preference('NorwegianPatronDBEnable') && C4::Context->preferen use DateTime; use Koha::DateUtils; use Koha::Database; +use Koha::Patron::Categories; use vars qw($debug); @@ -156,11 +157,9 @@ if ( Koha::Patrons->find( $borrowernumber )->is_debarred ) { $data->{ "sex_".$data->{'sex'}."_p" } = 1 if defined $data->{sex}; if ( $category_type eq 'C') { - my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - my $cnt = scalar(@$catcodes); - - $template->param( 'CATCODE_MULTI' => 1) if $cnt > 1; - $template->param( 'catcode' => $catcodes->[0]) if $cnt == 1; + 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; } my $patron = Koha::Patrons->find($data->{borrowernumber}); diff --git a/members/pay.pl b/members/pay.pl index 8747dfa798..0d20767bba 100755 --- a/members/pay.pl +++ b/members/pay.pl @@ -43,6 +43,8 @@ use C4::Branch; use C4::Members::Attributes qw(GetBorrowerAttributes); use Koha::Patron::Images; +use Koha::Patron::Categories; + our $input = CGI->new; my $updatecharges_permissions = $input->param('woall') ? 'writeoff' : 'remaining_permissions'; @@ -215,15 +217,9 @@ sub borrower_add_additional_fields { # in a number of templates. It should not be the business of this script but in lieu of # a revised api here it is ... if ( $b_ref->{category_type} eq 'C' ) { - my ( $catcodes, $labels ) = - GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - if ( @{$catcodes} ) { - if ( @{$catcodes} > 1 ) { - $b_ref->{CATCODE_MULTI} = 1; - } elsif ( @{$catcodes} == 1 ) { - $b_ref->{catcode} = $catcodes->[0]; - } - } + 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; } elsif ( $b_ref->{category_type} eq 'A' ) { $b_ref->{adultborrower} = 1; } diff --git a/members/paycollect.pl b/members/paycollect.pl index aafca6de99..62a38de8c8 100755 --- a/members/paycollect.pl +++ b/members/paycollect.pl @@ -31,6 +31,8 @@ use C4::Koha; use C4::Branch; use Koha::Patron::Images; +use Koha::Patron::Categories; + my $input = CGI->new(); my $updatecharges_permissions = $input->param('writeoff_individual') ? 'writeoff' : 'remaining_permissions'; @@ -165,15 +167,9 @@ sub borrower_add_additional_fields { # in a number of templates. It should not be the business of this script but in lieu of # a revised api here it is ... if ( $b_ref->{category_type} eq 'C' ) { - my ( $catcodes, $labels ) = - GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - if ( @{$catcodes} ) { - if ( @{$catcodes} > 1 ) { - $b_ref->{CATCODE_MULTI} = 1; - } elsif ( @{$catcodes} == 1 ) { - $b_ref->{catcode} = $catcodes->[0]; - } - } + 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; } elsif ( $b_ref->{category_type} eq 'A' ) { $b_ref->{adultborrower} = 1; } diff --git a/members/printfeercpt.pl b/members/printfeercpt.pl index 0808bbaa5b..fd3f83e465 100755 --- a/members/printfeercpt.pl +++ b/members/printfeercpt.pl @@ -33,6 +33,7 @@ use C4::Branch; use C4::Accounts; use Koha::DateUtils; use Koha::Patron::Images; +use Koha::Patron::Categories; my $input=new CGI; @@ -58,10 +59,9 @@ if ( $action eq 'print' ) { } if ( $data->{'category_type'} eq 'C') { - my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - my $cnt = scalar(@$catcodes); - $template->param( 'CATCODE_MULTI' => 1) if $cnt > 1; - $template->param( 'catcode' => $catcodes->[0]) if $cnt == 1; + 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; } #get account details diff --git a/members/printinvoice.pl b/members/printinvoice.pl index 4999fbb1bc..38ffa49b24 100755 --- a/members/printinvoice.pl +++ b/members/printinvoice.pl @@ -32,6 +32,8 @@ use C4::Branch; use C4::Accounts; use Koha::Patron::Images; +use Koha::Patron::Categories; + my $input = new CGI; my ( $template, $loggedinuser, $cookie ) = get_template_and_user( @@ -52,10 +54,9 @@ my $accountlines_id = $input->param('accountlines_id'); my $data = GetMember( 'borrowernumber' => $borrowernumber ); if ( $data->{'category_type'} eq 'C' ) { - my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - my $cnt = scalar(@$catcodes); - $template->param( 'CATCODE_MULTI' => 1 ) if $cnt > 1; - $template->param( 'catcode' => $catcodes->[0] ) if $cnt == 1; + 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; } #get account details diff --git a/members/readingrec.pl b/members/readingrec.pl index 35a1ad4e3a..177923e32c 100755 --- a/members/readingrec.pl +++ b/members/readingrec.pl @@ -34,6 +34,8 @@ use Koha::DateUtils; use C4::Members::Attributes qw(GetBorrowerAttributes); use Koha::Patron::Images; +use Koha::Patron::Categories; + my $input = CGI->new; #get borrower details @@ -97,10 +99,9 @@ if ( $op eq 'export_barcodes' ) { } if ( $data->{'category_type'} eq 'C') { - my ( $catcodes, $labels ) = GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - my $cnt = scalar(@$catcodes); - $template->param( 'CATCODE_MULTI' => 1) if $cnt > 1; - $template->param( 'catcode' => $catcodes->[0]) if $cnt == 1; + 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' ); diff --git a/members/update-child.pl b/members/update-child.pl index b0a51548d0..5d50d931b4 100755 --- a/members/update-child.pl +++ b/members/update-child.pl @@ -58,24 +58,14 @@ my $catcode_multi = $input->param('catcode_multi'); my $op = $input->param('op'); if ( $op eq 'multi' ) { - my ( $catcodes, $labels ) = - # FIXME - what are the possible upgrade paths? C -> A , C -> S ... - # currently just allowing C -> A because of limitation of API. - GetborCatFromCatType( 'A', 'WHERE category_type = ?' ); - my @rows; - foreach my $k ( keys %$labels ) { - my $row; - $row->{catcode} = $k; - $row->{catdesc} = $labels->{$k}; - my $borcat = Koha::Patron::Categories->find($row->{catcode}); - $row->{cattype} = $borcat->category_type; - push @rows, $row; - } + # FIXME - what are the possible upgrade paths? C -> A , C -> S ... + # currently just allowing C -> A + my $patron_categories = Koha::Patron::Categories->search_limited({ category_type => 'A' }, {order_by => ['categorycode']}); $template->param( - MULTI => 1, - CATCODE_MULTI => 1, - borrowernumber => $borrowernumber, - CAT_LOOP => \@rows, + MULTI => 1, + CATCODE_MULTI => 1, + borrowernumber => $borrowernumber, + patron_categories => $patron_categories, ); output_html_with_http_headers $input, $cookie, $template->output; } diff --git a/reports/bor_issues_top.pl b/reports/bor_issues_top.pl index 0345a32309..1e1dcfdf54 100755 --- a/reports/bor_issues_top.pl +++ b/reports/bor_issues_top.pl @@ -29,7 +29,9 @@ use C4::Circulation; use C4::Members; use C4::Reports; use C4::Debug; + use Koha::DateUtils; +use Koha::Patron::Categories; =head1 NAME @@ -37,8 +39,6 @@ plugin that shows a stats on borrowers =head1 DESCRIPTION -=over 2 - =cut $debug = 1; @@ -129,22 +129,15 @@ foreach (sort {$itemtypes->{$a}->{translated_description} cmp $itemtypes->{$b}-> ); push @itemtypeloop, \%row; } - -my ($codes,$labels) = GetborCatFromCatType(undef,undef); -my @borcatloop; -foreach (sort keys %$labels) { - my %row =(value => $_, - description => $labels->{$_}, - ); - push @borcatloop, \%row; -} - + +my $patron_categories = Koha::Patron::Categories->search_limited({}, {order_by => ['categorycode']}); + $template->param( mimeloop => \@mime, CGIseplist => $delims, branchloop => \@branchloop, itemtypeloop => \@itemtypeloop, - borcatloop => \@borcatloop, +patron_categories => $patron_categories, ); output_html_with_http_headers $input, $cookie, $template->output; diff --git a/reports/borrowers_out.pl b/reports/borrowers_out.pl index eeb7fb3952..50c73b0dcb 100755 --- a/reports/borrowers_out.pl +++ b/reports/borrowers_out.pl @@ -28,7 +28,9 @@ use C4::Output; use C4::Circulation; use C4::Reports; use C4::Members; + use Koha::DateUtils; +use Koha::Patron::Categories; =head1 NAME @@ -116,19 +118,12 @@ if ($do_it) { my $CGIextChoice = ( 'CSV' ); # FIXME translation my $CGIsepChoice = GetDelimiterChoices; - - my ($codes,$labels) = GetborCatFromCatType(undef,undef); - my @borcatloop; - foreach my $thisborcat (sort keys %$labels) { - my %row =(value => $thisborcat, - description => $labels->{$thisborcat}, - ); - push @borcatloop, \%row; - } + + my $patron_categories = Koha::Patron::Categories->search_limited({}, {order_by => ['categorycode']}); $template->param( CGIextChoice => $CGIextChoice, CGIsepChoice => $CGIsepChoice, - borcatloop =>\@borcatloop, + patron_categories => $patron_categories, ); output_html_with_http_headers $input, $cookie, $template->output; } diff --git a/reports/cat_issues_top.pl b/reports/cat_issues_top.pl index 949afb70ac..ce7eded258 100755 --- a/reports/cat_issues_top.pl +++ b/reports/cat_issues_top.pl @@ -154,18 +154,8 @@ if ($do_it) { @shelvinglocloop = sort {$a->{value} cmp $b->{value}} @shelvinglocloop; - #borcat - my ($codes,$labels) = GetborCatFromCatType(undef,undef); - my @borcatloop; - foreach my $thisborcat (sort {$labels->{$a} cmp $labels->{$b}} keys %$labels) { - my %row =(value => $thisborcat, - description => $labels->{$thisborcat}, - ); - push @borcatloop, \%row; - } - - #Day - #Month + my $patron_categories = Koha::Patron::Categories->search_limited({}, {order_by => ['categorycode']}); + $template->param( CGIextChoice => $CGIextChoice, CGIsepChoice => $CGIsepChoice, @@ -173,7 +163,7 @@ if ($do_it) { itemtypeloop =>\@itemtypeloop, ccodeloop =>\@ccodeloop, shelvinglocloop =>\@shelvinglocloop, - borcatloop =>\@borcatloop, + patron_categories => $patron_categories, ); output_html_with_http_headers $input, $cookie, $template->output; } diff --git a/reports/issues_by_borrower_category.plugin b/reports/issues_by_borrower_category.plugin index ad8b166a45..060d34598a 100755 --- a/reports/issues_by_borrower_category.plugin +++ b/reports/issues_by_borrower_category.plugin @@ -29,6 +29,8 @@ use C4::Members; use C4::Branch; # GetBranches +use Koha::Patron::Categories; + =head1 NAME plugin that shows a table with issues for categories and borrower @@ -65,16 +67,9 @@ sub set_parameters { my ($template) = @_; $template->param( branchloop => GetBranchesLoop() ); - - my ($codes,$labels)=GetborCatFromCatType(undef,undef); - my @borcatloop; - foreach my $thisborcat (sort keys %$labels) { - push @borcatloop, { - value => $thisborcat, - description => $labels->{$thisborcat}, - }; - } - $template->param(loopcategories => \@borcatloop); + + my $patron_categories = Koha::Patron::Categories->search_limited({}, {order_by => ['categorycode']}); + $template->param( patron_categories => $patron_categories ); return $template; } diff --git a/t/db_dependent/Koha/Patron/Categories.t b/t/db_dependent/Koha/Patron/Categories.t index 2a12fdb8b5..34befd97fd 100644 --- a/t/db_dependent/Koha/Patron/Categories.t +++ b/t/db_dependent/Koha/Patron/Categories.t @@ -35,11 +35,13 @@ my $branch = $builder->build({ source => 'Branch', }); my $nb_of_categories = Koha::Patron::Categories->search->count; my $new_category_1 = Koha::Patron::Category->new({ categorycode => 'mycatcodeX', + category_type => 'A', description => 'mycatdescX', })->store; $new_category_1->add_branch_limitation( $branch->{branchcode} ); my $new_category_2 = Koha::Patron::Category->new({ categorycode => 'mycatcodeY', + category_type => 'S', description => 'mycatdescY', checkprevcheckout => undef, })->store; @@ -60,6 +62,7 @@ C4::Context->_new_userenv('my_new_userenv'); C4::Context->set_userenv( 0, 0, 'usercnum', 'firstname', 'surname', $another_branch->{branchcode}, 'My wonderful library', '', '', '' ); my $new_category_3 = Koha::Patron::Category->new( { categorycode => 'mycatcodeZ', + category_type => 'A', description => 'mycatdescZ', } )->store; @@ -71,6 +74,11 @@ is( scalar( grep { $_ eq $new_category_1->categorycode } @limited_category_codes is( scalar( grep { $_ eq $new_category_2->categorycode } @limited_category_codes ), 1, 'The second category is not limited' ); is( scalar( grep { $_ eq $new_category_3->categorycode } @limited_category_codes ), 1, 'The third category is limited to my branch ' ); +my @limited_categories_for_A = Koha::Patron::Categories->search_limited({ category_type => 'A' }); +my @limited_category_codes_for_A = map { $_->categorycode } @limited_categories_for_A; +is( scalar( grep { $_ eq $new_category_2->categorycode } @limited_category_codes_for_A ), 0, 'The second category is not limited but has a category_type S' ); +is( scalar( grep { $_ eq $new_category_3->categorycode } @limited_category_codes_for_A ), 1, 'The third category is limited to my branch and has a category_type A' ); + $retrieved_category_1->delete; is( Koha::Patron::Categories->search->count, $nb_of_categories + 2, 'Delete should have deleted the patron category' ); -- 2.39.2