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