From dc11268b5f5bf75c63706926c647e6112d01b5a4 Mon Sep 17 00:00:00 2001
From: Jonathan Druart <jonathan.druart@bugs.koha-community.org>
Date: Wed, 16 Sep 2015 16:50:43 +0100
Subject: [PATCH] [PASSED QA] Bug 14836: Use Koha::PatronCategor[y|ies] in admin/categories.pl

Test plan:
Add/edit/remove patron categories from the administration module
(admin/categories.pl).
You should get message feedback after each action.

Signed-off-by: Frederic Demians <f.demians@tamil.fr>
  Operations in admin/category is unchanged, and functionnal

Signed-off-by: Kyle M Hall <kyle@bywatersolutions.com>
---
 admin/categorie.pl                                 |  406 ++++----------
 .../prog/en/includes/messaging-preference-form.inc |    9 +-
 .../prog/en/modules/admin/categorie.tt             |  601 +++++++++++---------
 3 files changed, 425 insertions(+), 591 deletions(-)

diff --git a/admin/categorie.pl b/admin/categorie.pl
index 1d5cd08..bc3151d 100755
--- a/admin/categorie.pl
+++ b/admin/categorie.pl
@@ -1,24 +1,7 @@
 #!/usr/bin/perl
 
-#script to administer the categories table
-#written 20/02/2002 by paul.poulain@free.fr
-
-# ALGO :
-# this script use an $op to know what to do.
-# if $op is empty or none of the above values,
-#	- the default screen is build (with all records, or filtered datas).
-#	- the   user can clic on add, modify or delete record.
-# if $op=add_form
-#	- if primkey exists, this is a modification,so we read the $primkey record
-#	- builds the add/modify form
-# if $op=add_validate
-#	- the user has just send datas, so we create/modify the record
-# if $op=delete_form
-#	- we show the record having primkey=$primkey and ask for deletion validation form
-# if $op=delete_confirm
-#	- we delete the record having primkey=$primkey
-
 # Copyright 2000-2002 Katipo Communications
+# Copyright 2002 Paul Poulain
 #
 # This file is part of Koha.
 #
@@ -43,36 +26,15 @@ use C4::Auth;
 use C4::Branch;
 use C4::Output;
 use C4::Form::MessagingPreferences;
+use Koha::Borrowers;
 use Koha::Database;
 use Koha::DateUtils;
-
-sub StringSearch {
-    my ( $searchstring, $type ) = @_;
-    my $dbh = C4::Context->dbh;
-    $searchstring //= '';
-    $searchstring =~ s/\'/\\\'/g;
-    my @data = split( ' ', $searchstring );
-    push @data, q{} if $#data == -1;
-    my $count = @data;
-    my $sth   = $dbh->prepare("Select * from categories where (description like ?) order by category_type,description,categorycode");
-    $sth->execute("$data[0]%");
-    my @results;
-
-    while ( my $data = $sth->fetchrow_hashref ) {
-        push( @results, $data );
-    }
-
-    #  $sth->execute;
-    $sth->finish;
-    return ( scalar(@results), \@results );
-}
+use Koha::PatronCategories;
 
 my $input         = new CGI;
-my $searchfield   = $input->param('description');
-my $script_name   = "/cgi-bin/koha/admin/categorie.pl";
+my $searchfield   = $input->param('description') // q||;
 my $categorycode  = $input->param('categorycode');
 my $op            = $input->param('op') // 'list';
-my $block_expired = $input->param("block_expired");
 my @messages;
 
 my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
@@ -86,177 +48,107 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
     }
 );
 
-################## ADD_FORM ##################################
-# called by default. Used to create form to add or  modify a record
 if ( $op eq 'add_form' ) {
-    $template->param( add_form => 1 );
-
-    #---- if primkey exists, it's a modify action, so read values to modify...
-    my $data;
-    my @selected_branches;
+    my ( $category, $selected_branches );
     if ($categorycode) {
-        my $dbh = C4::Context->dbh;
-        my $sth =
-          $dbh->prepare("SELECT * FROM categories WHERE categorycode=?");
-        $sth->execute($categorycode);
-        $data = $sth->fetchrow_hashref;
-
-        $sth = $dbh->prepare(
-            "SELECT b.branchcode, b.branchname 
-            FROM categories_branches AS cb, branches AS b 
-            WHERE cb.branchcode = b.branchcode AND cb.categorycode = ?
-        ");
-        $sth->execute($categorycode);
-        while ( my $branch = $sth->fetchrow_hashref ) {
-            push @selected_branches, $branch;
-        }
-        $sth->finish;
+        $category          = Koha::PatronCategories->find($categorycode);
+        $selected_branches = $category->branch_limitations;
     }
 
-    if (   $data->{'enrolmentperioddate'}
-        && $data->{'enrolmentperioddate'} eq '0000-00-00' )
-    {
-        $data->{'enrolmentperioddate'} = undef;
-    }
-
-    $data->{'category_type'} //= '';
-
-    my $branches = GetBranches();
+    my $branches = GetBranches;
     my @branches_loop;
-    foreach my $branch ( sort keys %$branches ) {
-        my $selected =
-          ( grep { $$_{branchcode} eq $branch } @selected_branches ) ? 1 : 0;
+    foreach my $branchcode ( sort { uc( $branches->{$a}->{branchname} ) cmp uc( $branches->{$b}->{branchname} ) } keys %$branches ) {
+        my $selected = ( grep { $_ eq $branchcode } @$selected_branches ) ? 1 : 0;
         push @branches_loop,
-          {
-            branchcode => $$branches{$branch}{branchcode},
-            branchname => $$branches{$branch}{branchname},
+          { branchcode => $branchcode,
+            branchname => $branches->{$branchcode}->{branchname},
             selected   => $selected,
           };
     }
 
     $template->param(
+        category => $category,
         branches_loop       => \@branches_loop,
-        description         => $data->{'description'},
-        enrolmentperiod     => $data->{'enrolmentperiod'},
-        enrolmentperioddate => $data->{'enrolmentperioddate'},
-        upperagelimit       => $data->{'upperagelimit'},
-        dateofbirthrequired => $data->{'dateofbirthrequired'},
-        enrolmentfee        => sprintf( "%.2f", $data->{'enrolmentfee'} || 0 ),
-        overduenoticerequired => $data->{'overduenoticerequired'},
-        issuelimit            => $data->{'issuelimit'},
-        reservefee            => sprintf( "%.2f", $data->{'reservefee'} || 0 ),
-        hidelostitems         => $data->{'hidelostitems'},
-        category_type         => $data->{'category_type'},
-        default_privacy       => $data->{'default_privacy'},
-        SMSSendDriver         => C4::Context->preference("SMSSendDriver"),
-        "type_" . $data->{'category_type'} => 1,
-        BlockExpiredPatronOpacActions =>
-          $data->{'BlockExpiredPatronOpacActions'},
-        TalkingTechItivaPhone =>
-          C4::Context->preference("TalkingTechItivaPhoneNotification"),
     );
 
     if ( C4::Context->preference('EnhancedMessagingPreferences') ) {
         C4::Form::MessagingPreferences::set_form_values(
             { categorycode => $categorycode }, $template );
     }
-
-    # END $OP eq ADD_FORM
-################## ADD_VALIDATE ##################################
-    # called by add_form, used to insert/modify data in DB
 }
 elsif ( $op eq 'add_validate' ) {
 
-    my $is_a_modif = $input->param("is_a_modif");
+    my $categorycode = $input->param('categorycode');
+    my $description = $input->param('description');
+    my $enrolmentperiod = $input->param('enrolmentperiod');
+    my $enrolmentperioddate = $input->param('enrolmentperioddate') || undef;
+    my $upperagelimit = $input->param('upperagelimit');
+    my $dateofbirthrequired = $input->param('dateofbirthrequired');
+    my $enrolmentfee = $input->param('enrolmentfee');
+    my $reservefee = $input->param('reservefee');
+    my $hidelostitems = $input->param('hidelostitems');
+    my $overduenoticerequired = $input->param('overduenoticerequired');
+    my $category_type = $input->param('category_type');
+    my $BlockExpiredPatronOpacActions = $input->param('BlockExpiredPatronOpacActions');
+    my $default_privacy = $input->param('default_privacy');
+    my @branches = grep { $_ ne q{} } $input->param('branches');
 
-    my $dbh = C4::Context->dbh;
+    my $is_a_modif = $input->param("is_a_modif");
 
-    if ( $input->param('enrolmentperioddate') ) {
-        my $enrolment_dt = eval { dt_from_string( $input->param('enrolmentperioddate') ) };
-        $enrolment_dt = eval { output_pref( { dt => $enrolment_dt, dateonly => 1, dateformat => 'iso' } ) } if ( $enrolment_dt );
-        $input->param( 'enrolmentperioddate' => $enrolment_dt );
+    if ( $enrolmentperioddate ) {
+        $enrolmentperioddate = output_pref({ dt => dt_from_string($enrolmentperioddate), dateformat => 'iso' });
     }
 
     if ($is_a_modif) {
-        my $sth = $dbh->prepare( "
-                UPDATE categories
-                SET description=?,
-                    enrolmentperiod=?,
-                    enrolmentperioddate=?,
-                    upperagelimit=?,
-                    dateofbirthrequired=?,
-                    enrolmentfee=?,
-                    reservefee=?,
-                    hidelostitems=?,
-                    overduenoticerequired=?,
-                    category_type=?,
-                    BlockExpiredPatronOpacActions=?,
-                    default_privacy=?
-                WHERE categorycode=?"
-        );
-        $sth->execute(
-            map { $input->param($_) } (
-                'description',           'enrolmentperiod',
-                'enrolmentperioddate',   'upperagelimit',
-                'dateofbirthrequired',   'enrolmentfee',
-                'reservefee',            'hidelostitems',
-                'overduenoticerequired', 'category_type',
-                'block_expired',         'default_privacy',
-                'categorycode'
-            )
-        );
-        $sth->finish;
-    }
-    else {
-        my $sth = $dbh->prepare( "
-            INSERT INTO categories (
-                categorycode,
-                description,
-                enrolmentperiod,
-                enrolmentperioddate,
-                upperagelimit,
-                dateofbirthrequired,
-                enrolmentfee,
-                reservefee,
-                hidelostitems,
-                overduenoticerequired,
-                category_type,
-                BlockExpiredPatronOpacActions,
-                default_privacy
-            )
-            VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?)" );
-        my $inserted = $sth->execute(
-            map { $input->param($_) } (
-                'categorycode',    'description',
-                'enrolmentperiod', 'enrolmentperioddate',
-                'upperagelimit',   'dateofbirthrequired',
-                'enrolmentfee',    'reservefee',
-                'hidelostitems',   'overduenoticerequired',
-                'category_type',   'block_expired',
-                'default_privacy',
-            )
-        );
-        if ( $inserted ) {
-            push @messages, { type => 'message', code => 'success_on_insert' };
+        my $category = Koha::PatronCategories->find( $categorycode );
+        $category->categorycode($categorycode);
+        $category->description($description);
+        $category->enrolmentperiod($enrolmentperiod);
+        $category->enrolmentperioddate($enrolmentperioddate);
+        $category->upperagelimit($upperagelimit);
+        $category->dateofbirthrequired($dateofbirthrequired);
+        $category->enrolmentfee($enrolmentfee);
+        $category->reservefee($reservefee);
+        $category->hidelostitems($hidelostitems);
+        $category->overduenoticerequired($overduenoticerequired);
+        $category->category_type($category_type);
+        $category->BlockExpiredPatronOpacActions($BlockExpiredPatronOpacActions);
+        $category->default_privacy($default_privacy);
+        eval {
+            $category->store;
+            $category->replace_branch_limitations( \@branches );
+        };
+        if ( $@ ) {
+            push @messages, {type => 'error', code => 'error_on_update' };
         } else {
-            push @messages, { type => 'error', code => 'error_on_insert' };
+            push @messages, { type => 'message', code => 'success_on_update' };
         }
     }
+    else {
+        my $category = Koha::PatronCategory->new({
+            categorycode => $categorycode,
+            description => $description,
+            enrolmentperiod => $enrolmentperiod,
+            enrolmentperioddate => $enrolmentperioddate,
+            upperagelimit => $upperagelimit,
+            dateofbirthrequired => $dateofbirthrequired,
+            enrolmentfee => $enrolmentfee,
+            reservefee => $reservefee,
+            hidelostitems => $hidelostitems,
+            overduenoticerequired => $overduenoticerequired,
+            category_type => $category_type,
+            BlockExpiredPatronOpacActions => $BlockExpiredPatronOpacActions,
+            default_privacy => $default_privacy,
+        });
+        eval {
+            $category->store;
+            $category->replace_branch_limitations( \@branches );
+        };
 
-    my @branches = $input->param("branches");
-    if (@branches) {
-        my $sth = $dbh->prepare(
-            "DELETE FROM categories_branches WHERE categorycode = ?"
-        );
-        $sth->execute( $input->param("categorycode") );
-        $sth = $dbh->prepare(
-            "INSERT INTO categories_branches ( categorycode, branchcode ) VALUES ( ?, ? )"
-        );
-        for my $branchcode (@branches) {
-            next if not $branchcode;
-            $sth->bind_param( 1, $input->param("categorycode") );
-            $sth->bind_param( 2, $branchcode );
-            $sth->execute;
+        if ( $@ ) {
+            push @messages, { type => 'error', code => 'error_on_insert' };
+        } else {
+            push @messages, { type => 'message', code => 'success_on_insert' };
         }
     }
 
@@ -267,162 +159,58 @@ elsif ( $op eq 'add_validate' ) {
 
     $searchfield = q||;
     $op = 'list';
-
-    # END $OP eq ADD_VALIDATE
-################## DELETE_CONFIRM ##################################
-    # called by default form, used to confirm deletion of data in DB
 }
 elsif ( $op eq 'delete_confirm' ) {
-    my $schema = Koha::Database->new()->schema();
-    $template->param( delete_confirm => 1 );
 
-    my $count =
-      $schema->resultset('Borrower')
-      ->search( { categorycode => $categorycode } )->count();
+    my $count = Koha::Borrowers->search({
+        categorycode => $categorycode
+    })->count;
 
-    my $category = $schema->resultset('Category')->find($categorycode);
-
-    if ( $category->enrolmentperioddate
-        && $category->enrolmentperioddate eq '0000-00-00' )
-    {
-        $category->{'enrolmentperioddate'} = undef;
-    }
+    my $category = Koha::PatronCategories->find($categorycode);
 
     $template->param(
-        category            => $category,
-        description         => $category->description,
-        enrolmentperiod     => $category->enrolmentperiod,
-        enrolmentperioddate => $category->enrolmentperioddate,
+        category => $category,
         patrons_in_category => $count,
     );
 
-    # END $OP eq DELETE_CONFIRM
-################## DELETE_CONFIRMED ##################################
-  # called by delete_confirm, used to effectively confirm deletion of data in DB
 }
 elsif ( $op eq 'delete_confirmed' ) {
-    $template->param( delete_confirmed => 1 );
-    my $dbh = C4::Context->dbh;
-
     my $categorycode = uc( $input->param('categorycode') );
 
-    my $sth = $dbh->prepare("delete from categories where categorycode=?");
-
-    my $deleted = $sth->execute($categorycode);
+    my $category = Koha::PatronCategories->find( $categorycode );
+    my $deleted = eval { $category->delete; };
 
-    if ( $deleted ) {
-        push @messages, { type => 'message', code => 'success_on_delete' };
+    if ( $@ or not $deleted ) {
+        push @messages, {type => 'error', code => 'error_on_delete' };
     } else {
-        push @messages, { type => 'error', code => 'error_on_delete' };
+        push @messages, { type => 'message', code => 'success_on_delete' };
     }
 
     $op = 'list';
-
-    # END $OP eq DELETE_CONFIRMED
 }
 
 if ( $op eq 'list' ) {
-    $template->param( else => 1 );
-    my @loop;
-    my ( $count, $results ) = StringSearch( $searchfield, 'web' );
-
-    my $dbh = C4::Context->dbh;
-    my $sth = $dbh->prepare("
-        SELECT b.branchcode, b.branchname 
-        FROM categories_branches AS cb, branches AS b 
-        WHERE cb.branchcode = b.branchcode AND cb.categorycode = ?
-    ");
-
-    for ( my $i = 0 ; $i < $count ; $i++ ) {
-        $sth->execute( $results->[$i]{'categorycode'} );
-
-        my @selected_branches;
-        while ( my $branch = $sth->fetchrow_hashref ) {
-            push @selected_branches, $branch;
-        }
-
-        my $enrolmentperioddate = $results->[$i]{'enrolmentperioddate'};
-        if ( $enrolmentperioddate && $enrolmentperioddate eq '0000-00-00' ) {
-            $enrolmentperioddate = undef;
-        }
-
-        $results->[$i]{'category_type'} //= '';
-
-        my %row = (
-            branches              => \@selected_branches,
-            categorycode          => $results->[$i]{'categorycode'},
-            description           => $results->[$i]{'description'},
-            enrolmentperiod       => $results->[$i]{'enrolmentperiod'},
-            enrolmentperioddate   => $enrolmentperioddate,
-            upperagelimit         => $results->[$i]{'upperagelimit'},
-            dateofbirthrequired   => $results->[$i]{'dateofbirthrequired'},
-            overduenoticerequired => $results->[$i]{'overduenoticerequired'},
-            issuelimit            => $results->[$i]{'issuelimit'},
-            hidelostitems         => $results->[$i]{'hidelostitems'},
-            category_type         => $results->[$i]{'category_type'},
-            default_privacy       => $results->[$i]{'default_privacy'},
-            reservefee => sprintf( "%.2f", $results->[$i]{'reservefee'} || 0 ),
-            enrolmentfee =>
-              sprintf( "%.2f", $results->[$i]{'enrolmentfee'} || 0 ),
-            "type_" . $results->[$i]{'category_type'} => 1,
-        );
-
-        if ( C4::Context->preference('EnhancedMessagingPreferences') ) {
-            my $brief_prefs =
-              _get_brief_messaging_prefs( $results->[$i]{'categorycode'} );
-            $row{messaging_prefs} = $brief_prefs if @$brief_prefs;
+    my $categories = Koha::PatronCategories->search(
+        {
+            description => { -like => "$searchfield%" }
+        },
+        {
+            order_by => ['category_type', 'description', 'categorycode' ]
         }
-        push @loop, \%row;
-    }
-
-    $template->param( loop => \@loop );
-
-    # check that I (institution) and C (child) exists. otherwise => warning to the user
-    $sth = $dbh->prepare("select category_type from categories where category_type='C'");
-    $sth->execute;
-    my ($categoryChild) = $sth->fetchrow;
-    $template->param( categoryChild => $categoryChild );
-
-    $sth = $dbh->prepare("select category_type from categories where category_type='I'");
-    $sth->execute;
-    my ($categoryInstitution) = $sth->fetchrow;
-    $template->param( categoryInstitution => $categoryInstitution );
-    $sth->finish;
+    );
 
-}    #---- END $OP eq DEFAULT
+    $template->param(
+        categories => $categories,
+    )
+}
 
 $template->param(
-    script_name  => $script_name,
     categorycode => $categorycode,
     searchfield  => $searchfield,
     messages     => \@messages,
+    op => $op,
 );
 
 output_html_with_http_headers $input, $cookie, $template->output;
 
 exit 0;
-
-sub _get_brief_messaging_prefs {
-    my $categorycode      = shift;
-    my $messaging_options = C4::Members::Messaging::GetMessagingOptions();
-    my $results           = [];
-    PREF: foreach my $option (@$messaging_options) {
-        my $pref = C4::Members::Messaging::GetMessagingPreferences(
-            {
-                categorycode => $categorycode,
-                message_name => $option->{'message_name'}
-            }
-        );
-        next unless $pref->{'transports'};
-        my $brief_pref = {
-            message_attribute_id      => $option->{'message_attribute_id'},
-            message_name              => $option->{'message_name'},
-            $option->{'message_name'} => 1
-        };
-        foreach my $transport ( keys %{ $pref->{'transports'} } ) {
-            push @{ $brief_pref->{'transports'} }, { transport => $transport };
-        }
-        push @$results, $brief_pref;
-    }
-    return $results;
-}
diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc
index c889e15..dabad6d 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc
+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/messaging-preference-form.inc
@@ -1,3 +1,4 @@
+[% USE Koha %]
 <!-- snippet for form to set borrower and patron category messaging preferences -->
 <script type="text/javascript">//<![CDATA[
 	$(document).ready(function(){
@@ -22,8 +23,8 @@
   <table>
     <tr><th></th>
         <th>Days in advance</th>
-        [% IF ( SMSSendDriver ) %]<th>SMS</th>[% END %]
-        [% IF ( TalkingTechItivaPhone ) %]<th>Phone</th>[% END %]
+        [% IF Koha.Preference('SMSSendDriver') %]<th>SMS</th>[% END %]
+        [% IF Koha.Preference('TalkingTechItivaPhoneNotification') %]<th>Phone</th>[% END %]
         <th>Email</th>
         <th>Digests only <i id="info_digests" data-toggle="tooltip" title="You can ask for a digest to reduce the number of messages. Messages will be saved and sent as a single message." data-placement="right" class="icon fa fa-info-sign"></i></th>
         <!-- <th>RSS</th> -->
@@ -56,7 +57,7 @@
       <td>-</td>
       [% END %]
 
-      [% IF ( SMSSendDriver ) %]<td>
+      [% IF Koha.Preference('SMSSendDriver') %]<td>
           [% IF ( messaging_form_inactive ) %]
               [% IF ( messaging_preference.transports_sms ) %]
                  <input type="checkbox"
@@ -84,7 +85,7 @@
           [% END %]
       </td>[% END %]
 
-      [% IF ( TalkingTechItivaPhone ) %]<td>
+      [% IF Koha.Preference('TalkingTechItivaPhoneNotification') %]<td>
           [% IF ( messaging_form_inactive ) %]
               [% IF ( messaging_preference.transports_phone ) %]
                  <input type="checkbox"
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categorie.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categorie.tt
index f50bd61..8d9e436 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categorie.tt
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/categorie.tt
@@ -1,7 +1,9 @@
+[% USE Koha %]
 [% USE KohaDates %]
+[% USE Price %]
 [% INCLUDE 'doc-head-open.inc' %]
-<title>Koha &rsaquo; Administration &rsaquo; Patron categories &rsaquo; [% IF ( add_form ) %][% IF ( categorycode ) %]Modify category '[% categorycode |html %]'[% ELSE %]New category[% END %][% END %]
-[% IF ( delete_confirm ) %][% IF ( patrons_in_category > 0 ) %]Cannot delete: category [% categorycode |html %] in use[% ELSE %]Confirm deletion of category '[% categorycode |html %]'[% END %][% END %]
+<title>Koha &rsaquo; Administration &rsaquo; Patron categories &rsaquo; [% IF op == 'add_form' %][% IF ( categorycode ) %]Modify category '[% categorycode |html %]'[% ELSE %]New category[% END %][% END %]
+[% IF op == 'delete_confirm' %][% IF ( patrons_in_category > 0 ) %]Cannot delete: category [% categorycode |html %] in use[% ELSE %]Confirm deletion of category '[% categorycode |html %]'[% END %][% END %]
 </title>
 [% INCLUDE 'doc-head-close.inc' %]
 [% INCLUDE 'calendar.inc' %]
@@ -96,10 +98,10 @@
 [% INCLUDE 'header.inc' %]
 [% INCLUDE 'patrons-admin-search.inc' %]
 
-<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> &rsaquo; [% IF ( add_form ) %] <a href="/cgi-bin/koha/admin/categorie.pl">Patron categories</a> &rsaquo; [% IF ( categorycode ) %]Modify category '[% categorycode |html %]'[% ELSE %]New category[% END %][% END %]
-[% IF ( delete_confirm ) %] <a href="/cgi-bin/koha/admin/categorie.pl">Patron categories</a> &rsaquo; [% IF ( patrons_in_category > 0 ) %]Cannot delete: Category [% categorycode |html %] in use[% ELSE %]Confirm deletion of category '[% categorycode |html %]'[% END %][% END %]
-[% IF ( delete_confirmed ) %] <a href="/cgi-bin/koha/admin/categorie.pl">Patron categories</a> &rsaquo; Category deleted[% END %]
-[% IF ( else ) %]Patron categories[% END %]</div>
+<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> &rsaquo; <a href="/cgi-bin/koha/admin/admin-home.pl">Administration</a> &rsaquo; [% IF op == 'add_form' %] <a href="/cgi-bin/koha/admin/categorie.pl">Patron categories</a> &rsaquo; [% IF ( categorycode ) %]Modify category '[% categorycode |html %]'[% ELSE %]New category[% END %][% END %]
+[% IF op == 'delete_confirm' %] <a href="/cgi-bin/koha/admin/categorie.pl">Patron categories</a> &rsaquo; [% IF ( patrons_in_category > 0 ) %]Cannot delete: Category [% categorycode |html %] in use[% ELSE %]Confirm deletion of category '[% categorycode |html %]'[% END %][% END %]
+[% IF op == 'delete_confirmed' %] <a href="/cgi-bin/koha/admin/categorie.pl">Patron categories</a> &rsaquo; Category deleted[% END %]
+[% IF op == 'list' %]Patron categories[% END %]</div>
 
 <div id="doc3" class="yui-t2">
    
@@ -110,315 +112,358 @@
 [% FOR m IN messages %]
     <div class="dialog [% m.type %]">
         [% SWITCH m.code %]
+        [% CASE 'error_on_update' %]
+            An error occurred when updating this patron category. Perhaps it already exists.
         [% CASE 'error_on_insert' %]
             An error occurred when inserting this patron category. The patron category might already exist.
         [% CASE 'error_on_delete' %]
             An error occurred when deleting this patron category. Check the logs.
+        [% CASE 'success_on_update' %]
+            Patron category updated successfully.
         [% CASE 'success_on_insert' %]
-            Patron category added successfully
+            Patron category inserted successfully.
         [% CASE 'success_on_delete' %]
             Patron category deleted successfully.
+        [% CASE 'already_exists' %]
+            This patron category already exists.
         [% CASE %]
             [% m.code %]
         [% END %]
     </div>
 [% END %]
 
-[% IF ( add_form ) %]
-	<form name="Aform" action="[% script_name %]" method="post">
-	<input type="hidden" name="op" value="add_validate" />
-	<input type="hidden" name="checked" value="0" />
-[% IF ( categorycode ) %]
-		<h1>Modify category [% categorycode |html %]</h1>
-	[% ELSE %]
-		<h1>New category</h1>
-	[% END %]
-	<fieldset class="rows">
-	<ol>[% IF ( categorycode ) %]
-    <li><span class="label">Category code: </span>[% categorycode |html %]
-				<input type="hidden" name="categorycode" value="[% categorycode |html %]" /><input type="hidden" name="is_a_modif" value="1" /></li>
-	[% ELSE %]
-    <li>
-        <label for="categorycode" class="required">Category code: </label>
-        <input type="text" name="categorycode" id="categorycode" size="10" maxlength="10" onblur="toUC(this)" />
-        <span class="required">Required</span>
-    </li>
-	[% END %]
-    <li>
-        <label for="description" class="required">Description: </label>
-        <input type="text" name="description" id="description" size="40" maxlength="80" value="[% description |html %]" />
-        <span class="required">Required</span>
-    </li>
-    <li><label for="enrolmentperiod" class="required">Enrollment period: </label>
-	<fieldset>
-	<legend>Choose one</legend>
-	<ol>
-	<li><label for="enrolmentperiod" style="width:6em;">In months: </label>
-		<input type="text" name="enrolmentperiod" id="enrolmentperiod" size="3" maxlength="3" value="[% IF ( enrolmentperiod ) %][% enrolmentperiod %][% END %]" /> months</li>
-	<li><label for="enrolmentperioddate" style="width:6em;">Until date: </label>
-        <input type="text" name="enrolmentperioddate" id="enrolmentperioddate" value="[% enrolmentperioddate | $KohaDates %]" />
-		<div id="enrolmentmessage" class="hint" style="margin-left:0;">Cannot have "months" and "until date" at the same time</div>
-	</li>
-	</ol>
-	</fieldset>
-	</li>
-	<li><label for="dateofbirthrequired">Age required: </label> <input type="text" name="dateofbirthrequired" id="dateofbirthrequired" value="[% dateofbirthrequired %]" size="3" maxlength="3" /> years</li>
-	<li><label for="upperagelimit">Upperage limit: </label> <input type="text" name="upperagelimit" id="upperagelimit" size="3" maxlength="3" value="[% upperagelimit %]" /> years</li>
-	<li><label for="enrolmentfee">Enrollment fee: </label><input type="text" name="enrolmentfee" id="enrolmentfee" size="6" value="[% enrolmentfee %]" /></li>
-	<li><label for="overduenoticerequired">Overdue notice required: </label> <select name="overduenoticerequired" id="overduenoticerequired">
-			[% IF ( overduenoticerequired ) %]
-						<option value="0">No</option>
-						<option value="1" selected="selected">Yes</option>
-			[% ELSE %]
-						<option value="0" selected="selected">No</option>
-						<option value="1">Yes</option>
-			[% END %]
-					</select></li>
-    <li><label for="hidelostitems">Lost items in staff client: </label> <select name="hidelostitems" id="hidelostitems">
-			[% IF ( hidelostitems ) %]
-						<option value="0">Shown</option>
-						<option value="1" selected="selected">Hidden by default</option>
-			[% ELSE %]
-						<option value="0" selected="selected">Shown</option>
-						<option value="1">Hidden by default</option>
-			[% END %]
-					</select></li>
-	<li><label for="reservefee">Hold fee: </label><input type="text" name="reservefee" id="reservefee" size="6" value="[% reservefee %]" /></li>
-    <li>
-        <label for="category_type" class="required">Category type: </label>
-        <select name="category_type" id="category_type">
-                        [% IF ( type_n ) %]<option value="" selected="selected">Select a category type</option>[% ELSE %]<option value="">Select a category type</option>[% END %]
-					[% IF ( type_A ) %]<option value="A" selected="selected">Adult</option>[% ELSE %]<option value="A">Adult</option>[% END %]
-					[% IF ( type_C ) %]<option value="C" selected="selected">Child</option>[% ELSE %]<option value="C">Child</option>[% END %]
-					[% IF ( type_S ) %]<option value="S" selected="selected">Staff</option>[% ELSE %]<option value="S">Staff</option>[% END %]
-					[% IF ( type_I ) %]<option value="I" selected="selected">Organization</option>[% ELSE %]<option value="I">Organization</option>[% END %]
-					[% IF ( type_P ) %]<option value="P" selected="selected">Professional</option>[% ELSE %]<option value="P">Professional</option>[% END %]
-					[% IF ( type_X ) %]<option value="X" selected="selected">Statistical</option>[% ELSE %]<option value="X">Statistical</option>[% END %]
-					</select>
-        <span class="required">Required</span>
-    </li>
-    <li><label for="branches">Branches limitation: </label>
-        <select id="branches" name="branches" multiple size="10">
-            <option value="">All branches</option>
-            [% FOREACH branch IN branches_loop %]
-              [% IF ( branch.selected ) %]
-                <option selected="selected" value="[% branch.branchcode %]">[% branch.branchname %]</option>
-              [% ELSE %]
-                <option value="[% branch.branchcode %]">[% branch.branchname %]</option>
-              [% END %]
-            [% END %]
-        </select>
-        <span>Select <i>All branches</i> if this category type must to be displayed all the time. Otherwise select libraries you want to associate with this value.
-        </span>
-    </li>
-    <li><label for="block_expired">Block expired patrons</label>
-        <select name="block_expired" id="block_expired">
-            [% IF ( BlockExpiredPatronOpacActions == -1  ) %]
-                <option value="-1" selected="selected"> Follow system preference BlockExpiredPatronOpacActions </option>
-            [% ELSE %]
-                <option value="-1"> Follow system preference BlockExpiredPatronOpacActions </option>
-            [% END %]
-
-            [% IF ( BlockExpiredPatronOpacActions == 1   ) %]
-                <option value="1" selected="selected"> Block </option>
-            [% ELSE %]
-                <option value="1"> Block </option>
-            [% END %]
+[% IF op == 'add_form' %]
+    <form name="Aform" action="/cgi-bin/koha/admin/categorie.pl" method="post">
+        <input type="hidden" name="op" value="add_validate" />
+        <input type="hidden" name="checked" value="0" />
+        [% IF category %]
+            <h1>Modify category [% categorycode |html %]</h1>
+        [% ELSE %]
+            <h1>New category</h1>
+        [% END %]
+        <fieldset class="rows">
+            <ol>
+                [% IF category %]
+                    <li>
+                        <span class="label">Category code: </span>[% categorycode |html %]
+                        <input type="hidden" name="categorycode" value="[% category.categorycode |html %]" /><input type="hidden" name="is_a_modif" value="1" />
+                    </li>
+                [% ELSE %]
+                    <li>
+                        <label for="categorycode" class="required">Category code: </label>
+                        <input type="text" name="categorycode" id="categorycode" size="10" maxlength="10" onblur="toUC(this)" />
+                        <span class="required">Required</span>
+                    </li>
+                [% END %]
+                <li>
+                    <label for="description" class="required">Description: </label>
+                    <input type="text" name="description" id="description" size="40" maxlength="80" value="[% category.description |html %]" />
+                    <span class="required">Required</span>
+                </li>
+                <li>
+                    <label for="enrolmentperiod" class="required">Enrollment period: </label>
+                    <fieldset>
+                        <legend>Choose one</legend>
+                        <ol>
+                            <li>
+                                <label for="enrolmentperiod" style="width:6em;">In months: </label>
+                                <input type="text" name="enrolmentperiod" id="enrolmentperiod" size="3" maxlength="3" value="[% IF category.enrolmentperiod %][% category.enrolmentperiod %][% END %]" /> months
+                            </li>
+                            <li>
+                                <label for="enrolmentperioddate" style="width:6em;">Until date: </label>
+                                <input type="text" name="enrolmentperioddate" id="enrolmentperioddate" value="[% category.enrolmentperioddate | $KohaDates %]" />
+                                <div id="enrolmentmessage" class="hint" style="margin-left:0;">Cannot have "months" and "until date" at the same time</div>
+                            </li>
+                        </ol>
+                    </fieldset>
+                </li>
+                <li>
+                    <label for="dateofbirthrequired">Age required: </label>
+                    <input type="text" name="dateofbirthrequired" id="dateofbirthrequired" value="[% category.dateofbirthrequired %]" size="3" maxlength="3" /> years
+                </li>
+                <li>
+                    <label for="upperagelimit">Upperage limit: </label>
+                    <input type="text" name="upperagelimit" id="upperagelimit" size="3" maxlength="3" value="[% category.upperagelimit %]" /> years
+                </li>
+                <li>
+                    <label for="enrolmentfee">Enrollment fee: </label>
+                    <input type="text" name="enrolmentfee" id="enrolmentfee" size="6" value="[% category.enrolmentfee | $Price on_editing => 1 %]" />
+                </li>
+                <li>
+                    <label for="overduenoticerequired">Overdue notice required: </label>
+                    <select name="overduenoticerequired" id="overduenoticerequired">
+                        [% IF category.overduenoticerequired %]
+                            <option value="0">No</option>
+                            <option value="1" selected="selected">Yes</option>
+                        [% ELSE %]
+                            <option value="0" selected="selected">No</option>
+                            <option value="1">Yes</option>
+                        [% END %]
+                    </select>
+                </li>
+                <li>
+                    <label for="hidelostitems">Lost items in staff client: </label>
+                    <select name="hidelostitems" id="hidelostitems">
+                        [% IF category.hidelostitems %]
+                            <option value="0">Shown</option>
+                            <option value="1" selected="selected">Hidden by default</option>
+                        [% ELSE %]
+                            <option value="0" selected="selected">Shown</option>
+                            <option value="1">Hidden by default</option>
+                        [% END %]
+                    </select>
+                </li>
+                <li>
+                    <label for="reservefee">Hold fee: </label>
+                    <input type="text" name="reservefee" id="reservefee" size="6" value="[% category.reservefee | $Price on_editing => 1 %]" />
+                </li>
+                <li>
+                    <label for="category_type" class="required">Category type: </label>
+                    <select name="category_type" id="category_type">
+                        [% UNLESS category %]<option value="" selected="selected">Select a category type</option>[% ELSE %]<option value="">Select a category type</option>[% END %]
+                        [% IF category and category.category_type == 'A' %]<option value="A" selected="selected">Adult</option>[% ELSE %]<option value="A">Adult</option>[% END %]
+                        [% IF category and category.category_type == 'C' %]<option value="C" selected="selected">Child</option>[% ELSE %]<option value="C">Child</option>[% END %]
+                        [% IF category and category.category_type == 'S' %]<option value="S" selected="selected">Staff</option>[% ELSE %]<option value="S">Staff</option>[% END %]
+                        [% IF category and category.category_type == 'I' %]<option value="I" selected="selected">Organization</option>[% ELSE %]<option value="I">Organization</option>[% END %]
+                        [% IF category and category.category_type == 'P' %]<option value="P" selected="selected">Professional</option>[% ELSE %]<option value="P">Professional</option>[% END %]
+                        [% IF category and category.category_type == 'X' %]<option value="X" selected="selected">Statistical</option>[% ELSE %]<option value="X">Statistical</option>[% END %]
+                    </select>
+                    <span class="required">Required</span>
+                </li>
+                <li><label for="branches">Branches limitation: </label>
+                    <select id="branches" name="branches" multiple size="10">
+                        <option value="">All branches</option>
+                        [% FOREACH branch IN branches_loop %]
+                          [% IF branch.selected %]
+                            <option selected="selected" value="[% branch.branchcode %]">[% branch.branchname %]</option>
+                          [% ELSE %]
+                            <option value="[% branch.branchcode %]">[% branch.branchname %]</option>
+                          [% END %]
+                        [% END %]
+                    </select>
+                    <span>Select <i>All branches</i> if this category type must to be displayed all the time. Otherwise select libraries you want to associate with this value.
+                    </span>
+                </li>
+                <li><label for="block_expired">Block expired patrons</label>
+                    <select name="BlockExpiredPatronOpacActions" id="block_expired">
+                        [% IF not category or category.BlockExpiredPatronOpacActions == -1%]
+                            <option value="-1" selected="selected"> Follow system preference BlockExpiredPatronOpacActions </option>
+                        [% ELSE %]
+                            <option value="-1"> Follow system preference BlockExpiredPatronOpacActions </option>
+                        [% END %]
 
-            [% IF ( BlockExpiredPatronOpacActions == 0   ) %]
-                <option value="0" selected="selected"> Don't block </option>
-            [% ELSE %]
-                <option value="0"> Don't block </option>
-            [% END %]
-        </select>
-        <span>
-            Choose whether patrons of this category be blocked from public catalog actions such as renewing and placing holds when their cards have expired.   
-        </span>
-    </li>
-    <li>
-        <label for="default_privacy">Default privacy: </label>
-        <select id="default_privacy" name="default_privacy">
-            [% SWITCH default_privacy %]
-            [% CASE 'forever' %]
-                <option value="default">Default</option>
-                <option value="never">Never</option>
-                <option value="forever" selected="selected">Forever</option>
-            [% CASE 'never' %]
-                <option value="default">Default</option>
-                <option value="never" selected="selected">Never</option>
-                <option value="forever">Forever</option>
-            [% CASE %]
-                <option value="default" selected="selected">Default</option>
-                <option value="never">Never</option>
-                <option value="forever">Forever</option>
-            [% END %]
-        </select>
-        <span>Controls how long a patrons checkout history is kept for new patrons of this category. "Never" anonymizes checkouts on return, and "Forever" keeps a patron's checkout history indefinitely. When set to "Default", the amount of history kept is controlled by the cronjob <i>batch_anonymise.pl</i> which should be set up by your system administrator.</span>
-    </li>
-    </ol>
-</fieldset>
+                        [% IF category and category.BlockExpiredPatronOpacActions == 1 %]
+                            <option value="1" selected="selected"> Block </option>
+                        [% ELSE %]
+                            <option value="1"> Block </option>
+                        [% END %]
 
-    [% IF ( EnhancedMessagingPreferences ) %]
-      <fieldset class="rows">
-        <h4>Default messaging preferences for this patron category</h4>
-        [% INCLUDE 'messaging-preference-form.inc' %]
-      </fieldset>
-    [% END %]
-	<fieldset class="action"><input type="button" value="Save" onclick="Check(this.form);" /> </fieldset>
-	</form>
+                        [% IF category and category.BlockExpiredPatronOpacActions == 0 %]
+                            <option value="0" selected="selected"> Don't block </option>
+                        [% ELSE %]
+                            <option value="0"> Don't block </option>
+                        [% END %]
+                    </select>
+                    <span>
+                        Choose whether patrons of this category be blocked from public catalog actions such as renewing and placing holds when their cards have expired.
+                    </span>
+                </li>
+                <li>
+                    <label for="default_privacy">Default privacy: </label>
+                    <select id="default_privacy" name="default_privacy">
+                        [% SET default_privacy = 'default' %]
+                        [% IF category %][% SET default_privacy = category.default_privacy %][% END %]
+                        [% SWITCH default_privacy %]
+                        [% CASE 'forever' %]
+                            <option value="default">Default</option>
+                            <option value="never">Never</option>
+                            <option value="forever" selected="selected">Forever</option>
+                        [% CASE 'never' %]
+                            <option value="default">Default</option>
+                            <option value="never" selected="selected">Never</option>
+                            <option value="forever">Forever</option>
+                        [% CASE %]
+                            <option value="default" selected="selected">Default</option>
+                            <option value="never">Never</option>
+                            <option value="forever">Forever</option>
+                        [% END %]
+                    </select>
+                    <span>Controls how long a patrons checkout history is kept for new patrons of this category. "Never" anonymizes checkouts on return, and "Forever" keeps a patron's checkout history indefinitely. When set to "Default", the amount of history kept is controlled by the cronjob <i>batch_anonymise.pl</i> which should be set up by your system administrator.</span>
+                </li>
+            </ol>
+        </fieldset>
 
+        [% IF ( EnhancedMessagingPreferences ) %]
+            <fieldset class="rows">
+                <h4>Default messaging preferences for this patron category</h4>
+                [% INCLUDE 'messaging-preference-form.inc' %]
+            </fieldset>
+        [% END %]
+        <fieldset class="action"><input type="button" value="Save" onclick="Check(this.form);" /> </fieldset>
+    </form>
 [% END %]
 
-[% IF ( delete_confirm ) %]
-    <form action="[% script_name %]" method="post">
+[% IF op == 'delete_confirm' %]
+    <form action="/cgi-bin/koha/admin/categorie.pl" method="post">
         <fieldset>
             <legend>
-                [% IF ( patrons_in_category > 0 ) %]
+                [% IF patrons_in_category > 0 %]
                     Category [% categorycode |html %] is in use.  Deletion not possible!
                 [% ELSE %]
                     Confirm deletion of category [% categorycode |html %]
                 [% END %]
             </legend>
 
-[% IF ( totalgtzero ) %]<div class="dialog alert"><strong>This category is used [% total %] times</strong>. Deletion not possible</div>[% END %]
-	<table>
-	<tr><th scope="row">Category code: </th><td>[% categorycode |html %]</td></tr>
-	<tr><th scope="row">Description: </th><td>[% description |html %]</td></tr>
-	<tr><th scope="row">Enrollment period: </th>
-		<td>
-			[% IF ( enrolmentperiod ) %]
-				[% enrolmentperiod %] months
-			[% ELSE %]
-				until [% enrolmentperioddate | $KohaDates %]
-			[% END %]
-		</td>
-	</tr>
-	<tr><th scope="row">Age required: </th><td>[% dateofbirthrequired %] years</td></tr>
-	<tr><th scope="row">Upperage limit: </th><td>[% upperagelimit %] years</td></tr>
-	<tr><th scope="row">Enrollment fee: </th><td>[% enrolmentfee %]</td></tr>
-	<tr><th scope="row">Receives overdue notices: </th><td>[% IF ( overduenoticerequired ) %]Yes[% ELSE %]No[% END %]</td></tr>
-	<tr><th scope="row">Lost items in staff client</th><td>[% IF ( hidelostitems ) %]Hidden by default[% ELSE %]Shown[% END %]</td></tr>
-	<tr><th scope="row">Hold fee: </th><td>[% reservefee %]</td></tr>
-    <tr>
-        <th scope="row">Default privacy: </th>
-        <td>
-            [% SWITCH category.default_privacy %]
-            [% CASE 'default' %]
-                Default
-            [% CASE 'never' %]
-                Never
-            [% CASE 'forever' %]
-                Forever
+            [% IF patrons_in_category > 0  %]
+                <div class="dialog alert">
+                    <strong>This category is used [% patrons_in_category %] times</strong>. Deletion not possible
+                </div>
             [% END %]
-        </td>
-    </tr>
-</table>
-		<fieldset class="action">[% IF ( totalgtzero ) %]
-<input type="submit" value="OK" /></form>
-		[% ELSE %]
-			<input type="hidden" name="op" value="delete_confirmed" />
-            <input type="hidden" name="categorycode" value="[% categorycode |html %]" /> <input type="submit" value="Delete this category" /> <a class="cancel" href="/cgi-bin/koha/admin/categorie.pl">Cancel</a>
-		[% END %]</fieldset></fieldset></form>
+            <table>
+                <tr><th scope="row">Category code: </th><td>[% category.categorycode |html %]</td></tr>
+                <tr><th scope="row">Description: </th><td>[% category.description |html %]</td></tr>
+                <tr><th scope="row">Enrollment period: </th>
+                    <td>
+                        [% IF category.enrolmentperiod %]
+                            [% category.enrolmentperiod %] months
+                        [% ELSE %]
+                            until [% category.enrolmentperioddate | $KohaDates %]
+                        [% END %]
+                    </td>
+                </tr>
+                <tr><th scope="row">Age required: </th><td>[% category.dateofbirthrequired %] years</td></tr>
+                <tr><th scope="row">Upperage limit: </th><td>[% category.upperagelimit %] years</td></tr>
+                <tr><th scope="row">Enrollment fee: </th><td>[% category.enrolmentfee | $Price %]</td></tr>
+                <tr><th scope="row">Receives overdue notices: </th><td>[% IF category. overduenoticerequired %]Yes[% ELSE %]No[% END %]</td></tr>
+                <tr><th scope="row">Lost items in staff client</th><td>[% IF category.hidelostitems %]Hidden by default[% ELSE %]Shown[% END %]</td></tr>
+                <tr><th scope="row">Hold fee: </th><td>[% category.reservefee | $Price %]</td></tr>
+                <tr>
+                    <th scope="row">Default privacy: </th>
+                    <td>
+                        [% SWITCH category.default_privacy %]
+                        [% CASE 'default' %]
+                            Default
+                        [% CASE 'never' %]
+                            Never
+                        [% CASE 'forever' %]
+                            Forever
+                        [% END %]
+                    </td>
+                </tr>
+            </table>
+            <fieldset class="action">
+                [% IF patrons_in_category > 0 %]
+                    <input type="submit" value="OK" />
+                [% ELSE %]
+                    <input type="hidden" name="op" value="delete_confirmed" />
+                    <input type="hidden" name="categorycode" value="[% categorycode |html %]" />
+                    <input type="submit" value="Delete this category" />
+                    <a class="cancel" href="/cgi-bin/koha/admin/categorie.pl">Cancel</a>
+                [% END %]
+            </fieldset>
+        </fieldset>
+    </form>
 [% END %]
 
-[% IF ( else ) %]
+[% IF op == 'list' %]
 
-<div id="toolbar" class="btn-toolbar">
-    <a class="btn btn-small" id="newcategory" href="/cgi-bin/koha/admin/categorie.pl?op=add_form"><i class="fa fa-plus"></i> New category</a>
-</div>
+    <div id="toolbar" class="btn-toolbar">
+        <a class="btn btn-small" id="newcategory" href="/cgi-bin/koha/admin/categorie.pl?op=add_form"><i class="fa fa-plus"></i> New category</a>
+    </div>
 
-<h2>Patron category administration</h2>
-[% IF ( searchfield ) %]
-		You Searched for [% searchfield %]</span>
-	[% END %]
-[% IF ( loop ) %]
-<div id="pagertable_categorie">
-</div>
+    <h2>Patron category administration</h2>
+    [% IF searchfield %]
+        You Searched for [% searchfield %]</span>
+    [% END %]
+    [% IF categories%]
         <table id="table_categorie">
-		<thead>
-        <tr>
-			<th scope="col">Code</th>
-			<th scope="col">Category name</th>
-			<th scope="col">Type</th>
-			<th scope="col">Enrollment period</th>
-			<th scope="col">Age required</th>
-			<th scope="col">Upper age limit</th>
-			<th scope="col">Enrollment fee</th>
-			<th scope="col">Overdue</th>
-            <th scope="col">Lost items</th>
- 			<th scope="col">Hold fee</th>
-            [% IF ( EnhancedMessagingPreferences ) %]
-            <th scope="col">Messaging</th>
-            [% END %]
-            <th scope="col">Branches limitations</th>
-            <th scope="col">Default privacy</th>
-            <th scope="col">&nbsp; </th>
-            <th scope="col">&nbsp; </th>
-        </tr>
-		</thead>
-        <tbody>
-		[% FOREACH loo IN loop %]
-			<tr>
-                        <td>[% loo.categorycode |html %]</td>
+            <thead>
+                <tr>
+                    <th scope="col">Code</th>
+                    <th scope="col">Category name</th>
+                    <th scope="col">Type</th>
+                    <th scope="col">Enrollment period</th>
+                    <th scope="col">Age required</th>
+                    <th scope="col">Upper age limit</th>
+                    <th scope="col">Enrollment fee</th>
+                    <th scope="col">Overdue</th>
+                    <th scope="col">Lost items</th>
+                    <th scope="col">Hold fee</th>
+                    [% IF ( EnhancedMessagingPreferences ) %]
+                    <th scope="col">Messaging</th>
+                    [% END %]
+                    <th scope="col">Branches limitations</th>
+                    <th scope="col">Default privacy</th>
+                    <th scope="col">&nbsp; </th>
+                    <th scope="col">&nbsp; </th>
+                </tr>
+            </thead>
+            <tbody>
+                [% FOREACH category IN categories %]
+                    <tr>
+                        <td>[% category.categorycode |html %]</td>
                         <td>
-                            <a href="[% loo.script_name %]?op=add_form&amp;categorycode=[% loo.categorycode |uri %]">[% loo.description |html %]</a>
+                            <a href="/cgi-bin/koha/admin/categorie.pl?op=add_form&amp;categorycode=[% category.categorycode |uri %]">[% category.description |html %]</a>
                         </td>
                         <td>
-                            [% IF ( loo.type_A ) %]Adult[% END %]
-                            [% IF ( loo.type_C ) %]Child[% END %]
-                            [% IF ( loo.type_P ) %]Prof.[% END %]
-                            [% IF ( loo.type_I ) %]Org.[% END %]
-                            [% IF ( loo.type_S ) %]Staff[% END %]
-                            [% IF ( loo.type_X ) %]Statistical[% END %]
+                            [% SWITCH category.category_type %]
+                                [% CASE 'A' %]Adult
+                                [% CASE 'C' %]Child
+                                [% CASE 'P' %]Prof.
+                                [% CASE 'I' %]Org.
+                                [% CASE 'S' %]Staff
+                                [% CASE 'X' %]Statistical
+                            [% END %]
                         </td>
                         <td>
-                        	[% IF ( loo.enrolmentperiod ) %]
-                        		[% loo.enrolmentperiod %] months
-                        	[% ELSE %]
-                        		until [% loo.enrolmentperioddate | $KohaDates %]
-                        	[% END %]
-                        
-                        </td>
-                        <td>[% loo.dateofbirthrequired %] years</td>
-			<td>[% loo.upperagelimit %] years</td>
-                        <td>[% loo.enrolmentfee %]</td>
-                        <td>[% IF ( loo.overduenoticerequired ) %]Yes[% ELSE %]No[% END %]</td>
-                        <td>[% IF ( loo.hidelostitems ) %]Hidden[% ELSE %]Shown[% END %]</td>
-                        <td>[% loo.reservefee %]</td>
-                        [% IF ( EnhancedMessagingPreferences ) %]
-                        <td style="white-space: nowrap; font-size:80%;">
-                            [% IF ( loo.messaging_prefs ) %]
-                              [% FOREACH prefs IN loo.messaging_prefs %]
-	                                [% FOREACH transport IN prefs.transports %]
-                                         [% IF ( transport.transport ) %]
-                                            [% IF ( prefs.Item_Due ) %]Item due
-                                            [% ELSIF ( prefs.Advance_Notice ) %]Advance notice
-                                            [% ELSIF ( prefs.Upcoming_Events ) %]Upcoming events
-                                            [% ELSIF ( prefs.Hold_Filled ) %]Hold filled
-                                            [% ELSIF ( prefs.Item_Check_in ) %]Item check-in
-                                            [% ELSIF ( prefs.Item_Checkout ) %]Item checkout
-			                                [% ELSE %]Unknown
-			                                [% END %]:
-				                            <strong>[% transport.transport %]</strong><br />
-				                         [% ELSE %]None<br />[% END %]
-	                                [% END %]
-                                [% END %]
+                            [% IF ( category.enrolmentperiod ) %]
+                                [% category.enrolmentperiod %] months
                             [% ELSE %]
-                                None
+                                until [% category.enrolmentperioddate | $KohaDates %]
                             [% END %]
                         </td>
+                        <td>[% category.dateofbirthrequired %] years</td>
+                        <td>[% category.upperagelimit %] years</td>
+                        <td>[% category.enrolmentfee | $Price %]</td>
+                        <td>[% IF ( category.overduenoticerequired ) %]Yes[% ELSE %]No[% END %]</td>
+                        <td>[% IF ( category.hidelostitems ) %]Hidden[% ELSE %]Shown[% END %]</td>
+                        <td>[% category.reservefee | $Price %]</td>
+                        [% IF Koha.Preference('EnhancedMessagingPreferences') %]
+                            <td style="white-space: nowrap; font-size:80%;">
+                                [% SET default_messaging = category.default_messaging %]
+                                [% IF default_messaging.size %]
+                                    [% FOREACH prefs IN default_messaging %]
+                                        [% FOREACH transport IN prefs.transports %]
+                                            [% IF ( transport.transport ) %]
+                                                [% IF ( prefs.Item_Due ) %]Item due
+                                                [% ELSIF ( prefs.Advance_Notice ) %]Advance notice
+                                                [% ELSIF ( prefs.Upcoming_Events ) %]Upcoming events
+                                                [% ELSIF ( prefs.Hold_Filled ) %]Hold filled
+                                                [% ELSIF ( prefs.Item_Check_in ) %]Item check-in
+                                                [% ELSIF ( prefs.Item_Checkout ) %]Item checkout
+                                                [% ELSE %]Unknown
+                                                [% END %]:
+                                                <strong>[% transport.transport %]</strong><br />
+                                            [% ELSE %]None<br />[% END %]
+                                        [% END %]
+                                    [% END %]
+                                [% ELSE %]
+                                    None
+                                [% END %]
+                            </td>
                         [% END %]
                         <td>
-                            [% IF loo.branches.size > 0 %]
+                            [% SET branch_limitations = category.branch_limitations %]
+                            [% IF branch_limitations.size > 0 %]
                                 [% branches_str = "" %]
-                                [% FOREACH branch IN loo.branches %]
+                                [% FOREACH branch IN branch_limitations %]
                                     [% branches_str = branches_str _ " " _ branch.branchname _ "(" _ branch.branchcode _ ")" %]
                                 [% END %]
                                 <span title="[% branches_str %]">
-                                    [% IF loo.branches.size > 1 %]
-                                        [% loo.branches.size %] branches limitations
+                                    [% IF branch_limitations.size > 1 %]
+                                        [% branch_limitations.size %] branches limitations
                                     [% ELSE %]
-                                        [% loo.branches.size %] branch limitation
+                                        [% branch_limitations.size %] branch limitation
                                     [% END %]
                                 </span>
                             [% ELSE %]
@@ -426,7 +471,7 @@
                             [% END %]
                         </td>
                         <td>
-                            [% SWITCH loo.default_privacy %]
+                            [% SWITCH category.default_privacy %]
                             [% CASE 'default' %]
                                 Default
                             [% CASE 'never' %]
@@ -435,15 +480,15 @@
                                 Forever
                             [% END %]
                         </td>
-                        <td><a href="[% loo.script_name %]?op=add_form&amp;categorycode=[% loo.categorycode |uri %]">Edit</a></td>
-                        <td><a href="[% loo.script_name %]?op=delete_confirm&amp;categorycode=[% loo.categorycode |uri %]">Delete</a></td>
-		</tr>
-		[% END %]
-        </tbody>
-	</table>
-[% ELSE %]
-	<div class="dialog alert">No categories have been defined. <a href="/cgi-bin/koha/admin/categorie.pl?op=add_form">Create a new category</a>.</div>
-[% END %]
+                        <td><a href="/cgi-bin/koha/admin/categorie.pl?op=add_form&amp;categorycode=[% category.categorycode |uri %]">Edit</a></td>
+                        <td><a href="/cgi-bin/koha/admin/categorie.pl?op=delete_confirm&amp;categorycode=[% category.categorycode |uri %]">Delete</a></td>
+                    </tr>
+                [% END %]
+            </tbody>
+        </table>
+    [% ELSE %]
+        <div class="dialog alert">No categories have been defined. <a href="/cgi-bin/koha/admin/categorie.pl?op=add_form">Create a new category</a>.</div>
+    [% END %]
 [% END %]
 
 </div>
-- 
1.7.2.5