X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=acqui%2Faddorder.pl;h=8f9d7e42e28a0af2ea3dfa2589b3ca1636d94aa7;hb=b29493265b3ae9f660eee2d4b911da036d100b0d;hp=d7f7e96363b1c500eba805708a909fe49256fed0;hpb=f029e9aba7d6c03b3c8e19697af31071b595dcc9;p=koha.git diff --git a/acqui/addorder.pl b/acqui/addorder.pl index d7f7e96363..8f9d7e42e2 100755 --- a/acqui/addorder.pl +++ b/acqui/addorder.pl @@ -7,18 +7,18 @@ # # 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 . =head1 NAME @@ -121,13 +121,17 @@ if it is an order from an existing suggestion : the id of this suggestion. use strict; use warnings; -use CGI; -use C4::Auth; # get_template_and_user -use C4::Acquisition; # NewOrder DelOrder ModOrder -use C4::Suggestions; # ModStatus -use C4::Biblio; # AddBiblio TransformKohaToMarc +use CGI qw ( -utf8 ); +use C4::Auth; # get_template_and_user +use C4::Acquisition; # ModOrder +use C4::Suggestions; # ModStatus +use C4::Biblio; # AddBiblio TransformKohaToMarc +use C4::Budgets; use C4::Items; use C4::Output; +use Koha::Acquisition::Currencies; +use Koha::Acquisition::Orders; +use C4::Barcodes; ### "-------------------- addorder.pl ----------" @@ -135,12 +139,83 @@ use C4::Output; # not just blindly call C4 functions and print a redirect. my $input = new CGI; -### $input + +# Check if order total amount exceed allowed budget +my $confirm_budget_exceeding = $input->param('confirm_budget_exceeding'); +unless($confirm_budget_exceeding) { + my $budget_id = $input->param('budget_id'); + my $total = $input->param('total'); + my $budget = GetBudget($budget_id); + my $budget_spent = GetBudgetSpent($budget_id); + my $budget_ordered = GetBudgetOrdered($budget_id); + my $budget_used = $budget_spent + $budget_ordered; + my $budget_remaining = $budget->{budget_amount} - $budget_used; + my $budget_encumbrance = $budget->{budget_amount} * $budget->{budget_encumb} / 100; + my $budget_expenditure = $budget->{budget_expend}; + + if ( $total > $budget_remaining + || ( ($budget_encumbrance+0) && ($budget_used + $total) > $budget_encumbrance) + || ( ($budget_expenditure+0) && ($budget_used + $total) > $budget_expenditure) ) + { + my ($template, $loggedinuser, $cookie) = get_template_and_user({ + template_name => "acqui/addorder.tt", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => {acquisition => 'order_manage'}, + }); + + my $url = $input->referer(); + unless ( defined $url ) { + my $basketno = $input->param('basketno'); + $url = "/cgi-bin/koha/acqui/basket.pl?basketno=$basketno"; + } + + my $vars = $input->Vars; + my @vars_loop; + foreach (keys %$vars) { + push @vars_loop, { + name => $_, + values => [$input->param($_)], + }; + } + + if( ($budget_encumbrance+0) && ($budget_used + $total) > $budget_encumbrance + && $total <= $budget_remaining) + { + $template->param( + encumbrance_exceeded => 1, + encumbrance => sprintf("%.2f", $budget->{'budget_encumb'}), + ); + } + if( ($budget_expenditure+0) && ($budget_used + $total) > $budget_expenditure + && $total <= $budget_remaining ) + { + my $currency = Koha::Acquisition::Currencies->get_active; + $template->param( + expenditure_exceeded => 1, + expenditure => sprintf("%.2f", $budget_expenditure), + currency => ($currency) ? $currency->symbol : '', + ); + } + if($total > $budget_remaining){ + $template->param(budget_exceeded => 1); + } + + $template->param( + not_enough_budget => 1, + referer => $url, + vars_loop => \@vars_loop, + ); + output_html_with_http_headers $input, $cookie, $template->output; + exit; + } +} # get_template_and_user used only to check auth & get user id my ( $template, $loggedinuser, $cookie ) = get_template_and_user( { - template_name => "acqui/booksellers.tmpl", + template_name => "acqui/booksellers.tt", query => $input, type => "intranet", authnotrequired => 0, @@ -150,92 +225,83 @@ my ( $template, $loggedinuser, $cookie ) = get_template_and_user( ); # get CGI parameters -my $orderinfo = $input->Vars; +my $orderinfo = $input->Vars; $orderinfo->{'list_price'} ||= 0; $orderinfo->{'uncertainprice'} ||= 0; -#my $ordernumber = $input->param('ordernumber'); -#my $basketno = $input->param('basketno'); -#my $booksellerid = $input->param('booksellerid'); -#my $existing = $input->param('existing'); # existing biblio, (not basket or order) -#my $title = $input->param('title'); -#my $author = $input->param('author'); -#my $publicationyear= $input->param('publicationyear'); -#my $isbn = $input->param('ISBN'); -#my $itemtype = $input->param('format'); -#my $quantity = $input->param('quantity'); # FIXME: else ERROR! -#my $branch = $input->param('branch'); -#my $series = $input->param('series'); -#my $notes = $input->param('notes'); -#my $budget_id = $input->param('budget_id'); -#my $sort1 = $input->param('sort1'); -#my $sort2 = $input->param('sort2'); -#my $rrp = $input->param('rrp'); -#my $ecost = $input->param('ecost'); -#my $gst = $input->param('GST'); -#my $budget = $input->param('budget'); -#my $cost = $input->param('cost'); -#my $sub = $input->param('sub'); -#my $purchaseorder = $input->param('purchaseordernumber'); -#my $invoice = $input->param('invoice'); -#my $publishercode = $input->param('publishercode'); -#my $suggestionid = $input->param('suggestionid'); -#my $biblionumber = $input->param('biblionumber'); -#my $uncertainprice = $input->param('uncertainprice'); -#my $import_batch_id= $input->param('import_batch_id'); -# -#my $createbibitem = $input->param('createbibitem'); -# -my $user = $input->remote_user; +$orderinfo->{subscriptionid} ||= undef; + +my $basketno=$$orderinfo{basketno}; +my $basket = GetBasket($basketno); + +my $user = $input->remote_user; +my $basketno=$$orderinfo{basketno}; +my $basket = Koha::Acquisition::Baskets->find( $basketno ); + # create, modify or delete biblio -# create if $quantity>=0 and $existing='no' -# modify if $quantity>=0 and $existing='yes' -# delete if $quantity has been set to 0 by the librarian -# delete biblio if delbiblio has been set to 1 by the librarian -my $bibitemnum; -if ( $orderinfo->{quantity} ne '0' ) { +# create if $quantity>0 and $existing='no' +# modify if $quantity>0 and $existing='yes' +if ( $basket->{is_standing} || $orderinfo->{quantity} ne '0' ) { #TODO:check to see if biblio exists unless ( $$orderinfo{biblionumber} ) { - #if it doesnt create it + #if it doesn't create it my $record = TransformKohaToMarc( { "biblio.title" => "$$orderinfo{title}", "biblio.author" => $$orderinfo{author} ? $$orderinfo{author} : "", "biblio.seriestitle" => $$orderinfo{series} ? $$orderinfo{series} : "", "biblioitems.isbn" => $$orderinfo{isbn} ? $$orderinfo{isbn} : "", + "biblioitems.ean" => $$orderinfo{ean} ? $$orderinfo{ean} : "", "biblioitems.publishercode" => $$orderinfo{publishercode} ? $$orderinfo{publishercode} : "", "biblioitems.publicationyear" => $$orderinfo{publicationyear} ? $$orderinfo{publicationyear}: "", "biblio.copyrightdate" => $$orderinfo{publicationyear} ? $$orderinfo{publicationyear}: "", "biblioitems.itemtype" => $$orderinfo{itemtype} ? $$orderinfo{itemtype} : "", + "biblioitems.editionstatement"=> $$orderinfo{editionstatement} ? $$orderinfo{editionstatement} : "", }); + C4::Acquisition::FillWithDefaultValues( $record ); + # create the record in catalogue, with framework '' my ($biblionumber,$bibitemnum) = AddBiblio($record,''); # change suggestion status if applicable if ($$orderinfo{suggestionid}) { - ModSuggestion( {suggestionid=>$$orderinfo{suggestionid}, status=>'ORDERED', biblionumber=>$biblionumber} ); + ModSuggestion( {suggestionid=>$$orderinfo{suggestionid}, STATUS=>'ORDERED', biblionumber=>$biblionumber} ); } - $orderinfo->{biblioitemnumber}=$bibitemnum; - $orderinfo->{biblionumber}=$biblionumber; + $orderinfo->{biblionumber}=$biblionumber; } + $orderinfo->{unitprice} = $orderinfo->{ecost} if not defined $orderinfo->{unitprice} or $orderinfo->{unitprice} eq ''; + + $orderinfo = C4::Acquisition::populate_order_with_prices( + { + order => $orderinfo, + booksellerid => $orderinfo->{booksellerid}, + ordering => 1, + } + ); + # if we already have $ordernumber, then it's an ordermodif - if ($$orderinfo{ordernumber}) { - ModOrder( $orderinfo); + my $order = Koha::Acquisition::Order->new($orderinfo); + if ( $orderinfo->{ordernumber} ) { + ModOrder($orderinfo); + my $order_users_ids = $input->param('users_ids'); + my @order_users = split( /:/, $order_users_ids ); + + ModOrderUsers( $orderinfo->{ordernumber}, @order_users ); } else { # else, it's a new line - @$orderinfo{qw(basketno ordernumber )} = NewOrder($orderinfo); + $order->store; } # now, add items if applicable - 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 @itemid = $input->param('itemid'); - my @ind_tag = $input->param('ind_tag'); - my @indicator = $input->param('indicator'); + if ($basket->effective_create_items eq 'ordering') { + + 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 @itemid = $input->multi_param('itemid'); + my @ind_tag = $input->multi_param('ind_tag'); + my @indicator = $input->multi_param('indicator'); #Rebuilding ALL the data for items into a hash # parting them on $itemid. @@ -253,33 +319,42 @@ if ( $orderinfo->{quantity} ne '0' ) { push @{$itemhash{$itemid[$i]}->{'indicator'}},$indicator[$i]; } foreach my $item (keys %itemhash){ - my $xml = TransformHtmlToXml( $itemhash{$item}->{'tags'}, $itemhash{$item}->{'subfields'}, $itemhash{$item}->{'field_values'}, - $itemhash{$item}->{'ind_tag'}, $itemhash{$item}->{'indicator'}, + $itemhash{$item}->{'ind_tag'}, 'ITEM'); my $record=MARC::Record::new_from_xml($xml, 'UTF-8'); + my ($barcodefield,$barcodesubfield) = GetMarcFromKohaField('items.barcode'); + next unless ( defined $barcodefield && defined $barcodesubfield ); + my $barcode = $record->subfield($barcodefield,$barcodesubfield) || ''; + my $aBpref = C4::Context->preference('autoBarcode'); + if( $barcode eq '' && $aBpref ne 'OFF'){ + my $barcodeobj; + if ( $aBpref eq 'hbyymmincr'){ + my ($homebranchfield,$homebranchsubfield) = GetMarcFromKohaField('items.homebranch'); + my $homebranch = $record->subfield($homebranchfield,$homebranchsubfield); + $barcodeobj = C4::Barcodes->new($aBpref, $homebranch); + } else { + $barcodeobj = C4::Barcodes->new($aBpref); + } + $barcode = $barcodeobj->value(); + $record->field($barcodefield)->delete_subfield( code => $barcodesubfield); + $record->field($barcodefield)->add_subfields($barcodesubfield => $barcode); + } my ($biblionumber,$bibitemnum,$itemnumber) = AddItemFromMarc($record,$$orderinfo{biblionumber}); - NewOrderItem($itemnumber, $$orderinfo{ordernumber}); - + $order->add_item($itemnumber); } } } -else { # qty=0, delete the line - my $biblionumber = $input->param('biblionumber'); - DelOrder( $biblionumber, $$orderinfo{ordernumber} ); - if ($orderinfo->{delbiblio} == 1){ - DelBiblio($biblionumber); - } -} -my $basketno=$$orderinfo{basketno}; my $booksellerid=$$orderinfo{booksellerid}; if (my $import_batch_id=$$orderinfo{import_batch_id}) { print $input->redirect("/cgi-bin/koha/acqui/addorderiso2709.pl?import_batch_id=$import_batch_id&basketno=$basketno&booksellerid=$booksellerid"); +} elsif ( defined $orderinfo->{invoiceid} ) { + print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoiceid=" . $orderinfo->{invoiceid}); } else { print $input->redirect("/cgi-bin/koha/acqui/basket.pl?basketno=$basketno"); }