X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=catalogue%2Fdetail.pl;h=782a10d1eaa5e9ba3176c528081c7b9ae1e1adc7;hb=144378a198ea58d33b5ca122006d92a625357c66;hp=df1a7b971b8c5c45888f53e5257f00c7a1022358;hpb=d46958af513b86e6f3d3f5f5965cdd82ac1ceb9b;p=koha_gimpoz diff --git a/catalogue/detail.pl b/catalogue/detail.pl index df1a7b971b..782a10d1ea 100755 --- a/catalogue/detail.pl +++ b/catalogue/detail.pl @@ -25,14 +25,17 @@ use C4::Koha; use C4::Serials; #uses getsubscriptionfrom biblionumber use C4::Output; use C4::Biblio; +use C4::Items; use C4::Circulation; use C4::Branch; use C4::Reserves; use C4::Members; use C4::Serials; -use C4::XISBN qw(get_xisbns get_biblio_from_xisbn); +use C4::XISBN qw(get_xisbns get_biblionumber_from_isbn get_biblio_from_xisbn); use C4::Amazon; +# use Smart::Comments; + my $query = new CGI; my ( $template, $borrowernumber, $cookie ) = get_template_and_user( { @@ -47,31 +50,38 @@ my ( $template, $borrowernumber, $cookie ) = get_template_and_user( my $biblionumber = $query->param('biblionumber'); my $fw = GetFrameworkCode($biblionumber); +## get notes and subjects from MARC record +my $marcflavour = C4::Context->preference("marcflavour"); +my $record = GetMarcBiblio($biblionumber); + +unless (defined($record)) { + print $query->redirect("/cgi-bin/koha/errors/404.pl"); + exit; +} + +my $marcnotesarray = GetMarcNotes( $record, $marcflavour ); +my $marcauthorsarray = GetMarcAuthors( $record, $marcflavour ); +my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour ); +my $marcseriesarray = GetMarcSeries($record,$marcflavour); +my $subtitle = C4::Biblio::get_koha_field_from_marc('bibliosubtitle', 'subtitle', $record, ''); + # Get Branches, Itemtypes and Locations my $branches = GetBranches(); my $itemtypes = GetItemTypes(); -my %locations; # FIXME: move this to a pm, check waiting status for holds my $dbh = C4::Context->dbh; -my $lsch = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category = 'LOC'"); -$lsch->execute(); -while (my $ldata = $lsch->fetchrow_hashref ) { - $locations{ $ldata->{'authorised_value'} } = $ldata->{'lib'}; -} # change back when ive fixed request.pl my @items = &GetItemsInfo( $biblionumber, 'intra' ); my $dat = &GetBiblioData($biblionumber); -if (!$dat) { - print $query->redirect("/cgi-bin/koha/koha-tmpl/errors/404.pl"); -} - #coping with subscriptions my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber); my @subscriptions = GetSubscriptions( $dat->{title}, $dat->{issn}, $biblionumber ); + + my @subs; foreach my $subscription (@subscriptions) { my %cell; @@ -98,12 +108,18 @@ foreach my $item (@items) { $item->{datedue} = format_date($item->{datedue}); $item->{datelastseen} = format_date($item->{datelastseen}); $item->{onloan} = format_date($item->{onloan}); - $item->{locationname} = $locations{$item->{location}}; # item damaged, lost, withdrawn loops $item->{itemlostloop}= GetAuthorisedValues(GetAuthValCode('items.itemlost',$fw),$item->{itemlost}) if GetAuthValCode('items.itemlost',$fw); if ($item->{damaged}) { $item->{itemdamagedloop}= GetAuthorisedValues(GetAuthValCode('items.damaged',$fw),$item->{damaged}) if GetAuthValCode('items.damaged',$fw); } + #get shelf location and collection code description if they are authorised value. + my $shelflocations = GetKohaAuthorisedValues('items.location',$fw ); + my $shelfcode= $item->{'location'}; + $item->{'location'} = $shelflocations->{$shelfcode} if(defined($shelflocations) && exists($shelflocations->{$shelfcode})); + my $collections = GetKohaAuthorisedValues('items.ccode',$fw ); + my $ccode= $item->{'ccode'}; + $item->{'ccode'} = $collections->{$ccode} if(defined($collections) && exists($collections->{$ccode})); # checking for holds my ($reservedate,$reservedfor,$expectedAt) = GetReservesFromItemnumber($item->{itemnumber}); @@ -128,7 +144,7 @@ foreach my $item (@items) { } # FIXME: move this to a pm, check waiting status for holds - my $sth2 = $dbh->prepare("SELECT * FROM reserves WHERE borrowernumber=? AND itemnumber=? AND found='W' AND cancellationdate IS NULL"); + my $sth2 = $dbh->prepare("SELECT * FROM reserves WHERE borrowernumber=? AND itemnumber=? AND found='W'"); $sth2->execute($item->{ReservedForBorrowernumber},$item->{itemnumber}); while (my $wait_hashref = $sth2->fetchrow_hashref) { $item->{waitingdate} = format_date($wait_hashref->{waitingdate}); @@ -139,18 +155,12 @@ foreach my $item (@items) { $template->param( norequests => $norequests ); -## get notes and subjects from MARC record - my $dbh = C4::Context->dbh; - my $marcflavour = C4::Context->preference("marcflavour"); - my $record = GetMarcBiblio($biblionumber); - my $marcnotesarray = GetMarcNotes( $record, $marcflavour ); - my $marcauthorsarray = GetMarcAuthors( $record, $marcflavour ); - my $marcsubjctsarray = GetMarcSubjects( $record, $marcflavour ); - $template->param( MARCNOTES => $marcnotesarray, MARCSUBJCTS => $marcsubjctsarray, - MARCAUTHORS => $marcauthorsarray + MARCAUTHORS => $marcauthorsarray, + MARCSERIES => $marcseriesarray, + subtitle => $subtitle, ); my @results = ( $dat, ); @@ -181,45 +191,24 @@ if (C4::Context->preference("FRBRizeEditions")==1) { if ($@) { warn "XISBN Failed $@"; } } if ( C4::Context->preference("AmazonContent") == 1 ) { + my $similar_products_exist; my $amazon_details = &get_amazon_details( $xisbn ); - foreach my $result ( @{ $amazon_details->{Details} } ) { - $template->param( item_description => $result->{ProductDescription} ); - $template->param( image => $result->{ImageUrlMedium} ); - $template->param( list_price => $result->{ListPrice} ); - $template->param( amazon_url => $result->{url} ); - } - - my @products; - my @reviews; - for my $details ( @{ $amazon_details->{Details} } ) { - - next unless $details->{SimilarProducts}; - for my $product ( @{ $details->{SimilarProducts}->{Product} } ) { - if (C4::Context->preference("AmazonSimilarItems") ) { - my @xisbns; - if (C4::Context->preference("XISBNAmazonSimilarItems") ) { - @xisbns = @{get_xisbns($product)}; - } - else { - push @xisbns, get_biblio_from_xisbn($product); - } - push @products, +{ product => \@xisbns }; - } - } - next unless $details->{Reviews}; - for my $product ( @{ $details->{Reviews}->{AvgCustomerRating} } ) { - $template->param( rating => $product * 20 ); - } - for my $reviews ( @{ $details->{Reviews}->{CustomerReview} } ) { - push @reviews, - +{ - summary => $reviews->{Summary}, - comment => $reviews->{Comment}, - }; - } + my $item_attributes = \%{$amazon_details->{Items}->{Item}->{ItemAttributes}}; + my $customer_reviews = \@{$amazon_details->{Items}->{Item}->{CustomerReviews}->{Review}}; + my @similar_products; + for my $similar_product (@{$amazon_details->{Items}->{Item}->{SimilarProducts}->{SimilarProduct}}) { + # do we have any of these isbns in our collection? + my $similar_biblionumbers = get_biblionumber_from_isbn($similar_product->{ASIN}); + # verify that there is at least one similar item + $similar_products_exist++ if ${@$similar_biblionumbers}[0]; + push @similar_products, +{ similar_biblionumbers => $similar_biblionumbers, title => $similar_product->{Title}, ASIN => $similar_product->{ASIN} }; } - $template->param( SIMILAR_PRODUCTS => \@products ); - $template->param( AMAZONREVIEWS => \@reviews ); + my $editorial_reviews = \@{$amazon_details->{Items}->{Item}->{EditorialReviews}->{EditorialReview}}; + my $average_rating = $amazon_details->{Items}->{Item}->{CustomerReviews}->{AverageRating}; + $template->param( AmazonSimilarItems => $similar_products_exist ); + $template->param( amazon_average_rating => $average_rating * 20); + $template->param( AMAZON_CUSTOMER_REVIEWS => $customer_reviews ); + $template->param( AMAZON_SIMILAR_PRODUCTS => \@similar_products ); + $template->param( AMAZON_EDITORIAL_REVIEWS => $editorial_reviews ); } - output_html_with_http_headers $query, $cookie, $template->output;