--- /dev/null
+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;
--- /dev/null
+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;
# 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;
[% INCLUDE 'header.inc' %]
[% INCLUDE 'patron-search.inc' %]
-<div id="breadcrumbs"><a href="/cgi-bin/koha/mainpage.pl">Home</a> › <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a> › Manual credit</div>
+<div id="breadcrumbs">
+ <a href="/cgi-bin/koha/mainpage.pl">Home</a> ›
+ <a href="/cgi-bin/koha/members/members-home.pl">Patrons</a> ›
+ Manual credit
+</div>
<div class="main container-fluid">
<div class="row">
<div class="col-sm-10 col-sm-push-2">
<main>
-[% INCLUDE 'members-toolbar.inc' %]
+ [% INCLUDE 'members-toolbar.inc' %]
-<!-- The manual invoice and credit buttons -->
-<div class="statictabs">
-<ul>
- <li><a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | uri %]">Transactions</a></li>
- <li><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Make a payment</a></li>
- <li><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual invoice</a></li>
- <li class="active"><a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual credit</a></li>
-</ul>
-<div class="tabs-container">
+ <!-- The manual invoice and credit buttons -->
+ <div class="statictabs">
+ <ul>
+ <li><a href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | uri %]">Transactions</a></li>
+ <li><a href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Make a payment</a></li>
+ <li><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual invoice</a></li>
+ <li class="active"><a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual credit</a></li>
+ </ul>
+ <div class="tabs-container">
-<form action="/cgi-bin/koha/members/mancredit.pl" method="post" id="mancredit">
-<input type="hidden" name="borrowernumber" id="borrowernumber" value="[% patron.borrowernumber | html %]" />
- <input type="hidden" name="csrf_token" value="[% csrf_token | html %]" />
+ <form action="/cgi-bin/koha/members/mancredit.pl" method="post" id="mancredit">
+ <input type="hidden" name="borrowernumber" id="borrowernumber" value="[% patron.borrowernumber | html %]" />
+ <input type="hidden" name="csrf_token" value="[% csrf_token | html %]" />
-<fieldset class="rows">
-<legend>Manual credit</legend><ol>
- <li><label for="type">Credit type: </label><select name="type" id="type">
-<option value="credit">Credit</option>
-<option value="forgiven">Forgiven</option>
-</select></li>
- <li><label for="barcode">Barcode: </label><input type="text" name="barcode" id="barcode" /></li>
- <li><label for="desc">Description: </label><input type="text" name="desc" size="50" id="desc" /></li>
- <li><label for="note">Note: </label><input type="text" name="note" size="50" id="note" /></li>
- <li><label for="amount">Amount: </label><input type="number" name="amount" id="amount" required="required" value="" step="any" min="0" /> Example: 5.00</li>
-</ol></fieldset>
+ <fieldset class="rows">
+ <legend>Manual credit</legend>
+ <ol>
+ <li>
+ <label for="type">Credit type: </label>
+ <select name="type" id="type">
+ [% FOREACH credit_type IN credit_types %]
+ <option value="[% credit_type.code | html %]">[% credit_type.description | html %]</option>
+ [% END %]
+ </select>
+ </li>
+ <li><label for="barcode">Barcode: </label><input type="text" name="barcode" id="barcode" /></li>
+ <li><label for="desc">Description: </label><input type="text" name="desc" size="50" id="desc" /></li>
+ <li><label for="note">Note: </label><input type="text" name="note" size="50" id="note" /></li>
+ <li><label for="amount">Amount: </label><input type="number" name="amount" id="amount" required="required" value="" step="any" min="0" /> Example: 5.00</li>
+ </ol>
+ </fieldset>
-<fieldset class="action"><input type="submit" name="add" value="Add credit" /> <a class="cancel" href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | html %]">Cancel</a></fieldset>
-</form>
+ <fieldset class="action"><input type="submit" name="add" value="Add credit" /> <a class="cancel" href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | html %]">Cancel</a></fieldset>
+ </form>
-</div></div>
+ </div>
+ </div>
</main>
</div> <!-- /.col-sm-10.col-sm-push-2 -->
[% INCLUDE 'circ-menu.inc' %]
</aside>
</div> <!-- /.col-sm-2.col-sm-pull-10 -->
- </div> <!-- /.row -->
+ </div> <!-- /.row -->
[% MACRO jsinclude BLOCK %]
[% INCLUDE 'str/members-menu.inc' %]
#written 11/1/2000 by chris@katipo.oc.nz
#script to display borrowers account details
-
# Copyright 2000-2002 Katipo Communications
# Copyright 2010 BibLibre
#
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'
+ }
}
);
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');
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') }
),
);