Koha/acqui/finishreceive.pl
sushi 7bd1980eca Merging Katipo changes.
call to receiveorder() now takes $bookfund as arg.
Mason's ACQ fixes from HLT-DEV , work in progress
Added regex to convert & to %26 before redirect to receive.pl.
Now has error alert for blank barcode field, and little tidyup.
finishreceive.pl now updates aqorder table's order record with lastest added biblioitem for that order, so ordersearch() now returns the acq-orders most recently created bibitem info, instead of the initally created biblitem info.
Now redirects back to acquire.pl if barcode exists or newitems() fails.
Now allows user to create a new biblioitem/item using a checkbox.
Adding option so magazines make new biblioitems as well as items - in testing stage
adding in the update for the replacement cost on the item table when editing a received order via
adding a bit to allow hlt to edit received order bit and not fail on duplicate barcode
added elsif to handle dup barcode error.
Fix to handle dup barcodes for newitem(), displays error the goes back to acquire.pl.
Now checks to see if newly created item is currently reserved.
Fix for the receive periodicals bit
Catching any errors when making items
More bugfixing this time a bug not saving volume info
Fix for bug 3529, allow freight to be distributed among the items
Now saves modified fields.
2006-06-07 03:47:50 +00:00

261 lines
9.8 KiB
Perl
Executable file

#!/usr/bin/perl
#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 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 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., 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 {
# print $input->header;
delorder( $biblionumber, $ordnum );
print $input->redirect("/acquisitions/");
}
}