Owen Leonard
0b9a7e3546
This patch modifes the process of searching for an existing record to add to a basket. Now the search is performed as a keyword search in the regular catalog rather than via a custom search script. Options are added to the search results and detail pages to add results to an order. This process follows the same pattern as the "Search to hold" feature: When the search is initiated, a cookie is set with the requisite information--in this case vendor id and basket number. If the search results or bibliographic detail pages detect that a "searchToOrder" cookie is present, the correct "Add order" link will be shown. Like with the "search to hold" feature, the cookie expires in 10 minutes. To test, apply the patch and log into the staff client as a user who has permission to add to a basket in acquisitions. - Go to Acquisitions -> Vendor -> Basket -> Add to basket. - Using the "From an existing record" option, perform a search. - On the search results page, test the "Add order" link which appears with each result. Clicking the link should take you to the "New order" page for the correct vendor and basket. The catalog details section of the form should include the correct information. - From the search results page view the bibliographic details page for any record. There should be a new toolbar button, "Add order." Verify that it works correctly. - Test the same thing from all bibliographic detail pages: Normal, MARC, Labeled MARC, ISBD, as well as the items page (moredetail.pl). - Test this process for both the locations in acquisitions where one can add to an existing basket: Vendor search results and the basket detail page - Test the cookie timeout: Wait 10 minutes and perform another catalog search. The "Add order" link should no longer be present. Signed-off-by: David Nind <david@davidnind.com> Signed-off-by: Katrin Fischer <katrin.fischer.83@web.de> Signed-off-by: Martin Renvoize <martin.renvoize@ptfs-europe.com>
186 lines
5.4 KiB
Perl
Executable file
186 lines
5.4 KiB
Perl
Executable file
#!/usr/bin/perl
|
|
|
|
# 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 3 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, see <http://www.gnu.org/licenses>.
|
|
|
|
=head1 NAME
|
|
|
|
ISBDdetail.pl : script to show a biblio in ISBD format
|
|
|
|
=head1 SYNOPSIS
|
|
|
|
=cut
|
|
|
|
=head1 DESCRIPTION
|
|
|
|
This script needs a biblionumber as parameter
|
|
|
|
=head1 FUNCTIONS
|
|
|
|
=cut
|
|
|
|
use Modern::Perl;
|
|
|
|
use HTML::Entities;
|
|
use C4::Auth;
|
|
use C4::Context;
|
|
use C4::Output;
|
|
use CGI qw ( -utf8 );
|
|
use C4::Koha;
|
|
use C4::Biblio;
|
|
use C4::Items;
|
|
use C4::Serials; # CountSubscriptionFromBiblionumber
|
|
use C4::Search; # enabled_staff_search_views
|
|
use C4::Acquisition qw(GetOrdersByBiblionumber);
|
|
|
|
use Koha::Biblios;
|
|
use Koha::Patrons;
|
|
use Koha::RecordProcessor;
|
|
|
|
|
|
my $query = new CGI;
|
|
my $dbh = C4::Context->dbh;
|
|
|
|
my $biblionumber = $query->param('biblionumber');
|
|
$biblionumber = HTML::Entities::encode($biblionumber);
|
|
|
|
# open template
|
|
my ( $template, $loggedinuser, $cookie ) = get_template_and_user(
|
|
{
|
|
template_name => "catalogue/ISBDdetail.tt",
|
|
query => $query,
|
|
type => "intranet",
|
|
authnotrequired => 0,
|
|
flagsrequired => { catalogue => 1 },
|
|
}
|
|
);
|
|
|
|
if ( not defined $biblionumber ) {
|
|
# biblionumber invalid -> report and exit
|
|
$template->param( unknownbiblionumber => 1,
|
|
biblionumber => $biblionumber
|
|
);
|
|
output_html_with_http_headers $query, $cookie, $template->output;
|
|
exit;
|
|
}
|
|
|
|
my $record = GetMarcBiblio({
|
|
biblionumber => $biblionumber,
|
|
embed_items => 1 });
|
|
|
|
if ( not defined $record ) {
|
|
# biblionumber invalid -> report and exit
|
|
$template->param( unknownbiblionumber => 1,
|
|
biblionumber => $biblionumber
|
|
);
|
|
output_html_with_http_headers $query, $cookie, $template->output;
|
|
exit;
|
|
}
|
|
|
|
my $biblio = Koha::Biblios->find( $biblionumber );
|
|
my $framework = GetFrameworkCode( $biblionumber );
|
|
my $record_processor = Koha::RecordProcessor->new({
|
|
filters => 'ViewPolicy',
|
|
options => {
|
|
interface => 'intranet',
|
|
frameworkcode => $framework
|
|
},
|
|
});
|
|
$record_processor->process($record);
|
|
|
|
my $res = GetISBDView({
|
|
'record' => $record,
|
|
'template' => 'intranet',
|
|
'framework' => $framework,
|
|
});
|
|
|
|
if($query->cookie("holdfor")){
|
|
my $holdfor_patron = Koha::Patrons->find( $query->cookie("holdfor") );
|
|
$template->param(
|
|
holdfor => $query->cookie("holdfor"),
|
|
holdfor_surname => $holdfor_patron->surname,
|
|
holdfor_firstname => $holdfor_patron->firstname,
|
|
holdfor_cardnumber => $holdfor_patron->cardnumber,
|
|
);
|
|
}
|
|
|
|
if( $query->cookie("searchToOrder") ){
|
|
my ( $basketno, $vendorid ) = split( /\//, $query->cookie("searchToOrder") );
|
|
$template->param(
|
|
searchtoorder_basketno => $basketno,
|
|
searchtoorder_vendorid => $vendorid
|
|
);
|
|
}
|
|
|
|
# count of item linked with biblio
|
|
my $itemcount = $biblio->items->count;
|
|
$template->param( count => $itemcount);
|
|
my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber);
|
|
|
|
if ($subscriptionsnumber) {
|
|
my $subscriptions = GetSubscriptionsFromBiblionumber($biblionumber);
|
|
my $subscriptiontitle = $subscriptions->[0]{'bibliotitle'};
|
|
$template->param(
|
|
subscriptionsnumber => $subscriptionsnumber,
|
|
subscriptiontitle => $subscriptiontitle,
|
|
);
|
|
}
|
|
|
|
$template->param (
|
|
ISBD => $res,
|
|
biblionumber => $biblionumber,
|
|
isbdview => 1,
|
|
z3950_search_params => C4::Search::z3950_search_args(GetBiblioData($biblionumber)),
|
|
ocoins => $biblio->get_coins,
|
|
C4::Search::enabled_staff_search_views,
|
|
searchid => scalar $query->param('searchid'),
|
|
biblio => $biblio,
|
|
);
|
|
|
|
my @allorders_using_biblio = GetOrdersByBiblionumber ($biblionumber);
|
|
my @deletedorders_using_biblio;
|
|
my @orders_using_biblio;
|
|
my @baskets_orders;
|
|
my @baskets_deletedorders;
|
|
|
|
foreach my $myorder (@allorders_using_biblio) {
|
|
my $basket = $myorder->{'basketno'};
|
|
if ((defined $myorder->{'datecancellationprinted'}) and ($myorder->{'datecancellationprinted'} ne '0000-00-00') ){
|
|
push @deletedorders_using_biblio, $myorder;
|
|
unless (grep(/^$basket$/, @baskets_deletedorders)){
|
|
push @baskets_deletedorders,$myorder->{'basketno'};
|
|
}
|
|
}
|
|
else {
|
|
push @orders_using_biblio, $myorder;
|
|
unless (grep(/^$basket$/, @baskets_orders)){
|
|
push @baskets_orders,$myorder->{'basketno'};
|
|
}
|
|
}
|
|
}
|
|
|
|
my $count_orders_using_biblio = scalar @orders_using_biblio ;
|
|
$template->param (countorders => $count_orders_using_biblio);
|
|
|
|
my $count_deletedorders_using_biblio = scalar @deletedorders_using_biblio ;
|
|
$template->param (countdeletedorders => $count_deletedorders_using_biblio);
|
|
|
|
my $holds = $biblio->holds;
|
|
$template->param( holdcount => $holds->count );
|
|
|
|
output_html_with_http_headers $query, $cookie, $template->output;
|
|
|