Bug 21467: Allow several receipts for a given subscription
[koha.git] / acqui / invoices.pl
index fab7837..8ab7a32 100755 (executable)
@@ -3,18 +3,18 @@
 # 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 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.
+# 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.
+# You should have received a copy of the GNU General Public License
+# along with Koha; if not, see <http://www.gnu.org/licenses>.
 
 =head1 NAME
 
@@ -26,119 +26,102 @@ Search for invoices
 
 =cut
 
-use strict;
-use warnings;
+use Modern::Perl;
 
-use CGI;
+use CGI qw ( -utf8 );
 use C4::Auth;
 use C4::Output;
 
-use C4::Acquisition;
-use C4::Bookseller qw/GetBookSeller/;
-use C4::Branch;
-
-my $input = new CGI;
-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 $supplier        = $input->param('supplier');
+use C4::Acquisition qw/GetInvoices/;
+use C4::Budgets;
+use Koha::DateUtils;
+use Koha::Acquisition::Booksellers;
+
+my $input = CGI->new;
+my ( $template, $loggedinuser, $cookie, $flags ) = get_template_and_user(
+    {
+        template_name   => 'acqui/invoices.tt',
+        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 @results_loop = ();
-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");
-    my @invoices = GetInvoices(
-        invoicenumber => $invoicenumber,
-        suppliername => $supplier,
-        shipmentdatefrom => $shipmentdatefrom_iso,
-        shipmentdateto => $shipmentdateto_iso,
-        billingdatefrom => $billingdatefrom_iso,
-        billingdateto => $billingdateto_iso,
-        isbneanissn => $isbneanissn,
-        title => $title,
-        author => $author,
-        publisher => $publisher,
-        publicationyear => $publicationyear,
-        branchcode => $branch
+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 $message_id       = $input->param('message_id');
+my $op               = $input->param('op');
+
+$shipmentdatefrom and $shipmentdatefrom = eval { dt_from_string( $shipmentdatefrom ) };
+$shipmentdateto   and $shipmentdateto   = eval { dt_from_string( $shipmentdateto ) };
+$billingdatefrom  and $billingdatefrom  = eval { dt_from_string( $billingdatefrom ) };
+$billingdateto    and $billingdateto    = eval { dt_from_string( $billingdateto ) };
+
+my $invoices = [];
+if ( $op and $op eq 'do_search' ) {
+    @{$invoices} = GetInvoices(
+        invoicenumber    => $invoicenumber,
+        supplierid       => $supplierid,
+        shipmentdatefrom => $shipmentdatefrom ? output_pref( { str => $shipmentdatefrom, dateformat => 'iso' } ) : undef,
+        shipmentdateto   => $shipmentdateto   ? output_pref( { str => $shipmentdateto,   dateformat => 'iso' } ) : undef,
+        billingdatefrom  => $billingdatefrom  ? output_pref( { str => $billingdatefrom,  dateformat => 'iso' } ) : undef,
+        billingdateto    => $billingdateto    ? output_pref( { str => $billingdateto,    dateformat => 'iso' } ) : undef,
+        isbneanissn      => $isbneanissn,
+        title            => $title,
+        author           => $author,
+        publisher        => $publisher,
+        publicationyear  => $publicationyear,
+        branchcode       => $branch,
+        message_id       => $message_id,
     );
-    foreach (@invoices) {
-        my %row = (
-            invoiceid       => $_->{invoiceid},
-            billingdate     => $_->{billingdate},
-            invoicenumber   => $_->{invoicenumber},
-            suppliername    => $_->{suppliername},
-            receivedbiblios => $_->{receivedbiblios},
-            receiveditems   => $_->{receiveditems},
-            subscriptionid  => $_->{subscriptionid},
-            closedate => $_->{closedate},
-        );
-        push @results_loop, \%row;
-    }
 }
 
-
 # Build suppliers list
-my @suppliers = GetBookSeller(undef);
-my @suppliers_loop = ();
+my @suppliers      = Koha::Acquisition::Booksellers->search( undef, { order_by => { -asc => 'name' } } );
+my $suppliers_loop = [];
 my $suppliername;
 foreach (@suppliers) {
     my $selected = 0;
-    if ($supplier && $supplier == $_->{'id'}) {
+    if ($supplierid && $supplierid == $_->id ) {
         $selected = 1;
-        $suppliername = $_->{'name'};
+        $suppliername = $_->name;
     }
-    my %row = (
-        suppliername => $_->{'name'},
-        supplierid   => $_->{'id'},
+    push @{$suppliers_loop},
+      {
+        suppliername => $_->name,
+        booksellerid   => $_->id,
         selected     => $selected,
-    );
-    push @suppliers_loop, \%row;
+      };
 }
 
-# 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'};
-    }
-    my %row = (
-        branchcode => $_,
-        branchname => $branches->{$_}->{'branchname'},
-        selected   => $selected,
-    );
-    push @branches_loop, \%row;
+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,
-    results_loop    => \@results_loop,
+    do_search => ( $op and $op eq 'do_search' ) ? 1 : 0,
+    invoices => $invoices,
     invoicenumber   => $invoicenumber,
-    supplier        => $supplier,
+    booksellerid    => $supplierid,
     suppliername    => $suppliername,
+    shipmentdatefrom => $shipmentdatefrom,
+    shipmentdateto   => $shipmentdateto,
     billingdatefrom => $billingdatefrom,
     billingdateto   => $billingdateto,
     isbneanissn     => $isbneanissn,
@@ -147,10 +130,7 @@ $template->param(
     publisher       => $publisher,
     publicationyear => $publicationyear,
     branch          => $branch,
-    branchname      => $branchname,
-    suppliers_loop  => \@suppliers_loop,
-    branches_loop   => \@branches_loop,
-    DHTMLcalendar_dateformat => C4::Dates->DHTMLcalendar(),
+    suppliers_loop  => $suppliers_loop,
 );
 
 output_html_with_http_headers $input, $cookie, $template->output;