From: Amit Gupta <[email protected]>
In the records detail page in the staff interface, we display both items
belonging exclusively to the analytical record and those that it links to via
the parent bib.
To dos - automatically populate 773 and 774, also a way to import analytical
records including relationships to items and parent bibs.
---
C4/Biblio.pm | 38 +++++++++++++++++++
C4/Items.pm | 40 ++++++++++++++++++--
catalogue/detail.pl | 6 +++
cataloguing/addbiblio.pl | 35 ++++++++++++++++-
installer/data/mysql/kohastructure.sql | 16 ++++++++
installer/data/mysql/updatedatabase.pl | 23 ++++++++++-
.../prog/en/modules/catalogue/detail.tmpl | 10 +++++
.../prog/en/modules/catalogue/moredetail.tmpl | 2 +-
.../prog/en/modules/cataloguing/addbiblio.tmpl | 6 +++
kohaversion.pl | 2 +-
10 files changed, 167 insertions(+), 11 deletions(-)
diff --git a/C4/Biblio.pm b/C4/Biblio.pm
index 81ccfbb..4422fe9 100644
--- a/C4/Biblio.pm
+++ b/C4/Biblio.pm
@@ -72,6 +72,7 @@ BEGIN {
&GetMarcBiblio
&GetMarcAuthors
&GetMarcSeries
+ &GetMarcAnalytical
GetMarcUrls
&GetUsedMarcStructure
&GetXmlBiblio
@@ -1553,6 +1554,43 @@ sub GetMarcSeries {
return $marcseriessarray;
} #end getMARCseriess
+=head2 GetMarcAnalytical
+=cut
+
+sub GetMarcAnalytical {
+ my ( $record, $marcflavour ) = @_;
+ my ( $tag);
+ if ( $marcflavour eq "MARC21" ) {
+ $tag = "773";
+ } else { # assume unimarc if not marc21
+ $tag="773";
+ }
+
+ my $hostbibnumber;
+ my $hosttitle;
+
+ foreach my $field ( $record->field('773')) {
+ my @subfields_loop;
+
+ my @subfields = $field->subfields();
+
+ for my $host_subfield (@subfields) {
+
+
+ if ( $host_subfield->[0] eq 'w' ) { #Record control number
+ $hostbibnumber=$host_subfield->[1];
+ }
+
+ if ( $host_subfield->[0] eq 'a' ) { #Main entry heading
+ $hosttitle=$host_subfield->[1];
+ }
+
+ }
+
+ }
+ return ($hostbibnumber, $hosttitle);
+}
+
=head2 GetFrameworkCode
$frameworkcode = GetFrameworkCode( $biblionumber )
diff --git a/C4/Items.pm b/C4/Items.pm
index 794bff7..79d73f5 100644
--- a/C4/Items.pm
+++ b/C4/Items.pm
@@ -1169,6 +1169,7 @@ sub GetItemsInfo {
my ( $biblionumber, $type ) = @_;
my $dbh = C4::Context->dbh;
# note biblioitems.* must be avoided to prevent large marc and marcxml
fields from killing performance.
+ # Introducing union all, this is for analytical records - to fetch regular
items and items linked to parent bibs
my $query = "
SELECT items.*,
biblio.*,
@@ -1186,16 +1187,47 @@ sub GetItemsInfo {
items.notforloan as itemnotforloan,
itemtypes.description,
itemtypes.notforloan as notforloan_per_itemtype,
- branchurl
+ branchurl,
+ branches.branchname,
+ items.dateaccessioned
+ FROM analytical_records
+ LEFT JOIN items ON analytical_records.itemnumber = items.itemnumber
+ LEFT JOIN branches ON items.homebranch = branches.branchcode
+ LEFT JOIN biblio ON analytical_records.biblionumber = biblio.biblionumber
+ LEFT JOIN biblioitems ON analytical_records.biblioitemnumber
=biblioitems.biblioitemnumber
+ LEFT JOIN itemtypes ON itemtypes.itemtype = "
+. (C4::Context->preference('item-level_itypes') ? 'items.itype' :
'biblioitems.itemtype');
+$query .=" WHERE analytical_records.biblionumber =".$biblionumber;
+$query .=" UNION
+SELECT items.*,
+ biblio.*,
+ biblioitems.volume,
+ biblioitems.number,
+ biblioitems.itemtype,
+ biblioitems.isbn,
+ biblioitems.issn,
+ biblioitems.publicationyear,
+ biblioitems.publishercode,
+ biblioitems.volumedate,
+ biblioitems.volumedesc,
+ biblioitems.lccn,
+ biblioitems.url,
+ items.notforloan as itemnotforloan,
+ itemtypes.description,
+ itemtypes.notforloan as notforloan_per_itemtype,
+ branchurl,
+ branches.branchname,
+ items.dateaccessioned
FROM items
LEFT JOIN branches ON items.homebranch = branches.branchcode
LEFT JOIN biblio ON biblio.biblionumber = items.biblionumber
LEFT JOIN biblioitems ON biblioitems.biblioitemnumber =
items.biblioitemnumber
LEFT JOIN itemtypes ON itemtypes.itemtype = "
- . (C4::Context->preference('item-level_itypes') ? 'items.itype' :
'biblioitems.itemtype');
- $query .= " WHERE items.biblionumber = ? ORDER BY
branches.branchname,items.dateaccessioned desc" ;
+ . (C4::Context->preference('item-level_itypes') ? 'items.itype' :
'biblioitems.itemtype');
+ $query .=" WHERE items.biblionumber =".$biblionumber;
+ $query .=" ORDER BY 19" ;
my $sth = $dbh->prepare($query);
- $sth->execute($biblionumber);
+ $sth->execute();
my $i = 0;
my @results;
my $serial;
diff --git a/catalogue/detail.pl b/catalogue/detail.pl
index 4f6c23f..3f7bbae 100755
--- a/catalogue/detail.pl
+++ b/catalogue/detail.pl
@@ -93,6 +93,9 @@ my $marcseriesarray = GetMarcSeries($record,$marcflavour);
my $marcurlsarray = GetMarcUrls ($record,$marcflavour);
my $subtitle = GetRecordValue('subtitle', $record, $fw);
+# get host (773) title and biblionumber for display
+my ($hostbibnumber, $hosttitle) = GetMarcAnalytical($record,$marcflavour);
+
# Get Branches, Itemtypes and Locations
my $branches = GetBranches();
my $itemtypes = GetItemTypes();
@@ -206,6 +209,9 @@ $template->param(
MARCSUBJCTS => $marcsubjctsarray,
MARCAUTHORS => $marcauthorsarray,
MARCSERIES => $marcseriesarray,
+# Next two fields related to host (773) of the biblio
+ hostbibnumber => $hostbibnumber,
+ hosttitle => $hosttitle,
MARCURLS => $marcurlsarray,
subtitle => $subtitle,
itemdata_ccode => $itemfields{ccode},
diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl
index fc56047..6961624 100755
--- a/cataloguing/addbiblio.pl
+++ b/cataloguing/addbiblio.pl
@@ -818,18 +818,35 @@ AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|);
return ($countlinked,$countcreated);
}
-# ========================
+# Sub to link analytical records to parent biblio and to corressponding item
record
+sub link_analytical_to_parent {
+ my ($parentbiblionumber, $analyticalbiblionumber, $itemnumber, $bibitemnum
) = @_;
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare( 'INSERT INTO analytical_records
(parentbiblionumber, biblionumber, itemnumber, biblioitemnumber)
values(?,?,?,?)' );
+ $sth->execute( $parentbiblionumber, $analyticalbiblionumber, $itemnumber,
$bibitemnum );
+ }
+
+
+#========================
# MAIN
#=========================
my $input = new CGI;
my $error = $input->param('error');
my $biblionumber = $input->param('biblionumber'); # if biblionumber exists,
it's a modif, not a new biblio.
+my $itemnumber = $input->param('itemnumber');
+my $oldbibitemnum => $input->param('oldbibitemnum');
my $breedingid = $input->param('breedingid');
my $z3950 = $input->param('z3950');
my $op = $input->param('op');
my $mode = $input->param('mode');
my $frameworkcode = $input->param('frameworkcode');
my $redirect = $input->param('redirect');
+
+# Next three parameters related to analytical records
+my $parentbiblionumber = $input->param('parentbiblionumber');
+my $analytical_record = $input->param('analytical_record'); #if this is an
analytical record
+my $analyticalbiblionumber = $input->param('analyticalbiblionumber');
+
my $dbh = C4::Context->dbh;
my $userflags = ($frameworkcode eq 'FA') ? "fast_cataloging" :
"edit_catalogue";
@@ -931,6 +948,14 @@ if ( $op eq "addbiblio" ) {
( $biblionumber, $oldbibitemnum ) = AddBiblio( $record,
$frameworkcode );
}
+
+# if analytical record, call sub to link record to parent biblio and to item
record
+ if ($analytical_record eq 1){
+
+ link_analytical_to_parent($parentbiblionumber, $biblionumber,
$itemnumber, $oldbibitemnum );
+ }
+
+
if (($mode ne "popup" && !$is_a_modif) || $redirect eq "items"){
print $input->redirect(
"/cgi-bin/koha/cataloguing/additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode"
@@ -954,6 +979,7 @@ if ( $op eq "addbiblio" ) {
}else {
$template->param(
biblionumber => $biblionumber,
+
done =>1,
popup =>1
);
@@ -1014,6 +1040,11 @@ elsif ( $op eq "delete" ) {
biblioitemnumtagfield => $biblioitemnumtagfield,
biblioitemnumtagsubfield => $biblioitemnumtagsubfield,
biblioitemnumber => $biblioitemnumber,
+
+# parameters related to analytical records
+ parentbiblionumber => $parentbiblionumber,
+ analytical_record => $analytical_record,
+ itemnumber => $itemnumber,
);
}
@@ -1022,6 +1053,6 @@ $template->param(
popup => $mode,
frameworkcode => $frameworkcode,
itemtype => $frameworkcode,
-);
+ );
output_html_with_http_headers $input, $cookie, $template->output;
diff --git a/installer/data/mysql/kohastructure.sql
b/installer/data/mysql/kohastructure.sql
index e42652c..d1f57fb 100644
--- a/installer/data/mysql/kohastructure.sql
+++ b/installer/data/mysql/kohastructure.sql
@@ -2585,6 +2585,22 @@ CREATE TABLE `fieldmapping` (
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+--
+-- Table structure for table `analytical_records`
+--
+
+DROP TABLE IF EXISTS `analytical_records`;
+CREATE TABLE `analytical_records` (
+ `analyticalrecordid` int(11) NOT NULL auto_increment,
+ `parentbiblionumber` int(11) NOT NULL default '0',
+ `biblionumber` int(11) NOT NULL default '0',
+ `itemnumber` int(11) NOT NULL default '0',
+ `biblioitemnumber` int(11) NOT NULL default '0',
+ KEY `analyticalrecordididx` (`analyticalrecordid`),
+ KEY `bibidx`
(`parentbiblionumber`,`biblionumber`,`itemnumber`,`biblioitemnumber`),
+ CONSTRAINT `parentbiblionumber_ibfk_1` FOREIGN KEY
(`parentbiblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE
+ ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
+
/*!40103 SET time_zo...@old_time_zone */;
/*!40101 SET sql_mo...@old_sql_mode */;
/*!40014 SET foreign_key_chec...@old_foreign_key_checks */;
diff --git a/installer/data/mysql/updatedatabase.pl
b/installer/data/mysql/updatedatabase.pl
index 2bd4e21..0f7225e 100755
--- a/installer/data/mysql/updatedatabase.pl
+++ b/installer/data/mysql/updatedatabase.pl
@@ -1396,7 +1396,7 @@ if (C4::Context->preference("Version") <
TransformToNum($DBversion)) {
$DBversion = "3.00.00.074";
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
- $dbh->do( q(update itemtypes set imageurl = concat( 'npl/', imageurl )
+ $dbh->do(qq(update itemtypes set imageurl = concat( 'npl/', imageurl )
where imageurl not like 'http%'
and imageurl is not NULL
and imageurl != '') );
@@ -1406,7 +1406,7 @@ if (C4::Context->preference("Version") <
TransformToNum($DBversion)) {
$DBversion = "3.00.00.075";
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
- $dbh->do( q(alter table authorised_values add imageurl varchar(200)
default NULL) );
+ $dbh->do( qq(alter table authorised_values add imageurl varchar(200)
default NULL) );
print "Upgrade to $DBversion done (adding imageurl field to
authorised_values table)\n";
SetVersion ($DBversion);
}
@@ -1541,7 +1541,7 @@ if (C4::Context->preference("Version") <
TransformToNum($DBversion)) {
$DBversion = "3.00.00.082";
if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
- $dbh->do( q(alter table accountlines add column lastincrement
decimal(28,6) default NULL) );
+ $dbh->do( qq(alter table accountlines add column lastincrement
decimal(28,6) default NULL) );
print "Upgrade to $DBversion done (adding lastincrement column to
accountlines table)\n";
SetVersion ($DBversion);
}
@@ -3745,6 +3745,23 @@ if (C4::Context->preference("Version") <
TransformToNum($DBversion)) {
}
+$DBversion = "3.01.01.000";
+ if (C4::Context->preference("Version") < TransformToNum($DBversion)) {
+ $dbh->do("CREATE TABLE `analytical_records` (
+ `analyticalrecordid` int(11) NOT NULL auto_increment,
+ `parentbiblionumber` int(11) NOT NULL default '0',
+ `biblionumber` int(11) NOT NULL default '0',
+ `itemnumber` int(11) NOT NULL default '0',
+ `biblioitemnumber` int(11) NOT NULL default '0',
+ KEY `analyticalrecordididx` (`analyticalrecordid`),
+ KEY `bibidx`
(`parentbiblionumber`,`biblionumber`,`itemnumber`,`biblioitemnumber`),
+ CONSTRAINT `parentbiblionumber_ibfk_1` FOREIGN KEY
(`parentbiblionumber`) REFERENCES `biblio` (`biblionumber`) ON DELETE CASCADE
+ ) ENGINE=InnoDB;");
+ print "Upgrade to $DBversion done (Analytical Records)\n";
+ SetVersion ($DBversion);
+}
+
+
=item DropAllForeignKeys($table)
Drop all foreign keys of the table $table
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl
b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl
index 1861028..8e2af82 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/detail.tmpl
@@ -101,6 +101,16 @@ function verify_images() {
</ul>
</li>
<!-- /TMPL_IF -->
+<!-- TMPL_IF NAME="hosttitle" -->
+ <li><strong>Host Record: </strong>
+ Title:<a
href="/cgi-bin/koha/catalogue/search.pl?q=Local-number:<!-- TMPL_VAR
NAME="hostbibnumber" ESCAPE="url"-->"><!-- TMPL_VAR NAME="hosttitle" --></a>
+
+
+ </li>
+<!-- /TMPL_IF -->
+
+
+
<!-- TMPL_IF name="publishercode" -->
<li><strong>Published by:</strong>
<a href="/cgi-bin/koha/catalogue/search.pl?q=pb:<!-- TMPL_VAR
NAME="publishercode" ESCAPE="url" -->">
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl
b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl
index 8577193..cfdd24a 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/catalogue/moredetail.tmpl
@@ -42,7 +42,7 @@
<!-- TMPL_LOOP NAME="ITEM_DATA" -->
<div class="yui-g">
<h3 id="item<!-- TMPL_VAR NAME="itemnumber" -->">Barcode <!-- TMPL_VAR
NAME="barcode" --> <!-- TMPL_IF name="notforloantext" --><!-- TMPL_VAR
name="notforloantext" --> <!-- /TMPL_IF --></h3>
- <div class="listgroup"><h4>Item Information <!-- TMPL_IF
NAME="CAN_user_editcatalogue_edit_catalogue" --><!-- TMPL_UNLESS name="nomod"
--><a
href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=<!--
TMPL_VAR NAME="biblionumber"-->&itemnumber=<!-- TMPL_VAR NAME="itemnumber"
-->">[Edit Items]</a><!-- /TMPL_IF --><!-- /TMPL_UNLESS --></h4>
+ <div class="listgroup"><h4>Item Information <!-- TMPL_IF
NAME="CAN_user_editcatalogue_edit_catalogue" --><!-- TMPL_UNLESS name="nomod"
--><a
href="/cgi-bin/koha/cataloguing/additem.pl?op=edititem&biblionumber=<!--
TMPL_VAR NAME="biblionumber"-->&itemnumber=<!-- TMPL_VAR NAME="itemnumber"
-->">[Edit Items]</a> <a
href="/cgi-bin/koha/cataloguing/addbiblio.pl?analytical_record=1&parentbiblionumber=<!--
TMPL_VAR NAME="biblionumber" -->&itemnumber=<!-- TMPL_VAR
NAME="itemnumber" -->">[Create Analytical Record]</a><!-- /TMPL_IF --><!--
/TMPL_UNLESS --></h4>
<ol class="bibliodetails">
<li><span class="label">Home Library:</span> <!-- TMPL_VAR
NAME="homebranchname" --> </li>
<!-- TMPL_IF NAME="item-level_itypes" -->
diff --git a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tmpl
b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tmpl
index 3e510c5..4f4a6bc 100644
--- a/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tmpl
+++ b/koha-tmpl/intranet-tmpl/prog/en/modules/cataloguing/addbiblio.tmpl
@@ -721,6 +721,12 @@ function unHideSubfield(index,labelindex) { // FIXME :: is
it used ?
<!--/TMPL_IF-->
<input type="hidden" name="frameworkcode" value="<!-- TMPL_VAR
NAME="frameworkcode" -->" />
<input type="hidden" name="biblionumber" value="<!-- TMPL_VAR
NAME="biblionumber" -->" />
+ <!--TMPL_IF Name="parentbiblionumber"-->
+ <input type="hidden" name="parentbiblionumber" value="<!-- TMPL_VAR
NAME="parentbiblionumber" -->" />
+ <!--/TMPL_IF--><!--TMPL_IF Name="itemnumber"-->
+ <input type="hidden" name="itemnumber" value="<!-- TMPL_VAR
NAME="itemnumber" -->" /><!--/TMPL_IF-->
+ <!--TMPL_IF Name="analytical_record"-->
+ <input type="hidden" name="analytical_record" value="<!-- TMPL_VAR
NAME="analytical_record" -->" /><!--/TMPL_IF-->
<input type="hidden" name="breedingid" value="<!-- TMPL_VAR
NAME="breedingid" -->" />
<div id="addbibliotabs" class="toptabs numbered">
diff --git a/kohaversion.pl b/kohaversion.pl
index 0272b60..4261d9c 100644
--- a/kohaversion.pl
+++ b/kohaversion.pl
@@ -11,7 +11,7 @@ use strict;
sub kohaversion {
- our $VERSION = '3.01.00.999';
+ our $VERSION = '3.01.01.000';
# version needs to be set this way
# so that it can be picked up by Makefile.PL
--
1.5.4.5
_______________________________________________
Koha-patches mailing list
[email protected]
http://lists.koha-community.org/cgi-bin/mailman/listinfo/koha-patches