Permalink
Browse files

Bug 5337: EAN management : Adds ean for various searches

  - in various acquisition pages and serials home
  - in database : biblioitems.ean
  - adds ean and its mapping in default english bibliographic framework
  - adds ean mapping in default french bibliographic framework
  - ean search is not enabled for MARC21

The required mapping between the ean marc field and the biblioitems.ean
database field will be automatically added on an existing unimarc installation.

However, if you already have records with ean, you will have to
run misc/batchRebuildBiblioTables.pl to populate biblioitems.ean

Signed-off-by: jmbroust <jean-manuel.broust@univ-lyon2.fr>
Signed-off-by: Marcel de Rooy <m.de.rooy@rijksmuseum.nl>
Passed QA at second run. Removed a merge marker only.
  • Loading branch information...
1 parent d49cefd commit 7f957077ddb4af98ea9c839e8a8262b8557aaf17 @veggiematts veggiematts committed with PaulPoulain Jan 16, 2012
View
@@ -1268,7 +1268,7 @@ C<@results> is an array of references-to-hash with the following keys:
sub SearchOrder {
#### -------- SearchOrder-------------------------------
- my ($ordernumber, $search, $supplierid, $basket) = @_;
+ my ( $ordernumber, $search, $ean, $supplierid, $basket ) = @_;
my $dbh = C4::Context->dbh;
my @args = ();
@@ -1288,7 +1288,11 @@ sub SearchOrder {
$query .= " AND (biblio.title like ? OR biblio.author LIKE ? OR biblioitems.isbn like ?)";
push @args, ("%$search%","%$search%","%$search%");
}
- if($supplierid){
+ if ($ean) {
+ $query .= " AND biblioitems.ean = ?";
+ push @args, $ean;
+ }
+ if ($supplierid) {
$query .= "AND aqbasket.booksellerid = ?";
push @args, $supplierid;
}
@@ -1668,12 +1672,12 @@ sub GetHistory {
my $title = $params{title};
my $author = $params{author};
my $isbn = $params{isbn};
+ my $ean = $params{ean};
my $name = $params{name};
my $from_placed_on = $params{from_placed_on};
my $to_placed_on = $params{to_placed_on};
my $basket = $params{basket};
my $booksellerinvoicenumber = $params{booksellerinvoicenumber};
-
my @order_loop;
my $total_qty = 0;
my $total_qtyreceived = 0;
@@ -1685,12 +1689,13 @@ sub GetHistory {
biblio.title,
biblio.author,
biblioitems.isbn,
+ biblioitems.ean,
aqorders.basketno,
- aqbasket.basketname,
- aqbasket.basketgroupid,
- aqbasketgroups.name as groupname,
+ aqbasket.basketname,
+ aqbasket.basketgroupid,
+ aqbasketgroups.name as groupname,
aqbooksellers.name,
- aqbasket.creationdate,
+ aqbasket.creationdate,
aqorders.datereceived,
aqorders.quantity,
aqorders.quantityreceived,
@@ -1701,7 +1706,7 @@ sub GetHistory {
aqorders.biblionumber
FROM aqorders
LEFT JOIN aqbasket ON aqorders.basketno=aqbasket.basketno
- LEFT JOIN aqbasketgroups ON aqbasket.basketgroupid=aqbasketgroups.id
+ LEFT JOIN aqbasketgroups ON aqbasket.basketgroupid=aqbasketgroups.id
LEFT JOIN aqbooksellers ON aqbasket.booksellerid=aqbooksellers.id
LEFT JOIN biblioitems ON biblioitems.biblionumber=aqorders.biblionumber
LEFT JOIN biblio ON biblio.biblionumber=aqorders.biblionumber";
@@ -1728,7 +1733,10 @@ sub GetHistory {
$query .= " AND biblioitems.isbn LIKE ? ";
push @query_params, "%$isbn%";
}
-
+ if ( defined $ean and $ean ) {
+ $query .= " AND biblioitems.ean = ? ";
+ push @query_params, "$ean";
+ }
if ( $name ) {
$query .= " AND aqbooksellers.name LIKE ? ";
push @query_params, "%$name%";
View
@@ -3316,7 +3316,8 @@ sub _koha_modify_biblioitem_nonmarc {
cn_item = ?,
cn_suffix = ?,
cn_sort = ?,
- totalissues = ?
+ totalissues = ?,
+ ean = ?
where biblioitemnumber = ?
";
my $sth = $dbh->prepare($query);
@@ -3328,6 +3329,7 @@ sub _koha_modify_biblioitem_nonmarc {
$biblioitem->{'pages'}, $biblioitem->{'bnotes'}, $biblioitem->{'size'}, $biblioitem->{'place'},
$biblioitem->{'lccn'}, $biblioitem->{'url'}, $biblioitem->{'biblioitems.cn_source'}, $biblioitem->{'cn_class'},
$biblioitem->{'cn_item'}, $biblioitem->{'cn_suffix'}, $cn_sort, $biblioitem->{'totalissues'},
+ $biblioitem->{'ean'},
$biblioitem->{'biblioitemnumber'}
);
if ( $dbh->errstr ) {
@@ -3379,7 +3381,8 @@ sub _koha_add_biblioitem {
cn_item = ?,
cn_suffix = ?,
cn_sort = ?,
- totalissues = ?
+ totalissues = ?,
+ ean = ?
";
my $sth = $dbh->prepare($query);
$sth->execute(
@@ -3390,7 +3393,7 @@ sub _koha_add_biblioitem {
$biblioitem->{'pages'}, $biblioitem->{'bnotes'}, $biblioitem->{'size'}, $biblioitem->{'place'},
$biblioitem->{'lccn'}, $biblioitem->{'marc'}, $biblioitem->{'url'}, $biblioitem->{'biblioitems.cn_source'},
$biblioitem->{'cn_class'}, $biblioitem->{'cn_item'}, $biblioitem->{'cn_suffix'}, $cn_sort,
- $biblioitem->{'totalissues'}
+ $biblioitem->{'totalissues'}, $biblioitem->{'ean'}
);
my $bibitemnum = $dbh->{'mysql_insertid'};
View
@@ -545,15 +545,15 @@ sub GetFullSubscriptionsFromBiblionumber {
=head2 GetSubscriptions
-@results = GetSubscriptions($title,$ISSN,$biblionumber);
-this function gets all subscriptions which have title like $title,ISSN like $ISSN and biblionumber like $biblionumber.
+@results = GetSubscriptions($title,$ISSN,$ean,$biblionumber);
+this function gets all subscriptions which have title like $title,ISSN like $ISSN,EAN like $ean and biblionumber like $biblionumber.
return:
a table of hashref. Each hash containt the subscription.
=cut
sub GetSubscriptions {
- my ( $string, $issn, $biblionumber ) = @_;
+ my ( $string, $issn, $ean, $biblionumber ) = @_;
#return unless $title or $ISSN or $biblionumber;
my $dbh = C4::Context->dbh;
@@ -597,6 +597,20 @@ sub GetSubscriptions {
}
$sqlwhere .= ( $sqlwhere ? " AND " : " WHERE " ) . "((" . join( ") OR (", @sqlstrings ) . "))";
}
+ if ($ean) {
+ my @sqlstrings;
+ my @strings_to_search;
+ @strings_to_search = map { "$_" } split( / /, $ean );
+ foreach my $index qw(biblioitems.ean) {
+ push @bind_params, @strings_to_search;
+ my $tmpstring = "OR $index = ? " x scalar(@strings_to_search);
+ $debug && warn "$tmpstring";
+ $tmpstring =~ s/^OR //;
+ push @sqlstrings, $tmpstring;
+ }
+ $sqlwhere .= ( $sqlwhere ? " AND " : " WHERE " ) . "((" . join( ") OR (", @sqlstrings ) . "))";
+ }
+
$sql .= "$sqlwhere ORDER BY title";
$debug and warn "GetSubscriptions query: $sql params : ", join( " ", @bind_params );
$sth = $dbh->prepare($sql);
View
@@ -202,6 +202,7 @@ =head1 CGI PARAMETERS
"biblio.author" => $$orderinfo{author} ? $$orderinfo{author} : "",
"biblio.seriestitle" => $$orderinfo{series} ? $$orderinfo{series} : "",
"biblioitems.isbn" => $$orderinfo{isbn} ? $$orderinfo{isbn} : "",
+ "biblioitems.ean" => $$orderinfo{ean} ? $$orderinfo{ean} : "",
"biblioitems.publishercode" => $$orderinfo{publishercode} ? $$orderinfo{publishercode} : "",
"biblioitems.publicationyear" => $$orderinfo{publicationyear} ? $$orderinfo{publicationyear}: "",
"biblio.copyrightdate" => $$orderinfo{publicationyear} ? $$orderinfo{publicationyear}: "",
View
@@ -63,6 +63,7 @@ =head1 CGI PARAMETERS
my $author = $input->param('author');
my $isbn = $input->param('isbn');
my $name = $input->param( 'name' );
+my $ean = $input->param('ean');
my $basket = $input->param( 'basket' );
my $booksellerinvoicenumber = $input->param( 'booksellerinvoicenumber' );
my $do_search = $input->param('do_search') || 0;
@@ -101,6 +102,7 @@ =head1 CGI PARAMETERS
title => $title,
author => $author,
isbn => $isbn,
+ ean => $ean,
name => $name,
from_placed_on => $from_iso,
to_placed_on => $to_iso,
@@ -120,7 +122,8 @@ =head1 CGI PARAMETERS
numresults => $order_loop ? scalar(@$order_loop) : undef,
title => $title,
author => $author,
- isbn => $isbn,
+ isbn => $isbn,
+ ean => $ean,
name => $name,
basket => $basket,
booksellerinvoicenumber => $booksellerinvoicenumber,
@@ -129,6 +132,7 @@ =head1 CGI PARAMETERS
DHTMLcalendar_dateformat=> C4::Dates->DHTMLcalendar(),
dateformat => C4::Dates->new()->format(),
debug => $debug || $input->param('debug') || 0,
+ uc(C4::Context->preference("marcflavour")) => 1
);
output_html_with_http_headers $input, $cookie, $template->output;
View
@@ -372,6 +372,7 @@ =head1 CGI PARAMETERS
editionstatement => $data->{'editionstatement'},
budget_loop => $budget_loop,
isbn => $data->{'isbn'},
+ ean => $data->{'ean'},
seriestitle => $data->{'seriestitle'},
itemtypeloop => \@itemtypes,
quantity => $data->{'quantity'},
@@ -390,6 +391,7 @@ =head1 CGI PARAMETERS
# CHECKME: gst-stuff needs verifing, mason.
gstrate => $bookseller->{'gstrate'} // C4::Context->preference("gist") // 0,
gstreg => $bookseller->{'gstreg'},
+ (uc(C4::Context->preference("marcflavour"))) => 1
);
output_html_with_http_headers $input, $cookie, $template->output;
@@ -521,6 +523,7 @@ sub Load_Duplicate {
booksellerid => $basket->{'booksellerid'},
breedingid => $params->{'breedingid'},
duplicatetitle => $duplicatetitle,
+ (uc(C4::Context->preference("marcflavour"))) => 1
);
output_html_with_http_headers $input, $cookie, $template->output;
View
@@ -101,14 +101,15 @@ =head1 CGI PARAMETERS
});
my @datas;
- my $search = $input->param('search') || '';
+ my $search = $input->param('search') || '';
+ my $ean = $input->param('ean') || '';
my $supplier = $input->param('booksellerid') || '';
my $basketno = $input->param('basketno') || '';
my $orderno = $input->param('orderno') || '';
- my $orders = SearchOrder($orderno, $search, $supplier, $basketno);
- foreach my $order (@$orders){
- if($order->{quantityreceived} < $order->{quantity}){
+ my $orders = SearchOrder($orderno, $search, $ean, $supplier, $basketno);
+ foreach my $order (@$orders) {
+ if ( $order->{quantityreceived} < $order->{quantity} ) {
my $data = {};
$data->{basketno} = $order->{basketno};
@@ -322,6 +323,7 @@ =head1 CGI PARAMETERS
totalPqtyrcvd => $totalPqtyrcvd,
totalPecost => sprintf("%.2f", $totalPecost),
resultsperpage => $resultsperpage,
+ (uc(C4::Context->preference("marcflavour"))) => 1
);
output_html_with_http_headers $input, $cookie, $template->output;
View
@@ -142,7 +142,7 @@
#coping with subscriptions
my $subscriptionsnumber = CountSubscriptionFromBiblionumber($biblionumber);
-my @subscriptions = GetSubscriptions( $dat->{title}, $dat->{issn}, $biblionumber );
+my @subscriptions = GetSubscriptions( $dat->{title}, $dat->{issn}, undef, $biblionumber );
my @subs;
foreach my $subscription (@subscriptions) {
@@ -166,6 +166,7 @@ INSERT INTO `marc_tag_structure` (`tagfield`, `liblibrarian`, `libopac`, `repeat
('022', 'Government Publication Number', 'Government Publication Number', 0, 0, '', ''),
('040', 'CODEN (Serials)', 'CODEN (Serials)', 0, 0, '', ''),
('071', 'Publisher\'s Number (Sound Recordings and Music)', '', 0, 0, '', ''),
+ ('073', 'EAN', 'EAN', 1, 0, '', ''),
('100', 'General Processing Data', 'General Processing Data', 1, 0, '', ''),
('101', 'Language of the Item', 'Language of the Item', 1, 0, '', ''),
('102', 'Country of Publication or Production', 'Country of Publication or Production', 0, 0, '', ''),
@@ -356,6 +357,7 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
('040', 'z', 'Erroneous CODEN', 'Erroneous CODEN', 1, 0, '', 0, '', '', '', 0, -5, '', '', '', NULL),
('071', 'a', 'Publisher\'s Number (Sound Recordings and Music)', 'Publisher\'s Number (Sound Recordings and Music)', 0, 0, '', 0, '', '', '', 0, -5, '', '', '', NULL),
('071', 'b', 'Source', 'Source', 0, 0, '', 0, '', '', '', 0, -5, '', '', '', NULL),
+ ('073', 'a', 'EAN', 'EAN', 0, 0, 'biblioitems.ean', 0, '', '', '', 0, 0, '', '', '', NULL),
('100', 'a', 'General Processing Data', 'General Processing Data', 0, 0, '', 1, '', '', 'unimarc_field_100.pl', 0, 0, '', '', '', NULL),
('101', 'a', 'Language of the Text, Soundtrack, etc.', 'Language of the Text, Soundtrack, etc.', 1, 0, '', 1, 'LAN', '', '', 0, 0, '', '', '', NULL),
('101', 'b', 'Language of Intermediate Text when Item is Not Translated from Original', 'Language of Intermediate Text when Item is Not Translated from Original', 0, 0, '', 1, '', '', '', 0, -5, '', '', '', NULL),
@@ -318,7 +318,7 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
('072', 'c', 'Numéro additionnels suivant le code normalisé', '', 0, 0, '', 0, '', '', '', 0, 0, '', NULL, '', ''),
('072', 'd', 'Mention de disponibilité et/ou de prix', '', 0, 0, '', 0, '', '', '', 0, 0, '', NULL, '', ''),
('072', 'z', 'Numéro ou code erroné', '', 0, 0, '', 0, '', '', '', 0, 0, '', NULL, '', ''),
-('073', 'a', 'Numéro', '', 0, 0, '', 0, '', '', '', NULL, 0, '', '', NULL, ''),
+('073', 'a', 'Numéro', '', 0, 0, 'biblioitems.ean', 0, '', '', '', NULL, 0, '', '', NULL, ''),
('073', 'b', 'Qualificatif', '', 0, 0, '', 0, '', '', '', NULL, 0, '', '', NULL, ''),
('073', 'c', 'Numéros additionnels', '', 0, 0, '', 0, '', '', '', NULL, 0, '', '', NULL, ''),
('073', 'd', 'Prix et disponibilité', '', 0, 0, '', 0, '', '', '', NULL, 0, '', '', NULL, ''),
@@ -2034,4 +2034,4 @@ INSERT INTO `marc_subfield_structure` (`tagfield`, `tagsubfield`, `liblibrarian`
('995', 'u', 'note', '', 0, 0, 'items.itemnotes', 10, '', '', '', NULL, 0, '', NULL, NULL, '');
UPDATE `marc_subfield_structure` SET maxlength=24 WHERE tagfield='000';
-UPDATE `marc_subfield_structure` SET maxlength=36 WHERE tagfield='100';
+UPDATE `marc_subfield_structure` SET maxlength=36 WHERE tagfield='100';
@@ -154,6 +154,7 @@ CREATE TABLE `biblioitems` ( -- information related to bibliographic records in
`itemtype` varchar(10) default NULL, -- biblio level item type (MARC21 942$c)
`isbn` varchar(30) default NULL, -- ISBN (MARC21 020$a)
`issn` varchar(9) default NULL, -- ISSN (MARC21 022$a)
+ `ean` varchar(13) default NULL,
`publicationyear` text,
`publishercode` varchar(255) default NULL, -- publisher (MARC21 260$b)
`volumedate` date default NULL,
@@ -625,6 +626,7 @@ CREATE TABLE `deletedbiblioitems` ( -- information about bibliographic records t
`itemtype` varchar(10) default NULL, -- biblio level item type (MARC21 942$c)
`isbn` varchar(30) default NULL, -- ISBN (MARC21 020$a)
`issn` varchar(9) default NULL, -- ISSN (MARC21 022$a)
+ `ean` varchar(13) default NULL,
`publicationyear` text,
`publishercode` varchar(255) default NULL, -- publisher (MARC21 260$b)
`volumedate` date default NULL,
@@ -5315,6 +5315,19 @@ sub stocknumber_checker { #code reused later on
SetVersion($DBversion);
}
+$DBversion = "3.09.00.011";
+if ( C4::Context->preference("Version") < TransformToNum($DBversion) ) {
+ $dbh->do("ALTER TABLE `biblioitems` ADD `ean` VARCHAR( 13 ) NULL AFTER issn");
+ $dbh->do("CREATE INDEX `ean` ON biblioitems (`ean`) ");
+ $dbh->do("ALTER TABLE `deletedbiblioitems` ADD `ean` VARCHAR( 13 ) NULL AFTER issn");
+ if (C4::Context->preference("marcflavour") eq 'UNIMARC') {
+ $dbh->do("UPDATE marc_subfield_structure SET kohafield='biblioitems.ean' WHERE tagfield='073' and tagsubfield='a'");
+ }
+ print "Upgrade to $DBversion done (Adding ean in biblioitems and deletedbiblioitems)\n";
+ print "If you have records with ean, please run misc/batchRebuildBiblioTables.pl to populate bibliotems.ean\n" if (C4::Context->preference("marcflavour") eq 'UNIMARC');
+ SetVersion($DBversion);
+}
+
=head1 FUNCTIONS
=head2 TableExists($table)
@@ -3,8 +3,17 @@
<div id="header_search">
<div id="subscription_search" class="residentsearch">
<p class="tip">Search subscriptions:</p>
- <form action="/cgi-bin/koha/serials/serials-home.pl" method="get">[% IF ( routing ) %]<input type="hidden" name="routing" value="[% routing %]" />[% END %]<input type="hidden" name="searched" value="1" /> <label for="ISSN_filter">ISSN:</label> <input type="text" size="10" maxlength="11" name="ISSN_filter" id="ISSN_filter" value="[% ISSN_filter %]" /> <label for="title_filter">Title:</label> <input type="text" size="20" maxlength="40" name="title_filter" id="title_filter" value="[% title_filter %]" /><input type="submit" value="Search" class="submit" />
-</form>
+ <form action="/cgi-bin/koha/serials/serials-home.pl" method="get">
+ [% IF ( routing ) %]<input type="hidden" name="routing" value="[% routing %]" />[% END %]
+ <input type="hidden" name="searched" value="1" />
+ <label for="ISSN_filter">ISSN:</label> <input type="text" size="10" maxlength="11" name="ISSN_filter" id="ISSN_filter" value="[% ISSN_filter %]" />
+
+ [% IF (UNIMARC) %]
+ <label for="EAN_filter">EAN:</label> <input type="text" size="20" maxlength="40" name="EAN_filter" id="EAN_filter" value="[% EAN_filter %]" />
+ [% END %]
+ <label for="title_filter">Title:</label> <input type="text" size="20" maxlength="40" name="title_filter" id="title_filter" value="[% title_filter %]" />
+ <input type="submit" value="Search" class="submit" />
+ </form>
</div>
[% INCLUDE 'patron-search-box.inc' %]
[% IF ( CAN_user_catalogue ) %]
@@ -36,6 +36,9 @@
<li><label for="title">Title: </label> <input type="text" name="title" id="title" value="[% title %]" /></li>
<li><label for="author">Author: </label> <input type="text" name="author" id="author" value="[% author %]" /></li>
<li><label for="isbn">ISBN: </label> <input type="isbn" name="isbn" id="isbn" value="[% isbn %]" /></li>
+ [% IF (UNIMARC) %]
+ <li><label for="ean">EAN: </label> <input type="text" name="ean" id="ean" value="[% ean %]" /></li>
+ [% END %]
<li><label for="name">Vendor: </label> <input type="text" name="name" id="name" value="[% name %]" /></li>
<li><label for="basket">Basket: </label> <input type="text" name="basket" id="basket" value="[% basket %]" /></li>
<li><label for="booksellerinvoicenumber ">Bookseller invoice no: </label> <input type="text" name="booksellerinvoicenumber" id="booksellerinvoicenumber" value="[% booksellerinvoicenumber %]" /></li>
@@ -289,6 +289,17 @@ $(document).ready(function()
<input type="text" size="50" name="isbn" id="ISBN" value="[% isbn %]" />
[% END %]
</li>
+ [% IF (UNIMARC) %]
+ <li>
+ [% IF ( biblionumber ) %]
+ <span class="label">EAN: </span>
+ <input type="hidden" size="20" name="ean" id="EAN" value="[% ean %]" />[% ean %]
+ [% ELSE %]
+ <label for="EAN">EAN: </label>
+ <input type="text" size="20" name="ean" id="EAN" value="[% ean %]" />
+ [% END %]
+ </li>
+ [% END %]
<li>
[% IF ( biblionumber ) %]
<span class="label">Series: </span>
Oops, something went wrong.

0 comments on commit 7f95707

Please sign in to comment.