Bug 22951: (follow-up) Fix indentation
[koha.git] / misc / cronjobs / j2a.pl
blobcdbb8f81ed1855570b26a6590720d11a0f8aa7d2
1 #!/usr/bin/perl
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
8 # under the terms of the GNU General Public License as published by
9 # the Free Software Foundation; either version 3 of the License, or
10 # (at your option) any later version.
12 # Koha is distributed in the hope that it will be useful, but
13 # WITHOUT ANY WARRANTY; without even the implied warranty of
14 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 # GNU General Public License for more details.
17 # You should have received a copy of the GNU General Public License
18 # along with Koha; if not, see <http://www.gnu.org/licenses>.
20 use Modern::Perl;
22 BEGIN {
23 # find Koha's Perl modules
24 # test carefully before changing this
25 use FindBin;
26 eval { require "$FindBin::Bin/../kohalib.pl" };
29 use Koha::Script -cron;
30 use C4::Context;
31 use C4::Members;
32 use Getopt::Long;
33 use Pod::Usage;
34 use C4::Log;
36 =head1 NAME
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.
40 =head1 SYNOPSIS
42 juv2adult.pl [ -b=<branchcode> -f=<categorycode> -t=<categorycode> ]
44 Options:
45 --help brief help message
46 --man full documentation
47 -v verbose mode
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
53 =head1 OPTIONS
55 =over 8
57 =item B<--help>
59 Print a brief help message and exits.
61 =item B<--man>
63 Prints the manual page and exits.
65 =item B<-v>
67 Verbose. Without this flag set, only fatal errors are reported.
69 =item B<-n>
71 No Action. With this flag set, script will report changes but not actually execute them on the database.
73 =item B<-b>
75 changes patrons for one specific branch. Use the value in the
76 branches.branchcode table.
78 =item B<-f>
80 *required* defines the juvenile category to update. Expects the code from categories.categorycode.
82 =item B<-t>
84 *required* defines the category juvenile patrons will be converted to. Expects the code from categories.categorycode.
86 =back
88 =head1 DESCRIPTION
90 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.
92 =head1 USAGE EXAMPLES
94 C<juv2adult.pl> - Suggests that you read this help. :)
96 C<juv2adult.pl> -b=<branchcode> -f=<categorycode> -t=<categorycode> - Processes a single branch, and updates the patron categories from fromcat to tocat.
98 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.
99 =cut
101 # These variables are set by command line options.
102 # They are initially set to default values.
104 my $help = 0;
105 my $man = 0;
106 my $verbose = 0;
107 my $noaction = 0;
108 my $mybranch;
109 my $fromcat;
110 my $tocat;
112 GetOptions(
113 'help|?' => \$help,
114 'man' => \$man,
115 'v' => \$verbose,
116 'n' => \$noaction,
117 'f=s' => \$fromcat,
118 't=s' => \$tocat,
119 'b=s' => \$mybranch,
120 ) or pod2usage(2);
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";
126 exit;
129 cronlogaction();
131 my $dbh = C4::Context->dbh;
133 #get today's date, format it and subtract upperagelimit
134 my ( $sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst ) =
135 localtime(time);
136 $year += 1900;
137 $mon += 1;
138 if ( $mon < 10 ) { $mon = "0" . $mon; }
139 if ( $mday < 10 ) { $mday = "0" . $mday; }
141 # get the upperagelimit from the category to be transitioned from
142 my $query = qq|SELECT upperagelimit from categories where categorycode =?|;
143 my $sth = $dbh->prepare($query);
144 $sth->execute($fromcat)
145 or die "Couldn't execute statement: " . $sth->errstr;
146 my $agelimit = $sth->fetchrow_array();
147 if ( not $agelimit ) {
148 die "No patron category $fromcat. Please try again. \n";
151 $query = qq|SELECT categorycode from categories where categorycode=?|;
152 $sth = $dbh->prepare($query);
153 $sth->execute($tocat)
154 or die "Couldn't execute statement: " . $sth->errstr;
155 my $tocatage = $sth->fetchrow_array();
156 if ( not $tocatage ) {
157 die "No patron category $tocat. Please try again. \n";
160 $year -= $agelimit;
162 $verbose and print "The age limit for category $fromcat is $agelimit\n";
164 my $itsyourbirthday = "$year-$mon-$mday";
166 if ( not $noaction ) {
167 if ($mybranch) { #yep, we received a specific branch to work on.
168 $verbose and print "Looking for patrons of $mybranch to update from $fromcat to $tocat that were born before $itsyourbirthday\n";
169 my $query = qq|
170 UPDATE borrowers
171 SET guarantorid ='0',
172 categorycode = ?
173 WHERE dateofbirth <= ?
174 AND dateofbirth != '0000-00-00'
175 AND branchcode = ?
176 AND categorycode IN (
177 SELECT categorycode
178 FROM categories
179 WHERE category_type = 'C'
180 AND categorycode = ?
182 my $sth = $dbh->prepare($query);
183 my $res = $sth->execute( $tocat, $itsyourbirthday, $mybranch, $fromcat )
184 or die "can't execute";
186 if ( $res eq '0E0' ) {
187 print "No patrons updated\n";
189 else {
190 print "Updated $res patrons\n";
193 else { # branch was not supplied, processing all branches
194 $verbose and print "Looking in all branches for patrons to update from $fromcat to $tocat that were born before $itsyourbirthday\n";
195 my $query = qq|
196 UPDATE borrowers
197 SET guarantorid = '0',
198 categorycode = ?
199 WHERE dateofbirth <= ?
200 AND dateofbirth!='0000-00-00'
201 AND categorycode IN (
202 SELECT categorycode
203 FROM categories
204 WHERE category_type = 'C'
205 AND categorycode = ?
207 my $sth = $dbh->prepare($query);
208 my $res = $sth->execute( $tocat, $itsyourbirthday, $fromcat )
209 or die "can't execute";
211 if ( $res eq '0E0' ) {
212 print "No patrons updated\n";
214 else {
215 print "Updated $res patrons\n";
219 else {
220 my $birthday;
221 if ($mybranch) {
222 $verbose and print "Displaying patrons that would be updated from $fromcat to $tocat from $mybranch\n";
223 my $query = qq|
224 SELECT firstname,
225 surname,
226 cardnumber,
227 dateofbirth
228 FROM borrowers
229 WHERE dateofbirth <= ?
230 AND dateofbirth != '0000-00-00'
231 AND branchcode = ?
232 AND categorycode IN (
233 SELECT categorycode
234 FROM categories
235 WHERE category_type = 'C'
236 AND categorycode = ?
239 my $sth = $dbh->prepare($query);
240 $sth->execute( $itsyourbirthday, $mybranch, $fromcat )
241 or die "Couldn't execute statement: " . $sth->errstr;
243 while ( my @res = $sth->fetchrow_array() ) {
244 my $firstname = $res[0];
245 my $surname = $res[1];
246 my $barcode = $res[2];
247 $birthday = $res[3];
248 print "$firstname $surname $barcode $birthday\n";
251 else {
252 $verbose and print "Displaying patrons that would be updated from $fromcat to $tocat.\n";
253 my $query = qq|
254 SELECT firstname,
255 surname,
256 cardnumber,
257 dateofbirth
258 FROM borrowers
259 WHERE dateofbirth <= ?
260 AND dateofbirth != '0000-00-00'
261 AND categorycode IN (
262 SELECT categorycode
263 FROM categories
264 WHERE category_type = 'C'
265 AND categorycode = ?
268 my $sth = $dbh->prepare($query);
269 $sth->execute( $itsyourbirthday, $fromcat )
270 or die "Couldn't execute statement: " . $sth->errstr;
272 while ( my @res = $sth->fetchrow_array() ) {
273 my $firstname = $res[0];
274 my $surname = $res[1];
275 my $barcode = $res[2];
276 $birthday = $res[3];
277 print "$firstname $surname $barcode $birthday\n";