X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=C4%2FItems.pm;h=212a9d35a7c82a36fc875d4d054cccd52648d003;hb=a36b3ad43a6a91f800d0d8a148a217d738236d7e;hp=a9c0a16084095fdfb40a607174dfbc8ae911d184;hpb=5432bd488f2cd842f4fece93c42423a3fc26143b;p=koha.git diff --git a/C4/Items.pm b/C4/Items.pm index a9c0a16084..212a9d35a7 100644 --- a/C4/Items.pm +++ b/C4/Items.pm @@ -295,7 +295,7 @@ sub AddItem { my ( $itemnumber, $error ) = _koha_new_item( $item, $item->{barcode} ); $item->{'itemnumber'} = $itemnumber; - ModZebra( $item->{biblionumber}, "specialUpdate", "biblioserver", undef, undef ); + ModZebra( $item->{biblionumber}, "specialUpdate", "biblioserver" ); logaction("CATALOGUING", "ADD", $itemnumber, "item") if C4::Context->preference("CataloguingLog"); @@ -440,6 +440,7 @@ my %default_values_for_mod_from_marc = ( booksellerid => undef, ccode => undef, 'items.cn_source' => undef, + coded_location_qualifier => undef, copynumber => undef, damaged => 0, # dateaccessioned => undef, @@ -530,7 +531,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}; @@ -548,7 +549,7 @@ sub ModItem { # request that bib be reindexed so that searching on current # item status is possible - ModZebra( $biblionumber, "specialUpdate", "biblioserver", undef, undef ); + ModZebra( $biblionumber, "specialUpdate", "biblioserver" ); logaction("CATALOGUING", "MODIFY", $itemnumber, Dumper($item)) if C4::Context->preference("CataloguingLog"); } @@ -614,7 +615,7 @@ sub DelItem { # get the MARC record my $record = GetMarcBiblio($biblionumber); - ModZebra( $biblionumber, "specialUpdate", "biblioserver", undef, undef ); + ModZebra( $biblionumber, "specialUpdate", "biblioserver" ); # backup the record my $copy2deleted = $dbh->prepare("UPDATE deleteditems SET marc=? WHERE itemnumber=?"); @@ -936,7 +937,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) @@ -1251,7 +1253,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}); @@ -1276,13 +1278,14 @@ sub GetItemsInfo { # get notforloan complete status if applicable if ( my $code = C4::Koha::GetAuthValCode( 'items.notforloan', $data->{frameworkcode} ) ) { - $data->{notforloanvalue} = C4::Koha::GetAuthorisedValueByCode( $code, $data->{itemnotforloan} ); + $data->{notforloanvalue} = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{itemnotforloan} ); + $data->{notforloanvalueopac} = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{itemnotforloan}, 1 ); } # get restricted status and description if applicable if ( my $code = C4::Koha::GetAuthValCode( 'items.restricted', $data->{frameworkcode} ) ) { + $data->{restrictedopac} = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{restricted}, 1 ); $data->{restricted} = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{restricted} ); - $data->{restrictedopac} = C4::Koha::GetKohaAuthorisedValueLib( $code, $data->{restricted}, 'opac' ); } # my stack procedures @@ -2075,6 +2078,7 @@ sub _koha_new_item { itemlost = ?, wthdrawn = ?, itemcallnumber = ?, + coded_location_qualifier = ?, restricted = ?, itemnotes = ?, holdingbranch = ?, @@ -2116,6 +2120,7 @@ sub _koha_new_item { $item->{'itemlost'}, $item->{'wthdrawn'}, $item->{'itemcallnumber'}, + $item->{'coded_location_qualifier'}, $item->{'restricted'}, $item->{'itemnotes'}, $item->{'holdingbranch'}, @@ -2168,8 +2173,8 @@ sub MoveItemFromBiblio { $sth = $dbh->prepare("UPDATE items SET biblioitemnumber = ?, biblionumber = ? WHERE itemnumber = ? AND biblionumber = ?"); my $return = $sth->execute($tobiblioitem, $tobiblio, $itemnumber, $frombiblio); if ($return == 1) { - ModZebra( $tobiblio, "specialUpdate", "biblioserver", undef, undef ); - ModZebra( $frombiblio, "specialUpdate", "biblioserver", undef, undef ); + ModZebra( $tobiblio, "specialUpdate", "biblioserver" ); + ModZebra( $frombiblio, "specialUpdate", "biblioserver" ); # Checking if the item we want to move is in an order require C4::Acquisition; my $order = C4::Acquisition::GetOrderFromItemnumber($itemnumber); @@ -2208,10 +2213,9 @@ sub DelItemCheck { if ($onloan){ $error = "book_on_loan" } - elsif ( !(C4::Context->userenv->{flags} & 1) and - 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("IndependentBranches") + and ( C4::Context->userenv->{branch} ne $item->{'homebranch'} ) ) { $error = "not_same_branch"; } @@ -2249,6 +2253,7 @@ sub _koha_modify_item { my $query = "UPDATE items SET "; my @bind; for my $key ( keys %$item ) { + next if ( $key eq 'itemnumber' ); $query.="$key=?,"; push @bind, $item->{$key}; } @@ -2292,7 +2297,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 @@ -2455,18 +2460,12 @@ 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"); - 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); - } + + ### ZOOM search here + my $query; + $query= "hi=".$itemnumber; + my ($err,$res,$result) = C4::Search::SimpleSearch($query,0,10); + return ($result); } =head2 GetItemHolds @@ -2597,7 +2596,20 @@ sub PrepareItemrecordDisplay { $itemrecord = C4::Items::GetMarcItem( $bibnum, $itemnum ); } my @loop_data; - my $authorised_values_sth = $dbh->prepare( "SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY lib" ); + + my $branch_limit = C4::Context->userenv ? C4::Context->userenv->{"branch"} : ""; + my $query = qq{ + SELECT authorised_value,lib FROM authorised_values + }; + $query .= qq{ + LEFT JOIN authorised_values_branches ON ( id = av_id ) + } if $branch_limit; + $query .= qq{ + WHERE category = ? + }; + $query .= qq{ AND ( branchcode = ? OR branchcode IS NULL )} if $branch_limit; + $query .= qq{ ORDER BY lib}; + my $authorised_values_sth = $dbh->prepare( $query ); foreach my $tag ( sort keys %{$tagslib} ) { my $previous_tag = ''; if ( $tag ne '' ) { @@ -2627,49 +2639,47 @@ sub PrepareItemrecordDisplay { $defaultvalue = $tagslib->{$tag}->{$subfield}->{defaultvalue} unless $defaultvalue; if ( !defined $defaultvalue ) { $defaultvalue = q||; + } else { + $defaultvalue =~ s/"/"/g; } - $defaultvalue =~ s/"/"/g; # search for itemcallnumber if applicable if ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' && C4::Context->preference('itemcallnumber') ) { my $CNtag = substr( C4::Context->preference('itemcallnumber'), 0, 3 ); my $CNsubfield = substr( C4::Context->preference('itemcallnumber'), 3, 1 ); - if ($itemrecord) { - my $temp = $itemrecord->field($CNtag); - if ($temp) { - $defaultvalue = $temp->subfield($CNsubfield); - } + if ( $itemrecord and my $field = $itemrecord->field($CNtag) ) { + $defaultvalue = $field->subfield($CNsubfield); } } if ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.itemcallnumber' && $defaultvalues && $defaultvalues->{'callnumber'} ) { - my $temp; - if ($itemrecord) { - $temp = $itemrecord->field($subfield); - } - unless ($temp) { - $defaultvalue = $defaultvalues->{'callnumber'} if $defaultvalues; + if( $itemrecord and $defaultvalues and not $itemrecord->field($subfield) ){ + # if the item record exists, only use default value if the item has no callnumber + $defaultvalue = $defaultvalues->{callnumber}; + } elsif ( !$itemrecord and $defaultvalues ) { + # if the item record *doesn't* exists, always use the default value + $defaultvalue = $defaultvalues->{callnumber}; } } if ( ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.holdingbranch' || $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.homebranch' ) && $defaultvalues && $defaultvalues->{'branchcode'} ) { - my $temp; - if ($itemrecord) { - $temp = $itemrecord->field($subfield); - } - unless ($temp) { - $defaultvalue = $defaultvalues->{branchcode} if $defaultvalues; + if ( $itemrecord and $defaultvalues and not $itemrecord->field($subfield) ) { + $defaultvalue = $defaultvalues->{branchcode}; } } if ( ( $tagslib->{$tag}->{$subfield}->{kohafield} eq 'items.location' ) && $defaultvalues && $defaultvalues->{'location'} ) { - my $temp = $itemrecord->field($subfield) if ($itemrecord); - unless ($temp) { - $defaultvalue = $defaultvalues->{location} if $defaultvalues; + + if ( $itemrecord and $defaultvalues and not $itemrecord->field($subfield) ) { + # if the item record exists, only use default value if the item has no locationr + $defaultvalue = $defaultvalues->{location}; + } elsif ( !$itemrecord and $defaultvalues ) { + # if the item record *doesn't* exists, always use the default value + $defaultvalue = $defaultvalues->{location}; } } if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { @@ -2679,7 +2689,7 @@ sub PrepareItemrecordDisplay { # builds list, depending on authorised value... #---- branch if ( $tagslib->{$tag}->{$subfield}->{'authorised_value'} eq "branches" ) { - if ( ( C4::Context->preference("IndependantBranches") ) + if ( ( C4::Context->preference("IndependentBranches") ) && ( 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} ); @@ -2700,6 +2710,11 @@ sub PrepareItemrecordDisplay { } } + $defaultvalue = C4::Context->userenv->{branch}; + if ( $defaultvalues and $defaultvalues->{branchcode} ) { + $defaultvalue = $defaultvalues->{branchcode}; + } + #----- itemtypes } elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) { my $sth = $dbh->prepare( "SELECT itemtype,description FROM itemtypes ORDER BY description" ); @@ -2724,9 +2739,14 @@ sub PrepareItemrecordDisplay { $authorised_lib{$class_source} = $class_sources->{$class_source}->{'description'}; } + $defaultvalue = $default_source; + #---- "true" authorised value } else { - $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value} ); + $authorised_values_sth->execute( + $tagslib->{$tag}->{$subfield}->{authorised_value}, + $branch_limit ? $branch_limit : () + ); push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { @@ -2747,9 +2767,8 @@ sub PrepareItemrecordDisplay { # opening plugin my $plugin = C4::Context->intranetdir . "/cataloguing/value_builder/" . $tagslib->{$tag}->{$subfield}->{'value_builder'}; if (do $plugin) { - my $temp; - 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 ); + my $extended_param = plugin_parameters( $dbh, undef, $tagslib, $subfield_data{id}, undef ); + my ( $function_name, $javascript ) = plugin_javascript( $dbh, undef, $tagslib, $subfield_data{id}, undef ); $subfield_data{random} = int(rand(1000000)); # why do we need 2 different randoms? $subfield_data{marc_value} = qq[