adding authentification with Auth.pm
[koha.git] / memberentry.pl
1 #!/usr/bin/perl
2
3 # $Id$
4
5 #script to set up screen for modification of borrower details
6 #written 20/12/99 by chris@katipo.co.nz
7
8
9 # Copyright 2000-2002 Katipo Communications
10 #
11 # This file is part of Koha.
12 #
13 # Koha is free software; you can redistribute it and/or modify it under the
14 # terms of the GNU General Public License as published by the Free Software
15 # Foundation; either version 2 of the License, or (at your option) any later
16 # version.
17 #
18 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
19 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
20 # A PARTICULAR PURPOSE.  See the GNU General Public License for more details.
21 #
22 # You should have received a copy of the GNU General Public License along with
23 # Koha; if not, write to the Free Software Foundation, Inc., 59 Temple Place,
24 # Suite 330, Boston, MA  02111-1307 USA
25
26 use strict;
27 use C4::Auth;
28 use C4::Context;
29 use C4::Output;
30 use CGI;
31 use C4::Search;
32 use C4::Koha;
33 use HTML::Template;
34
35 my $input = new CGI;
36
37 my ($template, $loggedinuser, $cookie)
38     = get_template_and_user({template_name => "members/memberentry.tmpl",
39                              query => $input,
40                              type => "intranet",
41                              authnotrequired => 0,
42                              flagsrequired => {borrowers => 1},
43                              debug => 1,
44                              });
45
46 my $member=$input->param('bornum');
47 if ($member eq ''){
48   $member=NewBorrowerNumber();
49 }
50 my $type=$input->param('type') || '';
51 my $modify=$input->param('modify.x');
52 my $delete=$input->param('delete.x');
53 if ($delete){
54   print $input->redirect("/cgi-bin/koha/deletemem.pl?member=$member");
55
56 } else {  # this else goes down the whole script
57   if ($type ne 'Add'){
58     $template->param( header => 'Update Member Details'); # bad templating style
59   } else {
60     $template->param( header => 'Add New Member');
61   }
62
63   my $data=borrdata('',$member);
64
65   if ($type eq 'Add'){
66     $template->param( updtype => 'I');
67   } else {
68     $template->param( updtype => 'M');
69   }
70
71   my $cardnumber=$data->{'cardnumber'};
72   my $autonumber_members = C4::Context->preference("autoMemberNum") || 0;
73                 # Find out whether member numbers should be generated
74                 # automatically. Should be either "1" or something else.
75                 # Defaults to "0", which is interpreted as "no".
76   # FIXME
77   # This logic should probably be moved out of the presentation code.
78   # Not tonight though.
79   #
80   if ($cardnumber eq '' && $autonumber_members eq '1') {
81     my $dbh = C4::Context->dbh;
82     my $query="select max(substring(borrowers.cardnumber,2,7)) from borrowers";
83     my $sth=$dbh->prepare($query);
84     $sth->execute;
85     my $data=$sth->fetchrow_hashref;
86     $cardnumber=$data->{'max(substring(borrowers.cardnumber,2,7))'};
87     $sth->finish;
88     # purpose: generate checksum'd member numbers.
89     # We'll assume we just got the max value of digits 2-8 of member #'s from the database and our job is to
90     # increment that by one, determine the 1st and 9th digits and return the full string.
91     my @weightings = (8,4,6,3,5,2,1);
92     my $sum;
93     my $i = 0;
94     if (! $cardnumber) {                        # If DB has no values, start at 1000000
95       $cardnumber = 1000000;
96     } else {
97       $cardnumber = $cardnumber + 1;            # FIXME - $cardnumber++;
98     }
99
100     while ($i <8) {                     # step from char 1 to 7.
101       my $temp1 = $weightings[$i];      # read weightings, left to right, 1 char at a time
102       my $temp2 = substr($cardnumber,$i,1);     # sequence left to right, 1 char at a time
103   #print "$temp2<br>";
104       $sum += $temp1*$temp2;    # mult each char 1-7 by its corresponding weighting
105       $i++;                             # increment counter
106     }
107     my $rem = ($sum%11);                        # remainder of sum/11 (eg. 9999999/11, remainder=2)
108     if ($rem == 10) {                   # if remainder is 10, use X instead
109       $rem = "X";
110     }
111     $cardnumber="V$cardnumber$rem";
112   } else {
113     $cardnumber=$data->{'cardnumber'};
114   }
115
116   if ($data->{'sex'} eq 'F'){
117     $template->param(female => 1);
118   }
119
120   my @titles = ('Miss', 'Mrs', 'Ms', 'Mr', 'Dr', 'Sir');
121         # FIXME - Assumes English. This ought to be made part of i18n.
122   my @titledata;
123   while (@titles) {
124     my %row;
125     my $title = shift @titles;
126     $row{'title'} = $title;
127     if ($data->{'title'} eq $title) {
128       $row{'selected'}=' selected';
129     } else {
130       $row{'selected'}='';
131     }
132     push(@titledata, \%row);
133   }
134
135   my ($categories,$labels)=ethnicitycategories();
136   my $ethnicitycategoriescount=$#{$categories};
137   my $ethcatpopup;
138   if ($ethnicitycategoriescount>=0) {
139         $ethcatpopup = CGI::popup_menu(-name=>'ethnicity',
140                                 -values=>$categories,
141                                 -default=>$data->{'ethnicity'},
142                                 -labels=>$labels);
143         $template->param(ethcatpopup => $ethcatpopup); # bad style, has to be fixed
144   }
145
146   ($categories,$labels)=borrowercategories();
147   my $catcodepopup = CGI::popup_menu(-name=>'categorycode',
148                                 -values=>$categories,
149                                 -default=>$data->{'categorycode'},
150                                 -labels=>$labels);
151
152   my @areas = ('L','F','S','H','K','O','X','Z','V');
153   my %arealabels = ('L' => 'Levin',
154                   'F' => 'Foxton',
155                   'S' => 'Shannon',
156                   'H' => 'Horowhenua',
157                   'K' => 'Kapiti',
158                   'O' => 'Out of District',
159                   'X' => 'Temporary Visitor',
160                   'Z' => 'Interloan Libraries',
161                   'V' => 'Village');
162
163   my @areadata;
164   while (@areas) {
165     my %row;
166     my $shortcut = shift @areas;
167     $row{'shortcut'} = $shortcut;
168     if ($data->{'area'} eq $shortcut) {
169       $row{'selected'}=' selected';
170     } else {
171       $row{'selected'}='';
172     }
173     $row{'area'}=$arealabels{$shortcut};
174     push(@areadata, \%row);
175   }
176
177
178   my @relationships = ('workplace', 'relative','friend', 'neighbour');
179   my @relshipdata;
180   while (@relationships) {
181     my $relship = shift @relationships;
182     my %row = ('relationship' => $relship);
183     if ($data->{'altrelationship'} eq $relship) {
184       $row{'selected'}=' selected';
185     } else {
186       $row{'selected'}='';
187     }
188     push(@relshipdata, \%row);
189   }
190
191   # %flags: keys=$data-keys, datas=[formname, HTML-explanation]
192   my %flags = ('gonenoaddress' => ['gna', 'Gone no address'],
193                'lost'          => ['lost', 'Lost'],
194                'debarred'      => ['debarred', 'Debarred']);
195
196   my @flagdata;
197   foreach (keys(%flags)) {
198     my $key = $_;
199     my %row =  ('key'   => $key,
200                 'name'  => $flags{$key}[0],
201                 'html'  => $flags{$key}[1]);
202     if ($data->{$key}) {
203       $row{'yes'}=' checked';
204       $row{'no'}='';
205     } else {
206       $row{'yes'}='';
207       $row{'no'}=' checked';
208     }
209     push(@flagdata, \%row);
210   }
211
212   if ($modify){
213     $template->param( modify => 1 );
214   }
215
216   $template->param( startmenumember => join ('', startmenu('member')),
217                         endmenumember   => join ('', endmenu('member')),
218                         member          => $member,
219                         firstname       => $data->{'firstname'},
220                         surname         => $data->{'surname'},
221                         othernames      => $data->{'othernames'},
222                         initials        => $data->{'initials'},
223                         ethcatpopup     => $ethcatpopup,
224                         catcodepopup    => $catcodepopup,
225                         streetaddress   => $data->{'physstreet'},
226                         streetcity      => $data->{'streetcity'},
227                         city            => $data->{'city'},
228                         phone           => $data->{'phone'},
229                         phoneday        => $data->{'phoneday'},
230                         faxnumber       => $data->{'faxnumber'},
231                         emailaddress    => $data->{'emailaddress'},
232                         contactname     => $data->{'contactname'},
233                         altphone        => $data->{'altphone'},
234                         altnotes        => $data->{'altnotes'},
235                         borrowernotes   => $data->{'borrowernotes'},
236                         flagloop        => \@flagdata,
237                         relshiploop     => \@relshipdata,
238                         titleloop       => \@titledata,
239                         arealoop        => \@areadata,
240                         dateenrolled    => $data->{'dateenrolled'},
241                         expiry          => $data->{'expiry'},
242                         cardnumber      => $cardnumber,
243                         dateofbirth     => $data->{'dateofbirth'});
244
245 print $input->header(-cookie => $cookie),$template->output;
246
247
248 }