use C4::Koha;
use C4::Biblio;
use C4::Dates qw/format_date format_date_in_iso/;
+use C4::Search qw/SimpleSearch/;
use MARC::Record;
use C4::ClassSource;
use C4::Log;
-use C4::Branch;
-require C4::Reserves;
-use C4::Charset;
-use C4::Acquisition;
use List::MoreUtils qw/any/;
use Data::Dumper; # used as part of logging item record changes, not just for
# debugging; so please don't remove this
Item barcode, provide to assist in the construction of
useful error messages.
-=item error_condition
+=item error_code
Code representing the error condition. Can be 'duplicate_barcode',
'invalid_homebranch', or 'invalid_holdingbranch'.
my @errors = ();
my $dbh = C4::Context->dbh;
+ # We modify the record, so lets work on a clone so we don't change the
+ # original.
+ $record = $record->clone();
# loop through the item tags and start creating items
my @bad_item_fields = ();
my ($itemtag, $itemsubfield) = &GetMarcFromKohaField("items.itemnumber",'');
sub CheckItemPreSave {
my $item_ref = shift;
+ require C4::Branch;
my %errors = ();
# check for valid home branch
if (exists $item_ref->{'homebranch'} and defined $item_ref->{'homebranch'}) {
- my $branch_name = GetBranchName($item_ref->{'homebranch'});
+ my $branch_name = C4::Branch::GetBranchName($item_ref->{'homebranch'});
unless (defined $branch_name) {
# relies on fact that branches.branchname is a non-NULL column,
# so GetBranchName returns undef only if branch does not exist
# check for valid holding branch
if (exists $item_ref->{'holdingbranch'} and defined $item_ref->{'holdingbranch'}) {
- my $branch_name = GetBranchName($item_ref->{'holdingbranch'});
+ my $branch_name = C4::Branch::GetBranchName($item_ref->{'holdingbranch'});
unless (defined $branch_name) {
# relies on fact that branches.branchname is a non-NULL column,
# so GetBranchName returns undef only if branch does not exist
items.notforloan as itemnotforloan,
itemtypes.description,
itemtypes.notforloan as notforloan_per_itemtype,
- branchurl
+ holding.branchurl,
+ holding.branchname,
+ holding.opac_info as branch_opac_info
FROM items
- LEFT JOIN branches ON items.holdingbranch = branches.branchcode
+ LEFT JOIN branches AS holding ON items.holdingbranch = holding.branchcode
+ LEFT JOIN branches AS home ON items.homebranch=home.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" ;
+ $query .= " WHERE items.biblionumber = ? ORDER BY home.branchname,items.dateaccessioned desc" ;
my $sth = $dbh->prepare($query);
$sth->execute($biblionumber);
my $i = 0;
my $ssth = $dbh->prepare("SELECT serialseq,publisheddate from serialitems left join serial on serialitems.serialid=serial.serialid where serialitems.itemnumber=? ");
while ( my $data = $sth->fetchrow_hashref ) {
my $datedue = '';
- my $count_reserves;
$isth->execute( $data->{'itemnumber'} );
if ( my $idata = $isth->fetchrow_hashref ) {
$data->{borrowernumber} = $idata->{borrowernumber};
($data->{'serialseq'} , $data->{'publisheddate'}) = $ssth->fetchrow_array();
$serial = 1;
}
- if ( $datedue eq '' ) {
- my ( $restype, $reserves, undef ) =
- C4::Reserves::CheckReserves( $data->{'itemnumber'} );
-# Previous conditional check with if ($restype) is not needed because a true
-# result for one item will result in subsequent items defaulting to this true
-# value.
- $count_reserves = $restype;
- }
#get branch information.....
my $bsth = $dbh->prepare(
"SELECT * FROM branches WHERE branchcode = ?
$data->{'branchname'} = $bdata->{'branchname'};
}
$data->{'datedue'} = $datedue;
- $data->{'count_reserves'} = $count_reserves;
# get notforloan complete status if applicable
my $sthnflstatus = $dbh->prepare(
ModZebra( $tobiblio, "specialUpdate", "biblioserver", undef, undef );
ModZebra( $frombiblio, "specialUpdate", "biblioserver", undef, undef );
# Checking if the item we want to move is in an order
- my $order = GetOrderFromItemnumber($itemnumber);
+ require C4::Acquisition;
+ my $order = C4::Acquisition::GetOrderFromItemnumber($itemnumber);
if ($order) {
# Replacing the biblionumber within the order if necessary
$order->{'biblionumber'} = $tobiblio;
- ModOrder($order);
+ C4::Acquisition::ModOrder($order);
}
return $tobiblio;
}
sub _parse_unlinked_item_subfields_from_xml {
my $xml = shift;
-
+ require C4::Charset;
return unless defined $xml and $xml ne "";
- my $marc = MARC::Record->new_from_xml(StripNonXmlChars($xml),'UTF-8');
+ my $marc = MARC::Record->new_from_xml(C4::Charset::StripNonXmlChars($xml),'UTF-8');
my $unlinked_subfields = [];
my @fields = $marc->fields();
if ($#fields > -1) {
}
=head1 OTHER FUNCTIONS
+=head2 _find_value
+
+ ($indicators, $value) = _find_value($tag, $subfield, $record,$encoding);
+
+Find the given $subfield in the given $tag in the given
+MARC::Record $record. If the subfield is found, returns
+the (indicators, value) pair; otherwise, (undef, undef) is
+returned.
+
+PROPOSITION :
+Such a function is used in addbiblio AND additem and serial-edit and maybe could be used in Authorities.
+I suggest we export it from this module.
+
+=cut
+
+sub _find_value {
+ my ( $tagfield, $insubfield, $record, $encoding ) = @_;
+ my @result;
+ my $indicator;
+ if ( $tagfield < 10 ) {
+ if ( $record->field($tagfield) ) {
+ push @result, $record->field($tagfield)->data();
+ } else {
+ push @result, "";
+ }
+ } else {
+ foreach my $field ( $record->field($tagfield) ) {
+ my @subfields = $field->subfields();
+ foreach my $subfield (@subfields) {
+ if ( @$subfield[0] eq $insubfield ) {
+ push @result, @$subfield[1];
+ $indicator = $field->indicator(1) . $field->indicator(2);
+ }
+ }
+ }
+ }
+ return ( $indicator, @result );
+}
+
=head2 PrepareItemrecordDisplay
$subfield_data{subfield} = $subfield;
$subfield_data{countsubfield} = $cntsubf++;
$subfield_data{kohafield} = $tagslib->{$tag}->{$subfield}->{'kohafield'};
+ $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".int(rand(1000000));
# $subfield_data{marc_lib}=$tagslib->{$tag}->{$subfield}->{lib};
$subfield_data{marc_lib} = $tagslib->{$tag}->{$subfield}->{lib};
my $extended_param = plugin_parameters( $dbh, $temp, $tagslib, $subfield_data{id}, undef );
my ( $function_name, $javascript ) = plugin_javascript( $dbh, $temp, $tagslib, $subfield_data{id}, undef );
$subfield_data{random} = int(rand(1000000)); # why do we need 2 different randoms?
- my $index_subfield = int(rand(1000000));
- $subfield_data{id} = "tag_".$tag."_subfield_".$subfield."_".$index_subfield;
$subfield_data{marc_value} = qq[<input tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255"
onfocus="Focus$function_name($subfield_data{random}, '$subfield_data{id}');"
onblur=" Blur$function_name($subfield_data{random}, '$subfield_data{id}');" />