Koha/acqui/invoices.pl
Jared Camins-Esakov 88b46f3422 Bug 10401: Add ability to merge invoices
Given how easy it is to accidentally receive items from one invoice on
multiple invoices, the ability to merge invoices can be quite handy.
This patch adds that ability to Koha's Acquisitions module.

To test:
1) Apply patch.
2) Run unit test:
    > prove t/db_dependent/Acquisition/Invoices.t
3) Create two invoices from the same vendor for merging, and receive at
   least one order on each.
4) Do a search on the Invoices page that brings up both the invoices you
   created.
5) Check the boxes next to the two invoices.
6) Click "Merge selected invoices."
7) Choose which invoice you want to keep (the default will be the first).
8) Click "Merge."
9) Confirm that the resulting invoice has all the orders you received
   listed on it.
10) Sign off.

Signed-off-by: Paola Rossi <paola.rossi@cineca.it>
Signed-off-by: Katrin Fischer <Katrin.Fischer.83@web.de>
Passes all tests and QA script.
Merged several invoices sucessfully - with and without received
orders, open and closed. Works nicely.

Signed-off-by: Galen Charlton <gmc@esilibrary.com>
2013-10-21 19:08:03 +00:00

152 lines
4.7 KiB
Perl
Executable file

#!/usr/bin/perl
# Copyright 2011 BibLibre SARL
# 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 2 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.
=head1 NAME
invoices.pl
=head1 DESCRIPTION
Search for invoices
=cut
use strict;
use warnings;
use CGI;
use C4::Auth;
use C4::Output;
use C4::Acquisition qw/GetInvoices/;
use C4::Bookseller qw/GetBookSeller/;
use C4::Branch qw/GetBranches/;
use C4::Budgets;
my $input = CGI->new;
my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user(
{
template_name => 'acqui/invoices.tmpl',
query => $input,
type => 'intranet',
authnotrequired => 0,
flagsrequired => { 'acquisition' => '*' },
debug => 1,
}
);
my $invoicenumber = $input->param('invoicenumber');
my $supplierid = $input->param('supplierid');
my $shipmentdatefrom = $input->param('shipmentdatefrom');
my $shipmentdateto = $input->param('shipmentdateto');
my $billingdatefrom = $input->param('billingdatefrom');
my $billingdateto = $input->param('billingdateto');
my $isbneanissn = $input->param('isbneanissn');
my $title = $input->param('title');
my $author = $input->param('author');
my $publisher = $input->param('publisher');
my $publicationyear = $input->param('publicationyear');
my $branch = $input->param('branch');
my $op = $input->param('op');
my $invoices = [];
if ( $op and $op eq 'do_search' ) {
my $shipmentdatefrom_iso = C4::Dates->new($shipmentdatefrom)->output('iso');
my $shipmentdateto_iso = C4::Dates->new($shipmentdateto)->output('iso');
my $billingdatefrom_iso = C4::Dates->new($billingdatefrom)->output('iso');
my $billingdateto_iso = C4::Dates->new($billingdateto)->output('iso');
@{$invoices} = GetInvoices(
invoicenumber => $invoicenumber,
supplierid => $supplierid,
shipmentdatefrom => $shipmentdatefrom_iso,
shipmentdateto => $shipmentdateto_iso,
billingdatefrom => $billingdatefrom_iso,
billingdateto => $billingdateto_iso,
isbneanissn => $isbneanissn,
title => $title,
author => $author,
publisher => $publisher,
publicationyear => $publicationyear,
branchcode => $branch
);
}
# Build suppliers list
my @suppliers = GetBookSeller(undef);
my $suppliers_loop = [];
my $suppliername;
foreach (@suppliers) {
my $selected = 0;
if ($supplierid && $supplierid == $_->{id} ) {
$selected = 1;
$suppliername = $_->{name};
}
push @{$suppliers_loop},
{
suppliername => $_->{name},
booksellerid => $_->{id},
selected => $selected,
};
}
# Build branches list
my $branches = GetBranches();
my $branches_loop = [];
my $branchname;
foreach ( sort keys %$branches ) {
my $selected = 0;
if ( $branch && $branch eq $_ ) {
$selected = 1;
$branchname = $branches->{$_}->{'branchname'};
}
push @{$branches_loop},
{
branchcode => $_,
branchname => $branches->{$_}->{branchname},
selected => $selected,
};
}
my $budgets = GetBudgets();
my @budgets_loop;
foreach my $budget (@$budgets) {
push @budgets_loop, $budget if CanUserUseBudget( $loggedinuser, $budget, $flags );
}
$template->{'VARS'}->{'budgets_loop'} = \@budgets_loop;
$template->param(
do_search => ( $op and $op eq 'do_search' ) ? 1 : 0,
invoices => $invoices,
invoicenumber => $invoicenumber,
booksellerid => $supplierid,
suppliername => $suppliername,
billingdatefrom => $billingdatefrom,
billingdateto => $billingdateto,
isbneanissn => $isbneanissn,
title => $title,
author => $author,
publisher => $publisher,
publicationyear => $publicationyear,
branch => $branch,
branchname => $branchname,
suppliers_loop => $suppliers_loop,
branches_loop => $branches_loop,
);
output_html_with_http_headers $input, $cookie, $template->output;