3 # Copyright 2000-2002 Katipo Communications
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along with
17 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
18 # Suite 330, Boston, MA 02111-1307 USA
32 * modsubscriptionhistory :to modify the subscription history
33 * serialchangestatus :to modify the status of this subscription
73 use C4::Interface::CGI::Output;
78 my $dbh = C4::Context->dbh;
79 my @serialids = $query->param('serialid');
80 my @serialseqs = $query->param('serialseq');
81 my @planneddates = $query->param('planneddate');
82 my @publisheddates = $query->param('publisheddate');
83 my @status = $query->param('status');
84 my @notes = $query->param('notes');
85 my @subscriptionids = $query->param('subscriptionid');
86 my $op = $query->param('op');
88 if (scalar(@subscriptionids)==1 && index($subscriptionids[0],",")>0){
89 @subscriptionids =split /,/,$subscriptionids[0];
92 # If user comes from subscription details
94 foreach my $subscriptionid (@subscriptionids){
95 my $serstatus=$query->param('serstatus');
97 my ($count,@tmpser)=GetSerials2($subscriptionid,$serstatus);
99 push @serialids, $_->{'serialid'};
105 my ($template, $loggedinuser, $cookie)
106 = get_template_and_user({template_name => "serials/serials-edit.tmpl",
109 authnotrequired => 0,
110 flagsrequired => {serials => 1},
115 foreach my $tmpserialid (@serialids){
116 my $data=GetSerialInformation($tmpserialid);
117 $data->{publisheddate}=format_date($data->{publisheddate});
118 $data->{planneddate}=format_date($data->{planneddate});
119 push @serialdatalist,$data;
123 my @subscriptionloop;
124 foreach my $subscriptionid (@subscriptionids){
126 if (C4::Context->preference("serialsadditems")){
127 #Create New empty item
129 PrepareItemrecordDisplay( $serialdatalist[0]->{'biblionumber'} );
131 $cell->{'subscriptionid'}=$subscriptionid;
132 $cell->{'subscriptionexpired'}=HasSubscriptionExpired($subscriptionid);
133 $cell->{'itemid'} = "NNEW";
134 $cell->{'serialid'} = "NEW";
135 $cell->{'issuesatonce'} = 1;
136 push @newserialloop,$cell;
137 push @subscriptionloop, {'subscriptionid'=>$subscriptionid};
139 $template->param(newserialloop=>\@newserialloop);
140 $template->param(subscriptions=>\@subscriptionloop);
142 if ($op eq 'serialchangestatus') {
143 # my $sth = $dbh->prepare("select status from serial where serialid=?");
145 for (my $i=0;$i<=$#serialids;$i++) {
146 # $sth->execute($serialids[$i]);
147 # my ($oldstatus) = $sth->fetchrow;
148 if ($serialids[$i] && $serialids[$i] eq "NEW") {
149 if ($serialseqs[$i]){
150 #IF newserial was provided a name Then we have to create a newSerial
151 ### FIXME if NewIssue is modified to use subscription biblionumber, then biblionumber would not be useful.
152 $newserial = NewIssue( $serialseqs[$i],$subscriptionids[$i],$serialdatalist[0]->{'biblionumber'},
154 format_date_in_iso($planneddates[$i]),
155 format_date_in_iso($publisheddates[$i]),
158 }elsif ($serialids[$i]){
159 ModSerialStatus($serialids[$i],
161 format_date_in_iso($planneddates[$i]),
162 format_date_in_iso($publisheddates[$i]),
167 if (C4::Context->preference("serialsadditems")){
168 my @moditems = $query->param('moditem');
169 my @tags = $query->param('tag');
170 my @subfields = $query->param('subfield');
171 my @field_values = $query->param('field_value');
172 my @serials = $query->param('serial');
173 my @bibnums = $query->param('bibnum');
174 my @itemid = $query->param('itemid');
175 my @ind_tag = $query->param('ind_tag');
176 my @indicator = $query->param('indicator');
177 #Rebuilding ALL the data for items into a hash
178 # parting them on $itemid.
181 my $range=scalar(@itemid);
182 for (my $i=0; $i<$range; $i++){
183 unless ($itemhash{$itemid[$i]}){
184 if ($serials[$countdistinct] && $serials[$countdistinct] ne "NEW"){
185 $itemhash{$itemid[$i]}->{'serial'}=$serials[$countdistinct];
187 $itemhash{$itemid[$i]}->{'serial'}=$newserial;
189 $itemhash{$itemid[$i]}->{'bibnum'}=$bibnums[$countdistinct];
192 push @{$itemhash{$itemid[$i]}->{'tags'}},$tags[$i];
193 push @{$itemhash{$itemid[$i]}->{'subfields'}},$subfields[$i];
194 push @{$itemhash{$itemid[$i]}->{'field_values'}},$field_values[$i];
195 push @{$itemhash{$itemid[$i]}->{'ind_tag'}},$ind_tag[$i];
196 push @{$itemhash{$itemid[$i]}->{'indicator'}},$indicator[$i];
198 foreach my $item (keys %itemhash){
199 # Verify Itemization is "Valid", i.e. serial status is Arrived or Missing
201 for (my $i=0; $i<scalar(@serialids);$i++){
202 $index = $i if ($itemhash{$item}->{'serial'} eq $serialids[$i]);
204 if ($status[$index]==2){
205 my $xml = TransformHtmlToXml( $itemhash{$item}->{'tags'},
206 $itemhash{$item}->{'subfields'},
207 $itemhash{$item}->{'field_values'},
208 $itemhash{$item}->{'ind_tag'},
209 $itemhash{$item}->{'indicator'});
211 my $record=MARC::Record::new_from_xml($xml, 'UTF-8');
214 # if autoBarcode is ON, calculate barcode...
215 my ($tagfield,$tagsubfield) = &GetMarcFromKohaField($dbh,"items.barcode");
216 if (C4::Context->preference('autoBarcode')) {
217 unless ($record->field($tagfield)->subfield($tagsubfield)) {
218 my $sth_barcode = $dbh->prepare("select max(abs(barcode)) from items");
219 $sth_barcode->execute;
220 my ($newbarcode) = $sth_barcode->fetchrow;
222 # OK, we have the new barcode, now create the entry in MARC record
223 my $fieldItem = $record->field($tagfield);
224 $record->delete_field($fieldItem);
225 $fieldItem->add_subfields($tagsubfield => $newbarcode);
226 $record->insert_fields_ordered($fieldItem);
229 # check for item barcode # being unique
230 my $exists = GetItemFromBarcode($record->subfield($tagfield,$tagsubfield)) if ($record->subfield($tagfield,$tagsubfield));
231 # push @errors,"barcode_not_unique" if($exists);
232 $template->param("barcode_not_unique" => 1,'errserialseq'=>$serialseqs[$index]);
233 # if barcode exists, don't create, but report The problem.
235 my ($biblionumber,$bibitemnum,$itemnumber) = AddItem($record,$itemhash{$item}->{'bibnum'});
236 AddItem2Serial($itemhash{$item}->{'serial'},$itemnumber);
240 my ($oldbiblionumber,$oldbibnum,$itemnumber) = ModItem($record,$itemhash{$item}->{'bibnum'},$item,0);
245 print $query->redirect("serials-collection.pl?biblionumber=".$serialdatalist[0]->{biblionumber});
248 $template->param(serialsadditems =>C4::Context->preference("serialsadditems"));
253 biblionumber =>$serialdatalist[0]->{'biblionumber'},
254 serialslist => \@serialdatalist,
255 intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"),
256 intranetstylesheet => C4::Context->preference("intranetstylesheet"),
257 IntranetNav => C4::Context->preference("IntranetNav"),
259 output_html_with_http_headers $query, $cookie, $template->output;