Merging in katipo changes for serials
[koha.git] / serials / statecollection.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use CGI;
5 use C4::Auth;
6 use C4::Date;
7 use C4::Biblio;
8 use C4::Koha;
9 use C4::Output;
10 use C4::Interface::CGI::Output;
11 use C4::Context;
12 use C4::Serials;
13 use HTML::Template;
14
15 my $query = new CGI;
16 my $op = $query->param('op');
17 my $dbh = C4::Context->dbh;
18 my $subscriptionid = $query->param('subscriptionid');
19 # my $auser = $query->param('user');
20 my $histstartdate = format_date_in_iso($query->param('histstartdate'));
21 my $enddate = format_date_in_iso($query->param('enddate'));
22 my $recievedlist = $query->param('recievedlist');
23 my $missinglist = $query->param('missinglist');
24 my $opacnote = $query->param('opacnote');
25 my $librariannote = $query->param('librariannote');
26 my @serialids = $query->param('serialid');
27 my @serialseqs = $query->param('serialseq');
28 my @planneddates = $query->param('planneddate');
29 my @status = $query->param('status');
30 my @notes = $query->param('notes');
31 my @barcodes = $query->param('barcode');
32 my @itemcallnumbers = $query->param('itemcallnumber');
33 my @locations = $query->param('location');
34 my @itemstatus = $query->param('itemstatus');
35 my @homebranches = $query->param('branch');
36 my $hassubscriptionexpired = HasSubscriptionExpired($subscriptionid);
37 my $abouttoexpire = abouttoexpire($subscriptionid);
38
39 my $subscription=GetSubscription($subscriptionid);
40 my $auser = $subscription->{'librarian'}; # bob
41 my $routing = check_routing($subscriptionid); # to see if routing list exists
42 my $manualdate ='';
43 my $manualissue ='';
44 my $manualstatus =0;
45 my $manualid ='';
46 if ($op eq 'found'){
47     $manualdate = $query->param('planneddate');
48     $manualissue = $query->param('missingissue');
49     $manualstatus = 1;
50     my $sth = $dbh->prepare("select serialid from serial where subscriptionid = ? AND serialseq = ? AND planneddate = ?");
51     $sth->execute($subscriptionid,$manualissue,format_date_in_iso($manualdate));
52     $manualid = $sth->fetchrow;
53 }
54
55 if ($op eq 'modsubscriptionhistory') {
56         ModSubscriptionHistory($subscriptionid,$histstartdate,$enddate,$recievedlist,$missinglist,$opacnote,$librariannote);
57 }
58
59 # change status except, if subscription has expired, for the "waited" issue.
60 if ($op eq 'serialchangestatus') {
61         my $sth = $dbh->prepare("select status from serial where serialid=?");
62         for (my $i=0;$i<=$#serialids;$i++) {
63                 $sth->execute($serialids[$i]);
64                 
65                 my ($oldstatus) = $sth->fetchrow;
66                 if ($serialids[$i]) {
67                         serialchangestatus($serialids[$i],$serialseqs[$i],format_date_in_iso($planneddates[$i]),$status[$i],$notes[$i]) unless ($hassubscriptionexpired && $oldstatus == 1);
68                         if (($status[$i]==2) && C4::Context->preference("serialsadditems")){
69                                 my %info;
70                                 $info{branch}=$homebranches[$i];
71                                 $info{barcode}=$barcodes[$i];
72                                 $info{itemcallnumber}=$itemcallnumbers[$i];
73                                 $info{location}=$locations[$i];
74                                 $info{status}=$itemstatus[$i];
75                                 $info{notes}=$serialseqs[$i]." (".$planneddates[$i].")";
76                                 my ($status2, @errors)= ItemizeSerials($serialids[$i],\%info);
77                                 my $sth2 = $dbh->prepare("UPDATE subscriptionhistory SET lastbranch = ? WHERE subscriptionid = ?");
78                                 $sth2->execute($homebranches[$i],$subscriptionid);
79                                 $sth2->finish;                      
80                                 # remove from missing list if item being checked in is on it
81                                 if ($status2 ==1){
82                                     removeMissingIssue($serialseqs[$i],$subscriptionid);
83                                 }                           
84                         }
85                 } else {
86                         # add a special issue
87                         if ($serialseqs[$i]) {
88                                 NewIssue($serialseqs[$i],$subscriptionid,$subscription->{biblionumber},$status[$i], format_date_in_iso($planneddates[$i]));
89                         }
90                         if (($status[$i]==2) && C4::Context->preference("serialsadditems") && !hassubscriptionexpired($subscriptionid)){
91                                 my %info;
92                                 $info{branch}=$homebranches[$i];
93                                 $info{barcode}=$barcodes[$i];
94                                 $info{itemcallnumber}=$itemcallnumbers[$i];
95                                 $info{location}=$locations[$i];
96                                 $info{status}=$itemstatus[$i];
97                                 $info{notes}=$serialseqs[$i]." (".$planneddates[$i].")";
98                                 my ($status2, @errors)= ItemizeSerials($serialids[$i],\%info);
99                                 my $sth2 = $dbh->prepare("UPDATE subscriptionhistory SET lastbranch = ? WHERE subscriptionid = ?");
100                                 $sth2->execute($homebranches[$i],$subscriptionid);
101                                 $sth2->finish;
102                                 # remove from missing list if item being checked in is on it
103                                 if ($status2 ==1){
104                                     removeMissingIssue($serialseqs[$i],$subscriptionid);
105                                 }
106                         }
107
108                 }
109         }
110 }
111 my ($template, $loggedinuser, $cookie)
112 = get_template_and_user({template_name => "serials/statecollection.tmpl",
113                                 query => $query,
114                                 type => "intranet",
115                                 authnotrequired => 0,
116                                 flagsrequired => {catalogue => 1},
117                                 debug => 1,
118                                 });
119
120 my $subs = &GetSubscription($subscriptionid);
121 my ($totalissues,@serialslist) = old_getserials($subscriptionid);
122 my $count = @serialslist;
123 for(my $i=0;$i<$count;$i++){
124     $serialslist[$i]->{'callnumber'} = $subscription->{'callnumber'};
125     my $temp = rand(10000000);
126     $serialslist[$i]->{'barcode'} = "TEMP" . sprintf("%.0f",$temp);
127 }
128 # use Data::Dumper;
129 # warn Dumper(@serialslist);
130
131 my $sth=$dbh->prepare("select * from subscriptionhistory where subscriptionid = ?");
132 $sth->execute($subscriptionid);
133 my $solhistory = $sth->fetchrow_hashref;
134
135 if (C4::Context->preference("serialsadditems")){
136         my $bibid=MARCfind_MARCbibid_from_oldbiblionumber($dbh,$subscription->{biblionumber});
137         my $fwk=MARCfind_frameworkcode($dbh,$bibid);
138
139         my $branches = getbranches;
140         my @branchloop;
141         foreach my $thisbranch (keys %$branches) {
142             my $selected = 0;
143             if($thisbranch eq $solhistory->{'lastbranch'}){
144                 $selected = 1;
145             }
146                 my %row =(value => $thisbranch,
147                           branchname => $branches->{$thisbranch}->{'branchname'},
148                           selected => $selected,
149                                 );
150                 push @branchloop, \%row;
151         }
152         
153         my $itemstatushash = getitemstatus($fwk);
154         my @itemstatusloop;
155         my $itemstatusloopcount=0;    
156         foreach my $thisitemstatus (keys %$itemstatushash) {
157                 my %row =(itemval => $thisitemstatus,
158                                         itemlib => $itemstatushash->{$thisitemstatus},
159                                 );
160 #               warn "".$row{'itemval'}.", ". $row{"itemlib"};
161                 $itemstatusloopcount++;
162                 push @itemstatusloop, \%row;
163         }
164         
165         my $itemlocationhash = getitemlocation($fwk);
166         my @itemlocationloop;
167         foreach my $thisitemlocation (keys %$itemlocationhash) {
168                 my %row =(value => $thisitemlocation,
169                                         itemlocationname => $itemlocationhash->{$thisitemlocation},
170                                 );
171                 push @itemlocationloop, \%row;
172         }
173
174         my $choice = 0;
175         if($itemstatusloopcount == 1){ $choice = 1;}   
176         foreach my $data (@serialslist){
177                 if (scalar(@itemstatusloop)){$data->{"itemstatusloop"}=\@itemstatusloop;}
178                 else { $data->{"itemstatusloop"}=[];}
179                 if (scalar(@itemlocationloop)){$data->{"itemlocationloop"}=\@itemlocationloop;}
180                 else {$data->{"itemlocationloop"}=[];}
181                 $data->{"branchloop"}=\@branchloop ;
182         }
183 # warn "Choice: $choice";
184         $template->param(choice => $choice);    
185         $template->param(serialadditems =>C4::Context->preference("serialsadditems"),
186                                         branchloop => \@branchloop,
187                                         ) ;
188         $template->param(itemstatus=>1,itemstatusloop=>\@itemstatusloop) if (scalar(@itemstatusloop));
189         $template->param(itemlocation=>1,itemlocationloop=>\@itemlocationloop) if (scalar(@itemlocationloop));
190 }else{
191         $template->param(branchloop=>[],itemstatusloop=>[],itemlocationloop=>[]) ;
192 }
193         
194
195 $template->param(
196                         user => $auser,
197                         serialslist => \@serialslist,
198                         count => $count,
199                         biblionumber => $subscription->{biblionumber},
200                         histstartdate => format_date($solhistory->{'histstartdate'}),
201                         enddate => format_date($solhistory->{'enddate'}),
202                         recievedlist => $solhistory->{'recievedlist'},
203                         missinglist => $solhistory->{'missinglist'},
204                         opacnote => $solhistory->{'opacnote'},
205                         librariannote => $solhistory->{'librariannote'},
206                         subscriptionid => $subscriptionid,
207                         bibliotitle => $subs->{bibliotitle},
208                         biblionumber => $subs->{biblionumber},
209                         hassubscriptionexpired =>$hassubscriptionexpired,
210                         abouttoexpire =>$abouttoexpire,    
211                         intranetcolorstylesheet => C4::Context->preference("intranetcolorstylesheet"),
212                         intranetstylesheet => C4::Context->preference("intranetstylesheet"),
213                         IntranetNav => C4::Context->preference("IntranetNav"),
214                         routing => $routing,
215                         missingseq => $manualissue,
216                         frommissing => $manualstatus,
217                         missingdate => $manualdate,
218                         missingid => $manualid,
219                 );
220 output_html_with_http_headers $query, $cookie, $template->output;