X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=acqui%2Faddorderiso2709.pl;h=0f59a62a192479825adad2e8fede3c14e7eb9363;hb=408d556346f6b4a50b0d71efcb4eb30014d8c0bb;hp=456e8400b677ae342f155e253e973aff2e92a3d7;hpb=953c9d511bf94f3904541feb81568b893505bb1a;p=koha.git diff --git a/acqui/addorderiso2709.pl b/acqui/addorderiso2709.pl index 456e8400b6..0f59a62a19 100755 --- a/acqui/addorderiso2709.pl +++ b/acqui/addorderiso2709.pl @@ -8,28 +8,26 @@ # # 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 . 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; @@ -40,14 +38,18 @@ use C4::Items; 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({ - template_name => "acqui/addorderiso2709.tmpl", + template_name => "acqui/addorderiso2709.tt", query => $input, type => "intranet", authnotrequired => 0, @@ -58,8 +60,8 @@ 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, @@ -83,44 +85,18 @@ if ($op eq ""){ #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' ) { @@ -141,7 +117,6 @@ if ($op eq ""){ # 3rd step = import the records # } elsif ( $op eq 'import_records' ) { - my $num=FormatNumber(); #import selected lines $template->param('basketno' => $cgiparams->{'basketno'}); # Budget_id is mandatory for adding an order, we just add a default, the user needs to modify this aftewards @@ -156,6 +131,8 @@ if ($op eq ""){ # retrieve the file you want to import my $import_batch_id = $cgiparams->{'import_batch_id'}; my $biblios = GetImportRecordsRange($import_batch_id); + my $duplinbatch; + my $imported = 0; my @import_record_id_selected = $input->param("import_record_id"); my @quantities = $input->param('quantity'); my @prices = $input->param('price'); @@ -163,7 +140,7 @@ if ($op eq ""){ my @discount = $input->param('discount'); my @sort1 = $input->param('sort1'); my @sort2 = $input->param('sort2'); - my $cur = GetCurrency(); + 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; @@ -180,6 +157,7 @@ if ($op eq ""){ # 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; @@ -195,6 +173,7 @@ if ($op eq ""){ } } ( $biblionumber, $bibitemnum ) = AddBiblio( $marcrecord, $cgiparams->{'frameworkcode'} || '' ); + SetImportRecordStatus( $biblio->{'import_record_id'}, 'imported' ); # 2nd add authorities if applicable if (C4::Context->preference("BiblioAddsAuthorities")){ my $headings_linked =BiblioAutoLink($marcrecord, $cgiparams->{'frameworkcode'}); @@ -204,7 +183,6 @@ if ($op eq ""){ } # 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 = ( @@ -226,7 +204,7 @@ if ($op eq ""){ # in France, the cents separator is the , but sometimes, ppl use a . # 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 = $num->unformat_number($price); + $price = Koha::Number::Price->new($price)->unformat; $orderinfo{gstrate} = $bookseller->{gstrate}; my $c = $c_discount ? $c_discount : $bookseller->{discount} / 100; if ( $bookseller->{listincgst} ) { @@ -246,7 +224,7 @@ if ($op eq ""){ $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 { @@ -255,7 +233,7 @@ if ($op eq ""){ # remove uncertainprice flag if we have found a price in the MARC record $orderinfo{uncertainprice} = 0 if $orderinfo{listprice}; - my ( $basketno, $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 @@ -273,16 +251,23 @@ if ($op eq ""){ 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; } @@ -306,9 +291,14 @@ foreach my $r ( @{$budgets_hierarchy} ) { b_txt => $r->{budget_name}, b_sort1_authcat => $r->{'sort1_authcat'}, b_sort2_authcat => $r->{'sort2_authcat'}, + b_active => $r->{budget_period_active}, b_sel => ( $r->{budget_id} == $budget_id ) ? 1 : 0, }; } + +@{$budget_loop} = + sort { uc( $a->{b_txt}) cmp uc( $b->{b_txt}) } @{$budget_loop}; + $template->param( budget_loop => $budget_loop,); output_html_with_http_headers $input, $cookie, $template->output; @@ -320,13 +310,13 @@ sub import_batches_list { 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}); + 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'}, - num_biblios => $batch->{'num_biblios'}, + num_records => $batch->{'num_records'}, num_items => $batch->{'num_items'}, staged_date => $batch->{'upload_timestamp'}, import_status => $batch->{'import_status'}, @@ -396,12 +386,12 @@ sub import_biblios_list { push @list, \%cellrecord; } - my $num_biblios = $batch->{'num_biblios'}; + my $num_records = $batch->{'num_records'}; my $overlay_action = GetImportBatchOverlayAction($import_batch_id); my $nomatch_action = GetImportBatchNoMatchAction($import_batch_id); my $item_action = GetImportBatchItemAction($import_batch_id); $template->param(biblio_list => \@list, - num_results => $num_biblios, + num_results => $num_records, import_batch_id => $import_batch_id, "overlay_action_${overlay_action}" => 1, overlay_action => $overlay_action, @@ -420,9 +410,9 @@ sub batch_info { comments => $batch->{'comments'}, import_status => $batch->{'import_status'}, upload_timestamp => $batch->{'upload_timestamp'}, - num_biblios => $batch->{'num_biblios'}, - num_items => $batch->{'num_biblios'}); - if ($batch->{'num_biblios'} > 0) { + num_records => $batch->{'num_records'}, + num_items => $batch->{'num_items'}); + if ($batch->{'num_records'} > 0) { if ($batch->{'import_status'} eq 'staged' or $batch->{'import_status'} eq 'reverted') { $template->param(can_commit => 1); }