@@ -, +, @@ --- Koha/Account/CreditType.pm | 74 ++++++++++++++++ Koha/Account/CreditTypes.pm | 71 +++++++++++++++ Koha/Schema/Result/AccountCreditType.pm | 11 ++- .../prog/en/modules/members/mancredit.tt | 87 ++++++++++-------- members/mancredit.pl | 88 ++++++++++++------- 5 files changed, 258 insertions(+), 73 deletions(-) create mode 100644 Koha/Account/CreditType.pm create mode 100644 Koha/Account/CreditTypes.pm --- a/Koha/Account/CreditType.pm +++ a/Koha/Account/CreditType.pm @@ -0,0 +1,74 @@ +package Koha::Account::CreditType; + +# Copyright PTFS Europe 2019 +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; +use List::Util qw/any/; + +use Koha::Database; +use Koha::Exceptions; + +use base qw(Koha::Object Koha::Object::Limit::Library); + +=head1 NAME + +Koha::Account::CreditType - Koha Account credit type Object class + +=head1 API + +=head2 Class Methods + +=cut + +=head3 delete + +Overridden delete method to prevent system default deletions + +=cut + +sub delete { + my ($self) = @_; + + Koha::Exceptions::CannotDeleteDefault->throw if $self->is_system; + + return $self->SUPER::delete; +} + +=head3 _library_limits + +Configurable library limits + +=cut + +sub _library_limits { + return { + class => "AccountCreditTypesBranch", + id => "credit_type_code", + library => "branchcode", + }; +} + +=head3 type + +=cut + +sub _type { + return 'AccountCreditType'; +} + +1; --- a/Koha/Account/CreditTypes.pm +++ a/Koha/Account/CreditTypes.pm @@ -0,0 +1,71 @@ +package Koha::Account::CreditTypes; + +# Copyright PTFS Europe 2019 +# +# 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, write to the Free Software Foundation, Inc., +# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + +use Modern::Perl; +use List::Util qw/any/; + +use Koha::Database; +use Koha::Account::CreditType; + +use base qw(Koha::Objects Koha::Objects::Limit::Library); + +=head1 NAME + +Koha::Account::CreditTypes - Koha Account credit types Object set class + +=head1 API + +=head2 Class Methods + +=head3 delete + +Overridden delete method to prevent system default deletions + +=cut + +sub delete { + my ($self) = @_; + + my @set = $self->as_list; + for my $type (@set) { + if ( $type->is_system ) { + Koha::Exceptions::CannotDeleteDefault->throw; + } + } + + return $self->SUPER::delete; +} + +=head3 type + +=cut + +sub _type { + return 'AccountCreditType'; +} + +=head3 object_class + +=cut + +sub object_class { + return 'Koha::Account::CreditType'; +} + +1; --- a/Koha/Schema/Result/AccountCreditType.pm +++ a/Koha/Schema/Result/AccountCreditType.pm @@ -108,6 +108,15 @@ __PACKAGE__->has_many( # Created by DBIx::Class::Schema::Loader v0.07046 @ 2019-10-14 09:59:52 # DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:Uycu/23b681kWHNX+/gNiw +__PACKAGE__->add_columns( + '+is_system' => { is_boolean => 1 } +); + +sub koha_objects_class { + 'Koha::Account::CreditTypes'; +} +sub koha_object_class { + 'Koha::Account::CreditType'; +} -# You can replace this text with custom code or comments, and it will be preserved on regeneration 1; --- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/mancredit.tt +++ a/koha-tmpl/intranet-tmpl/prog/en/modules/members/mancredit.tt @@ -12,56 +12,67 @@ [% INCLUDE 'header.inc' %] [% INCLUDE 'patron-search.inc' %] - +
-[% INCLUDE 'members-toolbar.inc' %] - - -
- -
- -
- - - -
-Manual credit
    -
  1. -
  2. -
  3. -
  4. -
  5. Example: 5.00
  6. -
- -
Cancel
-
- -
- + [% INCLUDE 'members-toolbar.inc' %] + + +
+ +
+ +
+ + + +
+ Manual credit +
    +
  1. + + +
  2. +
  3. +
  4. +
  5. +
  6. Example: 5.00
  7. +
+
+ +
Cancel
+
+ +
+
+
- +
-
- +
+ [% MACRO jsinclude BLOCK %] [% INCLUDE 'str/members-menu.inc' %] [% Asset.js("js/members-menu.js") | $raw %] @@ -72,5 +83,5 @@ }); [% END %] - + [% INCLUDE 'intranet-bottom.inc' %] --- a/members/mancredit.pl +++ a/members/mancredit.pl @@ -3,7 +3,6 @@ #written 11/1/2000 by chris@katipo.oc.nz #script to display borrowers account details - # Copyright 2000-2002 Katipo Communications # Copyright 2010 BibLibre # @@ -35,18 +34,21 @@ use C4::Items; use Koha::Items; use Koha::Patrons; use Koha::Patron::Categories; -use Koha::Token; +use Koha::Account::CreditTypes; -my $input=new CGI; +use Koha::Token; -my ($template, $loggedinuser, $cookie) = get_template_and_user( +my $input = new CGI; +my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { template_name => "members/mancredit.tt", query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => { borrowers => 'edit_borrowers', - updatecharges => 'remaining_permissions' } + flagsrequired => { + borrowers => 'edit_borrowers', + updatecharges => 'remaining_permissions' + } } ); @@ -54,25 +56,35 @@ my $logged_in_user = Koha::Patrons->find($loggedinuser) or die "Not logged in"; my $borrowernumber = $input->param('borrowernumber'); my $patron = Koha::Patrons->find($borrowernumber); -output_and_exit_if_error( $input, $cookie, $template, - { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } ); - -my $add = $input->param('add'); +output_and_exit_if_error( + $input, $cookie, + $template, + { + module => 'members', + logged_in_user => $logged_in_user, + current_patron => $patron + } +); -if ($add){ +my $library_id = + C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef; +my $add = $input->param('add'); +if ($add) { output_and_exit( $input, $cookie, $template, 'wrong_csrf_token' ) - unless Koha::Token->new->check_csrf( { + unless Koha::Token->new->check_csrf( + { session_id => scalar $input->cookie('CGISESSID'), - token => scalar $input->param('csrf_token'), - }); + token => scalar $input->param('csrf_token'), + } + ); - # Note: If the logged in user is not allowed to see this patron an invoice can be forced - # Here we are trusting librarians not to hack the system +# Note: If the logged in user is not allowed to see this patron an invoice can be forced +# Here we are trusting librarians not to hack the system my $barcode = $input->param('barcode'); my $item_id; if ($barcode) { - my $item = Koha::Items->find({barcode => $barcode}); + my $item = Koha::Items->find( { barcode => $barcode } ); $item_id = $item->itemnumber if $item; } my $description = $input->param('desc'); @@ -80,30 +92,38 @@ if ($add){ my $amount = $input->param('amount') || 0; my $type = $input->param('type'); - my $library_id = C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef; - - $patron->account->add_credit({ - amount => $amount, - description => $description, - item_id => $item_id, - library_id => $library_id, - note => $note, - type => $type, - user_id => $logged_in_user->id, - interface => C4::Context->interface - }); + $patron->account->add_credit( + { + amount => $amount, + description => $description, + item_id => $item_id, + library_id => $library_id, + note => $note, + type => $type, + user_id => $logged_in_user->id, + interface => C4::Context->interface + } + ); if ( C4::Context->preference('AccountAutoReconcile') ) { $patron->account->reconcile_balance; } - print $input->redirect("/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber"); + print $input->redirect( + "/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber"); + exit; +} +else { + + my @credit_types = Koha::Account::CreditTypes->search_with_library_limits( + { can_be_added_manually => 1 }, + {}, $library_id ); -} else { $template->param( - patron => $patron, - finesview => 1, - csrf_token => Koha::Token->new->generate_csrf( + patron => $patron, + credit_types => \@credit_types, + finesview => 1, + csrf_token => Koha::Token->new->generate_csrf( { session_id => scalar $input->cookie('CGISESSID') } ), ); --