Browse Source

Bug 31254: Add additional fields for accountlines

Test plan:
1. Go to Admin » Additional fields
   There are two new categories: "Account lines (credit)" and
   "Account lines (debit)"
2. Create fields for both categories, with and without an authorized
   value category
3. Go to a user's accounting page
4. Create a manual invoice. Verify that all "debit" fields are there,
   put a value in them and save
5. Create a manual credit. Verify that all "credit" fields are there,
   put a value in them and save
6. Make a payment. Verify that all "credit" fields are there, put a
   value in them and save
7. Go to the transactions tab, click on the "Details" button for the
   lines you just created and verify that the additional fields are
   there

Signed-off-by: Emmanuel Bétemps <e.betemps@gmail.com>

Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
22.11.x
Julian Maurice 3 years ago
committed by Tomas Cohen Arazi
parent
commit
63f88a5742
Signed by: tomascohen GPG Key ID: 0A272EA1B2F3C15F
  1. 2
      Koha/Account/Line.pm
  2. 16
      Koha/Schema/Result/Accountline.pm
  3. 2
      koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc
  4. 40
      koha-tmpl/intranet-tmpl/prog/en/modules/admin/additional-fields.tt
  5. 14
      koha-tmpl/intranet-tmpl/prog/en/modules/members/accountline-details.tt
  6. 4
      koha-tmpl/intranet-tmpl/prog/en/modules/members/mancredit.tt
  7. 5
      koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt
  8. 14
      koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt
  9. 19
      members/mancredit.pl
  10. 17
      members/maninvoice.pl
  11. 36
      members/paycollect.pl

2
Koha/Account/Line.pm

@ -30,7 +30,7 @@ use Koha::DateUtils qw( dt_from_string );
use Koha::Exceptions::Account;
use Koha::Items;
use base qw(Koha::Object);
use base qw(Koha::Object Koha::Object::Mixin::AdditionalFields);
=encoding utf8

16
Koha/Schema/Result/Accountline.pm

@ -419,6 +419,22 @@ __PACKAGE__->belongs_to(
},
);
__PACKAGE__->has_many(
"additional_field_values",
"Koha::Schema::Result::AdditionalFieldValue",
sub {
my ($args) = @_;
return {
"$args->{foreign_alias}.record_id" => { -ident => "$args->{self_alias}.accountlines_id" },
"$args->{foreign_alias}.field_id" =>
{ -in => \'(SELECT id FROM additional_fields WHERE tablename LIKE "accountlines:%")' },
};
},
{ cascade_copy => 0, cascade_delete => 0 },
);
sub koha_objects_class {
'Koha::Account::Lines';
}

2
koha-tmpl/intranet-tmpl/prog/en/includes/additional-fields-entry.inc

@ -9,7 +9,7 @@
<label for="additional_field_[% field.id | html %]"> [% field.name | html %]: </label>
[% IF field.authorised_value_category %]
<select name="additional_field_[% field.id | html %]" id="additional_field_[% field.id | html %]">
<option value="">All</option>
<option value=""></option>
[% FOREACH av IN AuthorisedValues.GetAuthValueDropbox( field.authorised_value_category ) %]
[% IF av.authorised_value == values.${field.id} %]
<option value="[% av.authorised_value | html %]" selected="selected">[% av.lib | html %]</option>

40
koha-tmpl/intranet-tmpl/prog/en/modules/admin/additional-fields.tt

@ -12,7 +12,9 @@
</head>
[% marcfield_tables = ['subscription'] %]
[% searchable_tables = ['subscription', 'aqbasket'] %]
[% show_marcfield = marcfield_tables.grep('^' _ tablename _ '$').size ? 1 : 0 %]
[% show_searchable = searchable_tables.grep('^' _ tablename _ '$').size ? 1 : 0 %]
<body id="ser_add_fields" class="ser">
[% INCLUDE 'header.inc' %]
@ -102,7 +104,7 @@
[% END %]
[% IF op == 'list_tables' %]
[% IF CAN_user_acquisitions_order_manage || CAN_user_serials_edit_subscription %]
[% IF CAN_user_acquisitions_order_manage || CAN_user_serials_edit_subscription || CAN_user_updatecharges_remaining_permissions %]
<h1>Additional fields</h1>
<p>Select a table:</p>
[% BLOCK table_option %]
@ -115,9 +117,13 @@
[% IF CAN_user_serials_edit_subscription %]
[% WRAPPER table_option value="subscription" %]<span>Subscriptions</span>[% END %]
[% END %]
[% IF CAN_user_updatecharges_remaining_permissions %]
[% WRAPPER table_option value="accountlines:credit" %]Account lines (credit)[% END %]
[% WRAPPER table_option value="accountlines:debit" %]Account lines (debit)[% END %]
[% END %]
</ul>
[% ELSE %]
Additional permissions in the acquisitions or serials modules are required for editing additional fields
Additional permissions are required for editing additional fields
[% END %]
[% ELSIF op == 'list' %]
<h1>Additional fields for '[% tablename | html %]'</h1>
@ -130,7 +136,9 @@
[% IF show_marcfield %]
<th>MARC field</th>
[% END %]
<th>Searchable</th>
[% IF show_searchable %]
<th>Searchable</th>
[% END %]
<th class="noExport">Actions</th>
</tr>
</thead>
@ -142,9 +150,11 @@
[% IF show_marcfield %]
<td>[% field.marcfield | html %]</td>
[% END %]
<td>
[% IF field.searchable %]Yes[% ELSE %]No[% END %]
</td>
[% IF show_searchable %]
<td>
[% IF field.searchable %]Yes[% ELSE %]No[% END %]
</td>
[% END %]
<td class="actions">
<a class="btn btn-default btn-xs" href="?op=add_form&amp;field_id=[% field.id | html %]"><i class="fa fa-pencil"></i> Edit</a>
<a class="confirmdelete btn btn-default btn-xs" href="?op=delete&amp;field_id=[% field.id | uri %]&amp;tablename=[% tablename | uri %]"><i class="fa fa-trash"></i> Delete</a>
@ -183,14 +193,16 @@
<input type="text" name="marcfield" id="marcfield" value="[% field.marcfield | html %]" />
</li>
[% END %]
<li>
<label for="searchable">Searchable: </label>
[% IF field.searchable %]
<input type="checkbox" name="searchable" id="searchable" checked="checked" />
[% ELSE %]
<input type="checkbox" name="searchable" id="searchable" />
[% END %]
</li>
[% IF show_searchable %]
<li>
<label for="searchable">Searchable: </label>
[% IF field.searchable %]
<input type="checkbox" name="searchable" id="searchable" checked="checked" />
[% ELSE %]
<input type="checkbox" name="searchable" id="searchable" />
[% END %]
</li>
[% END %]
</ol>
</fieldset>
<fieldset class="action">

14
koha-tmpl/intranet-tmpl/prog/en/modules/members/accountline-details.tt

@ -71,6 +71,7 @@
[% INCLUDE 'members-toolbar.inc' borrowernumber=patron.borrowernumber %]
[% IF accountline %]
[% af_values = accountline.additional_field_values %]
[% IF accountline.credit_type_code %]
<h2>Details of credit</h2>
[% ELSIF accountline.debit_type_code %]
@ -86,6 +87,9 @@
<th>Due date</th>
<th>Return date</th>
<th>Note</th>
[% FOREACH value IN af_values %]
<th>[% value.field.name | html %]</th>
[% END %]
<th>Amount</th>
<th>Outstanding</th>
</tr>
@ -134,6 +138,16 @@
[% accountline.note | html_line_break %]
</td>
[% FOREACH value IN af_values %]
<td>
[% IF value.field.authorised_value_category %]
[% AuthorisedValues.GetByCode( value.field.authorised_value_category, value.value ) | html %]
[% ELSE %]
[% value.value | html %]
[% END %]
</td>
[% END %]
<td>
[% accountline.amount | $Price %]
</td>

4
koha-tmpl/intranet-tmpl/prog/en/modules/members/mancredit.tt

@ -74,6 +74,10 @@
</ol>
</fieldset>
[% IF available_additional_fields %]
[% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values %]
[% END %]
<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>

5
koha-tmpl/intranet-tmpl/prog/en/modules/members/maninvoice.tt

@ -87,6 +87,11 @@
<li><label for="amount">Amount: </label><input type="text" inputmode="decimal" pattern="^\d+(\.\d{2})?$" name="amount" id="amount" required="required" min="0" value="[% amount | $Price on_editing => 1 %]" /> Example: 5.00</li>
</ol>
</fieldset>
[% IF available_additional_fields %]
[% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values %]
[% END %]
<fieldset class="action">
<button type="submit" name="add" value="save">Save</button>
<button type="submit" name="add" value="save and pay">Save and pay</button>

14
koha-tmpl/intranet-tmpl/prog/en/modules/members/paycollect.tt

@ -211,6 +211,10 @@
</ol>
</fieldset>
[% IF available_additional_fields %]
[% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values %]
[% END %]
<div class="action">
<input type="submit" name="submitbutton" value="Confirm" />
<a class="cancel" href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber | html %]">Cancel</a>
@ -263,6 +267,11 @@
</li>
</ol>
</fieldset>
[% IF available_additional_fields %]
[% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values %]
[% END %]
<div class="action">
<input type="submit" value="Write off this charge" />
<a class="cancel" href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber | html %]">Cancel</a>
@ -346,6 +355,11 @@
</li>
</ol>
</fieldset>
[% IF available_additional_fields %]
[% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values %]
[% END %]
<div class="action">
<input type="submit" name="submitbutton" value="Confirm" />
<a class="cancel" href="/cgi-bin/koha/members/pay.pl?borrowernumber=[% patron.borrowernumber | html %]">Cancel</a>

19
members/mancredit.pl

@ -34,6 +34,7 @@ use Koha::Items;
use Koha::Patrons;
use Koha::Patron::Categories;
use Koha::Account::CreditTypes;
use Koha::AdditionalFields;
use Koha::Token;
@ -90,7 +91,7 @@ if ($add) {
my $amount = $input->param('amount') || 0;
my $type = $input->param('type');
$patron->account->add_credit(
my $line = $patron->account->add_credit(
{
amount => $amount,
description => $description,
@ -103,6 +104,21 @@ if ($add) {
}
);
my @additional_fields;
my $accountline_fields = Koha::AdditionalFields->search({ tablename => 'accountlines:credit' });
while ( my $field = $accountline_fields->next ) {
my $value = $input->param('additional_field_' . $field->id);
if (defined $value) {
push @additional_fields, {
id => $field->id,
value => $value,
};
}
}
if (@additional_fields) {
$line->set_additional_fields(\@additional_fields);
}
if ( C4::Context->preference('AccountAutoReconcile') ) {
$patron->account->reconcile_balance;
}
@ -124,6 +140,7 @@ else {
csrf_token => Koha::Token->new->generate_csrf(
{ session_id => scalar $input->cookie('CGISESSID') }
),
available_additional_fields => [ Koha::AdditionalFields->search({ tablename => 'accountlines:credit' })->as_list ],
);
output_html_with_http_headers $input, $cookie, $template->output;
}

17
members/maninvoice.pl

@ -41,6 +41,7 @@ use Koha::Old::Checkouts;
use Koha::Patron::Categories;
use Koha::Account::DebitTypes;
use Koha::AdditionalFields;
my $input = CGI->new;
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
@ -165,6 +166,21 @@ if ($add) {
}
);
my @additional_fields;
my $accountline_fields = Koha::AdditionalFields->search({ tablename => 'accountlines:debit' });
while ( my $field = $accountline_fields->next ) {
my $value = $input->param('additional_field_' . $field->id);
if (defined $value) {
push @additional_fields, {
id => $field->id,
value => $value,
};
}
}
if (@additional_fields) {
$line->set_additional_fields(\@additional_fields);
}
if ( C4::Context->preference('AccountAutoReconcile') ) {
$patron->account->reconcile_balance;
}
@ -216,5 +232,6 @@ $template->param(
),
patron => $patron,
finesview => 1,
available_additional_fields => [ Koha::AdditionalFields->search({ tablename => 'accountlines:debit' })->as_list ],
);
output_html_with_http_headers $input, $cookie, $template->output;

36
members/paycollect.pl

@ -32,6 +32,8 @@ use Koha::Patrons;
use Koha::Patron::Categories;
use Koha::AuthorisedValues;
use Koha::Account;
use Koha::Account::Lines;
use Koha::AdditionalFields;
use Koha::Token;
use Koha::DateUtils qw( output_pref );
@ -170,6 +172,23 @@ if ( $total_paid and $total_paid ne '0.00' ) {
);
$payment_id = $pay_result->{payment_id};
my @additional_fields;
my $accountline_fields = Koha::AdditionalFields->search({ tablename => 'accountlines:credit' });
while ( my $field = $accountline_fields->next ) {
my $value = $input->param('additional_field_' . $field->id);
if (defined $value) {
push @additional_fields, {
id => $field->id,
value => $value,
};
}
}
if (@additional_fields) {
my $payment = Koha::Account::Lines->find($payment_id);
$payment->set_additional_fields(\@additional_fields);
}
$url = "/cgi-bin/koha/members/pay.pl";
} else {
if ($selected_accts) {
@ -213,6 +232,22 @@ if ( $total_paid and $total_paid ne '0.00' ) {
}
$payment_id = $pay_result->{payment_id};
my @additional_fields;
my $accountline_fields = Koha::AdditionalFields->search({ tablename => 'accountlines:credit' });
while ( my $field = $accountline_fields->next ) {
my $value = $input->param('additional_field_' . $field->id);
if (defined $value) {
push @additional_fields, {
id => $field->id,
value => $value,
};
}
}
if (@additional_fields) {
my $payment = Koha::Account::Lines->find($payment_id);
$payment->set_additional_fields(\@additional_fields);
}
$url = "/cgi-bin/koha/members/boraccount.pl";
}
# It's possible renewals took place, parse any renew results
@ -249,6 +284,7 @@ $template->param(
total => $total_due,
csrf_token => Koha::Token->new->generate_csrf( { session_id => scalar $input->cookie('CGISESSID') } ),
available_additional_fields => [ Koha::AdditionalFields->search({ tablename => 'accountlines:credit' })->as_list ],
);
output_html_with_http_headers $input, $cookie, $template->output;

Loading…
Cancel
Save