Merging Katipo changes.
[koha_fer] / acqui / finishreceive.pl
index fe689ed..95aa0f6 100755 (executable)
@@ -3,7 +3,6 @@
 #script to add a new item and to mark orders as received
 #written 1/3/00 by chris@katipo.co.nz
 
-
 # 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
 
+# this script makes the items, addorder.pl has already made the biblio and biblioitem records: MASON
+
 use strict;
 use C4::Output;
 use C4::Acquisition;
 use C4::Biblio;
 use CGI;
 use C4::Search;
+use C4::Circulation::Circ2;
+use C4::Reserves2;
+use C4::Interface::CGI::Output;
+use C4::Auth;
+use HTML::Template;
+
+#use Data::Dumper;
+
+my $input = new CGI;
+my $dbh   = C4::Context->dbh;
+
+my ( $template, $borrowernumber, $cookie ) = get_template_and_user(
+    {
+        template_name   => "acqui/finishreceive.tmpl",
+        query           => $input,
+        type            => "intranet",
+        authnotrequired => 0,
+        flagsrequired   => { editcatalogue => 1 },
+        debug           => 1,
+    }
+);
+
+my $user             = $input->remote_user;
+my $biblionumber     = $input->param('biblio');
+my $biblioitemnumber = $input->param('biblioitemnum');
+my $ordnum           = $input->param('ordnum');
+my $cost             = $input->param('cost');
+my $invoiceno        = $input->param('invoice');
+my $replacement    = $input->param('rrp');
+my $gst            = $input->param('gst');
+my $freight        = $input->param('freight');
+my $freightperitem = $input->param('freightperitem');
+my $supplierid     = $input->param('supplierid');
+my $title         = $input->param('title');
+my $author        = $input->param('author');
+my $copyrightdate = $input->param('copyrightdate');
+my $itemtype      = $input->param('format');
+my $isbn          = $input->param('ISBN');
+my $seriestitle   = $input->param('series');
+my $branch        = $input->param('branch');
+my $holdingbranch = $branch;
+my $barcode       = $input->param('barcode');
+my $bookfund      = $input->param('bookfund');
+my $quantity      = $input->param('quantity');
+my $quantrec      = $input->param('quantityrec');
+my $ecost         = $input->param('ecost');
+my $unitprice     = $input->param('unitprice');
+my $notes         = $input->param('notes');
+my $booksellers   = $input->param('booksellers');
+my $foo           = $input->param('foo');
+my $volinf        = $input->param('volinf');
+my $catview = $input->param('catview');    # for editing from moredetail.tmpl
+my $barcodeexists = $input->param('barcodeexists');  # if barcode exists
+my $newitemfailed = $input->param('newitemfailed');  # if create new item failed
+my $createbibitem =
+  $input->param('createbibitem');    # user wants to create a new bibitem
+
+#get additional info on bib and bibitem from dbase for additional needed fields before modbiblio.
+( my $bibliocount,     my @biblios )     = &getbiblio($biblionumber);
+( my $biblioitemcount, my @biblioitems ) =
+  &getbiblioitembybiblionumber($biblionumber);
+( my $itemscount, my @items ) = &getitemsbybiblioitem($biblioitemnumber);
+
+my $bibliohash = {
+    biblionumber  => $biblionumber,
+    title         => $title,
+    author        => $author,
+    abstract      => $biblios[0]->{'abstract'},
+    copyrightdate => $copyrightdate,
+    seriestitle   => $seriestitle,
+    serial        => $biblios[0]->{'serial'},
+    unititle      => $biblios[0]->{'unititle'},
+    notes         => $biblios[0]->{'notes'}
+};
+
+my $biblioitemhash = {
+    illus            => $biblioitems[0]->{'illus'},
+    number           => $biblioitems[0]->{'number'},
+    itemtype         => $itemtype,
+    place            => $biblioitems[0]->{'place'},
+    biblioitemnumber => $biblioitemnumber,
+    issn             => $biblioitems[0]->{'issn'},
+    size             => $biblioitems[0]->{'size'},
+    marc             => $biblioitems[0]->{'marc'},
+    timestamp        => $biblioitems[0]->{'timestamp'},
+    biblionumber     => $biblionumber,
+    url              => $biblioitems[0]->{'url'},
+    dewey            => $biblioitems[0]->{'dewey'},
+    isbn             => $isbn,
+    publishercode    => $biblioitems[0]->{'publishercode'},
+    lccn             => $biblioitems[0]->{'iccn'},
+    volume           => $biblioitems[0]->{'volume'},
+    subclass         => $biblioitems[0]->{'subclass'},
+    notes            => $biblioitems[0]->{'notes'},
+    classification   => $biblioitems[0]->{'classification'},
+    volumeddesc      => $volinf,
+    publicationyear  => $biblioitems[0]->{'publicationyear'},
+    volumedate       => $biblioitems[0]->{'volumedate'},
+    pages            => $biblioitems[0]->{'pages'}
+};
+
+my $itemhash = {
+    biblionumber   => $biblionumber,
+    itemnum        => $items[0]->{'itemnumber'},
+    barcode        => $barcode,
+    notes          => $items[0]->{'notes'},
+    itemcallnumber => $items[0]->{'itemcallnumber'},
+    notforloan     => $items[0]->{'notforloan'},
+    location       => $items[0]->{'location'},
+    bibitemnum     => $biblioitemnumber,
+    homebranch     => $items[0]->{'homebranch'},
+    lost           => $items[0]->{'itemlost'},
+    withdrawn      => $items[0]->{'withdrawn'},
+    holdingbranch  => $items[0]->{'holdingbranch'},
+    replacement    => $replacement
+};
+
+# check if barcode exists, if so redirect back to acquire.pl and give message
+my $error = &checkitems( 1, $barcode );
+#warn "barcode check for $barcode result = $error";
+if ($error) {
+    print $input->redirect(
+               "/cgi-bin/koha/acqui/acquire.pl?recieve=$ordnum&biblio=$biblionumber&invoice=$invoiceno&supplierid=$supplierid&freight=$freight&gst=$gst&barcodeexists=$barcode"
+    );
+}
+# or if barcode is blank
+else {
+
+    if ( $createbibitem eq "YES" ) {
+        &modbiblio($bibliohash);
+        $biblioitemnumber = &newbiblioitem($biblioitemhash);
+
+#lets do a lookup on aqorders, with ordnum, then insert biblioitem fiels with new biblioitem number
+
+        my $query =
+          "UPDATE aqorders SET biblioitemnumber = ? where ordernumber = ? 
+               and biblionumber =  ?";
+        my $sth = $dbh->prepare($query);
+        my $error = $sth->execute( $biblioitemnumber, $ordnum, $biblionumber );
+        #warn Dumper $error;
+        $sth->fetchrow_hashref;
+        $sth->finish;
+    }
+    else {
+        &modbiblio($bibliohash);
+        &modbibitem($biblioitemhash);
+    }
+
+    if ($catview) {
+        &moditem($itemhash);
+        print $input->redirect(
+"/cgi-bin/koha/moredetail.pl?type=$itemtype&bib=$biblionumber&bi=$biblioitemnumber"
+        );
+    }
+
+    if ( $quantity != 0 ) {
+        # save the quantity recieved.
+        receiveorder( $biblionumber, $ordnum, $quantrec, $user, $cost,
+            $invoiceno, $freightperitem, $bookfund, $replacement );
+
+        # create items if the user has entered barcodes
+        my @barcodes = split( /\,| |\|/, $barcode );    #WTF?
+
+        my ($error) = newitems(
+            {
+                biblioitemnumber => $biblioitemnumber,
+                biblionumber     => $biblionumber,
+                replacementprice => $replacement,
+                price            => $cost,
+                booksellerid     => $supplierid,
+                homebranch       => $branch,
+                loan             => 0
+            },
+            @barcodes
+        );
+
+        if ($error)
+        { #if  newitems failes then display error, and send them back to acquire.pl????
+
+            print $input->redirect(
+                       "/cgi-bin/koha/acqui/acquire.pl?recieve=$ordnum&biblio=$biblionumber&invoice=$invoiceno&supplierid=$supplierid&freight=$freight&gst=$gst&newitemfailed=1"
+            );
+        }
+
+        elsif ( $itemtype ne 'P' && $itemtype ne 'PP' ) {   # chris's new if bit
+            my %env;
+            my $item = getiteminformation( \%env, 0, $barcode );
+            my ( $resfound, $resrec ) = CheckReserves( 0, $barcode );
+
+            if ($resfound) {                                # reserves is found
+                my ($borrower) =
+                  getpatroninformation( \%env, $resrec->{'borrowernumber'}, 0 );
+                $template->param(
+                    borrowernumber => $borrower->{'borrowernumber'},
+                    cardnumber     => $borrower->{'cardnumber'},
+                    firstname      => $borrower->{'firstname'},
+                    surname        => $borrower->{'surname'},
+                    invoice        => $invoiceno,
+                    id             => $supplierid,
+                    freight        => $freight,
+                    gst            => $gst,
+                    items          => $quantity,
+                    ordnum         => $ordnum,
+                    biblionumber   => $biblionumber,
+                    barcode        => $barcode,
+                );
+
+                output_html_with_http_headers $input, $cookie,
+                  $template->output;
+            }
+            else {    #no reserves found
+                $invoiceno =~
+                  s/\&/\%26/g;   # swapping pesky & with url friendly hex codes.
+                print $input->redirect(
+                       "/cgi-bin/koha/acqui/receive.pl?invoice=$invoiceno&supplierid=$supplierid&freight=$freight&gst=$gst&quantity=$quantity"
+                );
+            }
+        }
+        else {
+            print $input->redirect(
+                "/cgi-bin/koha/loadmodules.pl?module=acquisitions")
+              ;    # chris's new bit
+        }    # end of if
+    }
+    else {
 
-my $input=new CGI;
-
-my $user=$input->remote_user;
-my $biblionumber = $input->param('biblio');
-my $bibitemno=$input->param('biblioitemnum');
-my $ordnum=$input->param('ordnum');
-my $quantrec=$input->param('quantityrec');
-my $quantity=$input->param('quantity');
-my $cost=$input->param('cost');
-my $invoiceno=$input->param('invoice');
-my $replacement=$input->param('rrp');
-my $gst=$input->param('gst');
-my $freight=$input->param('freight');
-my $supplierid = $input->param('supplierid');
-my $branch=$input->param('branch');
-
-# if ($quantrec != 0){
-#      $cost /= $quantrec;
-# }
-
-if ($quantity != 0) {
-       # save the quantity recieved.
-       receiveorder($biblionumber,$ordnum,$quantrec,$user,$cost,$invoiceno,$freight,$replacement);
-       # create items if the user has entered barcodes
-       my $barcode=$input->param('barcode');
-       my @barcodes=split(/\,| |\|/,$barcode);
-       my ($error) = newitems({ biblioitemnumber => $bibitemno,
-                                       biblionumber     => $biblionumber,
-                                       replacementprice => $replacement,
-                                       price            => $cost,
-                                       booksellerid     => $supplierid,
-                                       homebranch       => $branch,
-                                       loan             => 0 },
-                               @barcodes);
-       print $input->redirect("/cgi-bin/koha/acqui/receive.pl?invoice=$invoiceno&supplierid=$supplierid&freight=$freight&gst=$gst");
-} else {
-       print $input->header;
-       delorder($biblionumber,$ordnum);
-       print $input->redirect("/acquisitions/");
+        #        print $input->header;
+        delorder( $biblionumber, $ordnum );
+        print $input->redirect("/acquisitions/");
+    }
 }