Bug 23805: Update mancredit to use the new credit types
Test plan Ensure the manual credit page continues to work as it did before this patchset. Signed-off-by: Kyle Hall <kyle@bywatersolutions.com> Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
This commit is contained in:
parent
66bdfbc0a3
commit
12568a20db
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -12,45 +12,56 @@
|
|||
[% 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 -->
|
||||
|
|
@ -60,7 +71,7 @@
|
|||
[% 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' %]
|
||||
|
|
|
|||
|
|
@ -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::Account::CreditTypes;
|
||||
|
||||
use Koha::Token;
|
||||
|
||||
my $input=new CGI;
|
||||
|
||||
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 } );
|
||||
output_and_exit_if_error(
|
||||
$input, $cookie,
|
||||
$template,
|
||||
{
|
||||
module => 'members',
|
||||
logged_in_user => $logged_in_user,
|
||||
current_patron => $patron
|
||||
}
|
||||
);
|
||||
|
||||
my $library_id =
|
||||
C4::Context->userenv ? C4::Context->userenv->{'branch'} : undef;
|
||||
|
||||
my $add = $input->param('add');
|
||||
|
||||
if ($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') }
|
||||
),
|
||||
);
|
||||
|
|
|
|||
Loading…
Reference in New Issue