#!/usr/bin/perl # NOTE: This file uses standard 8-space tabs # DO NOT SET TAB SIZE TO 4 # $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::Auth; use C4::Context; use C4::Output; use C4::Interface::CGI::Output; use CGI; use C4::Search; use C4::Members; use C4::Koha; use HTML::Template; use Date::Manip; use C4::Date; use C4::Input; my $input = new CGI; my $dbh = C4::Context->dbh; my ($template, $loggedinuser, $cookie) = get_template_and_user({template_name => "members/memberentry.tmpl", query => $input, type => "intranet", authnotrequired => 0, flagsrequired => {borrowers => 1}, debug => 1, }); my $member=$input->param('bornum'); my $actionType=$input->param('actionType') || ''; my $modify=$input->param('modify'); my $delete=$input->param('delete'); my $op=$input->param('op'); my $categorycode=$input->param('categorycode'); my $nok; # if a add or modify is requested => check validity of data. if ($op eq 'add' or $op eq 'modify') { my %data; my @names=$input->param; foreach my $key (@names){ $data{$key}=$input->param($key); $data{$key}=~ s/\'/\\\'/g; $data{$key}=~ s/\"/\\\"/g; } my @errors; if ($data{'cardnumber'} eq ''){ push @errors,"ERROR_cardnumber"; $nok=1; } else { #check cardnumber is valid my $nounique; if ( $data{'actionType'} eq "Add" ) { $nounique = 0; } else { $nounique = 1; } my $valid=checkdigit('',$data{'cardnumber'}, $nounique); if ($valid != 1){ $nok=1; push @errors, "ERROR_invalid_cardnumber"; } } if ($data{'sex'} eq '' && $categorycode ne "I"){ push @errors, "ERROR_gender"; $nok=1; } if ($data{'firstname'} eq '' && $categorycode ne "I"){ push @errors,"ERROR_firstname"; $nok=1; } if ($data{'surname'} eq ''){ push @errors,"ERROR_surname"; $nok=1; } if ($data{'address'} eq ''){ push @errors, "ERROR_address"; $nok=1; } if ($data{'city'} eq ''){ push @errors, "ERROR_city"; $nok=1; } if ($nok) { foreach my $error (@errors) { $template->param( $error => 1); } $template->param(nok => 1); } else { my $query="Select * from borrowers where borrowernumber=?"; my $sth=$dbh->prepare($query); $sth->execute($data{'borrowernumber'}); if (my $data2=$sth->fetchrow_hashref){ $data{'dateofbirth'}=format_date_in_iso($data{'dateofbirth'}); $data{'joining'}=format_date_in_iso($data{'joining'}); $data{'expiry'}=format_date_in_iso($data{'expiry'}); $query="update borrowers set title='$data{'title'}',expiry='$data{'expiry'}', cardnumber='$data{'cardnumber'}',sex='$data{'sex'}',ethnotes='$data{'ethnicnotes'}', streetaddress='$data{'address'}',faxnumber='$data{'faxnumber'}',firstname='$data{'firstname'}', altnotes='$data{'altnotes'}',dateofbirth='$data{'dateofbirth'}',contactname='$data{'contactname'}', emailaddress='$data{'emailaddress'}',dateenrolled='$data{'joining'}',streetcity='$data{'streetcity'}', altrelationship='$data{'altrelationship'}',othernames='$data{'othernames'}',phoneday='$data{'phoneday'}', categorycode='$data{'categorycode'}',city='$data{'city'}',area='$data{'area'}',phone='$data{'phone'}', borrowernotes='$data{'borrowernotes'}',altphone='$data{'altphone'}',surname='$data{'surname'}', initials='$data{'initials'}',physstreet='$data{'streetaddress'}',ethnicity='$data{'ethnicity'}', gonenoaddress='$data{'gna'}',lost='$data{'lost'}',debarred='$data{'debarred'}', textmessaging='$data{'textmessaging'}', branchcode = '$data{'branchcode'}', zipcode = '$data{'zipcode'}',homezipcode='$data{'homezipcode'}', sort1='$data{'sort1'}', sort2='$data{'sort2'}' where borrowernumber=$data{'borrowernumber'}"; }else{ $data{'dateofbirth'}=format_date_in_iso($data{'dateofbirth'}); $data{'joining'}=format_date_in_iso($data{'joining'}); $data{'expiry'}=format_date_in_iso($data{'expiry'}); $data{'borrowernumber'}=NewBorrowerNumber(); $query="insert into borrowers (title,expiry,cardnumber,sex,ethnotes,streetaddress,faxnumber, firstname,altnotes,dateofbirth,contactname,emailaddress,textmessaging,dateenrolled,streetcity, altrelationship,othernames,phoneday,categorycode,city,area,phone,borrowernotes,altphone,surname, initials,ethnicity,physstreet,branchcode,zipcode,homezipcode,sort1,sort2) values ('$data{'title'}','$data{'expiry'}','$data{'cardnumber'}', '$data{'sex'}','$data{'ethnotes'}','$data{'address'}','$data{'faxnumber'}', '$data{'firstname'}','$data{'altnotes'}','$data{'dateofbirth'}','$data{'contactname'}','$data{'emailaddress'}','$data{'textmessaging'}', '$data{'joining'}','$data{'streetcity'}','$data{'altrelationship'}','$data{'othernames'}', '$data{'phoneday'}','$data{'categorycode'}','$data{'city'}','$data{'area'}','$data{'phone'}', '$data{'borrowernotes'}','$data{'altphone'}','$data{'surname'}','$data{'initials'}', '$data{'ethnicity'}','$data{'streetaddress'}','$data{'branchcode'}','$data{'zipcode'}','$data{'homezipcode'}','$data{'sort1'}','$data{'sort2'}')"; } # ok if its an adult (type) it may have borrowers that depend on it as a guarantor # so when we update information for an adult we should check for guarantees and update the relevant part # of their records, ie addresses and phone numbers if ($data{'categorycode'} eq 'A' || $data{'categorycode'} eq 'W'){ # is adult check guarantees; my ($count,$guarantees)=findguarantees($data{'borrowernumber'}); for (my $i=0;$i<$count;$i++){ # FIXME # It looks like the $i is only being returned to handle walking through # the array, which is probably better done as a foreach loop. # my $guaquery="update borrowers set streetaddress='$data{'address'}',faxnumber='$data{'faxnumber'}', streetcity='$data{'streetcity'}',phoneday='$data{'phoneday'}',city='$data{'city'}',area='$data{'area'}',phone='$data{'phone'}' ,streetaddress='$data{'address'}' where borrowernumber='$guarantees->[$i]->{'borrowernumber'}'"; my $sth3=$dbh->prepare($guaquery); $sth3->execute; $sth3->finish; } } my $sth2=$dbh->prepare($query); $sth2->execute; $sth2->finish; $sth->finish; print $input->redirect("/cgi-bin/koha/members/moremember.pl?bornum=$data{'borrowernumber'}"); } } if ($delete){ print $input->redirect("/cgi-bin/koha/deletemem.pl?member=$member"); } else { # this else goes down the whole script if ($actionType eq 'Add'){ $template->param( addAction => 1); } else { $template->param( addAction =>0); } # retrieve previous values : either in DB or in CGI, in case of errors in values my $data; if ($nok) { my @names=$input->param; foreach my $key (@names){ $data->{$key}=$input->param($key); } } else { $data=borrdata('',$member); } if ($actionType eq 'Add'){ $template->param( updtype => 'I'); } else { $template->param( updtype => 'M'); } my $cardnumber=C4::Members::fixup_cardnumber($data->{'cardnumber'}); if ($data->{'sex'} eq 'F'){ $template->param(female => 1); } my ($categories,$labels)=ethnicitycategories(); my $ethnicitycategoriescount=$#{$categories}; my $ethcatpopup; if ($ethnicitycategoriescount>=0) { $ethcatpopup = CGI::popup_menu(-name=>'ethnicity', -id => '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', -id => 'categorycode', -values=>$categories, -default=>$data->{'categorycode'}, -labels=>$labels); 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); } if ($modify){ $template->param( modify => 1 ); } #Convert dateofbirth to correct format $data->{'dateofbirth'} = format_date($data->{'dateofbirth'}); my @branches; my @select_branch; my %select_branches; my $branches=getbranches(); foreach my $branch (keys %$branches) { push @select_branch, $branch; $select_branches{$branch} = $branches->{$branch}->{'branchname'}; } my $CGIbranch=CGI::scrolling_list( -name => 'branchcode', -id => 'branchcode', -values => \@select_branch, -default => $data->{'branchcode'}, -labels => \%select_branches, -size => 1, -multiple => 0 ); $template->param( actionType => $actionType, member => $member, address => $data->{'streetaddress'}, firstname => $data->{'firstname'}, surname => $data->{'surname'}, othernames => $data->{'othernames'}, initials => $data->{'initials'}, ethcatpopup => $ethcatpopup, catcodepopup => $catcodepopup, streetaddress => $data->{'physstreet'}, zipcode => $data->{'zipcode'}, streetcity => $data->{'streetcity'}, homezipcode => $data->{'homezipcode'}, city => $data->{'city'}, phone => $data->{'phone'}, phoneday => $data->{'phoneday'}, faxnumber => $data->{'faxnumber'}, emailaddress => $data->{'emailaddress'}, textmessaging => $data->{'textmessaging'}, contactname => $data->{'contactname'}, altphone => $data->{'altphone'}, altnotes => $data->{'altnotes'}, borrowernotes => $data->{'borrowernotes'}, flagloop => \@flagdata, relshiploop => \@relshipdata, "title_".$data->{'title'} => " SELECTED ", dateenrolled => $data->{'dateenrolled'}, expiry => $data->{'expiry'}, cardnumber => $cardnumber, dateofbirth => $data->{'dateofbirth'}, sort1 => $data->{'sort1'}, sort2 => $data->{'sort2'}, dateformat => display_date_format(), modify => $modify, CGIbranch => $CGIbranch); $template->param(Institution => 1) if ($categorycode eq "I"); output_html_with_http_headers $input, $cookie, $template->output; } # Local Variables: # tab-width: 8 # End: