neworderbiblio.pl replaces newbasket2.pl
[koha_fer] / acqui / newbiblio.pl
index 3f85931..23d453a 100755 (executable)
@@ -3,7 +3,6 @@
 #script to show display basket of orders
 #written by chris@katipo.co.nz 24/2/2000
 
-
 # Copyright 2000-2002 Katipo Communications
 #
 # This file is part of Koha.
 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
 # Suite 330, Boston, MA  02111-1307 USA
 
+
+=head1 NAME
+
+newbiblio.pl
+
+=head1 DESCRIPTION
+this script allows to create a new record to order it. This record shouldn't exist
+on database.
+
+=head1 CGI PARAMETERS
+
+=over 4
+
+=item booksellerid
+the bookseller the librarian has to buy a new book.
+
+=item title
+the title of this new record.
+
+=item author
+the author of this new record.
+
+=item copyright
+the copyright of this new record.
+
+=item ordnum
+the number of this order.
+
+=item biblio
+
+=item basketno
+the basket number for this new order.
+
+=item suggestionid
+if this order comes from a suggestion.
+
+=item close
+
+=back
+
+=cut
+
 use strict;
 use CGI;
 use C4::Context;
+use C4::Input;
+use C4::Database;
+use C4::Auth;
+use C4::Bookfund;
+use C4::Bookseller;
 use C4::Acquisition;
+use C4::Suggestions;
+use C4::Biblio;
 use C4::Search;
-use C4::Auth;
 use C4::Output;
+use C4::Input;
+use C4::Koha;
 use C4::Interface::CGI::Output;
-use C4::Database;
 use HTML::Template;
+use C4::Members;
 
-my $input=new CGI;
-my $id=$input->param('id');
-my $title=$input->param('title');
-my $author=$input->param('author');
-my $copyright=$input->param('copyright');
-my ($count,@booksellers)=bookseller($id);
-my $ordnum=$input->param('ordnum');
-my $biblio=$input->param('biblio');
-my $basket=$input->param('basket');
+my $input        = new CGI;
+my $booksellerid = $input->param('booksellerid');
+my $title        = $input->param('title');
+my $author       = $input->param('author');
+my $copyright    = $input->param('copyright');
+my @booksellers  = GetBookSeller($booksellerid);
+my $count        = scalar @booksellers;
+my $ordnum       = $input->param('ordnum');
+my $biblio       = $input->param('biblio');
+my $basketno     = $input->param('basketno');
+my $suggestionid = $input->param('suggestionid');
+# my $donation     = $input->param('donation');
+my $close        = $input->param('close');
 my $data;
 my $new;
 my $dbh = C4::Context->dbh;
-if ($ordnum eq ''){
-       $new='yes';
-       $ordnum=newordernum;
-       if ($biblio) {
-                       $data=bibdata($biblio);
-       }
-       if ($data->{'title'} eq ''){
-               $data->{'title'}=$title;
-               $data->{'author'}=$author;
-               $data->{'copyrightdate'}=$copyright;
-       }
-}else {
-       $data=getsingleorder($ordnum);
-       $biblio=$data->{'biblionumber'};
+
+if ( $ordnum eq '' ) {    # create order
+    $new = 'yes';
+
+    #  $ordnum=newordernum;
+    if ( $biblio && !$suggestionid ) {
+        $data = bibdata($biblio);
+    }
+
+# get suggestion fields if applicable. If it's a subscription renewal, then the biblio already exists
+# otherwise, retrieve suggestion information.
+    if ($suggestionid) {
+        if ($biblio) {
+            $data = bibdata($biblio);
+        }
+        else {
+            $data = GetSuggestion($suggestionid);
+        }
+    }
+    if ( $data->{'title'} eq '' ) {
+        $data->{'title'}         = $title;
+        $data->{'author'}        = $author;
+        $data->{'copyrightdate'} = $copyright;
+    }
 }
-my ($template, $loggedinuser, $cookie)
-    = get_template_and_user({template_name => "acqui/newbiblio.tmpl",
-                            query => $input,
-                            type => "intranet",
-                            authnotrequired => 0,
-                            flagsrequired => {acquisition => 1},
-                            debug => 1,
-                            });
-
-#my ($count2,$currencies)=getcurrencies;
-my ($count,$rates)=getcurrencies();
-my @loop_currency = ();
-for (my $i=0;$i<$count;$i++){
-       my %line;
-       $line{currency} = $rates->[$i]->{'currency'};
-       $line{rate} = $rates->[$i]->{'rate'};
-       push @loop_currency, \%line;
+else {    #modify order
+    $data   = GetSingleOrder($ordnum);
+    $biblio = $data->{'biblionumber'};
+    #get basketno and suppleirno. too!
+    my $data2 = GetBasket( $data->{'basketno'} );
+    $basketno     = $data2->{'basketno'};
+    $booksellerid = $data2->{'booksellerid'};
 }
 
-my $sth=$dbh->prepare("Select itemtype,description from itemtypes order by description");
-$sth->execute;
-my  @itemtype;
-my %itemtypes;
-push @itemtype, "";
-$itemtypes{''} = "Please choose";
-while (my ($value,$lib) = $sth->fetchrow_array) {
-       push @itemtype, $value;
-       $itemtypes{$value}=$lib;
+my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
+    {
+        template_name   => "acqui/newbiblio.tmpl",
+        query           => $input,
+        type            => "intranet",
+        authnotrequired => 0,
+        flagsrequired   => { acquisition => 1 },
+        debug           => 1,
+    }
+);
+
+# get currencies (for change rates calcs if needed)
+my @rates = GetCurrencies();
+my $count = scalar @rates;
+
+my @loop_currency = ();
+for ( my $i = 0 ; $i < $count ; $i++ ) {
+    my %line;
+    $line{currency} = $rates[$i]->{'currency'};
+    $line{rate}     = $rates[$i]->{'rate'};
+    push @loop_currency, \%line;
 }
 
-my $CGIitemtype=CGI::scrolling_list( -name     => 'format',
-                       -values   => \@itemtype,
-                       -default  => $data->{'itemtype'},
-                       -labels   => \%itemtypes,
-                       -size     => 1,
-                       -multiple => 0 );
-$sth->finish;
-
-my @branches;
-my @select_branch;
-my %select_branches;
-my ($count2,@branches)=branches();
-for (my $i=0;$i<$count2;$i++){
-       push @select_branch, $branches[$i]->{'branchcode'};#
-       $select_branches{$branches[$i]->{'branchcode'}} = $branches[$i]->{'branchname'};
+# build itemtype list
+my $itemtypes = GetItemTypes;
+
+my @itemtypesloop;
+my %itemtypesloop;
+foreach my $thisitemtype (sort keys %$itemtypes) {
+    push @itemtypesloop, $itemtypes->{$thisitemtype}->{'itemtype'};
+    $itemtypesloop{$itemtypes->{$thisitemtype}->{'itemtype'}} =        $itemtypes->{$thisitemtype}->{'description'};
 }
-my $CGIbranch=CGI::scrolling_list( -name     => 'branch',
-                       -values   => \@select_branch,
-                       -default  => $data->{'branchcode'},
-                       -labels   => \%select_branches,
-                       -size     => 1,
-                       -multiple => 0 );
-
-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 eq '1') {
-       $sth=$dbh->prepare("Select max(barcode) from items");
-       $sth->execute;
-       my $data=$sth->fetchrow_hashref;
-       $barcode = $data->{'barcode'}+1;
-       $sth->finish;
+
+my $CGIitemtype = CGI::scrolling_list(
+    -name     => 'format',
+    -values   => \@itemtypesloop,
+    -default  => $data->{'itemtype'},
+    -labels   => \%itemtypesloop,
+    -size     => 1,
+    -multiple => 0
+);
+
+# build branches list
+my $branches = GetBranches;
+my @branchloop;
+foreach my $thisbranch ( sort keys %$branches ) {
+     my %row = (
+        value      => $thisbranch,
+        branchname => $branches->{$thisbranch}->{'branchname'},
+    );
+    push @branchloop, \%row;
 }
+$template->param( branchloop => \@branchloop );
+
+# build bookfund list
+my ($flags, $homebranch) = GetFlagsAndBranchFromBorrower($loggedinuser);
 
+my $count2;
 my @bookfund;
 my @select_bookfund;
 my %select_bookfunds;
-($count2,@bookfund)=bookfunds();
-for (my $i=0;$i<$count2;$i++){
-       push @select_bookfund, $bookfund[$i]->{'bookfundid'};
-       $select_bookfunds{$bookfund[$i]->{'bookfundid'}} = $bookfund[$i]->{'bookfundname'}
+
+@bookfund = GetBookFunds($homebranch);
+$count2 = scalar @bookfund;
+
+for ( my $i = 0 ; $i < $count2 ; $i++ ) {
+    push @select_bookfund, $bookfund[$i]->{'bookfundid'};
+    $select_bookfunds{ $bookfund[$i]->{'bookfundid'} } =
+      $bookfund[$i]->{'bookfundname'};
+}
+my $CGIbookfund = CGI::scrolling_list(
+    -name     => 'bookfund',
+    -values   => \@select_bookfund,
+    -default  => $data->{'bookfundid'},
+    -labels   => \%select_bookfunds,
+    -size     => 1,
+    -multiple => 0
+);
+
+my $bookfundname;
+my $bookfundid;
+if ($close) {
+    $bookfundid   = $data->{'bookfundid'};
+    $bookfundname = $select_bookfunds{$bookfundid};
+}
+
+#Build sort lists
+my $CGIsort1 = buildCGIsort( "Asort1", "sort1", $data->{'sort1'} );
+if ($CGIsort1) {
+    $template->param( CGIsort1 => $CGIsort1 );
 }
-my $CGIbookfund=CGI::scrolling_list( -name     => 'bookfund',
-                       -values   => \@select_bookfund,
-                       -default  => $data->{'bookfundid'},
-                       -labels   => \%select_bookfunds,
-                       -size     => 1,
-                       -multiple => 0 );
-
-$template->param( existing => $biblio,
-                                               title => $title,
-                                               ordnum => $ordnum,
-                                               basket => $basket,
-                                               id => $id,
-                                               biblio => $biblio,
-                                               biblioitemnumber => $data->{'biblioitemnumber'},
-                                               itemtype => $data->{'itemtype'},
-                                               discount => $booksellers[0]->{'discount'},
-                                               listincgst => $booksellers[0]->{'listincgst'},
-                                               listprice => $booksellers[0]->{'listprice'},
-                                               gstreg => $booksellers[0]->{'gstreg'},
-                                               name => $booksellers[0]->{'name'},
-                                               currency => $booksellers[0]->{'listprice'},
-                                               gstrate => C4::Context->preference("gist") ,
-                                               loop_currencies => \@loop_currency,
-                                               orderexists => ($new eq 'yes')?0:1,
-                                               title => $data->{'title'},
-                                               author => $data->{'author'},
-                                               copyrightdate => $data->{'copyrightdate'},
-                                               CGIitemtype => $CGIitemtype,
-                                               CGIbranch => $CGIbranch,
-                                               CGIbookfund => $CGIbookfund,
-                                               isbn => $data->{'isbn'},
-                                               seriestitle => $data->{'seriestitle'},
-                                               quantity => $data->{'quantity'},
-                                               listprice => $data->{'listprice'},
-                                               rrp => $data->{'rrp'},
-                                               ecost => $data->{'ecost'},
-                                               notes => $data->{'notes'},
-                                               sort1 => $data->{'sort1'},
-                                               sort2 => $data->{'sort2'},
-                                               barcode => $data->{'barcode'},
-                                               publishercode => $data->{'publishercode'});
+else {
+    $template->param( sort1 => $data->{'sort1'} );
+}
+
+my $CGIsort2 = buildCGIsort( "Asort2", "sort2", $data->{'sort2'} );
+if ($CGIsort2) {
+    $template->param( CGIsort2 => $CGIsort2 );
+}
+else {
+    $template->param( sort2 => $data->{'sort2'} );
+}
+
+my $bibitemsexists;
+
+#do a biblioitems lookup on bib
+my @bibitems = GetBiblioItemByBiblioNumber($biblio);
+my $bibitemscount = scalar @bibitems;
+
+if ( $bibitemscount > 0 ) {
+    # warn "NEWBIBLIO: bibitems for $biblio exists\n";
+    # warn Dumper $bibitemscount, @bibitems;
+    $bibitemsexists = 1;
+
+    my @bibitemloop;
+    for ( my $i = 0 ; $i < $bibitemscount ; $i++ ) {
+        my %line;
+        $line{biblioitemnumber} = $bibitems[$i]->{'biblioitemnumber'};
+        $line{isbn}             = $bibitems[$i]->{'isbn'};
+        $line{itemtype}         = $bibitems[$i]->{'itemtype'};
+        $line{volumeddesc}      = $bibitems[$i]->{'volumeddesc'};
+        push( @bibitemloop, \%line );
+
+        $template->param( bibitemloop => \@bibitemloop );
+    }
+    $template->param( bibitemexists => "1" );
+}
+
+# fill template
+$template->param(
+    close        => $close,
+    bookfundid   => $bookfundid,
+    bookfundname => $bookfundname
+  )
+  if ($close);
+
+$template->param(
+    existing         => $biblio,
+    title            => $title,
+    ordnum           => $ordnum,
+    basketno         => $basketno,
+    booksellerid     => $booksellerid,
+    suggestionid     => $suggestionid,
+    biblio           => $biblio,
+    biblioitemnumber => $data->{'biblioitemnumber'},
+    itemtype         => $data->{'itemtype'},
+    discount         => $booksellers[0]->{'discount'},
+    listincgst       => $booksellers[0]->{'listincgst'},
+    listprice        => $booksellers[0]->{'listprice'},
+    gstreg           => $booksellers[0]->{'gstreg'},
+    invoiceinc       => $booksellers[0]->{'invoiceincgst'},
+    invoicedisc      => $booksellers[0]->{'invoicedisc'},
+    nocalc           => $booksellers[0]->{'nocalc'},
+    name             => $booksellers[0]->{'name'},
+    currency         => $booksellers[0]->{'listprice'},
+    gstrate          => C4::Context->preference("gist"),
+    loop_currencies  => \@loop_currency,
+    orderexists      => ( $new eq 'yes' ) ? 0 : 1,
+    title            => $data->{'title'},
+    author           => $data->{'author'},
+    copyrightdate    => $data->{'copyrightdate'},
+    CGIitemtype      => $CGIitemtype,
+    CGIbookfund      => $CGIbookfund,
+    isbn             => $data->{'isbn'},
+    seriestitle      => $data->{'seriestitle'},
+    quantity         => $data->{'quantity'},
+    listprice        => $data->{'listprice'},
+    rrp              => $data->{'rrp'},
+    invoice          => $data->{'booksellerinvoicenumber'},
+    ecost            => $data->{'ecost'},
+    notes            => $data->{'notes'},
+    publishercode    => $data->{'publishercode'},
+#     donation         => $donation
+);
 
 output_html_with_http_headers $input, $cookie, $template->output;