#
# 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>.
use Modern::Perl;
-use CGI;
+use CGI qw ( -utf8 );
use Carp;
-use Number::Format qw(:all);
use YAML qw/Load/;
use C4::Context;
use C4::Auth;
-use C4::Input;
use C4::Output;
use C4::ImportBatch;
use C4::Matcher;
use C4::Koha;
use C4::Budgets;
use C4::Acquisition;
-use C4::Bookseller qw/GetBookSellerFromId/;
use C4::Suggestions; # GetSuggestion
-use C4::Branch; # GetBranches
use C4::Members;
use Koha::Number::Price;
+use Koha::Acquisition::Currencies;
+use Koha::Acquisition::Order;
+use Koha::Acquisition::Bookseller;
my $input = new CGI;
my ($template, $loggedinuser, $cookie, $userflags) = get_template_and_user({
my $cgiparams = $input->Vars;
my $op = $cgiparams->{'op'} || '';
my $booksellerid = $input->param('booksellerid');
-my $bookseller = GetBookSellerFromId($booksellerid);
-my $data;
+my $allmatch = $input->param('allmatch');
+my $bookseller = Koha::Acquisition::Bookseller->fetch({ id => $booksellerid });
$template->param(scriptname => "/cgi-bin/koha/acqui/addorderiso2709.pl",
booksellerid => $booksellerid,
#display batches
import_batches_list($template);
#
-# 2nd step = display the content of the choosen file
+# 2nd step = display the content of the chosen file
#
} elsif ($op eq "batch_details"){
#display lines inside the selected batch
# get currencies (for change rates calcs if needed)
- my $active_currency = GetCurrency();
- my $default_currency;
- if (! $data->{currency} ) { # New order no currency set
- if ( $bookseller->{listprice} ) {
- $default_currency = $bookseller->{listprice};
- }
- else {
- $default_currency = $active_currency->{currency};
- }
- }
- my @rates = GetCurrencies();
-
- # ## @rates
-
- my @loop_currency = ();
- for my $curr ( @rates ) {
- my $selected;
- if ($data->{currency} ) {
- $selected = $curr->{currency} eq $data->{currency};
- }
- else {
- $selected = $curr->{currency} eq $default_currency;
- }
- push @loop_currency, {
- currcode => $curr->{currency},
- rate => $curr->{rate},
- selected => $selected,
- }
- }
+ my @currencies = Koha::Acquisition::Currencies->search;
$template->param("batch_details" => 1,
"basketno" => $cgiparams->{'basketno'},
- loop_currencies => \@loop_currency,
+ currencies => \@currencies,
+ bookseller => $bookseller,
+ "allmatch" => $allmatch,
);
import_biblios_list($template, $cgiparams->{'import_batch_id'});
- if ( C4::Context->preference('AcqCreateItem') eq 'ordering' ) {
+ my $basket = GetBasket($cgiparams->{basketno});
+ if ( C4::Context->preference('AcqCreateItem') eq 'ordering' && !$basket->{is_standing} ) {
# prepare empty item form
my $cell = PrepareItemrecordDisplay( '', '', '', 'ACQ' );
# retrieve the file you want to import
my $import_batch_id = $cgiparams->{'import_batch_id'};
my $biblios = GetImportRecordsRange($import_batch_id);
- my @import_record_id_selected = $input->param("import_record_id");
- my @quantities = $input->param('quantity');
- my @prices = $input->param('price');
- my @budgets_id = $input->param('budget_id');
- my @discount = $input->param('discount');
- my @sort1 = $input->param('sort1');
- my @sort2 = $input->param('sort2');
- my $cur = GetCurrency();
+ my $duplinbatch;
+ my $imported = 0;
+ my @import_record_id_selected = $input->multi_param("import_record_id");
+ my @quantities = $input->multi_param('quantity');
+ my @prices = $input->multi_param('price');
+ my @budgets_id = $input->multi_param('budget_id');
+ my @discount = $input->multi_param('discount');
+ my @sort1 = $input->multi_param('sort1');
+ my @sort2 = $input->multi_param('sort2');
+ my $active_currency = Koha::Acquisition::Currencies->get_active;
for my $biblio (@$biblios){
# Check if this import_record_id was selected
next if not grep { $_ eq $$biblio{import_record_id} } @import_record_id_selected;
# 1st insert the biblio, or find it through matcher
unless ( $biblionumber ) {
+ $duplinbatch=$import_batch_id and next if FindDuplicate($marcrecord);
# add the biblio
my $bibitemnum;
}
# 3rd add order
my $patron = C4::Members::GetMember( borrowernumber => $loggedinuser );
- my $branch = C4::Branch->GetBranchDetail( $patron->{branchcode} );
# get quantity in the MARC record (1 if none)
my $quantity = GetMarcQuantity($marcrecord, C4::Context->preference('marcflavour')) || 1;
my %orderinfo = (
# in this case, the price will be x100 when unformatted ! Replace the . by a , to get a proper price calculation
$price =~ s/\./,/ if C4::Context->preference("CurrencyFormat") eq "FR";
$price = Koha::Number::Price->new($price)->unformat;
- $orderinfo{gstrate} = $bookseller->{gstrate};
+ $orderinfo{tax_rate} = $bookseller->{tax_rate};
my $c = $c_discount ? $c_discount : $bookseller->{discount} / 100;
if ( $bookseller->{listincgst} ) {
if ( $c_discount ) {
}
} else {
if ( $c_discount ) {
- $orderinfo{ecost} = $price / ( 1 + $orderinfo{gstrate} );
+ $orderinfo{ecost} = $price / ( 1 + $orderinfo{tax_rate} );
$orderinfo{rrp} = $orderinfo{ecost} / ( 1 - $c );
} else {
- $orderinfo{rrp} = $price / ( 1 + $orderinfo{gstrate} );
+ $orderinfo{rrp} = $price / ( 1 + $orderinfo{tax_rate} );
$orderinfo{ecost} = $orderinfo{rrp} * ( 1 - $c );
}
}
- $orderinfo{listprice} = $orderinfo{rrp} / $cur->{rate};
+ $orderinfo{listprice} = $orderinfo{rrp} / $active_currency->rate;
$orderinfo{unitprice} = $orderinfo{ecost};
$orderinfo{total} = $orderinfo{ecost} * $c_quantity;
} else {
# remove uncertainprice flag if we have found a price in the MARC record
$orderinfo{uncertainprice} = 0 if $orderinfo{listprice};
- my $ordernumber = NewOrder( \%orderinfo );
+ my $order = Koha::Acquisition::Order->new( \%orderinfo )->insert;
# 4th, add items if applicable
# parse the item sent by the form, and create an item just for the import_record_id we are dealing with
# this is not optimised, but it's working !
- if ( C4::Context->preference('AcqCreateItem') eq 'ordering' ) {
- my @tags = $input->param('tag');
- my @subfields = $input->param('subfield');
- my @field_values = $input->param('field_value');
- my @serials = $input->param('serial');
- my @ind_tag = $input->param('ind_tag');
- my @indicator = $input->param('indicator');
+ my $basket = GetBasket($cgiparams->{basketno});
+ if ( C4::Context->preference('AcqCreateItem') eq 'ordering' && !$basket->{is_standing} ) {
+ my @tags = $input->multi_param('tag');
+ my @subfields = $input->multi_param('subfield');
+ my @field_values = $input->multi_param('field_value');
+ my @serials = $input->multi_param('serial');
+ my @ind_tag = $input->multi_param('ind_tag');
+ my @indicator = $input->multi_param('indicator');
my $item;
push @{ $item->{tags} }, $tags[0];
push @{ $item->{subfields} }, $subfields[0];
push @{ $item->{field_values} }, $field_values[0];
push @{ $item->{ind_tag} }, $ind_tag[0];
push @{ $item->{indicator} }, $indicator[0];
- my $xml = TransformHtmlToXml( \@tags, \@subfields, \@field_values, \@ind_tag, \@indicator );
+ my $xml = TransformHtmlToXml( \@tags, \@subfields, \@field_values, \@indicator, \@ind_tag );
my $record = MARC::Record::new_from_xml( $xml, 'UTF-8' );
for (my $qtyloop=1;$qtyloop <= $c_quantity;$qtyloop++) {
my ( $biblionumber, $bibitemnum, $itemnumber ) = AddItemFromMarc( $record, $biblionumber );
- NewOrderItem( $itemnumber, $ordernumber );
+ $order->add_item( $itemnumber );
}
} else {
SetImportRecordStatus( $biblio->{'import_record_id'}, 'imported' );
}
+ $imported++;
}
# go to basket page
- print $input->redirect("/cgi-bin/koha/acqui/basket.pl?basketno=".$cgiparams->{'basketno'});
+ if ( $imported ) {
+ print $input->redirect("/cgi-bin/koha/acqui/basket.pl?basketno=".$cgiparams->{'basketno'}."&duplinbatch=$duplinbatch");
+ } else {
+ print $input->redirect("/cgi-bin/koha/acqui/addorderiso2709.pl?import_batch_id=$import_batch_id&basketno=".$cgiparams->{'basketno'}."&booksellerid=$booksellerid&allmatch=1");
+ }
exit;
}
my @list = ();
foreach my $batch (@$batches) {
- if ( $batch->{'import_status'} =~ /^staged$|^reverted$/ ) {
+ if ( $batch->{'import_status'} =~ /^staged$|^reverted$/ && $batch->{'record_type'} eq 'biblio') {
# check if there is at least 1 line still staged
- my $stagedList=GetImportRecordsRange($batch->{'import_batch_id'}, undef, undef, $batch->{import_status}, { order_by_direction => 'ASC' });
+ my $stagedList=GetImportRecordsRange($batch->{'import_batch_id'}, undef, 1, $batch->{import_status}, { order_by_direction => 'ASC' });
if (scalar @$stagedList) {
push @list, {
import_batch_id => $batch->{'import_batch_id'},