#!/usr/bin/perl # Copyright 2000-2002 Katipo Communications # # This file is part of Koha. # # Koha is free software; you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software # Foundation; either version 2 of the License, or (at your option) any later # version. # # Koha is distributed in the hope that it will be useful, but WITHOUT ANY # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR # A PARTICULAR PURPOSE. See the GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along with # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA # $Id$ =head1 NAME serials-recieve.pl =head1 Parameters =over 4 =item op op can be : * modsubscriptionhistory :to modify the subscription history * serialchangestatus :to modify the status of this subscription =item subscriptionid =item user =item histstartdate =item enddate =item recievedlist =item missinglist =item opacnote =item librariannote =item serialid =item serialseq =item planneddate =item notes =item status =back =cut use strict; use CGI; use C4::Auth; use C4::Date; use C4::Biblio; use C4::Koha; use C4::Output; use C4::Context; use C4::Serials; my $query = new CGI; my $dbh = C4::Context->dbh; my @serialids = $query->param('serialid'); my @serialseqs = $query->param('serialseq'); my @planneddates = $query->param('planneddate'); my @publisheddates = $query->param('publisheddate'); my @status = $query->param('status'); my @notes = $query->param('notes'); my @subscriptionids = $query->param('subscriptionid'); my $op = $query->param('op'); # warn "op : $op"; if (scalar(@subscriptionids)==1 && index($subscriptionids[0],",")>0){ @subscriptionids =split /,/,$subscriptionids[0]; } my $redirectstring; # If user comes from subscription details unless (@serialids){ foreach my $subscriptionid (@subscriptionids){ my $serstatus=$query->param('serstatus'); if ($serstatus){ my ($count,@tmpser)=GetSerials2($subscriptionid,$serstatus); foreach (@tmpser) { push @serialids, $_->{'serialid'}; } } } } my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "serials/serials-edit.tmpl", query => $query, type => "intranet", authnotrequired => 0, flagsrequired => {serials => 1}, debug => 1, }); my @serialdatalist; foreach my $tmpserialid (@serialids){ my $data=GetSerialInformation($tmpserialid); $data->{publisheddate}=format_date($data->{publisheddate}); $data->{planneddate}=format_date($data->{planneddate}); push @serialdatalist,$data; } my @newserialloop; my @subscriptionloop; foreach my $subscriptionid (@subscriptionids){ my $cell; if (C4::Context->preference("serialsadditems")){ #Create New empty item $cell = PrepareItemrecordDisplay( $serialdatalist[0]->{'biblionumber'} ); } $cell->{'subscriptionid'}=$subscriptionid; $cell->{'subscriptionexpired'}=HasSubscriptionExpired($subscriptionid); $cell->{'itemid'} = "NNEW"; $cell->{'serialid'} = "NEW"; $cell->{'issuesatonce'} = 1; push @newserialloop,$cell; push @subscriptionloop, {'subscriptionid'=>$subscriptionid}; } $template->param(newserialloop=>\@newserialloop); $template->param(subscriptions=>\@subscriptionloop); if ($op eq 'serialchangestatus') { # my $sth = $dbh->prepare("select status from serial where serialid=?"); my $newserial; for (my $i=0;$i<=$#serialids;$i++) { # $sth->execute($serialids[$i]); # my ($oldstatus) = $sth->fetchrow; if ($serialids[$i] && $serialids[$i] eq "NEW") { if ($serialseqs[$i]){ #IF newserial was provided a name Then we have to create a newSerial ### FIXME if NewIssue is modified to use subscription biblionumber, then biblionumber would not be useful. $newserial = NewIssue( $serialseqs[$i],$subscriptionids[$i],$serialdatalist[0]->{'biblionumber'}, $status[$i], format_date_in_iso($planneddates[$i]), format_date_in_iso($publisheddates[$i]), $notes[$i]); } }elsif ($serialids[$i]){ ModSerialStatus($serialids[$i], $serialseqs[$i], format_date_in_iso($planneddates[$i]), format_date_in_iso($publisheddates[$i]), $status[$i], $notes[$i]); } } if (C4::Context->preference("serialsadditems")){ my @moditems = $query->param('moditem'); my @tags = $query->param('tag'); my @subfields = $query->param('subfield'); my @field_values = $query->param('field_value'); my @serials = $query->param('serial'); my @bibnums = $query->param('bibnum'); my @itemid = $query->param('itemid'); my @ind_tag = $query->param('ind_tag'); my @indicator = $query->param('indicator'); #Rebuilding ALL the data for items into a hash # parting them on $itemid. my %itemhash; my $countdistinct; my $range=scalar(@itemid); for (my $i=0; $i<$range; $i++){ unless ($itemhash{$itemid[$i]}){ if ($serials[$countdistinct] && $serials[$countdistinct] ne "NEW"){ $itemhash{$itemid[$i]}->{'serial'}=$serials[$countdistinct]; } else { $itemhash{$itemid[$i]}->{'serial'}=$newserial; } $itemhash{$itemid[$i]}->{'bibnum'}=$bibnums[$countdistinct]; $countdistinct++; } push @{$itemhash{$itemid[$i]}->{'tags'}},$tags[$i]; push @{$itemhash{$itemid[$i]}->{'subfields'}},$subfields[$i]; push @{$itemhash{$itemid[$i]}->{'field_values'}},$field_values[$i]; push @{$itemhash{$itemid[$i]}->{'ind_tag'}},$ind_tag[$i]; push @{$itemhash{$itemid[$i]}->{'indicator'}},$indicator[$i]; } foreach my $item (keys %itemhash){ # Verify Itemization is "Valid", i.e. serial status is Arrived or Missing my $index; for (my $i=0; $i{'serial'} eq $serialids[$i]); } if ($status[$index]==2){ my $xml = TransformHtmlToXml( $itemhash{$item}->{'tags'}, $itemhash{$item}->{'subfields'}, $itemhash{$item}->{'field_values'}, $itemhash{$item}->{'ind_tag'}, $itemhash{$item}->{'indicator'}); # warn $xml; my $record=MARC::Record::new_from_xml($xml, 'UTF-8'); if ($item=~/^N/){ #New Item # if autoBarcode is ON, calculate barcode... my ($tagfield,$tagsubfield) = &GetMarcFromKohaField($dbh,"items.barcode"); if (C4::Context->preference('autoBarcode')) { unless ($record->field($tagfield)->subfield($tagsubfield)) { my $sth_barcode = $dbh->prepare("select max(abs(barcode)) from items"); $sth_barcode->execute; my ($newbarcode) = $sth_barcode->fetchrow; $newbarcode++; # OK, we have the new barcode, now create the entry in MARC record my $fieldItem = $record->field($tagfield); $record->delete_field($fieldItem); $fieldItem->add_subfields($tagsubfield => $newbarcode); $record->insert_fields_ordered($fieldItem); } } # check for item barcode # being unique my $exists = GetItemnumberFromBarcode($record->subfield($tagfield,$tagsubfield)) if ($record->subfield($tagfield,$tagsubfield)); # push @errors,"barcode_not_unique" if($exists); $template->param("barcode_not_unique" => 1,'errserialseq'=>$serialseqs[$index]); # if barcode exists, don't create, but report The problem. unless ($exists){ my ($biblionumber,$bibitemnum,$itemnumber) = AddItem($record,$itemhash{$item}->{'bibnum'}); AddItem2Serial($itemhash{$item}->{'serial'},$itemnumber); } } else { #modify item my ($oldbiblionumber,$oldbibnum,$itemnumber) = ModItem($record,$itemhash{$item}->{'bibnum'},$item,0); } } } } print $query->redirect("serials-collection.pl?biblionumber=".$serialdatalist[0]->{biblionumber}); } $template->param(serialsadditems =>C4::Context->preference("serialsadditems")); $template->param( biblionumber =>$serialdatalist[0]->{'biblionumber'}, serialslist => \@serialdatalist, intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"), intranetstylesheet => C4::Context->preference("intranetstylesheet"), IntranetNav => C4::Context->preference("IntranetNav"), ); output_html_with_http_headers $query, $cookie, $template->output;