Bugzilla – Attachment 94077 Details for
Bug 23049
Replace MANUAL_INV authorised value with a dedicated table
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Help
|
New Account
|
Log In
[x]
|
Forgot Password
Login:
[x]
[patch]
Bug 23049: Update maninvoice to reference debit types
Bug-23049-Update-maninvoice-to-reference-debit-typ.patch (text/plain), 20.16 KB, created by
Martin Renvoize (ashimema)
on 2019-10-14 10:34:34 UTC
(
hide
)
Description:
Bug 23049: Update maninvoice to reference debit types
Filename:
MIME Type:
Creator:
Martin Renvoize (ashimema)
Created:
2019-10-14 10:34:34 UTC
Size:
20.16 KB
patch
obsolete
>From ae36638a6f7a1327d986ae334a8910c64aa49f39 Mon Sep 17 00:00:00 2001 >From: Martin Renvoize <martin.renvoize@ptfs-europe.com> >Date: Thu, 10 Oct 2019 17:14:39 +0100 >Subject: [PATCH] Bug 23049: Update maninvoice to reference debit types >MIME-Version: 1.0 >Content-Type: text/plain; charset=UTF-8 >Content-Transfer-Encoding: 8bit > >Test plan: >1) Naviage to a patron record and select the accounts > manual invoice > tab >2) Add some manual invoices and confirm they are working as expected >3) Signoff > >Signed-off-by: Séverine QUEUNE <severine.queune@bulac.fr> >--- > Koha/Account/Line.pm | 14 ++ > admin/debit_types.pl | 5 +- > .../prog/en/includes/accounts.inc | 54 ++++--- > .../prog/en/modules/members/maninvoice.tt | 102 ++++++------ > members/maninvoice.pl | 153 ++++++++++-------- > 5 files changed, 187 insertions(+), 141 deletions(-) > >diff --git a/Koha/Account/Line.pm b/Koha/Account/Line.pm >index 124aa29153..1f70bb1312 100644 >--- a/Koha/Account/Line.pm >+++ b/Koha/Account/Line.pm >@@ -22,6 +22,7 @@ use Data::Dumper; > > use C4::Log qw(logaction); > >+use Koha::Account::DebitType; > use Koha::Account::Offsets; > use Koha::Database; > use Koha::Exceptions::Account; >@@ -82,6 +83,19 @@ sub checkout { > return $self->{_checkout}; > } > >+=head3 debit_type >+ >+Return the debit_type linked to this account line >+ >+=cut >+ >+sub debit_type { >+ my ( $self ) = @_; >+ my $rs = $self->_result->debit_type; >+ return unless $rs; >+ return Koha::Account::DebitType->_new_from_dbic( $rs ); >+} >+ > =head3 void > > $payment_accountline->void(); >diff --git a/admin/debit_types.pl b/admin/debit_types.pl >index a8336e69bb..56bd5fd286 100755 >--- a/admin/debit_types.pl >+++ b/admin/debit_types.pl >@@ -23,6 +23,7 @@ use C4::Context; > use C4::Auth; > use C4::Output; > >+use Koha::Account::DebitType; > use Koha::Account::DebitTypes; > > my $input = new CGI; >@@ -134,7 +135,9 @@ elsif ( $op eq 'delete_confirmed' ) { > > if ( $op eq 'list' ) { > my $debit_types = Koha::Account::DebitTypes->search(); >- $template->param( debit_types => $debit_types ); >+ $template->param( >+ debit_types => $debit_types, >+ ); > } > > $template->param( >diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/accounts.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/accounts.inc >index 61a31a2687..c863e98e22 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/includes/accounts.inc >+++ b/koha-tmpl/intranet-tmpl/prog/en/includes/accounts.inc >@@ -1,28 +1,36 @@ > [%- BLOCK account_type_description -%] >- [%- SWITCH account.accounttype -%] >- [%- CASE 'Pay' -%]<span>Payment >- [%- CASE 'N' -%]<span>New card >- [%- CASE 'OVERDUE' -%]<span>Fine >- [%- CASE 'ACCOUNT' -%]<span>Account creation fee >- [%- CASE 'ACCOUNT_RENEW' -%]<span>Account renewal fee >- [%- CASE 'M' -%]<span>Sundry >- [%- CASE 'LOST' -%]<span>Lost item >- [%- CASE 'W' -%]<span>Writeoff >- [%- CASE 'HE' -%]<span>Hold waiting too long >- [%- CASE 'RENT' -%]<span>Rental fee >- [%- CASE 'RENT_DAILY' -%]<span>Daily rental fee >- [%- CASE 'RENT_RENEW' -%]<span>Renewal of rental item >- [%- CASE 'RENT_DAILY_RENEW' -%]<span>Rewewal of daily rental item >- [%- CASE 'FOR' -%]<span>Forgiven >- [%- CASE 'PF' -%]<span>Lost item processing fee >- [%- CASE 'PAY' -%]<span>Payment >- [%- CASE 'WO' -%]<span>Writeoff >- [%- CASE 'C' -%]<span>Credit >- [%- CASE 'LOST_RETURN' -%]<span>Lost item fee refund >- [%- CASE 'Res' -%]<span>Hold fee >- [%- CASE -%]<span>[% account.accounttype | html %] >+ <span> >+ [%- IF account.accounttype -%] >+ [%- SWITCH account.accounttype -%] >+ [%- CASE 'Pay' -%]Payment >+ [%- CASE 'W' -%]Writeoff >+ [%- CASE 'FOR' -%]Forgiven >+ [%- CASE 'PAY' -%]Payment >+ [%- CASE 'WO' -%]Writeoff >+ [%- CASE 'C' -%]Credit >+ [%- CASE 'LOST_RETURN' -%]Lost item fee refund >+ [%- CASE -%][% account.accounttype | html %] >+ [%- END -%] >+ [%- ELSIF account.debit_type -%] >+ [%- SWITCH account.debit_type -%] >+ [%- CASE 'ACCOUNT' -%]Account creation fee >+ [%- CASE 'ACCOUNT_RENEW' -%]Account renewal fee >+ [%- CASE 'HE' -%]Hold waiting too long >+ [%- CASE 'LOST' -%]Lost item >+ [%- CASE 'M' -%]Sundry >+ [%- CASE 'N' -%]New card >+ [%- CASE 'OVERDUE' -%]Fine >+ [%- CASE 'PF' -%]Lost item processing fee >+ [%- CASE 'RENT' -%]Rental fee >+ [%- CASE 'RENT_DAILY' -%]Daily rental fee >+ [%- CASE 'RENT_RENEW' -%]Renewal of rental item >+ [%- CASE 'RENT_DAILY_RENEW' -%]Rewewal of daily rental item >+ [%- CASE 'Res' -%]Hold fee >+ [%- CASE -%][% account.debit_type.description | html %] >+ [%- END -%] > [%- END -%] >- [%- PROCESS account_status_description account=account -%]</span> >+ [%- PROCESS account_status_description account=account -%] >+ </span> > [%- END -%] > > [%- BLOCK offset_type_description -%] >diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt b/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt >index 2dcb452029..9713cfc27f 100644 >--- a/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt >+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt >@@ -1,6 +1,7 @@ > [% USE raw %] > [% USE Asset %] > [% USE Koha %] >+[% USE Price %] > [% USE Branches %] > [% SET footerjs = 1 %] > [% INCLUDE 'doc-head-open.inc' %] >@@ -12,58 +13,61 @@ > [% 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 invoice</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 invoice >+</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 class="active"><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual invoice</a></li> >- <li><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 class="active"><a href="/cgi-bin/koha/members/maninvoice.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual invoice</a></li> >+ <li><a href="/cgi-bin/koha/members/mancredit.pl?borrowernumber=[% patron.borrowernumber | uri %]" >Create manual credit</a></li> >+ </ul> >+ <div class="tabs-container"> > >-[% IF ( ERROR ) %] >-[% IF ( ITEMNUMBER ) %] >- ERROR an invalid itemnumber was entered, please hit back and try again >-[% END %] >-[% ELSE %] >-<form action="/cgi-bin/koha/members/maninvoice.pl" method="post" id="maninvoice"><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 invoice</legend> >- <ol> >- <li> >- <label for="type">Type: </label> >- <select name="type" id="invoice_type"> >- <option value="LOST">Lost item</option> >- <option value="F">Fine</option> >- <option value="A">Account management fee</option> >- <option value="N">New card</option> >- <option value="M">Sundry</option> >- [% FOREACH invoice_types_loo IN invoice_types_loop %] >- <option value="[% invoice_types_loo.authorised_value | html %]">[% invoice_types_loo.authorised_value | 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" id="desc" size="50" /></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="Save" /> <a class="cancel" href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | html %]">Cancel</a></fieldset> >-</form> >+ [% IF ( ERROR ) %] >+ [% IF ( ITEMNUMBER ) %] >+ ERROR an invalid itemnumber was entered, please hit back and try again >+ [% END %] >+ [% ELSE %] >+ <form action="/cgi-bin/koha/members/maninvoice.pl" method="post" id="maninvoice"><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 invoice</legend> >+ <ol> >+ <li> >+ <label for="type">Type: </label> >+ <select name="type" id="type"> >+ [% FOREACH debit_type IN debit_types %] >+ <option value="[% debit_type.code | html %]">[% debit_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" id="desc" size="50" /></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="Save" /> <a class="cancel" href="/cgi-bin/koha/members/boraccount.pl?borrowernumber=[% patron.borrowernumber | html %]">Cancel</a> >+ </fieldset> >+ </form> > >-[% END %] >-</div></div> >+ [% END %] >+ </div> >+ </div> > > </main> > </div> <!-- /.col-sm-10.col-sm-push-2 --> >@@ -79,9 +83,9 @@ > [% INCLUDE 'str/members-menu.inc' %] > [% Asset.js("js/members-menu.js") | $raw %] > <script> >- var type_fees = {'LOST':'','OVERDUE':'','ACCOUNT':'','ACCOUNT_RENEW':'','N':'','M':''}; >- [% FOREACH invoice_types_loo IN invoice_types_loop %] >- type_fees['[% invoice_types_loo.authorised_value | html %]'] = "[% invoice_types_loo.lib | html %]"; >+ var type_fees = {}; >+ [% FOREACH debit_type IN debit_types %] >+ type_fees['[% debit_type.code | html %]'] = "[% debit_type.default_amount | $Price %]"; > [% END %] > $(document).ready(function(){ > $('#maninvoice').preventDoubleFormSubmit(); >@@ -90,6 +94,12 @@ > this.form.desc.value = this.options[this.selectedIndex].value; > this.form.amount.value = type_fees[this.options[this.selectedIndex].value]; > }); >+ $("#maninvoice #desc").val($("#maninvoice #type option:selected").text()); >+ $("#maninvoice #amount").val(type_fees[$("#maninvoice #type option:selected").val()]); >+ $("#maninvoice #type").change(function(){ >+ $("#maninvoice #desc").val($(this).find("option:selected").text()); >+ $("#maninvoice #amount").val(type_fees[$(this).val()]); >+ }); > }); > </script> > [% END %] >diff --git a/members/maninvoice.pl b/members/maninvoice.pl >index 76d224b7bc..3642cd39be 100755 >--- a/members/maninvoice.pl >+++ b/members/maninvoice.pl >@@ -3,9 +3,9 @@ > #written 11/1/2000 by chris@katipo.oc.nz > #script to display borrowers account details > >- > # Copyright 2000-2002 Katipo Communications > # Copyright 2010 BibLibre >+# Copyright 2019 PTFS Europe > # > # This file is part of Koha. > # >@@ -36,94 +36,105 @@ use Koha::Items; > use Koha::Patrons; > > use Koha::Patron::Categories; >+use Koha::Account::DebitTypes; > >-my $input=new CGI; >-my $flagsrequired = { borrowers => 'edit_borrowers' }; >+my $input = new CGI; > my ( $template, $loggedinuser, $cookie ) = get_template_and_user( >- { template_name => "members/maninvoice.tt", >+ { >+ template_name => "members/maninvoice.tt", > query => $input, > type => "intranet", > authnotrequired => 0, >- flagsrequired => $flagsrequired, >- debug => 1, >+ flagsrequired => { >+ borrowers => 'edit_borrowers', >+ updatecharges => 'remaining_permissions' >+ } > } > ); > >-my $borrowernumber=$input->param('borrowernumber'); >- >-my $patron = Koha::Patrons->find( $borrowernumber ); >-unless ( $patron ) { >- print $input->redirect("/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber"); >+my $borrowernumber = $input->param('borrowernumber'); >+my $patron = Koha::Patrons->find($borrowernumber); >+unless ($patron) { >+ print $input->redirect( >+ "/cgi-bin/koha/circ/circulation.pl?borrowernumber=$borrowernumber"); > exit; > } > >-my $add=$input->param('add'); >-if ($add){ >- if ( checkauth( $input, 0, $flagsrequired, 'intranet' ) ) { >- output_and_exit( $input, $cookie, $template, 'wrong_csrf_token' ) >- unless Koha::Token->new->check_csrf( { >- session_id => scalar $input->cookie('CGISESSID'), >- 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 >- my $barcode=$input->param('barcode'); >- my $itemnum; >- if ($barcode) { >- my $item = Koha::Items->find({barcode => $barcode}); >- $itemnum = $item->itemnumber if $item; >- } >- my $desc=$input->param('desc'); >- my $amount=$input->param('amount'); >- my $type=$input->param('type'); >- my $note = $input->param('note'); >- my $error = C4::Accounts::manualinvoice( $borrowernumber, $itemnum, $desc, $type, $amount, $note ); >- if ($error) { >- if ( $error =~ /FOREIGN KEY/ && $error =~ /itemnumber/ ) { >- $template->param( 'ITEMNUMBER' => 1 ); >- } >- $template->param( csrf_token => Koha::Token->new->generate_csrf({ session_id => scalar $input->cookie('CGISESSID') }) ); >- $template->param( 'ERROR' => $error ); >- output_html_with_http_headers $input, $cookie, $template->output; >- } else { >+my $library_id = C4::Context->userenv->{'branch'}; > >- if ( C4::Context->preference('AccountAutoReconcile') ) { >- $patron->account->reconcile_balance; >- } >- >- print $input->redirect("/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber"); >- exit; >+my $add = $input->param('add'); >+if ($add) { >+ output_and_exit( $input, $cookie, $template, 'wrong_csrf_token' ) >+ unless Koha::Token->new->check_csrf( >+ { >+ session_id => scalar $input->cookie('CGISESSID'), >+ 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 >+ my $barcode = $input->param('barcode'); >+ my $itemnum; >+ if ($barcode) { >+ my $item = Koha::Items->find( { barcode => $barcode } ); >+ $itemnum = $item->itemnumber if $item; > } >-} else { >- >- my ($template, $loggedinuser, $cookie) = get_template_and_user({ >- template_name => "members/maninvoice.tt", >- query => $input, >- type => "intranet", >- authnotrequired => 0, >- flagsrequired => { borrowers => 'edit_borrowers', >- updatecharges => 'remaining_permissions' }, >- debug => 1, >- }); >+ my $desc = $input->param('desc'); >+ my $amount = $input->param('amount'); >+ my $type = $input->param('type'); >+ my $note = $input->param('note'); >+ my $error = >+ C4::Accounts::manualinvoice( $borrowernumber, $itemnum, $desc, $type, >+ $amount, $note ); >+ if ($error) { >+ if ( $error =~ /FOREIGN KEY/ && $error =~ /itemnumber/ ) { >+ $template->param( 'ITEMNUMBER' => 1 ); >+ } >+ $template->param( >+ csrf_token => Koha::Token->new->generate_csrf( >+ { session_id => scalar $input->cookie('CGISESSID') } >+ ) >+ ); >+ $template->param( 'ERROR' => $error ); >+ output_html_with_http_headers $input, $cookie, $template->output; >+ } >+ else { > >- my $logged_in_user = Koha::Patrons->find( $loggedinuser ) or die "Not logged in"; >- output_and_exit_if_error( $input, $cookie, $template, { module => 'members', logged_in_user => $logged_in_user, current_patron => $patron } ); >+ if ( C4::Context->preference('AccountAutoReconcile') ) { >+ $patron->account->reconcile_balance; >+ } > >- # get authorised values with type of MANUAL_INV >- my @invoice_types; >- my $dbh = C4::Context->dbh; >- my $sth = $dbh->prepare('SELECT * FROM authorised_values WHERE category = "MANUAL_INV"'); >- $sth->execute(); >- while ( my $row = $sth->fetchrow_hashref() ) { >- push @invoice_types, $row; >- } >- $template->param( invoice_types_loop => \@invoice_types ); >+ print $input->redirect( >+ "/cgi-bin/koha/members/boraccount.pl?borrowernumber=$borrowernumber" >+ ); >+ exit; >+ } >+} >+else { >+ >+ my $logged_in_user = Koha::Patrons->find($loggedinuser) >+ or die "Not logged in"; >+ output_and_exit_if_error( >+ $input, $cookie, >+ $template, >+ { >+ module => 'members', >+ logged_in_user => $logged_in_user, >+ current_patron => $patron >+ } >+ ); > >+ my @debit_types = Koha::Account::DebitTypes->search_with_library_limits( >+ { can_be_added_manually => 1 }, >+ {}, $library_id ); >+ $template->param( debit_types => \@debit_types ); > $template->param( >- csrf_token => Koha::Token->new->generate_csrf({ session_id => scalar $input->cookie('CGISESSID') }), >- patron => $patron, >- finesview => 1, >+ csrf_token => Koha::Token->new->generate_csrf( >+ { session_id => scalar $input->cookie('CGISESSID') } >+ ), >+ patron => $patron, >+ finesview => 1, > ); > output_html_with_http_headers $input, $cookie, $template->output; > } >-- >2.20.1
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
|
Splinter Review
Attachments on
bug 23049
:
93513
|
93514
|
93515
|
93516
|
93518
|
93519
|
93520
|
93521
|
93522
|
93523
|
93529
|
93557
|
93564
|
93565
|
93567
|
93568
|
93569
|
93570
|
93571
|
93572
|
93573
|
93574
|
93575
|
93576
|
93577
|
93578
|
93579
|
93960
|
93961
|
93962
|
93963
|
93964
|
93965
|
93966
|
93967
|
93968
|
93969
|
93970
|
93972
|
93973
|
93974
|
93975
|
93976
|
93977
|
93978
|
93979
|
93989
|
93990
|
93991
|
93992
|
93993
|
93994
|
93995
|
93996
|
93997
|
93998
|
93999
|
94000
|
94001
|
94002
|
94003
|
94004
|
94005
|
94006
|
94007
|
94008
|
94073
|
94074
|
94075
|
94076
|
94077
|
94078
|
94079
|
94080
|
94081
|
94082
|
94083
|
94084
|
94085
|
94086
|
94087
|
94088
|
94089
|
94090
|
94091
|
94092
|
94093
|
94111
|
94112
|
94113
|
94114
|
94115
|
94116
|
94117
|
94118
|
94119
|
94120
|
94121
|
94122
|
94123
|
94124
|
94125
|
94126
|
94127
|
94128
|
94129
|
94130
|
94131
|
94132
|
94133
|
94134
|
94135
|
94136
|
94137
|
94138
|
94139
|
94140
|
94141
|
94142
|
94143
|
94144
|
94145
|
94146
|
94147
|
94148
|
94149
|
94150
|
94151
|
94152
|
94165
|
94307
|
94308
|
94309
|
94310
|
94311
|
94312
|
94313
|
94314
|
94315
|
94316
|
94317
|
94318
|
94319
|
94320
|
94321
|
94323
|
94324
|
94325
|
94326
|
94327
|
94328
|
94329
|
94331
|
94332
|
94333
|
94334
|
94335
|
94336
|
94337
|
94338
|
94339
|
94340
|
94341
|
94342
|
94343
|
94344
|
94345
|
94346
|
94347
|
94348
|
94349
|
94350
|
94351
|
94352
|
94648