Bug 31115: Add support for additional fields for invoices

This patch adds support for additional fields for invoices. A new option
is added to the 'Additional fields' admin page, for the 'aqinvoices'
table.

Adding/editing invoices now supports this additional fields.

To test:
1. Apply this patches
2. Verify the original test plan works
=> SUCCESS: It does!
3. Sign off :-D

Sponsored-by: The Research University in the Helmholtz Association (KIT)
Signed-off-by: Michaela Sieber <michaela.sieber@kit.edu>

Signed-off-by: Katrin Fischer <katrin.fischer@bsz-bw.de>
Signed-off-by: Tomas Cohen Arazi <tomascohen@theke.io>
This commit is contained in:
Tomas Cohen Arazi 2022-10-19 17:12:38 -03:00
parent cf114525d4
commit 5c5f8f9806
No known key found for this signature in database
GPG Key ID: 0A272EA1B2F3C15F
8 changed files with 78 additions and 4 deletions

View File

@ -19,7 +19,7 @@ use Modern::Perl;
use Koha::Database;
use base qw(Koha::Object);
use base qw(Koha::Object Koha::Object::Mixin::AdditionalFields);
=head1 NAME

View File

@ -21,7 +21,7 @@ use Koha::Database;
use Koha::Acquisition::Invoice;
use base qw(Koha::Objects);
use base qw(Koha::Objects Koha::Objects::Mixin::AdditionalFields);
=head1 NAME

View File

@ -220,6 +220,22 @@ __PACKAGE__->belongs_to(
# Created by DBIx::Class::Schema::Loader v0.07049 @ 2021-01-21 13:39:29
# DO NOT MODIFY THIS OR ANYTHING ABOVE! md5sum:LkekSbup37Z2WVnU/c9K+g
__PACKAGE__->has_many(
"additional_field_values",
"Koha::Schema::Result::AdditionalFieldValue",
sub {
my ($args) = @_;
return {
"$args->{foreign_alias}.record_id" => { -ident => "$args->{self_alias}.invoiceid" },
"$args->{foreign_alias}.field_id" =>
{ -in => \'(SELECT id FROM additional_fields WHERE tablename="aqinvoices")' },
};
},
{ cascade_copy => 0, cascade_delete => 0 },
);
sub koha_object_class {
'Koha::Acquisition::Invoice';
}

View File

@ -38,9 +38,11 @@ use C4::Log qw(logaction);
use Koha::Acquisition::Booksellers;
use Koha::Acquisition::Currencies qw( get_active );
use Koha::AdditionalFields;
use Koha::DateUtils qw( output_pref );
use Koha::Misc::Files;
use Koha::Acquisition::Invoice::Adjustments;
use Koha::Acquisition::Invoices;
my $input = CGI->new;
my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user(
@ -125,6 +127,18 @@ elsif ( $op && $op eq 'mod' ) {
MergeInvoices($invoiceid, \@sources);
defined($invoice_files) && $invoice_files->MergeFileRecIds(@sources);
}
my @additional_fields;
my $invoice_fields = Koha::AdditionalFields->search({ tablename => 'aqinvoices' });
while ( my $field = $invoice_fields->next ) {
my $value = $input->param('additional_field_' . $field->id);
push @additional_fields, {
id => $field->id,
value => $value,
};
}
Koha::Acquisition::Invoices->find($invoiceid)->set_additional_fields(\@additional_fields);
$template->param( modified => 1 );
}
elsif ( $op && $op eq 'delete' ) {
@ -298,6 +312,14 @@ foreach my $r ( @{$budgets} ) {
my $adjustments = Koha::Acquisition::Invoice::Adjustments->search({ invoiceid => $details->{'invoiceid'} });
if ( $adjustments ) { $template->param( adjustments => $adjustments ); }
my $invoice = Koha::Acquisition::Invoices->find($invoiceid);
$template->param(
available_additional_fields => Koha::AdditionalFields->search( { tablename => 'aqinvoices' } ),
additional_field_values => { map {
$_->field->id => $_->value
} $invoice->additional_field_values->as_list },
);
$template->param(
invoiceid => $details->{'invoiceid'},
invoicenumber => $details->{'invoicenumber'},

View File

@ -75,6 +75,8 @@ use C4::Acquisition qw( GetInvoices GetInvoice AddInvoice );
use C4::Budgets qw( GetBudgetHierarchy GetBudget CanUserUseBudget );
use Koha::Acquisition::Booksellers;
use Koha::Acquisition::Invoices;
use Koha::AdditionalFields;
use Koha::DateUtils qw( dt_from_string );
my $input = CGI->new;
@ -118,6 +120,7 @@ if ( $op and $op eq 'new' ) {
}
$op = 'confirm' unless $template->{'VARS'}->{'duplicate_invoices'};
}
if ($op and $op eq 'confirm') {
my $invoiceid = AddInvoice(
invoicenumber => $invoicenumber,
@ -126,7 +129,23 @@ if ($op and $op eq 'confirm') {
shipmentcost => $shipmentcost,
shipmentcost_budgetid => $shipmentcost_budgetid,
);
if(defined $invoiceid) {
if (defined $invoiceid) {
my @additional_fields;
my $invoice_fields = Koha::AdditionalFields->search({ tablename => 'aqinvoices' });
while ( my $field = $invoice_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 $invoice = Koha::Acquisition::Invoices->find( $invoiceid );
$invoice->set_additional_fields(\@additional_fields);
}
# Successful 'Add'
print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=$invoiceid");
exit 0;
@ -135,6 +154,10 @@ if ($op and $op eq 'confirm') {
}
}
$template->param(
available_additional_fields => [ Koha::AdditionalFields->search({ tablename => 'aqinvoices' })->as_list ]
);
my $bookseller = Koha::Acquisition::Booksellers->find( $booksellerid );
my @parcels = GetInvoices(
supplierid => $booksellerid,

View File

@ -140,6 +140,11 @@
[% END %]
[% END %]
</ol>
<fieldset class="rows">
[% IF available_additional_fields.count %]
[% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values %]
[% END %]
</fieldset>
[% UNLESS readonly %]
<input type="hidden" name="op" value="mod" />
<input type="hidden" name="invoiceid" value="[% invoiceid | html %]" />

View File

@ -191,6 +191,11 @@
</li>
</ol>
</fieldset>
<fieldset class="rows">
[% IF available_additional_fields %]
[% INCLUDE 'additional-fields-entry.inc' available=available_additional_fields values=additional_field_values %]
[% END %]
</fieldset>
<fieldset class="action"><input type="submit" class="button" value="Next" /> <a class="cancel" href="/cgi-bin/koha/acqui/supplier.pl?booksellerid=[% booksellerid | html %]">Cancel</a></fieldset>
</form>
</div>

View File

@ -12,7 +12,7 @@
</head>
[% marcfield_tables = ['subscription'] %]
[% searchable_tables = ['subscription', 'aqbasket'] %]
[% searchable_tables = ['subscription', 'aqbasket', 'aqinvoices'] %]
[% show_marcfield = marcfield_tables.grep('^' _ tablename _ '$').size ? 1 : 0 %]
[% show_searchable = searchable_tables.grep('^' _ tablename _ '$').size ? 1 : 0 %]
@ -117,6 +117,9 @@
[% IF CAN_user_acquisition_order_manage %]
[% WRAPPER table_option value="aqbasket" %]<span>Order baskets</span>[% END %]
[% END %]
[% IF CAN_user_acquisition_edit_invoices %]
[% WRAPPER table_option value="aqinvoices" %]<span>Invoices</span>[% END %]
[% END %]
[% IF CAN_user_serials_edit_subscription %]
[% WRAPPER table_option value="subscription" %]<span>Subscriptions</span>[% END %]
[% END %]