GetItemsByBiblioitemnumber
GetItemsInfo
GetItemsLocationInfo
+ GetHostItemsInfo
+ GetItemnumbersForBiblio
get_itemnumbers_of
+ get_hostitemnumbers_of
GetItemnumberFromBarcode
GetBarcodeFromItemnumber
- GetHiddenItemnumbers
-
+ GetHiddenItemnumbers
DelItemCheck
MoveItemFromBiblio
GetLatestAcquisitions
CartToShelf
+
+ GetAnalyticsCount
+ GetItemHolds
);
}
changed from the cataloging and serials
item editors are included in this hash.
+Returns item record
+
=cut
my %default_values_for_mod_from_marc = (
}
my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode );
- return ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields);
+ ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields);
+ return $item;
}
=head2 ModItem
};
$item->{'itemnumber'} = $itemnumber or return undef;
+
+ $item->{onloan} = undef if $item->{itemlost};
+
_set_derived_columns_for_mod($item);
_do_column_fixes_for_mod($item);
# FIXME add checks
itemtypes.notforloan as notforloan_per_itemtype,
branchurl
FROM items
- LEFT JOIN branches ON items.homebranch = branches.branchcode
+ LEFT JOIN branches ON items.holdingbranch = branches.branchcode
LEFT JOIN biblio ON biblio.biblionumber = items.biblionumber
LEFT JOIN biblioitems ON biblioitems.biblioitemnumber = items.biblioitemnumber
LEFT JOIN itemtypes ON itemtypes.itemtype = "
return @results;
}
+=head2 GetHostItemsInfo
+
+ $hostiteminfo = GetHostItemsInfo($hostfield);
+ Returns the iteminfo for items linked to records via a host field
+
+=cut
+
+sub GetHostItemsInfo {
+ my ($record) = @_;
+ my @returnitemsInfo;
+
+ if (C4::Context->preference('marcflavour') eq 'MARC21' ||
+ C4::Context->preference('marcflavour') eq 'NORMARC'){
+ foreach my $hostfield ( $record->field('773') ) {
+ my $hostbiblionumber = $hostfield->subfield("0");
+ my $linkeditemnumber = $hostfield->subfield("9");
+ my @hostitemInfos = GetItemsInfo($hostbiblionumber);
+ foreach my $hostitemInfo (@hostitemInfos){
+ if ($hostitemInfo->{itemnumber} eq $linkeditemnumber){
+ push (@returnitemsInfo,$hostitemInfo);
+ last;
+ }
+ }
+ }
+ } elsif ( C4::Context->preference('marcflavour') eq 'UNIMARC'){
+ foreach my $hostfield ( $record->field('461') ) {
+ my $hostbiblionumber = $hostfield->subfield("0");
+ my $linkeditemnumber = $hostfield->subfield("9");
+ my @hostitemInfos = GetItemsInfo($hostbiblionumber);
+ foreach my $hostitemInfo (@hostitemInfos){
+ if ($hostitemInfo->{itemnumber} eq $linkeditemnumber){
+ push (@returnitemsInfo,$hostitemInfo);
+ last;
+ }
+ }
+ }
+ }
+ return @returnitemsInfo;
+}
+
=head2 GetLastAcquisitions
return @results;
}
+=head2 GetItemnumberForBiblio
+
+ my @itemnumbers = GetItemnumbersForBiblio($biblionumber);
+
+Given a single biblionumber, return an array of all the corresponding itemnumbers
+
+=cut
+
+sub GetItemnumbersForBiblio {
+ my $biblionumber = shift;
+ my @items;
+ my $dbh = C4::Context->dbh;
+ my $sth = $dbh->prepare("SELECT itemnumber FROM items WHERE biblionumber = ?");
+ $sth->execute($biblionumber);
+ while (my $result = $sth->fetchrow_hashref) {
+ push @items, $result->{'itemnumber'};
+ }
+ return \@items;
+}
+
=head2 get_itemnumbers_of
my @itemnumbers_of = get_itemnumbers_of(@biblionumbers);
return \%itemnumbers_of;
}
+=head2 get_hostitemnumbers_of
+
+ my @itemnumbers_of = get_hostitemnumbers_of($biblionumber);
+
+Given a biblionumber, return the list of corresponding itemnumbers that are linked to it via host fields
+
+Return a reference on a hash where key is a biblionumber and values are
+references on array of itemnumbers.
+
+=cut
+
+
+sub get_hostitemnumbers_of {
+ my ($biblionumber) = @_;
+ my $marcrecord = GetMarcBiblio($biblionumber);
+ my (@returnhostitemnumbers,$tag, $biblio_s, $item_s);
+
+ my $marcflavor = C4::Context->preference('marcflavour');
+ if ($marcflavor eq 'MARC21' || $marcflavor eq 'NORMARC') {
+ $tag='773';
+ $biblio_s='0';
+ $item_s='9';
+ } elsif ($marcflavor eq 'UNIMARC') {
+ $tag='461';
+ $biblio_s='0';
+ $item_s='9';
+ }
+
+ foreach my $hostfield ( $marcrecord->field($tag) ) {
+ my $hostbiblionumber = $hostfield->subfield($biblio_s);
+ my $linkeditemnumber = $hostfield->subfield($item_s);
+ my @itemnumbers;
+ if (my $itemnumbers = get_itemnumbers_of($hostbiblionumber)->{$hostbiblionumber})
+ {
+ @itemnumbers = @$itemnumbers;
+ }
+ foreach my $itemnumber (@itemnumbers){
+ if ($itemnumber eq $linkeditemnumber){
+ push (@returnhostitemnumbers,$itemnumber);
+ last;
+ }
+ }
+ }
+ return @returnhostitemnumbers;
+}
+
+
=head2 GetItemnumberFromBarcode
$result = GetItemnumberFromBarcode($barcode);
my ( $dbh, $biblionumber, $itemnumber ) = @_;
my $error;
+ my $countanalytics=GetAnalyticsCount($itemnumber);
+
+
# check that there is no issue on this item before deletion.
my $sth=$dbh->prepare("select * from issues i where i.itemnumber=?");
$sth->execute($itemnumber);
my $item = GetItem($itemnumber);
- my $onloan = $sth->fetchrow;
- if ($onloan) {
- $error = "book_on_loan";
+ my $onloan=$sth->fetchrow;
+
+ if ($onloan){
+ $error = "book_on_loan"
}
- elsif (C4::Context->preference("IndependantBranches") and (C4::Context->userenv->{branch} ne $item->{C4::Context->preference("HomeOrHoldingBranch")||'homebranch'})){
+ elsif ( C4::Context->userenv->{flags} & 1 and
+ C4::Context->preference("IndependantBranches") and
+ (C4::Context->userenv->{branch} ne
+ $item->{C4::Context->preference("HomeOrHoldingBranch")||'homebranch'}) )
+ {
$error = "not_same_branch";
- }
- else {
- if ($onloan){
- $error = "book_on_loan"
- }
- else {
- # check it doesnt have a waiting reserve
- $sth=$dbh->prepare("SELECT * FROM reserves WHERE (found = 'W' or found = 'T') AND itemnumber = ?");
- $sth->execute($itemnumber);
- my $reserve=$sth->fetchrow;
- if ($reserve) {
- $error = "book_reserved";
- }
- else {
- DelItem($dbh, $biblionumber, $itemnumber);
- return 1;
- }
- }
+ }
+ else{
+ # check it doesnt have a waiting reserve
+ $sth=$dbh->prepare("SELECT * FROM reserves WHERE (found = 'W' or found = 'T') AND itemnumber = ?");
+ $sth->execute($itemnumber);
+ my $reserve=$sth->fetchrow;
+ if ($reserve){
+ $error = "book_reserved";
+ } elsif ($countanalytics > 0){
+ $error = "linked_analytics";
+ } else {
+ DelItem($dbh, $biblionumber, $itemnumber);
+ return 1;
+ }
}
return $error;
}
return $unlinked_subfields;
}
+=head2 GetAnalyticsCount
+
+ $count= &GetAnalyticsCount($itemnumber)
+
+counts Usage of itemnumber in Analytical bibliorecords.
+
+=cut
+
+sub GetAnalyticsCount {
+ my ($itemnumber) = @_;
+ if (C4::Context->preference('NoZebra')) {
+ # Read the index Koha-Auth-Number for this authid and count the lines
+ my $result = C4::Search::NZanalyse("hi=$itemnumber");
+ my @tab = split /;/,$result;
+ return scalar @tab;
+ } else {
+ ### ZOOM search here
+ my $query;
+ $query= "hi=".$itemnumber;
+ my ($err,$res,$result) = C4::Search::SimpleSearch($query,0,10);
+ return ($result);
+ }
+}
+
+=head2 GetItemHolds
+
+=over 4
+$holds = &GetItemHolds($biblionumber, $itemnumber);
+
+=back
+
+This function return the count of holds with $biblionumber and $itemnumber
+
+=cut
+
+sub GetItemHolds {
+ my ($biblionumber, $itemnumber) = @_;
+ my $holds;
+ my $dbh = C4::Context->dbh;
+ my $query = "SELECT count(*)
+ FROM reserves
+ WHERE biblionumber=? AND itemnumber=?";
+ my $sth = $dbh->prepare($query);
+ $sth->execute($biblionumber, $itemnumber);
+ $holds = $sth->fetchrow;
+ return $holds;
+}
1;