X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FItems.pm;h=073d6f754186defd567770844749cfa6e28b0a96;hb=9c5e40e4923179bf0b2b630d3e09797dc4c1fdb0;hp=9283b5c63e11fb6a5b34773f5b0a566132d0760d;hpb=f1d68112820483b8cc5e837f6ded6f9bebe83717;p=koha.git
diff --git a/C4/Items.pm b/C4/Items.pm
index 9283b5c63e..073d6f7541 100644
--- a/C4/Items.pm
+++ b/C4/Items.pm
@@ -30,6 +30,7 @@ use MARC::Record;
use C4::ClassSource;
use C4::Log;
use List::MoreUtils qw/any/;
+use YAML qw/Load/;
use Data::Dumper; # used as part of logging item record changes, not just for
# debugging; so please don't remove this
@@ -144,6 +145,7 @@ sub GetItem {
my ($itemnumber,$barcode, $serial) = @_;
my $dbh = C4::Context->dbh;
my $data;
+
if ($itemnumber) {
my $sth = $dbh->prepare("
SELECT * FROM items
@@ -158,6 +160,9 @@ sub GetItem {
$sth->execute($barcode);
$data = $sth->fetchrow_hashref;
}
+
+ return unless ( $data );
+
if ( $serial) {
my $ssth = $dbh->prepare("SELECT serialseq,publisheddate from serialitems left join serial on serialitems.serialid=serial.serialid where serialitems.itemnumber=?");
$ssth->execute($data->{'itemnumber'}) ;
@@ -463,7 +468,7 @@ my %default_values_for_mod_from_marc = (
stack => undef,
stocknumber => undef,
uri => undef,
- wthdrawn => 0,
+ withdrawn => 0,
);
sub ModItemFromMarc {
@@ -751,12 +756,16 @@ Create a status selector with the following code
=head3 in TEMPLATE
-
+
=cut
@@ -970,9 +979,7 @@ sub GetLostItems {
=head2 GetItemsForInventory
- $itemlist = GetItemsForInventory($minlocation, $maxlocation,
- $location, $itemtype $datelastseen, $branch,
- $offset, $size, $statushash);
+($itemlist, $iTotalRecords) = GetItemsForInventory($minlocation, $maxlocation, $location, $itemtype, $ignoreissued, $datelastseen, $branchcode, $offset, $size, $statushash);
Retrieve a list of title/authors/barcode/callnumber, for biblio inventory.
@@ -985,6 +992,8 @@ the datelastseen can be used to specify that you want to see items not seen sinc
offset & size can be used to retrieve only a part of the whole listing (defaut behaviour)
$statushash requires a hashref that has the authorized values fieldname (intems.notforloan, etc...) as keys, and an arrayref of statuscodes we are searching for as values.
+$iTotalRecords is the number of rows that would have been returned without the $offset, $size limit clause
+
=cut
sub GetItemsForInventory {
@@ -992,12 +1001,15 @@ sub GetItemsForInventory {
my $dbh = C4::Context->dbh;
my ( @bind_params, @where_strings );
- my $query = <<'END_SQL';
-SELECT items.itemnumber, barcode, itemcallnumber, title, author, biblio.biblionumber, datelastseen
-FROM items
- LEFT JOIN biblio ON items.biblionumber = biblio.biblionumber
- LEFT JOIN biblioitems on items.biblionumber = biblioitems.biblionumber
-END_SQL
+ my $select_columns = q{
+ SELECT items.itemnumber, barcode, itemcallnumber, title, author, biblio.biblionumber, biblio.frameworkcode, datelastseen, homebranch, location, notforloan, damaged, itemlost, stocknumber
+ };
+ my $select_count = q{SELECT COUNT(*)};
+ my $query = q{
+ FROM items
+ LEFT JOIN biblio ON items.biblionumber = biblio.biblionumber
+ LEFT JOIN biblioitems on items.biblionumber = biblioitems.biblionumber
+ };
if ($statushash){
for my $authvfield (keys %$statushash){
if ( scalar @{$statushash->{$authvfield}} > 0 ){
@@ -1036,7 +1048,7 @@ END_SQL
}
push @bind_params, $branchcode;
}
-
+
if ( $itemtype ) {
push @where_strings, 'biblioitems.itemtype = ?';
push @bind_params, $itemtype;
@@ -1052,20 +1064,34 @@ END_SQL
$query .= join ' AND ', @where_strings;
}
$query .= ' ORDER BY items.cn_sort, itemcallnumber, title';
+ my $count_query = $select_count . $query;
+ $query .= " LIMIT $offset, $size" if ($offset and $size);
+ $query = $select_columns . $query;
my $sth = $dbh->prepare($query);
$sth->execute( @bind_params );
- my @results;
- $size--;
- while ( my $row = $sth->fetchrow_hashref ) {
- $offset-- if ($offset);
- $row->{datelastseen}=format_date($row->{datelastseen});
- if ( ( !$offset ) && $size ) {
- push @results, $row;
- $size--;
+ my @results = ();
+ my $tmpresults = $sth->fetchall_arrayref({});
+ $sth = $dbh->prepare( $count_query );
+ $sth->execute( @bind_params );
+ my ($iTotalRecords) = $sth->fetchrow_array();
+
+ foreach my $row (@$tmpresults) {
+
+ # Auth values
+ foreach (keys %$row) {
+ # If the koha field is mapped to a marc field
+ my ($f, $sf) = GetMarcFromKohaField("items.$_", $row->{'frameworkcode'});
+ if ($f and $sf) {
+ # We replace the code with it's description
+ my $authvals = C4::Koha::GetKohaAuthorisedValuesFromField($f, $sf, $row->{'frameworkcode'});
+ $row->{$_} = $authvals->{$row->{$_}} if defined $authvals->{$row->{$_}};
+ }
}
+ push @results, $row;
}
- return \@results;
+
+ return (\@results, $iTotalRecords);
}
=head2 GetItemsCount
@@ -1136,7 +1162,7 @@ sub GetItemsByBiblioitemnumber {
$data->{'borrowernumber'} = $data2->{'borrowernumber'};
}
else {
- # set date_due to blank, so in the template we check itemlost, and wthdrawn
+ # set date_due to blank, so in the template we check itemlost, and withdrawn
$data->{'date_due'} = '';
} # else
# Find the last 3 people who borrowed this item.
@@ -1253,7 +1279,7 @@ sub GetItemsInfo {
$data->{firstname} = $idata->{firstname};
$data->{lastreneweddate} = $idata->{lastreneweddate};
$datedue = $idata->{'date_due'};
- if (C4::Context->preference("IndependantBranches")){
+ if (C4::Context->preference("IndependentBranches")){
my $userenv = C4::Context->userenv;
if ( ($userenv) && ( $userenv->{flags} % 2 != 1 ) ) {
$data->{'NOTSAMEBRANCH'} = 1 if ($idata->{'bcode'} ne $userenv->{branch});
@@ -1284,8 +1310,8 @@ sub GetItemsInfo {
# get restricted status and description if applicable
if ( my $code = C4::Koha::GetAuthValCode( 'items.restricted', $data->{frameworkcode} ) ) {
- $data->{restricted} = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{restricted} );
$data->{restrictedopac} = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{restricted}, 1 );
+ $data->{restricted} = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{restricted} );
}
# my stack procedures
@@ -1612,11 +1638,11 @@ sub GetBarcodeFromItemnumber {
=head2 GetHiddenItemnumbers
-=over 4
-
-$result = GetHiddenItemnumbers(@items);
+ my @itemnumbers_to_hide = GetHiddenItemnumbers(@items);
-=back
+Given a list of items it checks which should be hidden from the OPAC given
+the current configuration. Returns a list of itemnumbers corresponding to
+those that should be hidden.
=cut
@@ -1625,6 +1651,7 @@ sub GetHiddenItemnumbers {
my @resultitems;
my $yaml = C4::Context->preference('OpacHiddenItems');
+ return () if (! $yaml =~ /\S/ );
$yaml = "$yaml\n\n"; # YAML is anal on ending \n. Surplus does not hurt
my $hidingrules;
eval {
@@ -1939,7 +1966,7 @@ Given an item hashref containing one or more
columns to modify, fix up certain values.
Specifically, set to 0 any passed value
of C, C, C, or
-C that is either undefined or
+C that is either undefined or
contains the empty string.
=cut
@@ -1959,9 +1986,9 @@ sub _do_column_fixes_for_mod {
(not defined $item->{'itemlost'} or $item->{'itemlost'} eq '')) {
$item->{'itemlost'} = 0;
}
- if (exists $item->{'wthdrawn'} and
- (not defined $item->{'wthdrawn'} or $item->{'wthdrawn'} eq '')) {
- $item->{'wthdrawn'} = 0;
+ if (exists $item->{'withdrawn'} and
+ (not defined $item->{'withdrawn'} or $item->{'withdrawn'} eq '')) {
+ $item->{'withdrawn'} = 0;
}
if (exists $item->{'location'} && !exists $item->{'permanent_location'}) {
$item->{'permanent_location'} = $item->{'location'};
@@ -2035,7 +2062,7 @@ C
=item *
-C
+C
=back
@@ -2044,7 +2071,7 @@ C
sub _set_defaults_for_add {
my $item = shift;
$item->{dateaccessioned} ||= C4::Dates->new->output('iso');
- $item->{$_} ||= 0 for (qw( notforloan damaged itemlost wthdrawn));
+ $item->{$_} ||= 0 for (qw( notforloan damaged itemlost withdrawn));
}
=head2 _koha_new_item
@@ -2076,7 +2103,7 @@ sub _koha_new_item {
notforloan = ?,
damaged = ?,
itemlost = ?,
- wthdrawn = ?,
+ withdrawn = ?,
itemcallnumber = ?,
coded_location_qualifier = ?,
restricted = ?,
@@ -2118,7 +2145,7 @@ sub _koha_new_item {
$item->{'notforloan'},
$item->{'damaged'},
$item->{'itemlost'},
- $item->{'wthdrawn'},
+ $item->{'withdrawn'},
$item->{'itemcallnumber'},
$item->{'coded_location_qualifier'},
$item->{'restricted'},
@@ -2214,7 +2241,7 @@ sub DelItemCheck {
$error = "book_on_loan"
}
elsif ( !( C4::Context->userenv->{flags} & 1 )
- and C4::Context->preference("IndependantBranches")
+ and C4::Context->preference("IndependentBranches")
and ( C4::Context->userenv->{branch} ne $item->{'homebranch'} ) )
{
$error = "not_same_branch";
@@ -2689,8 +2716,8 @@ sub PrepareItemrecordDisplay {
# builds list, depending on authorised value...
#---- branch
if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) {
- if ( ( C4::Context->preference("IndependantBranches") )
- && ( C4::Context->userenv->{flags} % 2 != 1 ) ) {
+ if ( ( C4::Context->preference("IndependentBranches") )
+ && ( C4::Context->userenv && C4::Context->userenv->{flags} % 2 != 1 ) ) {
my $sth = $dbh->prepare( "SELECT branchcode,branchname FROM branches WHERE branchcode = ? ORDER BY branchname" );
$sth->execute( C4::Context->userenv->{branch} );
push @authorised_values, ""
@@ -2710,7 +2737,7 @@ sub PrepareItemrecordDisplay {
}
}
- $defaultvalue = C4::Context->userenv->{branch};
+ $defaultvalue = C4::Context->userenv ? C4::Context->userenv->{branch} : undef;
if ( $defaultvalues and $defaultvalues->{branchcode} ) {
$defaultvalue = $defaultvalues->{branchcode};
}