From 737948c36b4bf6a125d070b30c0455593875ff11 Mon Sep 17 00:00:00 2001 From: Colin Campbell Date: Thu, 1 Sep 2011 16:18:14 +0100 Subject: [PATCH] Bug 6831: Add ability to enter adding child record from parent Content-Type: text/plain; charset="utf-8" Simplifies the adding of analytical records and ensures that the data populating the 773 tag is correct. From the host record add child record is selected and create bib is entered to generate a new record with host item tag populated from the parent Caveat: currently prepare_host_field only returns a field for MARC21. Values for UNIMARC and NORMARC can easily be added but should be done by someone familar with those formats and conventions --- C4/Biblio.pm | 58 ++++++++++++++++++++ cataloguing/addbiblio.pl | 19 +++++++ .../intranet-tmpl/prog/en/includes/cat-toolbar.inc | 14 ++++- 3 files changed, 88 insertions(+), 3 deletions(-) diff --git a/C4/Biblio.pm b/C4/Biblio.pm index 96baaef..dabb73f 100644 --- a/C4/Biblio.pm +++ b/C4/Biblio.pm @@ -128,6 +128,7 @@ BEGIN { &TransformHtmlToXml &PrepareItemrecordDisplay &GetNoZebraIndexes + prepare_host_field ); } @@ -3681,8 +3682,65 @@ sub get_biblio_authorised_values { return $authorised_values; } +=head2 prepare_host_field + +$marcfield = prepare_host_field( $hostbiblioitem, $marcflavour ); +Generate the host item entry for an analytic child entry + +=cut + +sub prepare_host_field { + my ( $hostbiblio, $marcflavour ) = @_; + $marcflavour ||= 'MARC21'; + my $host = GetMarcBiblio($hostbiblio); + if ( $marcflavour eq 'MARC21' ) { + + # unfortunately as_string does not 'do the right thing' + # if field returns undef + my %sfd; + my $field; + if ( $field = $host->author() ) { + $sfd{a} = $field; + } + if ( $field = $host->title() ) { + $sfd{t} = $field; + } + if ( $field = $host->field('260') ) { + my $s = $field->as_string('abc'); + if ($s) { + $sfd{d} = $s; + } + } + if ( $field = $host->field('240') ) { + my $s = $field->as_string(); + if ($s) { + $sfd{b} = $s; + } + } + if ( $field = $host->field('022') ) { + my $s = $field->as_string('a'); + if ($s) { + $sfd{x} = $s; + } + } + if ( $field = $host->field('020') ) { + my $s = $field->as_string('a'); + if ($s) { + $sfd{x} = $s; + } + } + if ( $field = $host->field('001') ) { + $sfd{w} = $field->data(),; + } + my $host_field = MARC::Field->new( 773, '0', ' ', %sfd ); + return $host_field; + } + return; +} + 1; + __END__ =head1 AUTHOR diff --git a/cataloguing/addbiblio.pl b/cataloguing/addbiblio.pl index 637d82d..1ad043b 100755 --- a/cataloguing/addbiblio.pl +++ b/cataloguing/addbiblio.pl @@ -827,6 +827,7 @@ AND (authtypecode IS NOT NULL AND authtypecode<>\"\")|); 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 $parentbiblio = $input->param('parentbiblionumber'); my $breedingid = $input->param('breedingid'); my $z3950 = $input->param('z3950'); my $op = $input->param('op'); @@ -904,6 +905,15 @@ if (($biblionumber) && !($breedingid)){ if ($breedingid) { ( $record, $encoding ) = MARCfindbreeding( $breedingid ) ; } +# This is a child record +if ($parentbiblio) { + my $marcflavour = C4::Context->preference('marcflavour'); + $record = MARC::Record->new(); + my $hostfield = prepare_host_field($parentbiblio,$marcflavour); + if ($hostfield) { + $record->append_fields($hostfield); + } +} $is_a_modif = 0; @@ -1070,3 +1080,12 @@ $template->param( ); output_html_with_http_headers $input, $cookie, $template->output; + +sub get_host_control_num { + my $host_biblio_nr = shift; + my $host = GetMarcBiblio($host_biblio_nr); + my $control_num = GetMarcControlnumber($host, C4::Context->preference('marcflavour')); + $host = GetBiblioData($host_biblio_nr); + $host->{control_number} = $control_num; + return $host; +} diff --git a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc index 9766494..47ca4b3 100644 --- a/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc +++ b/koha-tmpl/intranet-tmpl/prog/en/includes/cat-toolbar.inc @@ -78,10 +78,18 @@ function confirm_items_deletion() { YAHOO.util.Event.onContentReady("cattoolbar", function () { // Menu for new record, new item, new subscription var newmenu = [ - [% IF ( CAN_user_editcatalogue_edit_catalogue ) %]{text: _("New Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl" },[% END %] - [% IF ( CAN_user_editcatalogue_edit_items ) %]{text: _("New Item"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=[% biblionumber %]#additema" },[% END %] + [% IF CAN_user_editcatalogue_edit_catalogue %] + {text: _("New Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl" }, + [% END %] + [% IF ( CAN_user_editcatalogue_edit_items ) %] + {text: _("New Item"), url: "/cgi-bin/koha/cataloguing/additem.pl?biblionumber=[% biblionumber %]#additema" }, + [% END %] [% IF ( CAN_user_serials_create_subscription ) %] - {text: _("New Subscription"), url: "/cgi-bin/koha/serials/subscription-add.pl?biblionumber_for_new_subscription=[% biblionumber %]"},[% END %] + {text: _("New Subscription"), url: "/cgi-bin/koha/serials/subscription-add.pl?biblionumber_for_new_subscription=[% biblionumber %]"}, + [% END %] + [% IF CAN_user_editcatalogue_edit_catalogue %] + {text: _("New Child Record"), url: "/cgi-bin/koha/cataloguing/addbiblio.pl?parentbiblionumber=[% biblionumber %]" }, + [% END %] ]; if(newmenu.length){ new YAHOO.widget.Button({ -- 1.7.6