Making sure that the logged in user is loaded into the template.
[koha.git] / memberentry.pl
1 #!/usr/bin/perl
2
3 #script to set up screen for modification of borrower details
4 #written 20/12/99 by chris@katipo.co.nz
5
6 use strict;
7 use C4::Output;
8 use CGI;
9 use C4::Search;
10 use C4::Database;
11 use C4::Auth;
12 use C4::Koha;
13
14 my $input = new CGI;
15 my $flagsrequired;
16 $flagsrequired->{borrowers}=1;
17 my ($loggedinuser, $cookie, $sessionID) = checkauth($input, 0, $flagsrequired);
18
19 my $member=$input->param('bornum');
20 if ($member eq ''){
21   $member=NewBorrowerNumber();
22 }
23 my $type=$input->param('type');
24 my $modify=$input->param('modify.x'); 
25 my $delete=$input->param('delete.x');
26 my $password=$input->param('password.x');
27 if ($delete){
28   print $input->redirect("/cgi-bin/koha/deletemem.pl?member=$member");
29 } elsif ($password) {
30   print $input->redirect("/cgi-bin/koha/member-password.pl?member=$member");
31 } else {
32 print $input->header(-cookie => $cookie);
33 print startpage();
34 print startmenu('member');
35
36 if ($type ne 'Add'){
37   print mkheadr(1,'Update Member Details');
38 } else {
39   print mkheadr(1,'Add New Member');
40 }
41 my $data=borrdata('',$member);
42 print <<printend
43 <form action=/cgi-bin/koha/newmember.pl method=post>
44 <input type=hidden name=joining value="$data->{'dateenrolled'}">
45 <input type=hidden name=expiry value="$data->{'expiry'}">
46 <input type=hidden name=type value="borrowers">
47 <input type=hidden name=borrowernumber value="$member">
48 printend
49 ;
50 if ($type eq 'Add'){
51   print "<input type=hidden name=updtype value=I>";
52 } else {
53   print "<input type=hidden name=updtype value=M>";
54 }
55
56 my $cardnumber=$data->{'cardnumber'};
57 my %systemprefs=systemprefs();
58 # FIXME
59 # This logic should probably be moved out of the presentation code.
60 # Not tonight though.
61 #
62 if ($cardnumber eq '' && $systemprefs{'autoMemberNum'} eq '1') {
63   my $dbh=C4Connect;
64   my $query="select max(substring(borrowers.cardnumber,2,7)) from borrowers";
65   my $sth=$dbh->prepare($query);
66   $sth->execute;
67   my $data=$sth->fetchrow_hashref;
68   $cardnumber=$data->{'max(substring(borrowers.cardnumber,2,7))'};
69   $sth->finish;
70   $dbh->disconnect;
71   # purpose: generate checksum'd member numbers.
72   # We'll assume we just got the max value of digits 2-8 of member #'s from the database and our job is to
73   # increment that by one, determine the 1st and 9th digits and return the full string.
74   my @weightings = (8,4,6,3,5,2,1);
75   my $sum;
76   my $i = 0;
77   if (! $cardnumber) {                  # If DB has no values, start at 1000000
78     $cardnumber = 1000000;
79   } else {
80     $cardnumber = $cardnumber + 1;
81   }
82
83   while ($i <8) {                       # step from char 1 to 7.
84     my $temp1 = $weightings[$i];        # read weightings, left to right, 1 char at a time
85     my $temp2 = substr($cardnumber,$i,1);       # sequence left to right, 1 char at a time
86 #print "$temp2<br>";
87     $sum = $sum + ($temp1*$temp2);      # mult each char 1-7 by its corresponding weighting
88     $i++;                               # increment counter
89   }
90   my $rem = ($sum%11);                  # remainder of sum/11 (eg. 9999999/11, remainder=2)
91   if ($rem == 10) {                     # if remainder is 10, use X instead
92     $rem = "X";
93   }  
94   $cardnumber="V$cardnumber$rem";
95 } else {
96   $cardnumber=$data->{'cardnumber'};
97 }
98
99 print <<printend
100
101 <table border=0 cellspacing=0 cellpadding=5 >
102
103
104 <tr valign=top><td  COLSPAN=2><input type=reset value="Clear all Fields"></td><td  COLSPAN=3   ALIGN=RIGHT ><font size=4 face='arial,helvetica'>
105 Member# $member,   Card Number* <input type=text name=cardnumber size=10 value="$cardnumber"><br>
106 </td></tr>
107
108
109 <tr valign=top  ><td  COLSPAN=3 background="/images/background-mem.gif">
110 <B>MEMBER PERSONAL DETAILS</b></td> <td  COLSPAN=2  ALIGN=RIGHT background="/images/background-mem.gif">
111 * <input type="radio" name="sex" value="F"
112 printend
113 ;
114 if ($data->{'sex'} eq 'F'){
115   print " checked";
116 }
117 print <<printend
118 >F  
119 <input type="radio" name="sex" value="M"
120 printend
121 ;
122 if ($data->{'sex'} eq 'M'){
123   print " checked";
124 }
125 print <<printend
126 >M
127 &nbsp; &nbsp;  <B>Date of Birth</B> (dd/mm/yy)
128 <input type=text name=dateofbirth size=10 value="$data->{'dateofbirth'}">
129 </td></tr>
130 <tr valign=top bgcolor=white>
131 <td><SELECT NAME="title" SIZE="1">
132 <OPTION value=" ">No Title
133 <OPTION value=Miss
134 printend
135 ;
136 if ($data->{'title'} eq 'Miss'){
137   print " Selected";
138 }
139 print ">Miss
140 <OPTION value=Mrs";
141 if ($data->{'title'} eq 'Mrs'){
142   print " Selected";
143 }
144 print ">Mrs
145 <OPTION value=Ms";
146 if ($data->{'title'} eq 'Ms'){
147   print " Selected";
148 }
149 print ">Ms
150 <OPTION value=Mr";
151 if ($data->{'title'} eq 'Mr'){
152   print " Selected";
153 }
154 print ">Mr
155 <OPTION value=Dr";
156 if ($data->{'title'} eq 'Dr'){
157   print " Selected";
158 }
159 print ">Dr
160 <OPTION value=Sir";
161 if ($data->{'title'} eq 'Sir'){
162   print " Selected";
163 }
164 print <<printend
165 >Sir
166 </SELECT>
167 </td>
168
169 <td><input type=text name=initials size=5 value="$data->{'initials'}"></td>
170 <td><input type=text name=firstname size=20 value="$data->{'firstname'}"></td>
171 <td><input type=text name=surname size=20 value="$data->{'surname'}"></td>
172 <td><input type=text name=othernames size=20 value="$data->{'othernames'}"></td></tr>
173 <tr valign=top bgcolor=white>
174 <td><FONT SIZE=2>Title</FONT></td>
175 <td><FONT SIZE=2>Initials</FONT></td>
176 <td><FONT SIZE=2>Given Names*</FONT></td>
177 <td><FONT SIZE=2>Surname*</FONT></td>
178 <td><FONT SIZE=2>Prefered Name</FONT></td>
179 </tr>
180
181 <tr><td>&nbsp; </TD></TR>
182 <tr valign=top bgcolor=white>
183 <td colspan=2>
184 printend
185 ;
186
187 my ($categories,$labels)=ethnicitycategories();
188 my $ethnicitycategoriescount=$#{$categories};
189 if ($ethnicitycategoriescount>=0) {
190         print $input->popup_menu(-name=>'ethnicity',
191                                 -values=>$categories,
192                                 -default=>$data->{'ethnicity'},
193                                 -labels=>$labels);
194 print <<printend
195 </td>
196 <td colspan=2><input type=text name=ethnicnotes size=40 ></td>
197 <td> 
198 printend
199 ;
200 } else {
201         print "</td><td colspan=2>&nbsp;</td><td>\n";
202 }
203 ($categories,$labels)=borrowercategories();
204 print $input->popup_menu(-name=>'categorycode',
205                                 -values=>$categories,
206                                 -default=>$data->{'categorycode'},
207                                 -labels=>$labels);
208
209
210
211 my $ethnicitylabels='';
212 if ($ethnicitycategoriescount>=0) {
213         $ethnicitylabels=qq|
214 <td colspan=2><FONT SIZE=2>Ethnicity</FONT></td>
215 <td colspan=2><FONT SIZE=2>Ethnicity Notes</FONT></td>
216 |;
217 } else {
218         $ethnicitylabels="<td colspan=2>&nbsp;</td><td colspan=2>&nbsp;</td>";
219 }
220 print <<printend
221
222 </td>
223 </tr>                                                                                                                                                                                                                                                                                                                                                                   
224 <tr valign=top bgcolor=white>
225 $ethnicitylabels
226 <td><FONT SIZE=2>Membership Category*</FONT></td>
227 </tr>
228 <tr><td>&nbsp; </TD></TR>
229
230 <tr valign=top bgcolor="99cc33" ><td  COLSPAN=5 background="/images/background-mem.gif">
231 <B>MEMBER ADDRESS</b></td></tr>
232 <tr valign=top bgcolor=white>
233 <td  COLSPAN=3><input type=text name=address size=40 value="$data->{'streetaddress'}">
234 <td><input type=text name=city size=20 value="$data->{'city'}"></td>
235 <td>
236 <SELECT NAME="area" SIZE="1">
237 printend
238 ;
239
240 print "
241 <OPTION value=L";
242 if ($data->{'area'} eq 'L'){
243   print " Selected";
244 }
245 print ">L - Levin
246 <OPTION value=F";
247 if ($data->{'area'} eq 'F'){
248   print " Selected";
249 }
250 print ">F - Foxton
251 <OPTION value=S";
252 if ($data->{'area'} eq 'S'){
253   print " Selected";
254 }
255 print ">S - Shannon
256 <OPTION value=H";
257 if ($data->{'area'} eq 'H'){
258   print " Selected";
259 }
260 print ">H - Horowhenua
261 <OPTION value=K";
262 if ($data->{'area'} eq 'K'){
263   print " Selected";
264 }
265 print ">K - Kapiti
266 <OPTION value=O";
267 if ($data->{'area'} eq 'O'){
268   print " Selected";
269 }
270 print ">O - Out of District
271 <OPTION value=X";
272 if ($data->{'area'} eq 'X'){
273   print " Selected";
274 }
275 print ">X - Temporary Visitor
276 <OPTION value=Z";
277 if ($data->{'area'} eq 'Z'){
278   print " Selected";
279 }
280 print ">Z - Interloan Libraries
281 <OPTION value=V";
282 if ($data->{'area'} eq 'V'){
283   print " Selected";
284 }
285 print ">V - Villlage";
286 print <<printend
287 </SELECT></td></tr>
288 <tr valign=top bgcolor=white>
289 <td  COLSPAN=3><FONT SIZE=2>Postal Address*</FONT></td>
290 <td><FONT SIZE=2>Town*</FONT></td>
291 <td><FONT SIZE=2>Area</FONT></td>
292 </tr>
293 <tr><td>&nbsp; </TD></TR>
294 <tr valign=top bgcolor=white>
295
296 <td  COLSPAN=3><input type=text name=streetaddress size=40 value="$data->{'physstreet'}"></td>
297 <td><input type=text name=streetcity size=20 value="$data->{'streetcity'}"></td>
298 </tr>
299 </tr>
300 <tr valign=top bgcolor=white>
301
302 <td  COLSPAN=3><FONT SIZE=2>Street Address if different</FONT></td>
303 <td><FONT SIZE=2>Town</FONT></td>
304 </tr>
305 <tr><td>&nbsp; </TD></TR>
306 <tr valign=top bgcolor="99cc33"  ><td  COLSPAN=5  background="/images/background-mem.gif">
307 <B>MEMBER CONTACT DETAILS</b></td></tr>
308
309
310 <tr valign=top bgcolor=white>
311 <td   COLSPAN=2 ><input type=text name=phone size=20 value="$data->{'phone'}"></td>
312 <td><input type=text name=phoneday size=20 value="$data->{'phoneday'}"></td>
313 <td><input type=text name=faxnumber size=20 value="$data->{'faxnumber'}"></td>
314 <td><input type=text name=emailaddress size=20 value="$data->{'emailaddress'}"></td></tr>
315
316 <tr valign=top bgcolor=white>
317 <td   COLSPAN=2 ><FONT SIZE=2>Phone (Home)</td>
318 <td><FONT SIZE=2>Phone (day)</td>
319 <td><FONT SIZE=2>Fax</td>
320 <td><FONT SIZE=2>Email</td></tr>
321 <tr><td>&nbsp; </TD></TR>
322 <tr valign=top bgcolor="99cc33"  ><td  COLSPAN=5  background="/images/background-mem.gif">
323 <B>ALTERNATE CONTACT DETAILS</b> </td></tr>
324
325 <tr valign=top bgcolor=white>
326 <td   COLSPAN=3 ><input type=text name=contactname size=40 value="$data->{'contactname'}"></td>
327 <td><input type=text name=altphone size=20 value="$data->{'altphone'}"></td>
328 <td><select name=altrelationship size=1>
329 <option value="workplace"
330 printend
331 ;
332 if ($data->{'altrelationship'} eq 'workplace'){
333   print " selected ";
334 }
335
336 print ">Workplace
337 <option value=\"relative\"";
338 if ($data->{'altrelationship'} eq 'relative'){
339   print " selected ";
340 }
341 print ">Relative
342 <option value=\"friend\"";
343 if ($data->{'altrelationship'} eq 'workplace'){
344   print " selected ";
345 }
346 print ">Friend
347 <option value=\"neighbour\"";
348 if ($data->{'altrelationship'} eq 'workplace'){
349   print " selected ";
350 }
351 print <<printend
352 >Neighbour
353 </select></td></tr>
354
355 <tr valign=top bgcolor=white>
356 <td   COLSPAN=3 ><FONT SIZE=2>Name*</td>
357 <td><FONT SIZE=2>Phone</td>
358 <td><FONT SIZE=2>Relationship*</td></tr>
359
360
361
362 <tr><td>&nbsp; </TD></TR>
363
364
365 <tr valign=top bgcolor=white>
366
367 <td><FONT SIZE=2>Notes</font></td>
368 <td  COLSPAN=4><textarea name=altnotes wrap=physical cols=70 rows=3>$data->{'altnotes'}</textarea></td></tr>
369 </tr>
370
371
372 <tr><td>&nbsp; </TD></TR>
373
374
375 <tr valign=top bgcolor="99cc33"  >
376
377 <td  COLSPAN=5  background="/images/background-mem.gif"><B>LIBRARY USE</B></td>
378 </tr>
379
380
381 <tr valign=top >
382
383 <td><FONT SIZE=2>Notes</font></td>
384 <td  COLSPAN=4><textarea name=borrowernotes wrap=physical cols=70 rows=3>$data->{'borrowernotes'}</textarea></td></tr>
385 <tr><td>&nbsp; </TD></TR>
386 <tr valign=top bgcolor=white><td  COLSPAN=5 align=right >
387 printend
388 ;
389 if ($modify){                                                                                                                                      
390   print <<printend                                                                                                                                 
391   <tr><td><Font size=2>FLAGS</font></td></tr>                                                                                                        
392   <tr><td>Gone No Address</td>                                                                                                                       
393   <td><input type=radio name=gna value=1                                                                                                             
394 printend
395 ;
396   if ($data->{'gonenoaddress'} eq '1'){                                                                                                            
397     print " checked";                                                                                                                              
398   }                                                                                                                                                
399   print ">Yes <input type=radio name=gna value=0";                                                                                                   
400   if ($data->{'gonenoaddress'} eq '0'){                                                                                                            
401     print " checked";                                                                                                                              
402   }                                                                                                                                                
403   print ">No</td></tr>\n";                                                                                                                         
404   print "<tr><td>Lost</td><td><input type=radio name=lost value=1";                                                                                
405   if ($data->{'lost'} eq '1'){                                                                                                                     
406     print " checked";                                                                                                                              
407   }                                                                                                                                                
408   print ">Yes<input type=radio name=lost value=0";                                                                                                 
409   if ($data->{'lost'} eq '0'){                                                                                                                     
410     print " checked";                                                                                                                              
411   }                                                                                                                                                
412   print ">No</td></tr>\n";                                                                                                                         
413   print "<tr><td>Debarred</td><td><input type=radio name=debarred value=1";                                                                        
414   if ($data->{'debarred'} eq '1'){                                                                                                                 
415     print " checked";                                                                                                                              
416   }                                                                                                                                                
417   print ">Yes<input type=radio name=debarred value=0";                                                                                             
418   if ($data->{'debarred'} eq '0'){                                                                                                                 
419     print " checked";                                                                                                                              
420   }                                                                                                                                                
421   print ">No</td></tr>\n";                                                                                                                         
422 }                 
423
424 if ($type ne 'modify'){
425   print <<printend
426 <tr><td></td><td><input type=image src="/images/save-changes.gif"  WIDTH=188  HEIGHT=44  ALT="Add New Member" border=0 ></td>
427 printend
428 ;
429 } else {
430 print <<printend
431 <td><td></td><td><input type=image src="/images/save-changes.gif"  WIDTH=188  HEIGHT=44  ALT="Add New Member" border=0 ></td>
432 printend
433 ;
434 }
435 print <<printend
436 </form>
437 </tr>
438 </TABLE>
439 </table>
440                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         </form>
441                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
442                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         
443
444 printend
445 ;
446 print endmenu('member');
447 print endpage();
448 }