@@ -, +, @@ --- C4/Biblio.pm | 50 ++++++++++++++++++++++++++++++++++++++++++++++++ acqui/finishreceive.pl | 9 ++++++++ 2 files changed, 59 insertions(+), 0 deletions(-) --- a/C4/Biblio.pm +++ a/C4/Biblio.pm @@ -99,6 +99,7 @@ BEGIN { &ModBiblio &ModBiblioframework &ModZebra + &AddMarcFields ); # To delete something @@ -3681,6 +3682,55 @@ sub get_biblio_authorised_values { return $authorised_values; } +=head2 AddMarcFields + +Adds fields/subfields to existing marcxml + +parameters: + biblionumber + fields + +returns: nothing + + $fields: { tag1 => val1, tag2 => val2, ... } + $valX : $val for tags < 10, + { subfld1 => subval1, subfld2 => subval2, ... } for the rest + +Notes: no indicator support + +=cut + +sub AddMarcFields { + my ( $biblionumber, $fields ) = @_; + + my $rec = GetMarcBiblio($biblionumber) or die "Invalid biblionumber $biblionumber"; + + while ( my ($tag, $val) = each %$fields ) { + if ( my ($field) = $rec->field($tag) ) { + if (ref $val) { + $field->update(%$val); + } else { + $field->update($val); + } + } + else { + my $newfield; + if (ref $val) { + $newfield = MARC::Field->new( $tag, '', '', %$val ); + } else { + $newfield = MARC::Field->new( $tag, $val ); + } + $rec->insert_fields_ordered($newfield); + } + } + + my $dbh = C4::Context->dbh; + my $encoding = C4::Context->preference("marcflavour"); + $dbh->do("UPDATE biblioitems SET marcxml=? WHERE biblionumber=?", undef, + $rec->as_xml_record($encoding), + $biblionumber ); +} + 1; __END__ --- a/acqui/finishreceive.pl +++ a/acqui/finishreceive.pl @@ -114,4 +114,13 @@ if ($quantityrec > $origquantityrec ) { $datereceived = ModReceiveOrder($biblionumber,$ordernumber, $quantityrec ,$user,$unitprice,$invoiceno,$freight,$replacement,undef,$datereceived); } } + +AddMarcFields( $biblionumber, { 952 => { e => $supplierid, + d => $datereceived, + g => $unitprice, + v => $replacement, + w => $datereceived, # XXX + }, + } ); + print $input->redirect("/cgi-bin/koha/acqui/parcel.pl?invoice=$invoiceno&supplierid=$supplierid&freight=$freight&gst=$gst&datereceived=$datereceived$error_url_str"); --