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