package C4::Items;
# Copyright 2007 LibLime, Inc.
+# Parts Copyright Biblibre 2010
#
# This file is part of Koha.
#
require C4::Reserves;
use C4::Charset;
use C4::Acquisition;
+use List::MoreUtils qw/any/;
use vars qw($VERSION @ISA @EXPORT);
GetItemInfosOf
GetItemsByBiblioitemnumber
GetItemsInfo
+ GetItemsLocationInfo
get_itemnumbers_of
GetItemnumberFromBarcode
GetBarcodeFromItemnumber
+ GetHiddenItemnumbers
DelItemCheck
MoveItemFromBiblio
}
my $unlinked_item_subfields = _get_unlinked_item_subfields( $localitemmarc, $frameworkcode );
- my $dbh = C4::Context->dbh;
- my $frameworkcode = GetFrameworkCode( $biblionumber );
- my ($itemtag,$itemsubfield)=GetMarcFromKohaField("items.itemnumber",$frameworkcode);
-
- my $localitemmarc=MARC::Record->new;
- $localitemmarc->append_fields($item_marc->field($itemtag));
- my $item = &TransformMarcToKoha( $dbh, $localitemmarc, $frameworkcode, 'items');
- foreach my $item_field (keys %default_values_for_mod_from_marc) {
- $item->{$item_field} = $default_values_for_mod_from_marc{$item_field} unless exists $item->{$item_field};
- }
- my $unlinked_item_subfields = _get_unlinked_item_subfields($localitemmarc, $frameworkcode);
-
return ModItem($item, $biblionumber, $itemnumber, $dbh, $frameworkcode, $unlinked_item_subfields);
}
}
}
+=head2 GetItemsLocationInfo
+
+ my @itemlocinfo = GetItemsLocationInfo($biblionumber);
+
+Returns the branch names, shelving location and itemcallnumber for each item attached to the biblio in question
+
+C<GetItemsInfo> returns a list of references-to-hash. Data returned:
+
+=over 2
+
+=item C<$data-E<gt>{homebranch}>
+
+Branch Name of the item's homebranch
+
+=item C<$data-E<gt>{holdingbranch}>
+
+Branch Name of the item's holdingbranch
+
+=item C<$data-E<gt>{location}>
+
+Item's shelving location code
+
+=item C<$data-E<gt>{location_intranet}>
+
+The intranet description for the Shelving Location as set in authorised_values 'LOC'
+
+=item C<$data-E<gt>{location_opac}>
+
+The OPAC description for the Shelving Location as set in authorised_values 'LOC'. Falls back to intranet description if no OPAC
+description is set.
+
+=item C<$data-E<gt>{itemcallnumber}>
+
+Item's itemcallnumber
+
+=item C<$data-E<gt>{cn_sort}>
+
+Item's call number normalized for sorting
+
+=back
+
+=cut
+
+sub GetItemsLocationInfo {
+ my $biblionumber = shift;
+ my @results;
+
+ my $dbh = C4::Context->dbh;
+ my $query = "SELECT a.branchname as homebranch, b.branchname as holdingbranch,
+ location, itemcallnumber, cn_sort
+ FROM items, branches as a, branches as b
+ WHERE homebranch = a.branchcode AND holdingbranch = b.branchcode
+ AND biblionumber = ?
+ ORDER BY cn_sort ASC";
+ my $sth = $dbh->prepare($query);
+ $sth->execute($biblionumber);
+
+ while ( my $data = $sth->fetchrow_hashref ) {
+ $data->{location_intranet} = GetKohaAuthorisedValueLib('LOC', $data->{location});
+ $data->{location_opac}= GetKohaAuthorisedValueLib('LOC', $data->{location}, 1);
+ push @results, $data;
+ }
+ return @results;
+}
+
+
=head2 GetLastAcquisitions
my $lastacq = GetLastAcquisitions({'branches' => ('branch1','branch2'),
return ($result);
}
+=head2 GetHiddenItemnumbers
+
+=over 4
+
+$result = GetHiddenItemnumbers(@items);
+
+=back
+
+=cut
+
+sub GetHiddenItemnumbers {
+ my (@items) = @_;
+ my @resultitems;
+
+ my $yaml = C4::Context->preference('OpacHiddenItems');
+ my $hidingrules;
+ eval {
+ $hidingrules = YAML::Load($yaml);
+ };
+ if ($@) {
+ warn "Unable to parse OpacHiddenItems syspref : $@";
+ return ();
+ } else {
+ my $dbh = C4::Context->dbh;
+
+ # For each item
+ foreach my $item (@items) {
+
+ # We check each rule
+ foreach my $field (keys %$hidingrules) {
+ my $query = "SELECT $field from items where itemnumber = ?";
+ my $sth = $dbh->prepare($query);
+ $sth->execute($item->{'itemnumber'});
+ my ($result) = $sth->fetchrow;
+
+ # If the results matches the values in the yaml file
+ if (any { $result eq $_ } @{$hidingrules->{$field}}) {
+
+ # We add the itemnumber to the list
+ push @resultitems, $item->{'itemnumber'};
+
+ # If at least one rule matched for an item, no need to test the others
+ last;
+ }
+ }
+ }
+ return @resultitems;
+ }
+
+ }
+
=head3 get_item_authorised_values
find the types and values for all authorised values assigned to this item.
uri = ?,
enumchron = ?,
more_subfields_xml = ?,
- copynumber = ?
+ copynumber = ?,
+ stocknumber = ?
";
my $sth = $dbh->prepare($query);
$sth->execute(
$item->{'enumchron'},
$item->{'more_subfields_xml'},
$item->{'copynumber'},
+ $item->{'stocknumber'},
);
my $itemnumber = $dbh->{'mysql_insertid'};
if ( defined $sth->errstr ) {
my $sth=$dbh->prepare("select * from issues i where i.itemnumber=?");
$sth->execute($itemnumber);
- my $onloan=$sth->fetchrow;
-
- 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;
- }
+ my $item = GetItem($itemnumber);
+ 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'})){
+ $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;
+ }
+ }
}
return $error;
}