3 # 2011 Liz Rea - Northeast Kansas Library System <lrea@nekls.org>
5 # This file is part of Koha.
7 # Koha is free software; you can redistribute it and/or modify it under the
8 # terms of the GNU General Public License as published by the Free Software
9 # Foundation; either version 2 of the License, or (at your option) any later
12 # Koha is distributed in the hope that it will be useful, but WITHOUT ANY
13 # WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
14 # A PARTICULAR PURPOSE. See the GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License along
17 # with Koha; if not, write to the Free Software Foundation, Inc.,
18 # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
24 # find Koha's Perl modules
25 # test carefully before changing this
27 eval { require "$FindBin::Bin/../kohalib.pl" };
38 juv2adult.pl - convert juvenile/child patrons from juvenile patron category and category code to corresponding adult patron category and category code when they reach the upper age limit defined in the Patron Categories.
42 juv2adult.pl [ -b=<branchcode> -f=<categorycode> -t=<categorycode> ]
45 --help brief help message
46 --man full documentation
48 -n take no action, display only
49 -b <branchname> only deal with patrons from this library/branch
50 -f <categorycode> change patron category from this category
51 -t <categorycode> change patron category to this category
58 Print a brief help message and exits.
62 Prints the manual page and exits.
66 Verbose. Without this flag set, only fatal errors are reported.
70 No Action. With this flag set, script will report changes but not actually execute them on the database.
74 changes patrons for one specific branch. Use the value in the
75 branches.branchcode table.
79 *required* defines the juvenile category to update. Expects the code from categories.categorycode.
83 *required* defines the category juvenile patrons will be converted to. Expects the code from categories.categorycode.
89 This script is designed to update patrons from juvenile to adult patron types, remove the guarantor, and update their category codes appropriately when they reach the upper age limit defined in the Patron Categories.
93 C<juv2adult.pl> - Suggests that you read this help. :)
95 C<juv2adult.pl> -b=<branchcode> -f=<categorycode> -t=<categorycode> - Processes a single branch, and updates the patron categories from fromcat to tocat.
97 C<juv2adult.pl> -f=<categorycode> -t=<categorycode> -v -n - Processes all branches, shows all messages, and reports the patrons who would be affected. Takes no action on the database.
100 # These variables are set by command line options.
101 # They are initially set to default values.
121 pod2usage
(1) if $help;
122 pod2usage
( -verbose
=> 2 ) if $man;
124 if(not $fromcat && $tocat) { #make sure we've specified the info we need.
125 print "please specify -help for usage tips.\n";
129 my $dbh=C4
::Context
->dbh;
130 my @branches = C4
::Branch
::GetBranches
();
131 #get today's date, format it and subtract upperagelimit
132 my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
134 $mon +=1; if ($mon < 10) {$mon = "0".$mon;}
135 if ($mday < 10) {$mday = "0".$mday;}
136 # get the upperagelimit from the category to be transitioned from
137 my $query=qq|SELECT upperagelimit from categories where categorycode
=?
|;
138 my $sth=$dbh->prepare( $query );
139 $sth->execute( $fromcat )
140 or die "Couldn't execute statement: " . $sth->errstr;
141 my $agelimit = $sth->fetchrow_array();
142 if ( not $agelimit ) {
144 die "No patron category $fromcat. Please try again. \n";
146 $query=qq|SELECT categorycode from categories where categorycode
=?
|;
147 $sth=$dbh->prepare( $query );
148 $sth->execute( $tocat )
149 or die "Couldn't execute statement: " . $sth->errstr;
150 my $tocatage = $sth->fetchrow_array();
151 if ( not $tocatage ){
152 die "No patron category $tocat. Please try again. \n";
157 $verbose and print "The age limit for category $fromcat is $agelimit\n";
159 my $itsyourbirthday = "$year-$mon-$mday";
162 if ( not $noaction) {
163 if ( $mybranch ) { #yep, we received a specific branch to work on.
164 $verbose and print "Looking for patrons of $mybranch to update from $fromcat to $tocat that were born before $itsyourbirthday\n";
165 my $query=qq|UPDATE borrowers
166 SET guarantorid
='0',
169 AND dateofbirth
!='0000-00-00'
171 AND categorycode IN
(select categorycode from categories where category_type
='C' and categorycode
=?
)|;
172 my $sth=$dbh->prepare($query);
173 my $res = $sth->execute( $tocat, $itsyourbirthday, $mybranch, $fromcat ) or die "can't execute";
174 if ($res eq '0E0') { print "No patrons updated\n";
175 } else { print "Updated $res patrons\n"; }
176 } else { # branch was not supplied, processing all branches
177 $verbose and print "Looking in all branches for patrons to update from $fromcat to $tocat that were born before $itsyourbirthday\n";
178 foreach my $branchcode (@branches) {
179 my $query=qq|UPDATE borrowers
180 SET guarantorid
='0',
183 AND dateofbirth
!='0000-00-00'
184 AND categorycode IN
(select categorycode from categories where category_type
='C' and categorycode
=?
)|;
185 my $sth=$dbh->prepare($query);
186 my $res = $sth->execute( $tocat, $itsyourbirthday, $fromcat ) or die "can't execute";
187 if ($res eq '0E0') { print "No patrons updated\n";
188 } else { print "Updated $res patrons\n"; }
194 $verbose and print "Displaying patrons that would be updated from $fromcat to $tocat from $mybranch\n";
195 my $query=qq|SELECT firstname
,
201 AND dateofbirth
!='0000-00-00'
203 AND categorycode IN
(select categorycode from categories where category_type
='C' and categorycode
=?
)|;
204 my $sth=$dbh->prepare( $query );
205 $sth->execute( $itsyourbirthday, $mybranch, $fromcat )
206 or die "Couldn't execute statement: " . $sth->errstr;
207 while ( my @res = $sth->fetchrow_array()) {
208 my $firstname = $res[0];
209 my $surname = $res[1];
210 my $barcode = $res[2];
212 print "$firstname $surname $barcode $birthday\n";
215 $verbose and print "Displaying patrons that would be updated from $fromcat to $tocat.\n";
216 my $query=qq|SELECT firstname
,
222 AND dateofbirth
!='0000-00-00'
223 AND categorycode IN
(select categorycode from categories where category_type
='C' and categorycode
=?
)|;
224 my $sth=$dbh->prepare( $query );
225 $sth->execute( $itsyourbirthday, $fromcat )
226 or die "Couldn't execute statement: " . $sth->errstr;
227 while ( my @res = $sth->fetchrow_array()) {
228 my $firstname = $res[0];
229 my $surname = $res[1];
230 my $barcode = $res[2];
232 print "$firstname $surname $barcode $birthday\n";