# 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., 59 Temple Place,
-# Suite 330, Boston, MA 02111-1307 USA
+# 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
orderreceive.pl
=head1 DESCRIPTION
+
This script shows all order already receive and all pendings orders.
It permit to write a new order as 'received'.
=over 4
-=item supplierid
+=item booksellerid
+
to know on what supplier this script has to display receive order.
-=item recieve
+=item invoiceid
-=item invoice
-the number of this invoice.
+the id of this invoice.
=item freight
=item biblio
+
The biblionumber of this order.
-=item daterecieved
+=item datereceived
=item catview
=cut
use strict;
+use warnings;
+
use CGI;
use C4::Context;
use C4::Koha; # GetKohaAuthorisedValues GetItemTypes
use C4::Auth;
use C4::Output;
use C4::Dates qw/format_date/;
-use C4::Bookseller;
+use C4::Bookseller qw/ GetBookSellerFromId /;
+use C4::Budgets qw/ GetBudget GetBudgetHierarchy CanUserUseBudget GetBudgetPeriods /;
use C4::Members;
use C4::Branch; # GetBranches
+use C4::Items;
+use C4::Biblio;
+use C4::Suggestions;
-my $input = new CGI;
-my $supplierid = $input->param('supplierid');
-my $dbh = C4::Context->dbh;
-my $search = $input->param('recieve');
-my $invoice = $input->param('invoice');
-my $freight = $input->param('freight');
-my $biblionumber = $input->param('biblionumber');
-my $daterecieved = $input->param('daterecieved') || format_date(join "-",Date::Calc::Today());
-my $catview = $input->param('catview');
-my $gst = $input->param('gst');
+my $input = new CGI;
-my @results = SearchOrder( $search, $supplierid, $biblionumber, $catview );
-my $count = scalar @results;
+my $dbh = C4::Context->dbh;
+my $invoiceid = $input->param('invoiceid');
+my $invoice = GetInvoice($invoiceid);
+my $booksellerid = $invoice->{booksellerid};
+my $freight = $invoice->{shipmentcost};
+my $datereceived = $invoice->{shipmentdate};
+my $ordernumber = $input->param('ordernumber');
-my @booksellers = GetBookSeller( $results[0]->{'booksellerid'} );
+$datereceived = $datereceived ? C4::Dates->new($datereceived, 'iso') : C4::Dates->new();
-my $date = $results[0]->{'entrydate'};
+my $bookseller = GetBookSellerFromId($booksellerid);
+my $results;
+$results = SearchOrders({
+ ordernumber => $ordernumber
+}) if $ordernumber;
-my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+my ( $template, $loggedinuser, $cookie, $userflags ) = get_template_and_user(
{
template_name => "acqui/orderreceive.tmpl",
query => $input,
type => "intranet",
authnotrequired => 0,
- flagsrequired => { acquisition => 1 },
+ flagsrequired => {acquisition => 'order_receive'},
debug => 1,
}
);
-$template->param($count);
-
-if ( $count == 1 ) {
-
- my $itemtypes = GetItemTypes;
- my @itemtypesloop;
- foreach my $thisitemtype (sort keys %$itemtypes) {
- my %row = (
- value => $thisitemtype,
- description => $itemtypes->{$thisitemtype}->{'description'},
- );
- push @itemtypesloop, \%row;
- }
-
- $template->param(itemtypeloop => \@itemtypesloop);
-
-
- my $locations = GetKohaAuthorisedValues( 'items.location' );
- if ($locations) {
- my @location_codes = keys %$locations;
- my $CGIlocation = CGI::scrolling_list(
- -name => 'location',
- -id => 'location',
- -values => \@location_codes,
- -default => $results[0]->{'itemtype'},
- -labels => $locations,
- -size => 1,
- -tabindex => '',
- -multiple => 0
- );
- $template->param( CGIlocation => $CGIlocation );
- }
- my $onlymine=C4::Context->preference('IndependantBranches') &&
- C4::Context->userenv &&
- C4::Context->userenv->{flags} !=1 &&
- C4::Context->userenv->{branch};
- my $branches = GetBranches($onlymine);
- my @branchloop;
- foreach my $thisbranch ( sort keys %$branches ) {
- my %row = (
- value => $thisbranch,
- branchname => $branches->{$thisbranch}->{'branchname'},
- );
- push @branchloop, \%row;
+
+unless ( $results and @$results) {
+ output_html_with_http_headers $input, $cookie, $template->output;
+ exit;
+}
+
+# prepare the form for receiving
+my $order = $results->[0];
+
+# Check if ACQ framework exists
+my $acq_fw = GetMarcStructure(1, 'ACQ');
+unless($acq_fw) {
+ $template->param('NoACQframework' => 1);
+}
+
+my $AcqCreateItem = C4::Context->preference('AcqCreateItem');
+if ($AcqCreateItem eq 'receiving') {
+ $template->param(
+ AcqCreateItemReceiving => 1,
+ UniqueItemFields => C4::Context->preference('UniqueItemFields'),
+ );
+} elsif ($AcqCreateItem eq 'ordering') {
+ my $fw = ($acq_fw) ? 'ACQ' : '';
+ my @itemnumbers = GetItemnumbersFromOrder($order->{ordernumber});
+ my @items;
+ foreach (@itemnumbers) {
+ my $item = GetItem($_);
+ if($item->{homebranch}) {
+ $item->{homebranchname} = GetBranchName($item->{homebranch});
+ }
+ if($item->{holdingbranch}) {
+ $item->{holdingbranchname} = GetBranchName($item->{holdingbranch});
+ }
+ if(my $code = GetAuthValCode("items.notforloan", $fw)) {
+ $item->{notforloan} = GetKohaAuthorisedValueLib($code, $item->{notforloan});
+ }
+ if(my $code = GetAuthValCode("items.restricted", $fw)) {
+ $item->{restricted} = GetKohaAuthorisedValueLib($code, $item->{restricted});
+ }
+ if(my $code = GetAuthValCode("items.location", $fw)) {
+ $item->{location} = GetKohaAuthorisedValueLib($code, $item->{location});
+ }
+ if(my $code = GetAuthValCode("items.ccode", $fw)) {
+ $item->{collection} = GetKohaAuthorisedValueLib($code, $item->{ccode});
+ }
+ if(my $code = GetAuthValCode("items.materials", $fw)) {
+ $item->{materials} = GetKohaAuthorisedValueLib($code, $item->{materials});
+ }
+ my $itemtype = getitemtypeinfo($item->{itype});
+ $item->{itemtype} = $itemtype->{description};
+ push @items, $item;
}
+ $template->param(items => \@items);
+}
- my $auto_barcode = C4::Context->boolean_preference("autoBarcode") || 0;
-
- # See whether barcodes should be automatically allocated.
- # Defaults to 0, meaning "no".
- my $barcode;
- if ( $auto_barcode ) {
- my $sth = $dbh->prepare("Select max(barcode) from items");
- $sth->execute;
- my $data = $sth->fetchrow_hashref;
- $barcode = $results[0]->{'barcode'} + 1;
- $sth->finish;
+$order->{quantityreceived} = '' if $order->{quantityreceived} == 0;
+$order->{unitprice} = '' if $order->{unitprice} == 0;
+
+my $rrp;
+my $ecost;
+my $unitprice;
+if ( $bookseller->{listincgst} ) {
+ if ( $bookseller->{invoiceincgst} ) {
+ $rrp = $order->{rrp};
+ $ecost = $order->{ecost};
+ $unitprice = $order->{unitprice};
+ } else {
+ $rrp = $order->{rrp} / ( 1 + $order->{gstrate} );
+ $ecost = $order->{ecost} / ( 1 + $order->{gstrate} );
+ $unitprice = $order->{unitprice} / ( 1 + $order->{gstrate} );
+ }
+} else {
+ if ( $bookseller->{invoiceincgst} ) {
+ $rrp = $order->{rrp} * ( 1 + $order->{gstrate} );
+ $ecost = $order->{ecost} * ( 1 + $order->{gstrate} );
+ $unitprice = $order->{unitprice} * ( 1 + $order->{gstrate} );
+ } else {
+ $rrp = $order->{rrp};
+ $ecost = $order->{ecost};
+ $unitprice = $order->{unitprice};
}
+ }
+
+my $suggestion = GetSuggestionInfoFromBiblionumber($order->{biblionumber});
+
+my $authorisedby = $order->{authorisedby};
+my $member = GetMember( borrowernumber => $authorisedby );
+
+my $budget = GetBudget( $order->{budget_id} );
+
+$template->param(
+ AcqCreateItem => $AcqCreateItem,
+ count => 1,
+ biblionumber => $order->{'biblionumber'},
+ ordernumber => $order->{'ordernumber'},
+ subscriptionid => $order->{subscriptionid},
+ booksellerid => $order->{'booksellerid'},
+ freight => $freight,
+ name => $bookseller->{'name'},
+ date => format_date($order->{entrydate}),
+ title => $order->{'title'},
+ author => $order->{'author'},
+ copyrightdate => $order->{'copyrightdate'},
+ isbn => $order->{'isbn'},
+ seriestitle => $order->{'seriestitle'},
+ bookfund => $budget->{budget_name},
+ quantity => $order->{'quantity'},
+ quantityreceivedplus1 => $order->{'quantityreceived'} + 1,
+ quantityreceived => $order->{'quantityreceived'},
+ rrp => sprintf( "%.2f", $rrp ),
+ ecost => sprintf( "%.2f", $ecost ),
+ memberfirstname => $member->{firstname} || "",
+ membersurname => $member->{surname} || "",
+ invoiceid => $invoice->{invoiceid},
+ invoice => $invoice->{invoicenumber},
+ datereceived => $datereceived->output(),
+ datereceived_iso => $datereceived->output('iso'),
+ notes => $order->{notes},
+ suggestionid => $suggestion->{suggestionid},
+ surnamesuggestedby => $suggestion->{surnamesuggestedby},
+ firstnamesuggestedby => $suggestion->{firstnamesuggestedby},
+);
- if ( $results[0]->{'quantityreceived'} == 0 ) {
- $results[0]->{'quantityreceived'} = '';
+my $borrower = GetMember( 'borrowernumber' => $loggedinuser );
+my @budget_loop;
+my $periods = GetBudgetPeriods( );
+foreach my $period (@$periods) {
+ if ($period->{'budget_period_id'} == $budget->{'budget_period_id'}) {
+ $template->{'VARS'}->{'budget_period_description'} = $period->{'budget_period_description'};
}
- if ( $results[0]->{'unitprice'} == 0 ) {
- $results[0]->{'unitprice'} = '';
+ next if $period->{'budget_period_locked'} || !$period->{'budget_period_description'};
+ my $budget_hierarchy = GetBudgetHierarchy( $period->{'budget_period_id'} );
+ my @funds;
+ foreach my $r ( @{$budget_hierarchy} ) {
+ next unless ( CanUserUseBudget( $borrower, $r, $userflags ) );
+ if ( !defined $r->{budget_amount} || $r->{budget_amount} == 0 ) {
+ next;
+ }
+ push @funds,
+ {
+ b_id => $r->{budget_id},
+ b_txt => $r->{budget_name},
+ b_sel => ( $r->{budget_id} == $order->{budget_id} ) ? 1 : 0,
+ };
}
- $results[0]->{'copyrightdate'} =
- format_date( $results[0]->{'copyrightdate'} );
- $template->param(
- branchloop => \@branchloop,
- count => 1,
- biblionumber => $results[0]->{'biblionumber'},
- ordernumber => $results[0]->{'ordernumber'},
- biblioitemnumber => $results[0]->{'biblioitemnumber'},
- supplierid => $results[0]->{'booksellerid'},
- freight => $freight,
- gst => $gst,
- catview => ( $catview ne 'yes' ? 1 : 0 ),
- name => $booksellers[0]->{'name'},
- date => format_date($date),
- title => $results[0]->{'title'},
- author => $results[0]->{'author'},
- copyrightdate => format_date( $results[0]->{'copyrightdate'} ),
- itemtype => $results[0]->{'itemtype'},
- isbn => $results[0]->{'isbn'},
- seriestitle => $results[0]->{'seriestitle'},
- barcode => $barcode,
- bookfund => $results[0]->{'bookfundid'},
- quantity => $results[0]->{'quantity'},
- quantityreceivedplus1 => $results[0]->{'quantityreceived'} + 1,
- quantityreceived => $results[0]->{'quantityreceived'},
- rrp => $results[0]->{'rrp'},
- ecost => $results[0]->{'ecost'},
- unitprice => $results[0]->{'unitprice'},
- invoice => $invoice,
- daterecieved => $daterecieved,
- );
+
+ @funds = sort { uc( $a->{b_txt} ) cmp uc( $b->{b_txt} ) } @funds;
+
+ push @budget_loop,
+ {
+ 'id' => $period->{'budget_period_id'},
+ 'description' => $period->{'budget_period_description'},
+ 'funds' => \@funds
+ };
}
-else {
- my @loop;
- for ( my $i = 0 ; $i < $count ; $i++ ) {
- my %line = %{ $results[$i] };
-
- $line{invoice} = $invoice;
- $line{daterecieved} = $daterecieved;
- $line{freight} = $freight;
- $line{gst} = $gst;
- $line{title} = $results[$i]->{'title'};
- $line{author} = $results[$i]->{'author'};
- $line{supplierid} = $supplierid;
- push @loop, \%line;
- }
+
+$template->{'VARS'}->{'budget_loop'} = \@budget_loop;
+
+# regardless of the content of $unitprice e.g 0 or '' or any string will return in these cases 0.00
+# and the 'IF' in the .tt will show 0.00 and not 'ecost' (see BZ 7129)
+# So if $unitprice == 0 we don't create unitprice
+if ( $unitprice != 0) {
$template->param(
- loop => \@loop,
- date => format_date($date),
- daterecieved => $daterecieved,
- name => $booksellers[0]->{'name'},
- supplierid => $supplierid,
- invoice => $invoice,
- daterecieved => $daterecieved,
+ unitprice => sprintf( "%.2f", $unitprice),
);
+}
+my $op = $input->param('op');
+if ($op and $op eq 'edit'){
+ $template->param(edit => 1);
}
output_html_with_http_headers $input, $cookie, $template->output;