X-Git-Url: http://koha-dev.rot13.org:8081/gitweb/?a=blobdiff_plain;f=C4%2FItems.pm;h=c114e6363fcdfb44f79772e61d794122f0f1a50d;hb=98d8e1609af181fdfc05d748e27ac24f984b22e8;hp=7e98bb5bed7696559d7a03640b656a9a207e5aea;hpb=367c4fb8815bfe4a01869a25bcd8222989c15dcd;p=koha_fer diff --git a/C4/Items.pm b/C4/Items.pm index 7e98bb5bed..c114e6363f 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -36,7 +36,7 @@ use Data::Dumper; # used as part of logging item record changes, not just for use vars qw($VERSION @ISA @EXPORT); BEGIN { - $VERSION = 3.01; + $VERSION = 3.07.00.049; require Exporter; @ISA = qw( Exporter ); @@ -48,7 +48,7 @@ BEGIN { AddItem AddItemBatchFromMarc ModItemFromMarc - Item2Marc + Item2Marc ModItem ModDateLastSeen ModItemTransfer @@ -72,14 +72,17 @@ BEGIN { GetItemnumberFromBarcode GetBarcodeFromItemnumber GetHiddenItemnumbers - DelItemCheck - MoveItemFromBiblio - GetLatestAcquisitions + DelItemCheck + MoveItemFromBiblio + GetLatestAcquisitions + CartToShelf + ShelfToCart GetAnalyticsCount GetItemHolds + SearchItems PrepareItemrecordDisplay @@ -189,7 +192,30 @@ sub CartToShelf { } my $item = GetItem($itemnumber); - $item->{location} = $item->{permanent_location}; + if ( $item->{location} eq 'CART' ) { + $item->{location} = $item->{permanent_location}; + ModItem($item, undef, $itemnumber); + } +} + +=head2 ShelfToCart + + ShelfToCart($itemnumber); + +Set the current shelving location of the item +to shelving cart ('CART'). + +=cut + +sub ShelfToCart { + my ( $itemnumber ) = @_; + + unless ( $itemnumber ) { + croak "FAILED ShelfToCart() - no itemnumber supplied"; + } + + my $item = GetItem($itemnumber); + $item->{'location'} = 'CART'; ModItem($item, undef, $itemnumber); } @@ -504,7 +530,7 @@ sub ModItem { $item->{'more_subfields_xml'} = _get_unlinked_subfields_xml($unlinked_item_subfields); }; - $item->{'itemnumber'} = $itemnumber or return undef; + $item->{'itemnumber'} = $itemnumber or return; $item->{onloan} = undef if $item->{itemlost}; @@ -541,6 +567,9 @@ sub ModItemTransfer { my $dbh = C4::Context->dbh; + # Remove the 'shelving cart' location status if it is being used. + CartToShelf( $itemnumber ) if ( C4::Context->preference("ReturnToShelvingCart") ); + #new entry in branchtransfers.... my $sth = $dbh->prepare( "INSERT INTO branchtransfers (itemnumber, frombranch, datesent, tobranch) @@ -907,7 +936,8 @@ sub GetLostItems { my $dbh = C4::Context->dbh; my $query = " - SELECT * + SELECT title, author, lib, itemlost, authorised_value, barcode, datelastseen, price, replacementprice, homebranch, + itype, itemtype, holdingbranch, location, itemnotes, items.biblionumber as biblionumber FROM items LEFT JOIN biblio ON (items.biblionumber = biblio.biblionumber) LEFT JOIN biblioitems ON (items.biblionumber = biblioitems.biblionumber) @@ -1199,7 +1229,7 @@ sub GetItemsInfo { 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 home.branchname,items.dateaccessioned desc" ; + $query .= " WHERE items.biblionumber = ? ORDER BY home.branchname, items.enumchron, LPAD( items.copynumber, 8, '0' ), items.dateaccessioned DESC" ; my $sth = $dbh->prepare($query); $sth->execute($biblionumber); my $i = 0; @@ -1246,73 +1276,19 @@ sub GetItemsInfo { $data->{'datedue'} = $datedue; # get notforloan complete status if applicable - my $sthnflstatus = $dbh->prepare( - 'SELECT authorised_value - FROM marc_subfield_structure - WHERE kohafield="items.notforloan" - ' - ); - - $sthnflstatus->execute; - my ($authorised_valuecode) = $sthnflstatus->fetchrow; - if ($authorised_valuecode) { - $sthnflstatus = $dbh->prepare( - "SELECT lib FROM authorised_values - WHERE category=? - AND authorised_value=?" - ); - $sthnflstatus->execute( $authorised_valuecode, - $data->{itemnotforloan} ); - my ($lib) = $sthnflstatus->fetchrow; - $data->{notforloanvalue} = $lib; + if ( my $code = C4::Koha::GetAuthValCode( 'items.notforloan', $data->{frameworkcode} ) ) { + $data->{notforloanvalue} = C4::Koha::GetAuthorisedValueByCode( $code, $data->{itemnotforloan} ); } # get restricted status and description if applicable - my $restrictedstatus = $dbh->prepare( - 'SELECT authorised_value - FROM marc_subfield_structure - WHERE kohafield="items.restricted" - ' - ); - - $restrictedstatus->execute; - ($authorised_valuecode) = $restrictedstatus->fetchrow; - if ($authorised_valuecode) { - $restrictedstatus = $dbh->prepare( - "SELECT lib,lib_opac FROM authorised_values - WHERE category=? - AND authorised_value=?" - ); - $restrictedstatus->execute( $authorised_valuecode, - $data->{restricted} ); - - if ( my $rstdata = $restrictedstatus->fetchrow_hashref ) { - $data->{restricted} = $rstdata->{'lib'}; - $data->{restrictedopac} = $rstdata->{'lib_opac'}; - } + 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}, 'opac' ); } # my stack procedures - my $stackstatus = $dbh->prepare( - 'SELECT authorised_value - FROM marc_subfield_structure - WHERE kohafield="items.stack" - ' - ); - $stackstatus->execute; - - ($authorised_valuecode) = $stackstatus->fetchrow; - if ($authorised_valuecode) { - $stackstatus = $dbh->prepare( - "SELECT lib - FROM authorised_values - WHERE category=? - AND authorised_value=? - " - ); - $stackstatus->execute( $authorised_valuecode, $data->{stack} ); - my ($lib) = $stackstatus->fetchrow; - $data->{stack} = $lib; + if ( my $code = C4::Koha::GetAuthValCode( 'items.stack', $data->{frameworkcode} ) ) { + $data->{stack} = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{stack} ); } # Find the last 3 people who borrowed this item. my $sth2 = $dbh->prepare("SELECT * FROM old_issues,borrowers @@ -2317,7 +2293,7 @@ sub _koha_delete_item { # delete from items table $sth = $dbh->prepare("DELETE FROM items WHERE itemnumber=?"); $sth->execute($itemnum); - return undef; + return; } =head2 _marc_from_item_hash @@ -2479,6 +2455,7 @@ counts Usage of itemnumber in Analytical bibliorecords. sub GetAnalyticsCount { my ($itemnumber) = @_; + require C4::Search; 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"); @@ -2516,6 +2493,43 @@ sub GetItemHolds { $holds = $sth->fetchrow; return $holds; } + +# Return the list of the column names of items table +sub _get_items_columns { + my $dbh = C4::Context->dbh; + my $sth = $dbh->column_info(undef, undef, 'items', '%'); + $sth->execute; + my $results = $sth->fetchall_hashref('COLUMN_NAME'); + return keys %$results; +} + +=head2 SearchItems + + my $items = SearchItems($field, $value); + +SearchItems will search for items on a specific given field. +For instance you can search all items with a specific stocknumber like this: + + my $items = SearchItems('stocknumber', $stocknumber); + +=cut + +sub SearchItems { + my ($field, $value) = @_; + + my $dbh = C4::Context->dbh; + my @columns = _get_items_columns; + my $results = []; + if(0 < grep /^$field$/, @columns) { + my $query = "SELECT $field FROM items WHERE $field = ?"; + my $sth = $dbh->prepare( $query ); + $sth->execute( $value ); + $results = $sth->fetchall_arrayref({}); + } + return $results; +} + + =head1 OTHER FUNCTIONS =head2 _find_value @@ -2654,7 +2668,10 @@ sub PrepareItemrecordDisplay { if ( ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.location' ) && $defaultvalues && $defaultvalues->{'location'} ) { - my $temp = $itemrecord->field($subfield) if ($itemrecord); + + my $temp; # make perlcritic happy :) + $temp = $itemrecord->field($subfield) if ($itemrecord); + unless ($temp) { $defaultvalue = $defaultvalues->{location} if $defaultvalues; }