#!/usr/bin/perl
+# $Id$
+
#script to set up screen for modification of borrower details
#written 20/12/99 by chris@katipo.co.nz
+
+# Copyright 2000-2002 Katipo Communications
+#
+# This file is part of Koha.
+#
+# Koha is free software; you can redistribute it and/or modify it under the
+# terms of the GNU General Public License as published by the Free Software
+# Foundation; either version 2 of the License, or (at your option) any later
+# version.
+#
+# Koha is distributed in the hope that it will be useful, but WITHOUT ANY
+# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
+# A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along with
+# Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
+# Suite 330, Boston, MA 02111-1307 USA
+
use strict;
+use C4::Context;
use C4::Output;
use CGI;
use C4::Search;
-use C4::Database;
+use C4::Koha;
+use HTML::Template;
my $input = new CGI;
+
+my $template = gettemplate("members/memberentry.tmpl");
+
my $member=$input->param('bornum');
if ($member eq ''){
$member=NewBorrowerNumber();
}
-my $type=$input->param('type');
-my $modify=$input->param('modify.x');
+my $type=$input->param('type') || '';
+my $modify=$input->param('modify.x');
my $delete=$input->param('delete.x');
if ($delete){
print $input->redirect("/cgi-bin/koha/deletemem.pl?member=$member");
-} else {
-print $input->header;
-print startpage();
-print startmenu('member');
-
-if ($type ne 'Add'){
- print mkheadr(1,'Update Member Details');
-} else {
- print mkheadr(1,'Add New Member');
-}
-my $data=borrdata('',$member);
-print <<printend
-<form action=/cgi-bin/koha/newmember.pl method=post>
-<input type=hidden name=joining value="$data->{'dateenrolled'}">
-<input type=hidden name=expiry value="$data->{'expiry'}">
-<input type=hidden name=type value="borrowers">
-<input type=hidden name=borrowernumber value="$member">
-printend
-;
-if ($type eq 'Add'){
- print "<input type=hidden name=updtype value=I>";
-} else {
- print "<input type=hidden name=updtype value=M>";
-}
-my $cardnumber=$data->{'cardnumber'};
-my %sysemprefs=systemprefs();
-# FIXME
-# This logic should probably be moved out of the presentation code.
-# Not tonight though.
-#
-if ($cardnumber eq '' && $systemprefs{'autoMemberNum'} eq '1') {
- my $dbh=C4Connect;
- my $query="select max(substring(borrowers.cardnumber,2,7)) from borrowers";
- my $sth=$dbh->prepare($query);
- $sth->execute;
- my $data=$sth->fetchrow_hashref;
- $cardnumber=$data->{'max(substring(borrowers.cardnumber,2,7))'};
- $sth->finish;
- $dbh->disconnect;
- # purpose: generate checksum'd member numbers.
- # We'll assume we just got the max value of digits 2-8 of member #'s from the database and our job is to
- # increment that by one, determine the 1st and 9th digits and return the full string.
- my @weightings = (8,4,6,3,5,2,1);
- my $sum;
- my $i = 0;
- if (! $cardnumber) { # If DB has no values, start at 1000000
- $cardnumber = 1000000;
+} else { # this else goes down the whole script
+ if ($type ne 'Add'){
+ $template->param( header => 'Update Member Details'); # bad templating style
} else {
- $cardnumber = $cardnumber + 1;
- }
-
- while ($i <8) { # step from char 1 to 7.
- my $temp1 = $weightings[$i]; # read weightings, left to right, 1 char at a time
- my $temp2 = substr($cardnumber,$i,1); # sequence left to right, 1 char at a time
-#print "$temp2<br>";
- $sum = $sum + ($temp1*$temp2); # mult each char 1-7 by its corresponding weighting
- $i++; # increment counter
+ $template->param( header => 'Add New Member');
}
- my $rem = ($sum%11); # remainder of sum/11 (eg. 9999999/11, remainder=2)
- if ($rem == 10) { # if remainder is 10, use X instead
- $rem = "X";
- }
- $cardnumber="V$cardnumber$rem";
-} else {
- $cardnumber=$data->{'cardnumber'};
-}
-
-print <<printend
-
-<table border=0 cellspacing=0 cellpadding=5 >
-
-
-<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'>
-Member# $member, Card Number* <input type=text name=cardnumber size=10 value="$cardnumber"><br>
-</td></tr>
-
-
-<tr valign=top ><td COLSPAN=3 background="/images/background-mem.gif">
-<B>MEMBER PERSONAL DETAILS</b></td> <td COLSPAN=2 ALIGN=RIGHT background="/images/background-mem.gif">
-* <input type="radio" name="sex" value="F"
-printend
-;
-if ($data->{'sex'} eq 'F'){
- print " checked";
-}
-print <<printend
->F
-<input type="radio" name="sex" value="M"
-printend
-;
-if ($data->{'sex'} eq 'M'){
- print " checked";
-}
-print <<printend
->M
- <B>Date of Birth</B> (dd/mm/yy)
-<input type=text name=dateofbirth size=10 value="$data->{'dateofbirth'}">
-</td></tr>
-<tr valign=top bgcolor=white>
-<td><SELECT NAME="title" SIZE="1">
-<OPTION value=" ">No Title
-<OPTION value=Miss
-printend
-;
-if ($data->{'title'} eq 'Miss'){
- print " Selected";
-}
-print ">Miss
-<OPTION value=Mrs";
-if ($data->{'title'} eq 'Mrs'){
- print " Selected";
-}
-print ">Mrs
-<OPTION value=Ms";
-if ($data->{'title'} eq 'Ms'){
- print " Selected";
-}
-print ">Ms
-<OPTION value=Mr";
-if ($data->{'title'} eq 'Mr'){
- print " Selected";
-}
-print ">Mr
-<OPTION value=Dr";
-if ($data->{'title'} eq 'Dr'){
- print " Selected";
-}
-print ">Dr
-<OPTION value=Sir";
-if ($data->{'title'} eq 'Sir'){
- print " Selected";
-}
-print <<printend
->Sir
-</SELECT>
-</td>
-
-<td><input type=text name=initials size=5 value="$data->{'initials'}"></td>
-<td><input type=text name=firstname size=20 value="$data->{'firstname'}"></td>
-<td><input type=text name=surname size=20 value="$data->{'surname'}"></td>
-<td><input type=text name=othernames size=20 value="$data->{'othernames'}"></td></tr>
-<tr valign=top bgcolor=white>
-<td><FONT SIZE=2>Title</FONT></td>
-<td><FONT SIZE=2>Initials</FONT></td>
-<td><FONT SIZE=2>Given Names*</FONT></td>
-<td><FONT SIZE=2>Surname*</FONT></td>
-<td><FONT SIZE=2>Prefered Name</FONT></td>
-</tr>
-
-<tr><td> </TD></TR>
-<tr valign=top bgcolor=white>
-<td colspan=2><SELECT NAME="ethnicity" SIZE="1">
-printend
-;
-print "<OPTION value=\" \">
-<OPTION value=european";
-if ($data->{'ethnicity'} eq 'european'){
- print " selected";
-}
-print "
->European/Pakeha
-<OPTION value=maori";
-if ($data->{'ethnicity'} eq 'maori'){
- print " selected";
-}
-print ">Maori
-<OPTION value=asian";
-if ($data->{'ethnicity'} eq 'asian'){
- print " selected";
-}
-print ">Asian
-<OPTION value=pi";
-if ($data->{'ethnicity'} eq 'pi'){
- print " selected";
-}
-print ">Pacific Island
-<OPTION value=other";
-if ($data->{'ethnicity'} eq 'other'){
- print " selected";
-}
-
-print <<printend
->Other - please specify-->
-</SELECT>
-</td>
-<td colspan=2><input type=text name=ethnicnotes size=40 ></td>
-<td> <select name=categorycode>
-<option value="A"
-printend
-;
-if ($data->{'categorycode'} eq 'A'){
- print " Selected";
-}
-print ">Adult
-<option value=B";
-if ($data->{'categorycode'} eq 'B'){
- print " Selected";
-}
-print ">Homebound
-<option value=P";
-if ($data->{'categorycode'} eq 'P'){
- print " Selected";
-}
-print ">Privileged
-<option value=E";
-if ($data->{'categorycode'} eq 'E'){
- print " Selected";
-}
-print ">Senior Citizen
-<option value=W";
-if ($data->{'categorycode'} eq 'W'){
- print " Selected";
-}
-print ">Staff
-<option value=I";
-if ($data->{'categorycode'} eq 'I'){
- print " Selected";
-}
-print ">Institution
-<option value=C";
-if ($data->{'categorycode'} eq 'C'){
- print " Selected";
-}
-print ">Child
-<option value=L";
-if ($data->{'categorycode'} eq 'L'){
- print " Selected";
-}
-print ">Library
-<option value=F";
-if ($data->{'categorycode'} eq 'F'){
- print " Selected";
-}
-print ">Family";
-print <<printend
-</select>
-</td>
-</tr>
-<tr valign=top bgcolor=white>
-<td colspan=2><FONT SIZE=2>Ethnicity</FONT></td>
-<td colspan=2><FONT SIZE=2>Ethnicity Notes</FONT></td>
-<td><FONT SIZE=2>Membership Category*</FONT></td>
-</tr>
-<tr><td> </TD></TR>
-
-<tr valign=top bgcolor="99cc33" ><td COLSPAN=5 background="/images/background-mem.gif">
-<B>MEMBER ADDRESS</b></td></tr>
-<tr valign=top bgcolor=white>
-<td COLSPAN=3><input type=text name=address size=40 value="$data->{'streetaddress'}">
-<td><input type=text name=city size=20 value="$data->{'city'}"></td>
-<td>
-<SELECT NAME="area" SIZE="1">
-printend
-;
-
-
-print "<OPTION value=EEBF";
-if ($data->{'area'} eq 'EEBF'){
- print " Selected";
-}
-print ">EEBF - Delphi-E Flint
-<OPTION value=L";
-if ($data->{'area'} eq 'L'){
- print " Selected";
-}
-print ">L - Levin
-<OPTION value=F";
-if ($data->{'area'} eq 'F'){
- print " Selected";
-}
-print ">F - Foxton
-<OPTION value=S";
-if ($data->{'area'} eq 'S'){
- print " Selected";
-}
-print ">S - Shannon
-<OPTION value=H";
-if ($data->{'area'} eq 'H'){
- print " Selected";
-}
-print ">H - Horowhenua
-<OPTION value=K";
-if ($data->{'area'} eq 'K'){
- print " Selected";
-}
-print ">K - Kapiti
-<OPTION value=O";
-if ($data->{'area'} eq 'O'){
- print " Selected";
-}
-print ">O - Out of District
-<OPTION value=X";
-if ($data->{'area'} eq 'X'){
- print " Selected";
-}
-print ">X - Temporary Visitor
-<OPTION value=Z";
-if ($data->{'area'} eq 'Z'){
- print " Selected";
-}
-print ">Z - Interloan Libraries
-<OPTION value=V";
-if ($data->{'area'} eq 'V'){
- print " Selected";
-}
-print ">V - Villlage";
-print <<printend
-</SELECT></td></tr>
-<tr valign=top bgcolor=white>
-<td COLSPAN=3><FONT SIZE=2>Postal Address*</FONT></td>
-<td><FONT SIZE=2>Town*</FONT></td>
-<td><FONT SIZE=2>Area</FONT></td>
-</tr>
-<tr><td> </TD></TR>
-<tr valign=top bgcolor=white>
-<td COLSPAN=3><input type=text name=streetaddress size=40 value="$data->{'physstreet'}"></td>
-<td><input type=text name=streetcity size=20 value="$data->{'streetcity'}"></td>
-</tr>
-</tr>
-<tr valign=top bgcolor=white>
-
-<td COLSPAN=3><FONT SIZE=2>Street Address if different</FONT></td>
-<td><FONT SIZE=2>Town</FONT></td>
-</tr>
-<tr><td> </TD></TR>
-<tr valign=top bgcolor="99cc33" ><td COLSPAN=5 background="/images/background-mem.gif">
-<B>MEMBER CONTACT DETAILS</b></td></tr>
-
-
-<tr valign=top bgcolor=white>
-<td COLSPAN=2 ><input type=text name=phone size=20 value="$data->{'phone'}"></td>
-<td><input type=text name=phoneday size=20 value="$data->{'phoneday'}"></td>
-<td><input type=text name=faxnumber size=20 value="$data->{'faxnumber'}"></td>
-<td><input type=text name=emailaddress size=20 value="$data->{'emailaddress'}"></td></tr>
-
-<tr valign=top bgcolor=white>
-<td COLSPAN=2 ><FONT SIZE=2>Phone (Home)</td>
-<td><FONT SIZE=2>Phone (day)</td>
-<td><FONT SIZE=2>Fax</td>
-<td><FONT SIZE=2>Email</td></tr>
-<tr><td> </TD></TR>
-<tr valign=top bgcolor="99cc33" ><td COLSPAN=5 background="/images/background-mem.gif">
-<B>ALTERNATE CONTACT DETAILS</b> </td></tr>
-
-<tr valign=top bgcolor=white>
-<td COLSPAN=3 ><input type=text name=contactname size=40 value="$data->{'contactname'}"></td>
-<td><input type=text name=altphone size=20 value="$data->{'altphone'}"></td>
-<td><select name=altrelationship size=1>
-<option value="workplace"
-printend
-;
-if ($data->{'altrelationship'} eq 'workplace'){
- print " selected ";
-}
-
-print ">Workplace
-<option value=\"relative\"";
-if ($data->{'altrelationship'} eq 'relative'){
- print " selected ";
-}
-print ">Relative
-<option value=\"friend\"";
-if ($data->{'altrelationship'} eq 'workplace'){
- print " selected ";
-}
-print ">Friend
-<option value=\"neighbour\"";
-if ($data->{'altrelationship'} eq 'workplace'){
- print " selected ";
-}
-print <<printend
->Neighbour
-</select></td></tr>
-
-<tr valign=top bgcolor=white>
-<td COLSPAN=3 ><FONT SIZE=2>Name*</td>
-<td><FONT SIZE=2>Phone</td>
-<td><FONT SIZE=2>Relationship*</td></tr>
-
-
-
-<tr><td> </TD></TR>
+ my $data=borrdata('',$member);
+ if ($type eq 'Add'){
+ $template->param( updtype => 'I');
+ } else {
+ $template->param( updtype => 'M');
+ }
-<tr valign=top bgcolor=white>
+ my $cardnumber=$data->{'cardnumber'};
+ my $autonumber_members = C4::Context->preference("autoMemberNum") || 0;
+ # Find out whether member numbers should be generated
+ # automatically. Should be either "1" or something else.
+ # Defaults to "0", which is interpreted as "no".
+ # FIXME
+ # This logic should probably be moved out of the presentation code.
+ # Not tonight though.
+ #
+ if ($cardnumber eq '' && $autonumber_members eq '1') {
+ my $dbh = C4::Context->dbh;
+ my $query="select max(substring(borrowers.cardnumber,2,7)) from borrowers";
+ my $sth=$dbh->prepare($query);
+ $sth->execute;
+ my $data=$sth->fetchrow_hashref;
+ $cardnumber=$data->{'max(substring(borrowers.cardnumber,2,7))'};
+ $sth->finish;
+ # purpose: generate checksum'd member numbers.
+ # We'll assume we just got the max value of digits 2-8 of member #'s from the database and our job is to
+ # increment that by one, determine the 1st and 9th digits and return the full string.
+ my @weightings = (8,4,6,3,5,2,1);
+ my $sum;
+ my $i = 0;
+ if (! $cardnumber) { # If DB has no values, start at 1000000
+ $cardnumber = 1000000;
+ } else {
+ $cardnumber = $cardnumber + 1; # FIXME - $cardnumber++;
+ }
+
+ while ($i <8) { # step from char 1 to 7.
+ my $temp1 = $weightings[$i]; # read weightings, left to right, 1 char at a time
+ my $temp2 = substr($cardnumber,$i,1); # sequence left to right, 1 char at a time
+ #print "$temp2<br>";
+ $sum += $temp1*$temp2; # mult each char 1-7 by its corresponding weighting
+ $i++; # increment counter
+ }
+ my $rem = ($sum%11); # remainder of sum/11 (eg. 9999999/11, remainder=2)
+ if ($rem == 10) { # if remainder is 10, use X instead
+ $rem = "X";
+ }
+ $cardnumber="V$cardnumber$rem";
+ } else {
+ $cardnumber=$data->{'cardnumber'};
+ }
-<td><FONT SIZE=2>Notes</font></td>
-<td COLSPAN=4><textarea name=altnotes wrap=physical cols=70 rows=3>$data->{'altnotes'}</textarea></td></tr>
-</tr>
+ if ($data->{'sex'} eq 'F'){
+ $template->param(female => 1);
+ }
+ my @titles = ('Miss', 'Mrs', 'Ms', 'Mr', 'Dr', 'Sir');
+ # FIXME - Assumes English. This ought to be made part of i18n.
+ my @titledata;
+ while (@titles) {
+ my %row;
+ my $title = shift @titles;
+ $row{'title'} = $title;
+ if ($data->{'title'} eq $title) {
+ $row{'selected'}=' selected';
+ } else {
+ $row{'selected'}='';
+ }
+ push(@titledata, \%row);
+ }
-<tr><td> </TD></TR>
+ my ($categories,$labels)=ethnicitycategories();
+ my $ethnicitycategoriescount=$#{$categories};
+ my $ethcatpopup;
+ if ($ethnicitycategoriescount>=0) {
+ $ethcatpopup = CGI::popup_menu(-name=>'ethnicity',
+ -values=>$categories,
+ -default=>$data->{'ethnicity'},
+ -labels=>$labels);
+ $template->param(ethcatpopup => $ethcatpopup); # bad style, has to be fixed
+ }
+ ($categories,$labels)=borrowercategories();
+ my $catcodepopup = CGI::popup_menu(-name=>'categorycode',
+ -values=>$categories,
+ -default=>$data->{'categorycode'},
+ -labels=>$labels);
+
+ my @areas = ('L','F','S','H','K','O','X','Z','V');
+ my %arealabels = ('L' => 'Levin',
+ 'F' => 'Foxton',
+ 'S' => 'Shannon',
+ 'H' => 'Horowhenua',
+ 'K' => 'Kapiti',
+ 'O' => 'Out of District',
+ 'X' => 'Temporary Visitor',
+ 'Z' => 'Interloan Libraries',
+ 'V' => 'Village');
+
+ my @areadata;
+ while (@areas) {
+ my %row;
+ my $shortcut = shift @areas;
+ $row{'shortcut'} = $shortcut;
+ if ($data->{'area'} eq $shortcut) {
+ $row{'selected'}=' selected';
+ } else {
+ $row{'selected'}='';
+ }
+ $row{'area'}=$arealabels{$shortcut};
+ push(@areadata, \%row);
+ }
-<tr valign=top bgcolor="99cc33" >
-<td COLSPAN=5 background="/images/background-mem.gif"><B>LIBRARY USE</B></td>
-</tr>
+ my @relationships = ('workplace', 'relative','friend', 'neighbour');
+ my @relshipdata;
+ while (@relationships) {
+ my $relship = shift @relationships;
+ my %row = ('relationship' => $relship);
+ if ($data->{'altrelationship'} eq $relship) {
+ $row{'selected'}=' selected';
+ } else {
+ $row{'selected'}='';
+ }
+ push(@relshipdata, \%row);
+ }
+ # %flags: keys=$data-keys, datas=[formname, HTML-explanation]
+ my %flags = ('gonenoaddress' => ['gna', 'Gone no address'],
+ 'lost' => ['lost', 'Lost'],
+ 'debarred' => ['debarred', 'Debarred']);
+
+ my @flagdata;
+ foreach (keys(%flags)) {
+ my $key = $_;
+ my %row = ('key' => $key,
+ 'name' => $flags{$key}[0],
+ 'html' => $flags{$key}[1]);
+ if ($data->{$key}) {
+ $row{'yes'}=' checked';
+ $row{'no'}='';
+ } else {
+ $row{'yes'}='';
+ $row{'no'}=' checked';
+ }
+ push(@flagdata, \%row);
+ }
-<tr valign=top >
+ if ($modify){
+ $template->param( modify => 1 );
+ }
-<td><FONT SIZE=2>Notes</font></td>
-<td COLSPAN=4><textarea name=borrowernotes wrap=physical cols=70 rows=3>$data->{'borrowernotes'}</textarea></td></tr>
-<tr><td> </TD></TR>
-<tr valign=top bgcolor=white><td COLSPAN=5 align=right >
-printend
-;
-if ($modify){
- print <<printend
- <tr><td><Font size=2>FLAGS</font></td></tr>
- <tr><td>Gone No Address</td>
- <td><input type=radio name=gna value=1
-printend
-;
- if ($data->{'gonenoaddress'} eq '1'){
- print " checked";
- }
- print ">Yes <input type=radio name=gna value=0";
- if ($data->{'gonenoaddress'} eq '0'){
- print " checked";
- }
- print ">No</td></tr>\n";
- print "<tr><td>Lost</td><td><input type=radio name=lost value=1";
- if ($data->{'lost'} eq '1'){
- print " checked";
- }
- print ">Yes<input type=radio name=lost value=0";
- if ($data->{'lost'} eq '0'){
- print " checked";
- }
- print ">No</td></tr>\n";
- print "<tr><td>Debarred</td><td><input type=radio name=debarred value=1";
- if ($data->{'debarred'} eq '1'){
- print " checked";
- }
- print ">Yes<input type=radio name=debarred value=0";
- if ($data->{'debarred'} eq '0'){
- print " checked";
- }
- print ">No</td></tr>\n";
-}
+ $template->param( startmenumember => join ('', startmenu('member')),
+ endmenumember => join ('', endmenu('member')),
+ member => $member,
+ firstname => $data->{'firstname'},
+ surname => $data->{'surname'},
+ othernames => $data->{'othernames'},
+ initials => $data->{'initials'},
+ ethcatpopup => $ethcatpopup,
+ catcodepopup => $catcodepopup,
+ streetaddress => $data->{'physstreet'},
+ streetcity => $data->{'streetcity'},
+ city => $data->{'city'},
+ phone => $data->{'phone'},
+ phoneday => $data->{'phoneday'},
+ faxnumber => $data->{'faxnumber'},
+ emailaddress => $data->{'emailaddress'},
+ contactname => $data->{'contactname'},
+ altphone => $data->{'altphone'},
+ altnotes => $data->{'altnotes'},
+ borrowernotes => $data->{'borrowernotes'},
+ flagloop => \@flagdata,
+ relshiploop => \@relshipdata,
+ titleloop => \@titledata,
+ arealoop => \@areadata,
+ dateenrolled => $data->{'dateenrolled'},
+ expiry => $data->{'expiry'},
+ cardnumber => $cardnumber,
+ dateofbirth => $data->{'dateofbirth'});
+
+ print "Content-Type: text/html\n\n", $template->output;
-if ($type ne 'modify'){
- print <<printend
-<tr><td></td><td><input type=image src="/images/save-changes.gif" WIDTH=188 HEIGHT=44 ALT="Add New Member" border=0 ></td>
-printend
-;
-} else {
-print <<printend
-<td><td></td><td><input type=image src="/images/save-changes.gif" WIDTH=188 HEIGHT=44 ALT="Add New Member" border=0 ></td>
-printend
-;
-}
-print <<printend
-</form>
-</tr>
-</TABLE>
-</table>
- </form>
-
-
-printend
-;
-print endmenu('member');
-print endpage();
}