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