[Koha-cvs] koha/misc/cronjobs notifyMailsOp.pl [rel_3_0]

LAURIN arnaud alaurin at ouestprovence.fr
Mon Jan 29 15:56:09 CET 2007


CVSROOT:	/sources/koha
Module name:	koha
Branch:		rel_3_0
Changes by:	LAURIN arnaud <alaurin>	07/01/29 14:56:09

Added files:
	misc/cronjobs  : notifyMailsOp.pl 

Log message:
	new programm for notification by mail :
	
	now using  tools/letter value , and checking by overduerules the delays
	
		to use it, your must configure with your own parameters (mails) ....

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/koha/misc/cronjobs/notifyMailsOp.pl?cvsroot=koha&only_with_tag=rel_3_0&rev=1.1.2.1

Patches:
Index: notifyMailsOp.pl
===================================================================
RCS file: notifyMailsOp.pl
diff -N notifyMailsOp.pl
--- /dev/null	1 Jan 1970 00:00:00 -0000
+++ notifyMailsOp.pl	29 Jan 2007 14:56:09 -0000	1.1.2.1
@@ -0,0 +1,208 @@
+use strict;
+use C4::Context;
+use C4::Date;
+use Mail::Sendmail;  # comment out if not doing e-mail notices
+use Getopt::Long;
+use C4::Circulation::Circ2;
+# use C4::Members;
+#  this module will notify only the mail case
+# Now it's only programmed for ouest provence, you can modify it for yourself
+# sub function for get all notifications are not sends
+sub GetNotifys {
+# 	my($branch) = @_;
+ 	my $dbh = C4::Context->dbh;
+	my $sth=$dbh->prepare("SELECT DISTINCT notifys.borrowernumber , borrowers.surname , borrowers.firstname , borrowers.title AS borrower_title , categories.category_type AS categorycode , borrowers.email , borrowers.contacttitle , borrowers.contactname , borrowers.contactfirstname ,
+	notifys.notify_level , notifys.method
+	FROM notifys,borrowers,categories WHERE (notifys.borrowernumber=borrowers.borrowernumber) AND (notifys.notify_send_date IS NULL) AND (borrowers.categorycode = categories.categorycode)");
+	
+	$sth->execute();
+		my @getnotifys;
+		my $i=0;
+		while (my $data=$sth->fetchrow_hashref){
+			$getnotifys[$i]=$data;
+			$i++;	
+		}
+		$sth->finish;
+		return(@getnotifys);
+
+}
+
+sub GetBorrowerNotifys{
+	my ($borrowernumber) = @_;
+	my $dbh = C4::Context->dbh;
+	my @getnotifys2;
+	my $sth2=$dbh->prepare("SELECT notifys.itemnumber,notifys.notify_level,biblio.title ,itemtypes.description,
+			issues.date_due
+			FROM notifys,biblio,items,itemtypes,biblioitems,issues 
+			WHERE
+			(items.itemnumber=notifys.itemnumber
+			AND biblio.biblionumber=items.biblionumber)
+			AND (itemtypes.itemtype=biblioitems.itemtype AND biblioitems.biblionumber=biblio.biblionumber)
+			AND
+			(notifys.borrowernumber=issues.borrowernumber AND notifys.itemnumber=issues.itemnumber)
+			AND
+			issues.returndate IS NULL
+			AND
+			notifys.borrowernumber=?
+			AND notify_send_date IS NULL");
+			$sth2->execute($borrowernumber);
+			my $j=0;
+			while (my $data2=$sth2->fetchrow_hashref){
+				$getnotifys2[$j]=$data2;
+				$j++;
+			}
+			$sth2->finish;
+			return(@getnotifys2);
+
+}
+
+sub GetOverduerules{
+	my($category,$notify_level) = @_;
+	my $dbh = C4::Context->dbh;
+    	my $sth=$dbh->prepare("SELECT letter".$notify_level.",debarred".$notify_level." FROM overduerules WHERE categorycode=?");
+    	$sth->execute($category);
+    	my (@overduerules)=$sth->fetchrow_array;
+    	$sth->finish;
+    	return(@overduerules);
+
+}
+
+sub GetLetter{
+
+	my($letterid) = @_;
+	my $dbh = C4::Context->dbh;
+    	my $sth=$dbh->prepare("SELECT title,content FROM letter WHERE code=?");
+    	$sth->execute($letterid);
+    	my (@getletter)=$sth->fetchrow_array;
+    	$sth->finish;
+    	return(@getletter);
+
+}
+
+sub UpdateBorrowerDebarred{
+	my($borrowernumber) = @_;
+	my $dbh = C4::Context->dbh;
+    	my $sth=$dbh->prepare("UPDATE borrowers SET debarred='1' WHERE borrowernumber=?");
+    	$sth->execute($borrowernumber);
+    	$sth->finish;
+    	return 1;
+}
+
+sub UpdateNotifySendDate{
+	my($borrowernumber,$itemnumber,$notifyLevel) = @_;
+	my $dbh = C4::Context->dbh;
+    	my $sth=$dbh->prepare("UPDATE notifys SET notify_send_date=now() 
+    	WHERE borrowernumber=? AND itemnumber=? AND notify_send_date IS NULL AND notify_level=?");
+    	$sth->execute($borrowernumber,$itemnumber,$notifyLevel);
+    	$sth->finish;
+    	return 1;
+
+}
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 
+
+# work with get notifys
+my $smtpserver = 'smtp.yoursmtpserver'; # your smtp server (the server who sent mails)
+my $from = 'your at librarymailadress'; # all the mails sent to the borrowers will appear coming from here.
+
+
+# initiate file for wrong_mails
+my $outfile = 'wrong_mails.txt';
+open( OUT, ">$outfile" );
+binmode(OUT, 'utf8');
+
+my @getnofifys = GetNotifys();
+foreach my $num (@getnofifys) {
+	my %notify;	
+# 	if we have a method mail, we check witch mail letter we launch
+	if ($num->{'method'} eq 'mail'){
+		my ($letterid,$debarred) = GetOverduerules($num->{'categorycode'},$num->{'notify_level'});
+# 			now, we get the letter associated to letterid
+			my($title,$content) = GetLetter($letterid);
+			my $email = $num->{'email'};
+			#my $email = 'alaurin at ouestprovence.fr';
+			my $mailtitle = $title; # the title of the mails
+# Work with the adult category code
+				if ($num->{'categorycode'} eq 'A') {
+	# 			now deal with $content
+					$content =~ s/\<<borrowers.title>\>/$num->{'borrower_title'}/g ;
+					$content =~ s/\<<borrowers.surname>\>/$num->{'surname'}/g ;
+					$content =~ s/\<<borrowers.firstname>\>/$num->{'firstname'}/g ;
+					
+					my @getborrowernotify=GetBorrowerNotifys($num->{'borrowernumber'});
+					my $overdueitems;
+					foreach my $notif(@getborrowernotify){
+						my $date=format_date($notif->{'date_due'});
+						if ($notif->{'notify_level'} eq $num->{'notify_level'}){
+						$overdueitems .= " - <b>".$notif->{'title'}."</b>" ;
+						$overdueitems .= "  ( ".$notif->{'description'}." )  " ;
+						$overdueitems .= "emprunté le :".$date;
+						$overdueitems .= "<br>";
+						
+# FIXME at this time, the program consider the mail is send (in notify_send_date) but with no real check must be improved , we don't know if the mail was really to a real adress, and if there is a problem, we don't know how to return the notification to koha...
+	UpdateNotifySendDate($num->{'borrowernumber'},$notif->{'itemnumber'},$num->{'notify_level'});
+}
+					}
+				# if we don't have overdueitem replace content by nonotifys value, deal with it later
+					if ($overdueitems){	
+					$content =~ s/\<<items.content>\>/$overdueitems/g;
+				}
+				else {
+				$content = 'nonotifys';
+				}
+			}
+# Work with the child category code (we add the parents infos)
+				if ($num->{'categorycode'} eq 'C') {
+					$content =~ s/\<<borrowers.contacttitle>\>/$num->{'contacttitle'}/g ;
+					$content =~ s/\<<borrowers.contactname>\>/$num->{'contactname'}/g ;
+					$content =~ s/\<<borrowers.contactfirstname>\>/$num->{'contactfirstname'}/g ;
+					$content =~ s/\<<borrowers.title>\>/$num->{'borrower_title'}/g ;
+					$content =~ s/\<<borrowers.surname>\>/$num->{'surname'}/g ;
+					$content =~ s/\<<borrowers.firstname>\>/$num->{'firstname'}/g ;
+					
+					my @getborrowernotify=GetBorrowerNotifys($num->{'borrowernumber'});
+					my $overdueitems;
+					foreach my $notif(@getborrowernotify){
+						my $date=format_date($notif->{'date_due'});
+						
+						$overdueitems .= " - <b>".$notif->{'title'}."</b>" ;
+						$overdueitems .= "  ( ".$notif->{'description'}." )  " ;
+						$overdueitems .= "emprunté le :".$date;
+						$overdueitems .= "<br>";
+# FIXME at this time, the program consider the mail is send (in notify_send_date) but with no real check must be improved ...
+				UpdateNotifySendDate($num->{'borrowernumber'},$notif->{'itemnumber'},$num->{'notify_level'});
+						}
+					
+					if ($overdueitems){
+						$content =~ s/\<<items.content>\>/$overdueitems/g;
+					}
+					else {
+					$content = 'nonotifys';
+					}
+				}
+# initiate the send mail
+			my $mailtext = $content;
+				unshift @{$Mail::Sendmail::mailcfg{'smtp'}} , $smtpserver;
+#                                         set your own mail server name here
+					my %mail = ( To      => $email,
+								From    => $from,
+								Subject => $mailtitle,
+								Message => $mailtext,
+								'content-type' => 'text/html; charset="utf-8"',
+					);
+				# if we don't have any content for the mail, we don't launch mail, but notify it in a file
+					if ($mailtext ne 'nonotifys') {
+					sendmail(%mail);
+					}
+					else {
+					print OUT $email ;
+					}
+					
+# now deal with the debarred mode
+#		if ($debarred eq 1) {
+# 		à ajouter : si le lecteur est en mode debarred, ajouter la fonction qui nous permettra cela
+#		UpdateBorrowerDebarred($num->{'borrowernumber'});
+#		}
+	close(OUT);
+	}
+}





More information about the Koha-cvs mailing list