From 33e5473c629317b0aa6107754f672db0fc4e26e9 Mon Sep 17 00:00:00 2001 From: Martin Renvoize Date: Thu, 26 Sep 2019 14:36:06 +0100 Subject: [PATCH] Bug 23049: Account types configuration - Admin page Test plan: 1) Go to admin home, note there is new Debit types page in Accounting section 2) Go to any other admin page and confirm there is link to Debit types in the admin menu as well 3) Go to Debit types page 4) You should see a datatable listing existing debit types, ensure they are working as expected. 5) Try to create, edit and delete some debit types. Note: Some debit types cannot be deleted as they are needed for koha functionality. --- Koha/Account/DebitType.pm | 16 +- Koha/Account/DebitTypes.pm | 2 +- admin/debit_types.pl | 146 +++++++++++ .../prog/en/includes/admin-menu.inc | 7 +- .../prog/en/modules/admin/admin-home.tt | 66 ++--- .../prog/en/modules/admin/debit_types.tt | 236 ++++++++++++++++++ 6 files changed, 438 insertions(+), 35 deletions(-) create mode 100755 admin/debit_types.pl create mode 100644 koha-tmpl/intranet-tmpl/prog/en/modules/admin/debit_types.tt diff --git a/Koha/Account/DebitType.pm b/Koha/Account/DebitType.pm index 1ded50857d..17c925db61 100644 --- a/Koha/Account/DebitType.pm +++ b/Koha/Account/DebitType.pm @@ -23,7 +23,7 @@ use List::Util qw/any/; use Koha::Database; use Koha::Exceptions; -use base qw(Koha::Object); +use base qw(Koha::Object Koha::Object::Limit::Library); =head1 NAME @@ -82,6 +82,20 @@ sub defaults { return \@defaults; } +=head3 _library_limits + +Configurable library limits + +=cut + +sub _library_limits { + return { + class => "AcDebitTypesBranch", + id => "debit_type_code", + library => "branchcode", + }; +} + =head3 type =cut diff --git a/Koha/Account/DebitTypes.pm b/Koha/Account/DebitTypes.pm index 7f4a25897c..a9fa462e7d 100644 --- a/Koha/Account/DebitTypes.pm +++ b/Koha/Account/DebitTypes.pm @@ -23,7 +23,7 @@ use List::Util qw/any/; use Koha::Database; use Koha::Account::DebitType; -use base qw(Koha::Objects); +use base qw(Koha::Objects Koha::Objects::Limit::Library); =head1 NAME diff --git a/admin/debit_types.pl b/admin/debit_types.pl new file mode 100755 index 0000000000..a8336e69bb --- /dev/null +++ b/admin/debit_types.pl @@ -0,0 +1,146 @@ +#! /usr/bin/perl + +# Copyright 2016 Koha Development Team +# +# This file is part of Koha. +# +# Koha is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 3 of the License, or +# (at your option) any later version. +# +# Koha is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with Koha; if not, see . + +use Modern::Perl; +use CGI qw ( -utf8 ); +use C4::Context; +use C4::Auth; +use C4::Output; + +use Koha::Account::DebitTypes; + +my $input = new CGI; +my $code = $input->param('code'); +my $op = $input->param('op') || 'list'; +my $type = $input->param('type'); +my @messages; + +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "admin/debit_types.tt", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { parameters => 'parameters_remaining_permissions' }, + debug => 1, + } +); + +if ( $op eq 'add_form' ) { + my $debit_type; + if ($code) { + $debit_type = Koha::Account::DebitTypes->find($code); + } + + my $selected_branches = + $debit_type ? $debit_type->get_library_limits : undef; + my $branches = + Koha::Libraries->search( {}, { order_by => ['branchname'] } )->unblessed; + my @branches_loop; + foreach my $branch (@$branches) { + my $selected = + ( $selected_branches + && grep { $_->branchcode eq $branch->{branchcode} } + @{ $selected_branches->as_list } ) ? 1 : 0; + push @branches_loop, + { + branchcode => $branch->{branchcode}, + branchname => $branch->{branchname}, + selected => $selected, + }; + } + + $template->param( + debit_type => $debit_type, + type => $type, + branches_loop => \@branches_loop + ); +} +elsif ( $op eq 'add_validate' ) { + my $description = $input->param('description'); + my $can_be_added_manually = $input->param('can_be_added_manually') || 0; + my $default_amount; + if ( $type eq "debit" ) { + $default_amount = $input->param('default_amount') || undef; + } + my @branches = grep { $_ ne q{} } $input->multi_param('branches'); + + my $debit_type; + $debit_type = Koha::Account::DebitTypes->find($code); + if ( not defined $debit_type ) { + $debit_type = Koha::Account::DebitType->new( { code => $code } ); + } + $debit_type->description($description); + $debit_type->can_be_added_manually($can_be_added_manually); + $debit_type->default_amount($default_amount); + + eval { + $debit_type->store; + $debit_type->replace_library_limits( \@branches ); + }; + if ($@) { + push @messages, { type => 'error', code => 'error_on_saving' }; + } + else { + push @messages, { type => 'message', code => 'success_on_saving' }; + } + $op = 'list'; +} +elsif ( $op eq 'delete_confirm' ) { + my $debit_type; + if ( $type eq "debit" ) { + $debit_type = Koha::Account::DebitTypes->find($code); + } + else { + $debit_type = Koha::Account::CreditTypes->find($code); + } + $template->param( debit_type => $debit_type ); + $template->param( type => $type ); +} +elsif ( $op eq 'delete_confirmed' ) { + my $debit_type; + if ( $type eq "debit" ) { + $debit_type = Koha::Account::DebitTypes->find($code); + } + else { + $debit_type = Koha::Account::CreditTypes->find($code); + } + my $deleted = eval { $debit_type->delete; }; + + if ( $@ or not $deleted ) { + push @messages, { type => 'error', code => 'error_on_delete' }; + } + else { + push @messages, { type => 'message', code => 'success_on_delete' }; + } + $op = 'list'; +} + +if ( $op eq 'list' ) { + my $debit_types = Koha::Account::DebitTypes->search(); + $template->param( debit_types => $debit_types ); +} + +$template->param( + code => $code, + messages => \@messages, + op => $op, +); + +output_html_with_http_headers $input, $cookie, $template->output; diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc index 1578c2db7f..f24f3e83fc 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/admin-menu.inc @@ -51,10 +51,13 @@ [% END %] - [% IF ( Koha.Preference('UseCashRegisters') && CAN_user_cash_management_manage_cash_registers ) %] + [% IF ( CAN_user_parameters_manage_accounts || ( Koha.Preference('UseCashRegisters') && CAN_user_cash_management_manage_cash_registers ) ) %]
Accounting
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt index 4095e516e9..5059cbfa34 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/admin-home.tt @@ -69,42 +69,46 @@ [% IF ( CAN_user_parameters_manage_patron_categories || CAN_user_parameters_manage_circ_rules || CAN_user_parameters_manage_patron_attributes || CAN_user_parameters_manage_transfers || CAN_user_parameters_manage_item_circ_alerts || CAN_user_parameters_manage_cities ) %]

Patrons and circulation

- [% IF ( CAN_user_parameters_manage_patron_categories ) %] -
Patron categories
-
Define patron categories.
- [% END %] - [% IF ( CAN_user_parameters_manage_circ_rules ) %] -
Circulation and fines rules
-
Define circulation and fines rules for combinations of libraries, patron categories, and item types
- [% END %] - [% IF ( CAN_user_parameters_manage_patron_attributes ) %] -
Patron attribute types
-
Define extended attributes (identifiers and statistical categories) for patron records
- [% END %] - [% IF ( CAN_user_parameters_manage_transfers ) %] -
Library transfer limits
-
Limit the ability to transfer items between libraries based on the library sending, the library receiving, and the item type involved. These rules only go into effect if the preference UseBranchTransferLimits is set to ON.
-
Transport cost matrix
-
Define transport costs between branches
- [% END %] - [% IF ( CAN_user_parameters_manage_item_circ_alerts ) %] -
Item circulation alerts
-
Define rules for check-in and checkout notifications for combinations of libraries, patron categories, and item types
- [% END %] - [% IF ( CAN_user_parameters_manage_cities ) %] -
Cities and towns
-
Define cities and towns that your patrons live in.
- [% END %] + [% IF ( CAN_user_parameters_manage_patron_categories ) %] +
Patron categories
+
Define patron categories.
+ [% END %] + [% IF CAN_user_parameters_manage_circ_rules %] +
Circulation and fines rules
+
Define circulation and fines rules for combinations of libraries, patron categories, and item types
+ [% END %] + [% IF ( CAN_user_parameters_manage_patron_attributes ) %] +
Patron attribute types
+
Define extended attributes (identifiers and statistical categories) for patron records
+ [% END %] + [% IF ( CAN_user_parameters_manage_transfers ) %] +
Library transfer limits
+
Limit the ability to transfer items between libraries based on the library sending, the library receiving, and the item type involved. These rules only go into effect if the preference UseBranchTransferLimits is set to ON.
+
Transport cost matrix
+
Define transport costs between branches
+ [% END %] + [% IF ( CAN_user_parameters_manage_item_circ_alerts ) %] +
Item circulation alerts
+
Define rules for check-in and checkout notifications for combinations of libraries, patron categories, and item types
+ [% END %] + [% IF ( CAN_user_parameters_manage_cities ) %] +
Cities and towns
+
Define cities and towns that your patrons live in.
+ [% END %]
[% END %] - [% IF ( Koha.Preference('UseCashRegisters') && CAN_user_cash_management_manage_cash_registers ) %] + [% IF ( CAN_user_parameters_manage_accounts || ( Koha.Preference('UseCashRegisters') && CAN_user_cash_management_manage_cash_registers ) ) %]

Accounting

- [% IF ( CAN_user_cash_management_manage_cash_registers ) %] -
Cash registers
-
Define cash registers
- [% END %] + [% IF ( CAN_user_parameters_manage_accounts ) %] +
Debit types
+
Define debit types.
+ [% END %] + [% IF ( Koha.Preference('UseCashRegisters') && CAN_user_cash_management_manage_cash_registers ) %] +
Cash registers
+
Define cash registers
+ [% END %]
[% END %] diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/admin/debit_types.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/debit_types.tt new file mode 100644 index 0000000000..5f8d3ac0f1 --- /dev/null +++ b/koha-tmpl/intranet-tmpl/prog/en/modules/admin/debit_types.tt @@ -0,0 +1,236 @@ +[% USE raw %] +[% USE Asset %] +[% USE Branches %] +[% USE Price %] +[% SET footerjs = 1 %] +[% INCLUDE 'doc-head-open.inc' %] +Koha › Administration › + [% IF op =='add_form' %] + Account types › + [% IF debit_type.code %] + Modify account [% type %] type + [% ELSE %] + New account [% type %] type + [% END %] + [% ELSE %] + [% IF op == 'delete_confirm' %] + Account types › Confirm deletion of account [% type %] type + [% ELSE %] + Account types + [% END %] + [% END %] + +[% INCLUDE 'doc-head-close.inc' %] + + + +[% INCLUDE 'header.inc' %] +[% INCLUDE 'prefs-admin-search.inc' %] + + + +
+
+
+
+ + [% FOREACH m IN messages %] +
+ [% SWITCH m.code %] + [% CASE 'error_on_saving' %] + An error occurred when saving this account type. + [% CASE 'error_on_delete' %] + An error occurred when deleting this account type. Check the logs. + [% CASE 'success_on_saving' %] + Account type saved successfully. + [% CASE 'success_on_delete' %] + Account type deleted successfully. + [% CASE %] + [% m.code %] + [% END %] +
+ [% END %] + + [% IF op == 'add_form' %] + [% IF debit_type %] +

Modify an account [% type %] type

+ [% ELSE %] +

New account [% type %] type

+ [% END %] + +
+ + +
+
    +
  1. + + [% IF debit_type %] + [% debit_type.code | html %] + + [% ELSE %] + Required. Maximum length is 16 letters + [% END %] +
  2. + [% IF type == 'debit' %] +
  3. + + +
  4. + [% END %] +
  5. + + Required +
  6. +
  7. + + [% IF debit_type.can_be_added_manually %] + + [% ELSE %] + + [% END %] +
  8. +
  9. + + + Select 'All libraries' if this debit type should be available at all libraries. Otherwise select libraries you want to associate debit type with. +
  10. +
+
+ +
+ + Cancel +
+
+ [% END %] + + [% IF op == 'delete_confirm' %] +
+

Delete account [% type | html %] type "[% debit_type.description | html %]?"

+ + + + + + + +
Account type code[% debit_type.code | html %]
Account type description[% debit_type.description | html %]
+
+ + + + +
+
+ +
+
+ [% END %] + + [% IF op == 'list' %] + + +

Account debit types

+ [% IF debit_types.count %] + + + + + + + + + + + [% FOREACH debit_type IN debit_types %] + + + + + + + + + [% END %] + +
Account type codeDescriptionDefault amountCan be added manuallyLibrary limitationsActions
[% debit_type.code | html %][% debit_type.description | html %][% debit_type.default_amount | $Price %][% IF debit_type.can_be_added_manually %]Yes[% ELSE %]No[% END %] + [% IF debit_type.library_limits.count > 0 %] + [% library_limits_str = "" %] + [% FOREACH library IN debit_type.library_limits %] + [%- IF loop.first -%] + [% library_limits_str = library.branchname _ " (" _ library.branchcode _ ")" %] + [% ELSE %] + [% library_limits_str = library_limits_str _ "\n" _ library.branchname _ " (" _ library.branchcode _ ")" %] + [% END %] + [% END %] + + [% IF debit_type.library_limits.count > 1 %] + [% debit_type.library_limits.count | html %] library limitations + [% ELSE %] + [% debit_type.library_limits.count | html %] library limitation + [% END %] + [% ELSE %] + No limitation + [% END %] + + [% IF !debit_type.is_system %] + Edit + Delete + [% END %] +
+ [% ELSE %] +
+ There are no account debit types defined. Create new debit type +
+ [% END %] + [% END %] +
+
+ +
+ +
+
+ +[% MACRO jsinclude BLOCK %] + [% Asset.js("js/admin-menu.js") | $raw %] + [% INCLUDE 'datatables.inc' %] + + +[% END %] + +[% INCLUDE 'intranet-bottom.inc' %] -- 2.20.1