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