Dear Alvaro, Thanks very much. I will check and get back should i need any clarifications and help. Regards, Pandian Quoting Alvaro Cornejo <cornejo.alvaro@gmail.com>:
Hi
Here is the report to setup as *public*:
SELECT borrowers.surname, borrowers.firstname, borrowers.email, borrowers.emailpro, borrowers.sex, borrowers.lang FROM borrowers WHERE DATE_FORMAT(borrowers.dateofbirth, '%m-%d') = DATE_FORMAT(CURDATE(), '%m-%d') LIMIT 50
You can add other fields to the report so you can do additional verifications/vaidations like the patron is active, has had activity in the last x months/years, etc. Be careful with the order of the fields since this will have an impact on the script. We set LIMIT to 50 just to avoid the public report "hard record limit" of 10 records per query. You can set it to anything you think is reasonable.
The script is what is between ============ lines:
The script uses sendmail to send plain text emails. You can modify it to use any of the perl email libraries and use html format instead.
koha_birthdays.pl ================= #!/usr/bin/perl # Library includes use strict; use warnings; use LWP::UserAgent; use HTTP::Request; use JSON;
print "\nEjecutando koha_birthday\n";
#My Global Variables my $hello = ""; my $subject = ""; my $body = ""; my $message = ""; my $to = ""; my $from = ""; my $result = ""; my $i = 0;
# Capture report data: # Fields from report: surname firstname email emailpro sex lang # Prepare connection, call url and insert data (json format) to arrary my $ua = new LWP::UserAgent; $ua->agent("Perl API Client/1.0"); my $url = "https://YOURSITE/cgi-bin/koha/svc/report?id=XX"; # REPLACE YOUR SITE WITH YOUR OPAC BASE URL and XX WITH THE NUMBER OF THE REPORT YOU CREATE ABOVE my $request = HTTP::Request->new("GET" => $url); my $response = $ua->request($request); my $json_obj = JSON->new->utf8->decode($response->content); my $row_num = scalar(@{$json_obj});
#Scroll/split each registry and send the email foreach my $row (@{$json_obj}) { if ($i < $row_num) { my $surname = @{$row}[0]; my $firstname = @{$row}[1]; my $email = @{$row}[2]; my $emailpro = @{$row}[3]; my $sex = @{$row}[4]; my $lang = @{$row}[5];
# Get destination address (private email else professional) if ($email) { my $to = $email; } elsif ($emailpro) { my $to = $emailpro; } else { next; }
# Assemble the patron salutation string for each language. Our default is es-ES if ($lang eq "default" || $lang eq "es-ES") { if ($sex eq "M") { $hello = "Estimado Sr. $surname,\n" } elsif ($sex eq "F") { $hello = "Estimada Sra. $surname,\n" } else { $hello = "Estimado(a) $firstname $surname,\n" } } elsif ($lang eq "en") { if ($sex eq "M") { $hello = "Dear Mr. $surname,\n" } elsif ($sex eq "F") { $hello = "Dear Mrs. $surname,\n" } else { $hello = "Dear $firstname $surname,\n" } }
# Define email subject & body if ($lang eq "default" || $lang eq "es-ES") { $subject = "Feliz cumpleaños le desea el CELACP!"; $body = "\n"; $body .= "El CELACP se complace en hacerle llegar sus mejores deseos en esta fecha tan importante para Ud.\n\n"; $body .= "Sinceramente esperamos tenga un muy feliz día y esperamos contar con su presencia en nuestro local\n"; $body .= "o a través de nuestra plataforma virtual en https://biblioteca.celacp.org\n\n"; $body .= "Atentamente,\n\n"; $body .= "Centro de Estudios Latinoaméricanos Antonio Cornejo Polar - CELACP -\n"; } elsif ($lang eq "en") { $subject = "Happy birthday from the CELACP!"; $body = "\n"; $body .= "The CELACP is pleased to send you its best wishes on this important date for you.\n\n"; $body .= "We sincerely hope you have a very happy day and we look forward to seeing you at our library\n"; $body .= "or through our virtual platform at https://biblioteca.celacp.org\n\n"; $body .= "Sincerely,\n\n"; $body .= "Center for Latinamerican Estudies Antonio Cornejo Polar - CELACP -\n"; }
# Final message assembly #$to = 'dummy@gmail.com'; #Dummy address for testing purposes. If uncommented, overrides the destination address and all emails will be sent to this address. $from = 'source_emaiil@mydomain.com'; $message = $hello; $message .= $body;
# Create mail "session" open(MAIL, "|/usr/sbin/sendmail -t");
# Email Header print MAIL "To: $to\n"; print MAIL "From: $from\n"; print MAIL "Subject: $subject\n\n";
# Email Body print MAIL $message;
# Send email & confirm $result = close(MAIL); if($result) { print "Se envió mensaje a $to\n";} else { print "Falló el envío del mensaje a $to!\n";}
$i++; } # END IF } # END FOREACH
print "Se enviaron $i mensajes de cumpleaños\n"; 1; =========================
To run from the command line:
# perl /PATHTOSCRIPT/koha_birthdays.pl
To run on a cron job
add
/usr/bin/perl /PATHTOSCRIPT/koha_birthdays.pl to, for example /etc/cron.daily/koha-common or if you are to use crontab you can add:
0 7 * * * USER /usr/bin/perl /PATHTOSCRIPT/koha_birthdays.pl
This will run the script every day at 7:00 am and will use user USER privileges to run it.
Hope this helps.
Regards
Alvaro
|----------------------------------------------------------------------------------------| Stay safe / Cuídate/ Reste sécurisé *7* Switch off as you go / Apaga lo que no usas / Débranchez au fur et à mesure. *q *Recycle always / Recicla siempre / Recyclez toujours P Print only if absolutely necessary / Imprime solo si es necesario / Imprimez seulement si nécessaire
Le jeu. 5 nov. 2020 à 18:42, <pandian@imsc.res.in> a écrit :
Dear Alvaro,
Thanks, yes can you please share the script codes so that we can use it.
Regards
Pandian
Quoting Alvaro Cornejo <cornejo.alvaro@gmail.com>:
Hi
We have created a public report in koha that provides us the info we need to send the emails and created a script that parses the output of that report and sends the email. We finally run this script with a cronjob.
I can share the report and script if you think it will help you.
Regards
Alvaro
|----------------------------------------------------------------------------------------|
Stay safe / Cuídate/ Reste sécurisé *7* Switch off as you go / Apaga lo que no usas / Débranchez au fur et à mesure. *q *Recycle always / Recicla siempre / Recyclez toujours P Print only if absolutely necessary / Imprime solo si es necesario / Imprimez seulement si nécessaire
Le mer. 4 nov. 2020 à 12:56, Owen Leonard <oleonard@myacpl.org> a écrit :
So how can we make this possible to send birthday wishes from Koha?
Currently it is not possible. There is an open bug for this, but so far no one has taken it on:
https://bugs.koha-community.org/bugzilla3/show_bug.cgi?id=22086
Owen
-- Web Developer Athens County Public Libraries (740) 737-6006 https://www.myacpl.org _______________________________________________
Koha mailing list http://koha-community.org Koha@lists.katipo.co.nz Unsubscribe: https://lists.katipo.co.nz/mailman/listinfo/koha
_______________________________________________
Koha mailing list http://koha-community.org Koha@lists.katipo.co.nz Unsubscribe: https://lists.katipo.co.nz/mailman/listinfo/koha