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&amp;biblionumber=<!-- 
TMPL_VAR NAME="biblionumber"-->&amp;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&amp;biblionumber=<!-- 
TMPL_VAR NAME="biblionumber"-->&amp;itemnumber=<!-- TMPL_VAR NAME="itemnumber" 
-->">[Edit Items]</a>&nbsp;&nbsp;<a 
href="/cgi-bin/koha/cataloguing/addbiblio.pl?analytical_record=1&parentbiblionumber=<!--
 TMPL_VAR NAME="biblionumber" -->&amp;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" -->&nbsp;</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

Reply via email to