X-Git-Url: http://git.rot13.org/?a=blobdiff_plain;f=tools%2FbatchMod.pl;h=440e516f14db1b2ce5c40286d6f79153d73c8f59;hb=7a8bed557618e26f867a74f53c1391c12acfb77a;hp=921c4d66b03839c97bae22e578e83ea70ff56efe;hpb=718473bdd2f156544e7f254fa7adce2890c51e2a;p=koha.git diff --git a/tools/batchMod.pl b/tools/batchMod.pl index 921c4d66b0..440e516f14 100755 --- a/tools/batchMod.pl +++ b/tools/batchMod.pl @@ -25,6 +25,7 @@ use C4::Auth; use C4::Output; use C4::Biblio; use C4::Items; +use C4::Circulation; use C4::Context; use C4::Koha; # XXX subfield_is_koha_internal_p use C4::Branch; # XXX subfield_is_koha_internal_p @@ -89,13 +90,16 @@ if ($op eq "action") { my @tags = $input->param('tag'); my @subfields = $input->param('subfield'); my @values = $input->param('field_value'); + my @disabled = $input->param('disable_input'); # build indicator hash. my @ind_tag = $input->param('ind_tag'); my @indicator = $input->param('indicator'); # Is there something to modify ? # TODO : We shall use this var to warn the user in case no modification was done to the items - my $something_to_modify = scalar(grep {!/^$/} @values); + my $values_to_modify = scalar(grep {!/^$/} @values); + my $values_to_blank = scalar(@disabled); + my $marcitem; # Once the job is done if ($completedJobID) { @@ -114,8 +118,8 @@ if ($op eq "action") { # Calling the template add_saved_job_results_to_template($template, $completedJobID); - # While the job is getting done } else { + # While the job is getting done # Job size is the number of items we have to process my $job_size = scalar(@itemnumbers); @@ -128,6 +132,25 @@ if ($op eq "action") { $callback = progress_callback($job, $dbh); } + #initializing values for updates + my ( $itemtagfield, $itemtagsubfield) = &GetMarcFromKohaField("items.itemnumber", ""); + if ($values_to_modify){ + my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag, 'ITEM'); + utf8::encode($xml); + $marcitem = MARC::Record::new_from_xml($xml, 'UTF-8'); + } + if ($values_to_blank){ + foreach my $disabledsubf (@disabled){ + if ($marcitem && $marcitem->field($itemtagfield)){ + $marcitem->field($itemtagfield)->update( $disabledsubf => "" ); + } + else { + $marcitem = MARC::Record->new(); + $marcitem->append_fields( MARC::Field->new( $itemtagfield, '', '', $disabledsubf => "" ) ); + } + } + } + # For each item my $i = 1; foreach my $itemnumber(@itemnumbers){ @@ -140,16 +163,23 @@ if ($op eq "action") { $deleted_items++; } else { $not_deleted_items++; - push @not_deleted, { biblionumber => $itemdata->{'biblionumber'}, itemnumber => $itemdata->{'itemnumber'}, barcode => $itemdata->{'barcode'}, title => $itemdata->{'title'}, $return => 1 }; + push @not_deleted, + { biblionumber => $itemdata->{'biblionumber'}, + itemnumber => $itemdata->{'itemnumber'}, + barcode => $itemdata->{'barcode'}, + title => $itemdata->{'title'}, + $return => 1 + }; } } else { - if ($something_to_modify) { - my $xml = TransformHtmlToXml(\@tags,\@subfields,\@values,\@indicator,\@ind_tag, 'ITEM'); - my $marcitem = MARC::Record::new_from_xml($xml, 'UTF-8'); - my $localitem = TransformMarcToKoha( $dbh, $marcitem, "", 'items' ); - my $localmarcitem=Item2Marc($itemdata); - UpdateMarcWith($marcitem,$localmarcitem); - eval{my ($oldbiblionumber,$oldbibnum,$oldbibitemnum) = ModItemFromMarc($localmarcitem,$itemdata->{biblionumber},$itemnumber)}; + if ($values_to_modify || $values_to_blank) { + my $localmarcitem = Item2Marc($itemdata); + UpdateMarcWith( $marcitem, $localmarcitem ); + eval{ + if ( my $item = ModItemFromMarc( $localmarcitem, $itemdata->{biblionumber}, $itemnumber ) ) { + LostItem($itemnumber, 'MARK RETURNED', 'CHARGE FEE') if $item->{itemlost}; + } + }; } } $i++; @@ -310,12 +340,13 @@ foreach my $tag (sort keys %{$tagslib}) { #---- "true" authorised value } else { - push @authorised_values, "" unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); + push @authorised_values, ""; # unless ( $tagslib->{$tag}->{$subfield}->{mandatory} ); $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; } + $value=""; } $subfield_data{marc_value} =CGI::scrolling_list( # FIXME: factor out scrolling_list -name => "field_value", @@ -429,7 +460,8 @@ sub BuildItemsData{ my %this_row; foreach my $field (grep {$_->tag() eq $itemtagfield} $itemmarc->fields()) { # loop through each subfield - if (my $itembranchcode=$field->subfield($branchtagsubfield) && C4::Context->preference("IndependantBranches")) { + my $itembranchcode=$field->subfield($branchtagsubfield); + if ($itembranchcode && C4::Context->preference("IndependantBranches")) { #verifying rights my $userenv = C4::Context->userenv(); unless (($userenv->{'flags'} == 1) or (($userenv->{'branch'} eq $itembranchcode))){ @@ -504,7 +536,12 @@ sub UpdateMarcWith { my @fields_to=$marcto->field($itemtag); foreach my $subfield ($fieldfrom->subfields()){ foreach my $field_to_update (@fields_to){ - $field_to_update->update($$subfield[0]=>$$subfield[1]) if ($$subfield[1] != '' or $$subfield[1] == '0'); + if ($subfield->[1]){ + $field_to_update->update($subfield->[0]=>$subfield->[1]); + } + else { + $field_to_update->delete_subfield(code=> $subfield->[0]); + } } } #warn "TO edited:",$marcto->as_formatted; @@ -562,7 +599,7 @@ sub put_in_background { my $reply = CGI->new(""); print $reply->header(-type => 'text/html'); - print "{ jobID: '$jobID' }"; + print '{"jobID":"' . $jobID . '"}'; exit 0; } elsif (defined $pid) { # child