From a75fcaa696862d1de03dd46ecf76f9403a8751ae 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). --- 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 +- .../modules/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 | 9 +-- 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 | 10 +++- 26 files changed, 168 insertions(+), 250 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index 0fa36ed..550ea74 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -87,7 +87,6 @@ BEGIN { &GetMemberAccountRecords &GetBorNotifyAcctRecord - &GetborCatFromCatType GetBorrowerCategorycode &GetBorrowersToExpunge @@ -1497,60 +1496,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 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) GROUP BY description" if $branch_limit; - } else { - $request .= " WHERE branchcode = ? OR branchcode IS NULL GROUP BY description" 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 af01cad..8ad9e2c 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 5747fbf..df9dafa 100755 --- a/circ/circulation.pl +++ b/circ/circulation.pl @@ -542,10 +542,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 $lib_messages_loop = GetMessages( $borrowernumber, 'L', $branch ); 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 947a29a..9baf567 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 e6663ed..88cdeb0 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 bc6e6b2..eb58099 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 @@ -60,9 +60,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 8df052b..9020f10 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 4af5165..a07077f 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 ea63f29..ef141ed 100755 --- a/members/boraccount.pl +++ b/members/boraccount.pl @@ -33,6 +33,8 @@ use C4::Branch; use C4::Accounts; use C4::Members::Attributes qw(GetBorrowerAttributes); +use Koha::Patron::Categories; + my $input=new CGI; @@ -59,10 +61,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 9fc3891..822aa03 100755 --- a/members/mancredit.pl +++ b/members/mancredit.pl @@ -35,6 +35,8 @@ use C4::Accounts; use C4::Items; use C4::Members::Attributes qw(GetBorrowerAttributes); +use Koha::Patron::Categories; + my $input=new CGI; my $flagsrequired = { borrowers => 1, updatecharges => 1 }; @@ -73,10 +75,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 164b833..b0bec19 100755 --- a/members/maninvoice.pl +++ b/members/maninvoice.pl @@ -34,6 +34,8 @@ use C4::Items; use C4::Branch; use C4::Members::Attributes qw(GetBorrowerAttributes); +use Koha::Patron::Categories; + my $input=new CGI; my $flagsrequired = { borrowers => 1 }; @@ -99,10 +101,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 1206f12..a91226c 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; my $input = new CGI; @@ -150,10 +152,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 28f5ea0..727dc71 100755 --- a/members/member-password.pl +++ b/members/member-password.pl @@ -17,6 +17,8 @@ use C4::Circulation; use CGI qw ( -utf8 ); use C4::Members::Attributes qw(GetBorrowerAttributes); +use Koha::Patron::Categories; + use Digest::MD5 qw(md5_base64); my $input = new CGI; @@ -82,10 +84,9 @@ if ( $newpassword && !scalar(@errors) ) { $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; + 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 f77eedd..340249c 100755 --- a/members/memberentry.pl +++ b/members/memberentry.pl @@ -508,27 +508,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 482f2a2..68641f3 100755 --- a/members/moremember.pl +++ b/members/moremember.pl @@ -61,6 +61,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); @@ -155,11 +156,9 @@ if ( IsDebarred($borrowernumber) ) { $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 ( $count, $guarantees ) = GetGuarantees( $data->{'borrowernumber'} ); diff --git a/members/pay.pl b/members/pay.pl index 8a1b499..8efb144 100755 --- a/members/pay.pl +++ b/members/pay.pl @@ -42,6 +42,8 @@ use C4::Overdues; use C4::Branch; use C4::Members::Attributes qw(GetBorrowerAttributes); +use Koha::Patron::Categories; + our $input = CGI->new; my $updatecharges_permissions = $input->param('woall') ? 'writeoff' : 'remaining_permissions'; @@ -212,15 +214,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 35b9121..671bf24 100755 --- a/members/paycollect.pl +++ b/members/paycollect.pl @@ -30,6 +30,8 @@ use C4::Accounts; use C4::Koha; use C4::Branch; +use Koha::Patron::Categories; + my $input = CGI->new(); my $updatecharges_permissions = $input->param('writeoff_individual') ? 'writeoff' : 'remaining_permissions'; @@ -163,15 +165,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 26d4057..91e8af6 100755 --- a/members/printfeercpt.pl +++ b/members/printfeercpt.pl @@ -32,6 +32,7 @@ use C4::Members; use C4::Branch; use C4::Accounts; use Koha::DateUtils; +use Koha::Patron::Categories; my $input=new CGI; @@ -57,10 +58,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 67bf11c..f294273 100755 --- a/members/printinvoice.pl +++ b/members/printinvoice.pl @@ -31,6 +31,8 @@ use C4::Members; use C4::Branch; use C4::Accounts; +use Koha::Patron::Categories; + my $input = new CGI; my ( $template, $loggedinuser, $cookie ) = get_template_and_user( @@ -51,10 +53,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 20860c2..653f39d 100755 --- a/members/readingrec.pl +++ b/members/readingrec.pl @@ -33,6 +33,8 @@ use List::MoreUtils qw/any uniq/; use Koha::DateUtils; use C4::Members::Attributes qw(GetBorrowerAttributes); +use Koha::Patron::Categories; + my $input = CGI->new; #get borrower details @@ -93,10 +95,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 b0a5154..5d50d93 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 e230a10..fe71ecb 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 7b3f68a..16c5764 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 6c05d92..db5d781 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 ad8b166..060d345 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 8d87e1e..b82f190 100644 --- a/t/db_dependent/Koha/Patron/Categories.t +++ b/t/db_dependent/Koha/Patron/Categories.t @@ -19,7 +19,7 @@ use Modern::Perl; -use Test::More tests => 9; +use Test::More tests => 11; use C4::Context; use Koha::Database; @@ -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', })->store; @@ -55,6 +57,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; @@ -66,6 +69,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.1.0