From c2822e30ed5e53a618bb5dfa75f4937c5ef95102 Mon Sep 17 00:00:00 2001 From: sushi Date: Wed, 12 Jul 2006 14:56:52 +0000 Subject: [PATCH] big change from Katipo. ------------------------------ - Results for 'mutli orders with matching titles attached to same bibitem' now split into new .tmpl file, "acquire-multi-order.tmpl". - this script/tmpl does 3 things!?!, pulled search results out of acquire.pl, now points to searchresults.tmpl. - little fix to display correct supplier info in acquire.pl's 'detail' view. - Little fix on previous commit, now doesnt break single order acquire view. - Fix for RT:698 https://staff.katipo.co.nz/rt/Ticket/Display.html?id=698. - now display correct supplier title when 0 results returned. - Now pickes up basketno, to display as url to tmpl. - Adding in fix for bibitems with more than one matching order. - Rolled back to prod version, added 'create new bib-group' fix. - Mason's ACQ fixes from HLT-DEV , work in progress - Now does a lookup in aqorders, for all existing orders matching biblioitems, then presents all matching orders in a table. this feature can be overridden by calling acquire.pl with multiorderseach=n in url, acquire.pl will instead go to specific order. - Now catches, and returns to acquire.pl if newitems() fails. - Now takes a barcodeerror value as arg. - 'create new biblioitems' checkbox now only apears for bibitems with >= 1 items attached. - adding stuff to let hlt have an accession date link from moredetail.tmpl that actually does something other than break biblioitems - not working yet - Added output for volume as well as volumeddesc - Added volume description to output loop - Making change for bug #3676 displaying date unformatted - More bugfixing this time a bug not saving volume info - Fix for bug 3529, allow freight to be distributed among the items - added a sprintf to get the number displaying in normal notation - Altered the auto_barcode to actually get something other than 1 but now got a problem with the result displaying in scientific notation --- acqui/acquire.pl | 355 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 303 insertions(+), 52 deletions(-) diff --git a/acqui/acquire.pl b/acqui/acquire.pl index e0e96ed734..a0ec757878 100755 --- a/acqui/acquire.pl +++ b/acqui/acquire.pl @@ -25,70 +25,261 @@ use strict; use CGI; use C4::Context; use C4::Acquisition; -use C4::Koha; +use C4::Biblio; +use C4::Output; +use C4::Search; use C4::Auth; use C4::Interface::CGI::Output; +use C4::Database; +use HTML::Template; use C4::Date; +use Data::Dumper; + my $input = new CGI; my $supplierid = $input->param('supplierid'); my $dbh = C4::Context->dbh; -my $search = $input->param('recieve'); -my $invoice = $input->param('invoice'); -my $freight = $input->param('freight'); -my $biblio = $input->param('biblio'); -my $catview = $input->param('catview'); -my $gst = $input->param('gst'); +my $search = $input->param('recieve'); +my $invoice = $input->param('invoice'); +my $freight = $input->param('freight'); +my $biblio = $input->param('biblio'); +my $biblioitem = $input->param('bibitem'); # added my mason 20060324 +my $catview = $input->param('catview'); +my $gst = $input->param('gst'); +my $noitems = $input->param('items'); +my $set_barcode = $input->param('set_barcode'); +my $library_name = C4::Context->preference("LibraryName"); + my ( $count, @results ) = ordersearch( $search, $supplierid, $biblio, $catview ); -# warn "C:$count for ordersearch($search,$supplierid,$biblio,$catview);"; -my ( $count2, @booksellers ) = bookseller( $results[0]->{'booksellerid'} ); -my $date = $results[0]->{'entrydate'}; - -my ( $template, $loggedinuser, $cookie ) = get_template_and_user( - { - template_name => "acqui/acquire.tmpl", - query => $input, - type => "intranet", - authnotrequired => 0, - flagsrequired => { acquisition => 1 }, - debug => 1, - } -); -$template->param($count); -my $sthtemp = - $dbh->prepare( - "Select flags, branchcode from borrowers where borrowernumber = ?"); -$sthtemp->execute($loggedinuser); -my ( $flags, $homebranch ) = $sthtemp->fetchrow; +if ( $library_name eq "Horowhenua Library Trust" && $count > 1 ) { + ( $count, @results ) = ordersearch( $search, $biblio, $catview ); + +} +#warn "COUNT = $count"; +#warn "C:$count for ordersearch($search,$supplierid,$biblio,$catview);"; + +my ( $count2, @booksellers ); if ( $count == 1 ) { + ( $count2, @booksellers ) = bookseller( $results[0]->{'booksellerid'} ); +} +else { + ( $count2, @booksellers ) = bookseller($supplierid); +} + +#warn Dumper @results; + +my $date = $results[0]->{'entrydate'}; +my $exchange = getcurrency( $booksellers[0]->{'listprice'} ); + +my $no_multi = $input->param('no_multi'); + +#------------------------- + +# bugzilla: http://bugzilla.katipo.co.nz/show_bug.cgi?id=3916 , mason. +# ok lets do a lookup to see how many orders exist for a bibitem, if there are >1, +# then we need to display them to the user so they can choose, because the system cant +# work it out, as there are no itemnumbers stored in the aqorders records :( + +my @results2; + +#warn "MASON BIBITEM= $biblioitem"; +my $query2 = " select * from aqorders where biblioitemnumber =?"; +my $sth2 = $dbh->prepare($query2); +$sth2->execute($biblioitem); +while ( my $data2 = $sth2->fetchrow_hashref ) { + + #warn $data2; + + #warn Dumper "DATA2:", $data2->{'basketno'}; + my $query3 = " select * from aqbasket where basketno =?"; + my $sth3 = $dbh->prepare($query3); + $sth3->execute( $data2->{'basketno'} ); + my $data3 = $sth3->fetchrow_hashref; + + #warn Dumper $data3; + $data2->{'booksellerid'} = $data3->{'booksellerid'}; + push( @results2, $data2 ); +} +$sth2->finish; + +#warn Dumper @results2; + +my @loop; +my $result_count = scalar(@results2); + +#warn "MULTI REESULT $result_count"; +#warn "NO_MULTI = $no_multi"; +my ( $template, $loggedinuser, $cookie ); + +if ( $result_count > 1 && $no_multi != 1 ) { + + ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + template_name => "acqui/acquire-multi-order.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { acquisition => 1 }, + debug => 1, + } + ); + + #warn "IN MULTI IF \n"; + + # cool, now lets shove the results into a loop + for ( my $i = 0 ; $i < $result_count ; $i++ ) { + my %line; + + $line{booksellerid} = $results2[$i]->{'booksellerid'}; + $line{biblionumber} = $results2[$i]->{'biblionumber'}; + $line{biblioitemnumber} = $results2[$i]->{'biblioitemnumber'}; + $line{ordernumber} = $results2[$i]->{'ordernumber'}; + $line{title} = $results2[$i]->{'title'}; + $line{booksellerinvoicenumber} = + $results[$i]->{'booksellerinvoicenumber'}; + $line{datereceived} = $results2[$i]->{'datereceived'}; + $line{entrydate} = $results2[$i]->{'entrydate'}; + $line{quantity} = $results2[$i]->{'quantity'}; + $line{listprice} = $results2[$i]->{'listprice'}; + $line{freight} = $results2[$i]->{'freight'}; + $line{unitprice} = $results2[$i]->{'unitprice'}; + $line{quantityreceived} = $results2[$i]->{'quantityreceived'}; + $line{supplierreference} = $results2[$i]->{'supplierreference'}; + $line{purchaseordernumber} = $results2[$i]->{'purchaseordernumber'}; + $line{basketno} = $results2[$i]->{'basketno'}; + $line{timestamp} = $results2[$i]->{'timestamp'}; + $line{rrp} = $results2[$i]->{'rrp'}; + $line{budgetdate} = $results2[$i]->{'budgetdate'}; + push @loop, \%line; + + #warn "LOOPING", $results2[$i]->{'ordernumber'}; + } + + $template->param( + loop => \@loop, + multi => 1, + biblio => $biblio, + biblioitem => $biblioitem, + ); + +} +elsif ( $count == 1 ) { + + ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + + template_name => "acqui/acquire.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { acquisition => 1 }, + debug => 1, + } + ); + + #warn "NO MULTI\n"; + + my $itemtype2 = $results[0]->{'itemtype'}; + my $freightperitem; + if ( $results[0]->{'freight'} > 0 ) { + $freightperitem = $results[0]->{'freight'}; + } + else { + if ( $noitems > 0 ) { + $freightperitem = $freight / $noitems; + } + } + $freightperitem = sprintf( "%.2f", $freightperitem ); my $sth; + my $sth = + $dbh->prepare( + "Select itemtype,description from itemtypes order by description"); + $sth->execute; + my @itemtype; + my %itemtypes; + push @itemtype, ""; + $itemtypes{''} = "Please choose"; - my $branches = getbranches; - my @branchloop; - foreach my $thisbranch ( sort keys %$branches ) { - my %row = ( - value => $thisbranch, - branchname => $branches->{$thisbranch}->{'branchname'}, - ); - push @branchloop, \%row; + while ( my ( $value, $lib ) = $sth->fetchrow_array ) { + push @itemtype, $value; + $itemtypes{$value} = $lib; } + my $CGIitemtype = CGI::scrolling_list( + -name => 'format', + -values => \@itemtype, + -default => $results[0]->{'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'}; + } + my $CGIbranch = CGI::scrolling_list( + -name => 'branch', + -values => \@select_branch, + -default => $results[0]->{'branchcode'}, + -labels => \%select_branches, + -size => 1, + -multiple => 0 + ); + my $auto_barcode = C4::Context->boolean_preference("autoBarcode") || 0; + #warn "ACQIRE AUTO BARCODE = $auto_barcode"; # 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 = $dbh->prepare("Select max(barcode) barcode from items"); $sth->execute; - my $data = $sth->fetchrow_hashref; - $barcode = $results[0]->{'barcode'} + 1; + my @data_results; + while ( my $data = $sth->fetchrow_hashref ) { + push( @data_results, $data ); + } + $barcode = @data_results[0]->{'barcode'} + 1; + #warn 'moo', @data_results[0]->{'barcode'}; + #warn "auto Barcode = $barcode"; + + #$barcode = sprintf( "%.0f", $barcode ); + #warn "auto Barcode = $barcode"; $sth->finish; + + my $moo = 'TEST777'; + $moo = $moo + 1; + #warn $moo; + } + + 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'}; } + my $CGIbookfund = CGI::scrolling_list( + -name => 'bookfund', + -values => \@select_bookfund, + -default => $results[0]->{'bookfundid'}, + -labels => \%select_bookfunds, + -size => 1, + -multiple => 0 + ); if ( $results[0]->{'quantityreceived'} == 0 ) { $results[0]->{'quantityreceived'} = ''; @@ -96,8 +287,9 @@ if ( $count == 1 ) { if ( $results[0]->{'unitprice'} == 0 ) { $results[0]->{'unitprice'} = ''; } + + #warn Dumper( $results[0] ); $template->param( - branchloop => \@branchloop, count => 1, biblionumber => $results[0]->{'biblionumber'}, ordernumber => $results[0]->{'ordernumber'}, @@ -105,17 +297,28 @@ if ( $count == 1 ) { supplierid => $results[0]->{'booksellerid'}, freight => $freight, gst => $gst, - catview => ( $catview ne 'yes' ? 1 : 0 ), - name => $booksellers[0]->{'name'}, - date => format_date($date), - title => $results[0]->{'title'}, - author => $results[0]->{'author'}, - copyrightdate => format_date( $results[0]->{'copyrightdate'} ), - itemtype => $results[0]->{'itemtype'}, - isbn => $results[0]->{'isbn'}, - seriestitle => $results[0]->{'seriestitle'}, - barcode => $barcode, - bookfund => $results[0]->{'bookfundid'}, + noitems => $noitems, + + # catview => ($catview ne 'yes'?1:0), + catview => $catview, + name => $booksellers[0]->{'name'}, + date => format_date($date), + title => $results[0]->{'title'}, + author => $results[0]->{'author'}, + copyrightdate => $results[0]->{'copyrightdate'}, + + # copyrightdate => format_date($results[0]->{'copyrightdate'}), + # itemtype => $results[0]->{'itemtype'}, + CGIbranch => $CGIbranch, + CGIbookfund => $CGIbookfund, + CGIitemtype => $CGIitemtype, + isbn => $results[0]->{'isbn'}, + seriestitle => $results[0]->{'seriestitle'}, + volinf => $results[0]->{'volumeddesc'}, + barcode => $barcode, + set_barcode => $set_barcode, + + # bookfund => $results[0]->{'bookfundid'}, quantity => $results[0]->{'quantity'}, quantityreceived => $results[0]->{'quantityreceived'}, rrp => $results[0]->{'rrp'}, @@ -123,9 +326,51 @@ if ( $count == 1 ) { unitprice => $results[0]->{'unitprice'}, invoice => $invoice, notes => $results[0]->{'notes'}, + freightperitem => $freightperitem, + nocalc => $booksellers[0]->{'nocalc'}, + invoicedisc => $booksellers[0]->{'invoicedisc'}, + invoiceinc => $booksellers[0]->{'invoiceincgst'}, + applygst => $booksellers[0]->{'gstreg'}, + discount => $booksellers[0]->{'discount'}, + + supplierid => $booksellers[0]->{'id'}, + + currency => $exchange->{'rate'}, + basketno => $results[0]->{'basketno'}, + booksellerinvoicenumber => $results[0]->{'booksellerinvoicenumber'}, + itemtype2 => $itemtype2, #added by mason BGZLA:3823 + ); + + #warn Dumper $booksellers[0]; + #warn Dumper $results[0]; + +# MASON: this is a little fix, to ensure that the 'create new biblio group' checkbox # ONLY appears in acquire.tmpl for biblioitems that already have 1 OR MORE items +# attached to them. + my $biblioitemnumber = $results[0]->{'biblioitemnumber'}; + my $error = &countitems($biblioitemnumber); + + #warn "MASON: number of items for $biblioitemnumber = $error"; + if ( $error > 0 ) { + $template->param( createbibitem => 'YES' ); + } + } -else { +else { # whats this loop for ??? mason + # why this loop when acqui + + ( $template, $loggedinuser, $cookie ) = get_template_and_user( + { + + template_name => "acqui/searchresult.tmpl", + query => $input, + type => "intranet", + authnotrequired => 0, + flagsrequired => { acquisition => 1 }, + debug => 1, + } + ); + my @loop; for ( my $i = 0 ; $i < $count ; $i++ ) { my %line; @@ -140,7 +385,10 @@ else { $line{gst} = $gst; $line{title} = $results[$i]->{'title'}; $line{author} = $results[$i]->{'author'}; + $line{vol} = $results[$i]->{'volume'}; + $line{volinf} = $results[$i]->{'volumeddesc'}; $line{supplierid} = $supplierid; + $line{noitems} = $noitems; push @loop, \%line; } $template->param( @@ -149,7 +397,10 @@ else { name => $booksellers[0]->{'name'}, supplierid => $supplierid, invoice => $invoice, + search => $search ); + warn "MASON: search= $search"; } -output_html_with_http_headers $input, $cookie, $template->output; + +output_html_with_http_headers $input, $cookie, $template->output;Chris -- 2.39.5