From 56825e415fc232e38f0a874dc9a81fa2169ef06b Mon Sep 17 00:00:00 2001 From: tipaul Date: Mon, 30 Aug 2004 13:48:58 +0000 Subject: [PATCH] modularizing (with Members.pm) members management (beginning of...) --- C4/Members.pm | 130 ++++++++++++++++++++++++++++++++++++++++- members/memberentry.pl | 59 ++----------------- 2 files changed, 132 insertions(+), 57 deletions(-) diff --git a/C4/Members.pm b/C4/Members.pm index dbcb262741..37ace296b5 100644 --- a/C4/Members.pm +++ b/C4/Members.pm @@ -22,6 +22,8 @@ package C4::Members; use strict; require Exporter; use C4::Context; +use Date::Manip; +use C4::Date; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); @@ -46,10 +48,91 @@ C4::Members - Perl Module containing convenience functions for member handling @ISA = qw(Exporter); @EXPORT = qw(); -@EXPORT_OK = qw( - &fixup_cardnumber +@EXPORT = qw( + &fixup_cardnumber &findguarantees &modmember &newmember ); + +sub modmember { + my (%data) = @_; + my $dbh = C4::Context->dbh; + $data{'dateofbirth'}=format_date_in_iso($data{'dateofbirth'}); + $data{'joining'}=format_date_in_iso($data{'joining'}); + $data{'expiry'}=format_date_in_iso($data{'expiry'}); + my $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'}"; + my $sth=$dbh->prepare($query); + $sth->execute; + $sth->finish; + # 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; + updateguarantees(%data); + } +} + +sub newmember { + my (%data) = @_; + my $dbh = C4::Context->dbh; + $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(); + my $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'}')"; + my $sth=$dbh->prepare($query); + $sth->execute; + $sth->finish; + $data{borrowernumber} =$dbh->{'mysql_insertid'}; + # 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; + updateguarantees(%data); + } + return $data{borrowernumber}; +} + +sub updateguarantees { + my (%data) = @_; + my $dbh = C4::Context->dbh; + 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; + } +} ################################################################################ =item fixup_cardnumber @@ -110,4 +193,47 @@ sub fixup_cardnumber ($) { return $cardnumber; } +sub findguarantees { + my ($bornum)=@_; + my $dbh = C4::Context->dbh; + my $sth=$dbh->prepare("select cardnumber,borrowernumber from borrowers where + guarantor=?"); + $sth->execute($bornum); + my @dat; + my $i=0; + while (my $data=$sth->fetchrow_hashref){ + $dat[$i]=$data; + $i++; + } + $sth->finish; + return($i,\@dat); +} + +# =item NewBorrowerNumber +# +# $num = &NewBorrowerNumber(); +# +# Allocates a new, unused borrower number, and returns it. +# +# =cut +# #' +# # FIXME - This is identical to C4::Search::NewBorrowerNumber. +# # Pick one (preferably this one) and stick with it. +# +# # FIXME - Race condition: this function just says what the next unused +# # number is, but doesn't allocate it. Hence, two clients adding +# # patrons at the same time could get the same new borrower number and +# # clobber each other. +# # A better approach might be to set borrowernumber autoincrement and +# +# sub NewBorrowerNumber { +# my $dbh = C4::Context->dbh; +# my $sth=$dbh->prepare("Select max(borrowernumber) from borrowers"); +# $sth->execute; +# my $data=$sth->fetchrow_hashref; +# $sth->finish; +# $data->{'max(borrowernumber)'}++; +# return($data->{'max(borrowernumber)'}); +# } + 1; diff --git a/members/memberentry.pl b/members/memberentry.pl index 678bbcd919..f5ba91fdc2 100755 --- a/members/memberentry.pl +++ b/members/memberentry.pl @@ -117,63 +117,12 @@ if ($op eq 'add' or $op eq 'modify') { 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'}"; + &modmember(%data); }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'}')"; + $data{borrowernumber} = &newmember(%data); } - # 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'}"); } + print $input->redirect("/cgi-bin/koha/members/moremember.pl?bornum=$data{'borrowernumber'}"); + } } if ($delete){ print $input->redirect("/cgi-bin/koha/deletemem.pl?member=$member"); -- 2.20.1