X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=acqui%2Ffinishreceive.pl;h=d09a40ace0736fc141d010bf17c7efbe4401efa7;hb=b5ac4a852f9b536649f9c40d0b7cdb02ce5e9773;hp=4aa7d4272d314147ac164c6887cae47eb8fa32aa;hpb=0554a91421f02d5ad1175576da8107a1adb5db74;p=koha.git diff --git a/acqui/finishreceive.pl b/acqui/finishreceive.pl index 4aa7d4272d..d09a40ace0 100755 --- a/acqui/finishreceive.pl +++ b/acqui/finishreceive.pl @@ -16,258 +16,103 @@ # 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., 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 - - -=head1 NAME - -finishreceive.pl - -=head1 DESCRIPTION -TODO - -=head1 CGI PARAMETERS - -=over 4 - -TODO - -=back - -=cut +# 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. use strict; +use warnings; +use CGI; +use C4::Auth; use C4::Output; +use C4::Context; use C4::Acquisition; use C4::Biblio; -use CGI; +use C4::Items; 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, +use List::MoreUtils qw/any/; + +my $input=new CGI; +my $flagsrequired = {acquisition => 'order_receive'}; + +checkauth($input, 0, $flagsrequired, 'intranet'); + +my $user=$input->remote_user; +my $biblionumber = $input->param('biblionumber'); +my $biblioitemnumber=$input->param('biblioitemnumber'); +my $ordernumber=$input->param('ordernumber'); +my $origquantityrec=$input->param('origquantityrec'); +my $quantityrec=$input->param('quantityrec'); +my $quantity=$input->param('quantity'); +my $unitprice=$input->param('cost'); +my $invoiceno=$input->param('invoice'); +my $datereceived=$input->param('datereceived'); +my $replacement=$input->param('rrp'); +my $gst=$input->param('gst'); +my $freight=$input->param('freight'); +my $booksellerid = $input->param('booksellerid'); +my $cnt=0; +my $error_url_str; +my $ecost = $input->param('ecost'); +my $note = $input->param("note"); + +#need old recievedate if we update the order, parcel.pl only shows the right parcel this way FIXME +if ($quantityrec > $origquantityrec ) { + # now, add items if applicable + if (C4::Context->preference('AcqCreateItem') eq 'receiving') { + + 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'); + #Rebuilding ALL the data for items into a hash + # parting them on $itemid. + my %itemhash; + my $countdistinct; + my $range=scalar(@itemid); + for (my $i=0; $i<$range; $i++){ + unless ($itemhash{$itemid[$i]}){ + $countdistinct++; + } + push @{$itemhash{$itemid[$i]}->{'tags'}},$tags[$i]; + push @{$itemhash{$itemid[$i]}->{'subfields'}},$subfields[$i]; + push @{$itemhash{$itemid[$i]}->{'field_values'}},$field_values[$i]; + push @{$itemhash{$itemid[$i]}->{'ind_tag'}},$ind_tag[$i]; + 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'},'ITEM'); + my $record=MARC::Record::new_from_xml($xml, 'UTF-8'); + my (undef,$bibitemnum,$itemnumber) = AddItemFromMarc($record,$biblionumber); + NewOrderItem($itemnumber, $ordernumber); + } } -); - -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 @biblioitems = &GetBiblioItemByBiblioNumber($biblionumber); -my $biblioitemcount = scalar @biblioitems; - -( 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 orderreceive.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/orderreceive.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 - - &ModOrderBiblioNumber($biblioitemnumber,$ordnum, $biblionumber); - 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 - ); + # save the quantity received. + $datereceived = ModReceiveOrder($biblionumber,$ordernumber, $quantityrec ,$user,$unitprice,$invoiceno,$freight,$replacement,undef,$datereceived); +} - if ($error) - { #if newitems failes then display error, and send them back to orderreceive.pl???? +update_item( $_ ) foreach GetItemnumbersFromOrder( $ordernumber ); - print $input->redirect( - "/cgi-bin/koha/acqui/orderreceive.pl?recieve=$ordnum&biblio=$biblionumber&invoice=$invoiceno&supplierid=$supplierid&freight=$freight&gst=$gst&newitemfailed=1" - ); - } +print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoice=$invoiceno&booksellerid=$booksellerid&freight=$freight&gst=$gst&datereceived=$datereceived$error_url_str"); - 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 ); +################################ End of script ################################ - 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, - ); +sub update_item { + my ( $itemnumber ) = @_; - 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 { - - # print $input->header; - DelOrder( $biblionumber, $ordnum ); - print $input->redirect("/acquisitions/"); - } + ModItem( { + booksellerid => $booksellerid, + dateaccessioned => $datereceived, + price => $unitprice, + replacementprice => $replacement, + replacementpricedate => $datereceived, + }, $biblionumber, $itemnumber ); }