X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;ds=sidebyside;f=cataloguing%2Fadditem.pl;h=bf2deef0c32b3bd99722ea4b7d62a1baf4cd54c8;hb=88681d9862704397421fb75e9eeedcf68ec009c2;hp=f98ee552b7367dcdcd4ee5e5ec72b98b8d8670bb;hpb=2e1a9d657acbd8b9c151c75b7f2a5b9e897e36c5;p=koha.git diff --git a/cataloguing/additem.pl b/cataloguing/additem.pl index f98ee552b7..bf2deef0c3 100755 --- a/cataloguing/additem.pl +++ b/cataloguing/additem.pl @@ -58,6 +58,16 @@ sub get_item_from_barcode { return($result); } +sub set_item_default_location { + my $itemnumber = shift; + if ( C4::Context->preference('NewItemsDefaultLocation') ) { + my $item = GetItem( $itemnumber ); + $item->{'permanent_location'} = $item->{'location'}; + $item->{'location'} = C4::Context->preference('NewItemsDefaultLocation'); + ModItem( $item, undef, $itemnumber); + } +} + my $input = new CGI; my $dbh = C4::Context->dbh; my $error = $input->param('error'); @@ -65,16 +75,27 @@ my $biblionumber = $input->param('biblionumber'); my $itemnumber = $input->param('itemnumber'); my $op = $input->param('op'); +my $frameworkcode = &GetFrameworkCode($biblionumber); + +# Defining which userflag is needing according to the framework currently used +my $userflags; +if (defined $input->param('frameworkcode')) { + $userflags = ($input->param('frameworkcode') eq 'FA') ? "fast_cataloging" : "edit_catalogue"; +} + +if (not defined $userflags) { + $userflags = ($frameworkcode eq 'FA') ? "fast_cataloging" : "edit_catalogue"; +} + my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "cataloguing/additem.tmpl", query => $input, type => "intranet", authnotrequired => 0, - flagsrequired => {editcatalogue => 1}, + flagsrequired => {editcatalogue => $userflags}, debug => 1, }); -my $frameworkcode = &GetFrameworkCode($biblionumber); my $today_iso = C4::Dates->today('iso'); $template->param(today_iso => $today_iso); @@ -130,7 +151,10 @@ if ($op eq "additem") { my $exist_itemnumber = get_item_from_barcode($addedolditem->{'barcode'}); push @errors,"barcode_not_unique" if($exist_itemnumber); # if barcode exists, don't create, but report The problem. - my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber) unless ($exist_itemnumber); + unless ($exist_itemnumber) { + my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber); + set_item_default_location($oldbibitemnum); + } $nextop = "additem"; if ($exist_itemnumber) { $itemrecord = $record; @@ -198,12 +222,15 @@ if ($op eq "additem") { } # Adding the item - my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber) unless ($exist_itemnumber); - - # We count the item only if it was really added - # That way, all items are added, even if there was some already existing barcodes - # FIXME : Please note that there is a risk of infinite loop here if we never find a suitable barcode - $i++ unless ($exist_itemnumber); + if (!$exist_itemnumber) { + my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = AddItemFromMarc($record,$biblionumber); + set_item_default_location($oldbibitemnum); + + # We count the item only if it was really added + # That way, all items are added, even if there was some already existing barcodes + # FIXME : Please note that there is a risk of infinite loop here if we never find a suitable barcode + $i++; + } # Preparing the next iteration $oldbarcode = $barcodevalue; @@ -223,26 +250,25 @@ if ($op eq "additem") { } elsif ($op eq "delitem") { #------------------------------------------------------------------------------- # 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 $onloan=$sth->fetchrow; - $sth->finish(); - $nextop="additem"; - if ($onloan){ - push @errors,"book_on_loan"; - } else { - # check it doesnt have a waiting reserve - $sth=$dbh->prepare("SELECT * FROM reserves WHERE found = 'W' AND itemnumber = ?"); - $sth->execute($itemnumber); - my $reserve=$sth->fetchrow; - unless ($reserve){ - &DelItem($dbh,$biblionumber,$itemnumber); - print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode"); - exit; - } - push @errors,"book_reserved"; + $error = &DelItemCheck($dbh,$biblionumber,$itemnumber); + if($error == 1){ + print $input->redirect("additem.pl?biblionumber=$biblionumber&frameworkcode=$frameworkcode"); + }else{ + push @errors,$error; + $nextop="additem"; } #------------------------------------------------------------------------------- +} elsif ($op eq "delallitems") { +#------------------------------------------------------------------------------- + my @biblioitems = &GetBiblioItemByBiblioNumber($biblionumber); + foreach my $biblioitem (@biblioitems){ + my $items = &GetItemsByBiblioitemnumber($biblioitem->{biblioitemnumber}); + + foreach my $item (@$items){ + &DelItem($dbh,$biblionumber,$item->{itemnumber}); + } + } +#------------------------------------------------------------------------------- } elsif ($op eq "saveitem") { #------------------------------------------------------------------------------- # rebuild @@ -340,11 +366,16 @@ foreach my $subfield_code (sort keys(%witness)) { # now, build the item form for entering a new item my @loop_data =(); my $i=0; -my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY lib"); my $branches = GetBranchesLoop(); # build once ahead of time, instead of multiple times later. my $pref_itemcallnumber = C4::Context->preference('itemcallnumber'); +# Getting the fields where the item location is +my ($location_field, $location_subfield) = GetMarcFromKohaField('items.location', $frameworkcode); + +# Getting the name of the authorised values' category for item location +my $item_location_category = $tagslib->{$location_field}->{$location_subfield}->{'authorised_value'}; + foreach my $tag (sort keys %{$tagslib}) { # loop through each subfield foreach my $subfield (sort keys %{$tagslib->{$tag}}) { @@ -390,7 +421,7 @@ foreach my $tag (sort keys %{$tagslib}) { } } - my $attributes_no_value = qq(tabindex="1" id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" ); + my $attributes_no_value = qq(id="$subfield_data{id}" name="field_value" class="input_marceditor" size="67" maxlength="255" ); my $attributes = qq($attributes_no_value value="$value" ); if ( $tagslib->{$tag}->{$subfield}->{authorised_value} ) { my @authorised_values; @@ -401,7 +432,7 @@ foreach my $tag (sort keys %{$tagslib}) { foreach my $thisbranch (@$branches) { push @authorised_values, $thisbranch->{value}; $authorised_lib{$thisbranch->{value}} = $thisbranch->{branchname}; - $value = $thisbranch->{value} if $thisbranch->{selected}; + # $value = $thisbranch->{value} if $thisbranch->{selected}; } } elsif ( $tagslib->{$tag}->{$subfield}->{authorised_value} eq "itemtypes" ) { @@ -440,10 +471,28 @@ foreach my $tag (sort keys %{$tagslib}) { } else { push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); - $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value} ); + + # Are we dealing with item location ? + my $item_location = ($tagslib->{$tag}->{$subfield}->{authorised_value} eq $item_location_category) ? 1 : 0; + + # If so, we sort by authorised_value, else by libelle + my $orderby = $item_location ? 'authorised_value' : 'lib'; + + my $authorised_values_sth = $dbh->prepare("SELECT authorised_value,lib FROM authorised_values WHERE category=? ORDER BY $orderby"); + + $authorised_values_sth->execute( $tagslib->{$tag}->{$subfield}->{authorised_value}); + + while ( my ( $value, $lib ) = $authorised_values_sth->fetchrow_array ) { - push @authorised_values, $value; - $authorised_lib{$value} = $lib; + push @authorised_values, $value; + if ($tagslib->{$tag}->{$subfield}->{authorised_value} eq $item_location_category) { + $authorised_lib{$value} = $value . " - " . $lib; + } else { + $authorised_lib{$value} = $lib; + } + + # For item location, we show the code and the libelle + $authorised_lib{$value} = ($item_location) ? $value . " - " . $lib : $lib; } } $subfield_data{marc_value} =CGI::scrolling_list( # FIXME: factor out scrolling_list @@ -454,7 +503,7 @@ foreach my $tag (sort keys %{$tagslib}) { -override => 1, -size => 1, -multiple => 0, - -tabindex => 1, + # -tabindex => 1, -id => "tag_".$tag."_subfield_".$subfield."_".$index_subfield, -class => "input_marceditor", ); @@ -521,6 +570,7 @@ $template->param( itemtagsubfield => $itemtagsubfield, op => $nextop, opisadd => ($nextop eq "saveitem") ? 0 : 1, + C4::Search::enabled_staff_search_views, ); foreach my $error (@errors) { $template->param($error => 1);