FIX Sending of reminder for expired subscriptions
This commit is contained in:
parent
df0ec95b22
commit
2539f0047f
@ -79,7 +79,6 @@ class Adherent extends CommonObject
|
|||||||
|
|
||||||
var $datec;
|
var $datec;
|
||||||
var $datem;
|
var $datem;
|
||||||
var $datefin;
|
|
||||||
var $datevalid;
|
var $datevalid;
|
||||||
var $birth;
|
var $birth;
|
||||||
|
|
||||||
@ -95,6 +94,8 @@ class Adherent extends CommonObject
|
|||||||
|
|
||||||
var $fk_soc;
|
var $fk_soc;
|
||||||
|
|
||||||
|
var $datefin; // From member table
|
||||||
|
|
||||||
// Fields loaded by fetch_subscriptions()
|
// Fields loaded by fetch_subscriptions()
|
||||||
var $first_subscription_date;
|
var $first_subscription_date;
|
||||||
var $first_subscription_amount;
|
var $first_subscription_amount;
|
||||||
@ -1188,11 +1189,9 @@ class Adherent extends CommonObject
|
|||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Fonction qui recupere pour un adherent les parametres
|
* Function to get member subscriptions data
|
||||||
* first_subscription_date
|
* first_subscription_date, first_subscription_date_start, first_subscription_date_end, first_subscription_amount
|
||||||
* first_subscription_amount
|
* last_subscription_date, last_subscription_date_start, last_subscription_date_end, last_subscription_amount
|
||||||
* last_subscription_date
|
|
||||||
* last_subscription_amount
|
|
||||||
*
|
*
|
||||||
* @return int <0 si KO, >0 si OK
|
* @return int <0 si KO, >0 si OK
|
||||||
*/
|
*/
|
||||||
@ -1222,11 +1221,15 @@ class Adherent extends CommonObject
|
|||||||
{
|
{
|
||||||
if ($i==0)
|
if ($i==0)
|
||||||
{
|
{
|
||||||
$this->first_subscription_date=$obj->dateh;
|
$this->first_subscription_date=$this->db->jdate($obj->datec);
|
||||||
$this->first_subscription_amount=$obj->subscription;
|
$this->first_subscription_date_start=$this->db->jdate($obj->dateh);
|
||||||
|
$this->first_subscription_date_end=$this->db->jdate($obj->datef);
|
||||||
|
$this->first_subscription_amount=$this->db->jdate($obj->subscription);
|
||||||
}
|
}
|
||||||
$this->last_subscription_date=$obj->dateh;
|
$this->last_subscription_date=$this->db->jdate($obj->datec);
|
||||||
$this->last_subscription_amount=$obj->subscription;
|
$this->last_subscription_date_start=$this->db->jdate($obj->datef);
|
||||||
|
$this->last_subscription_date_end=$this->db->jdate($obj->datef);
|
||||||
|
$this->last_subscription_amount=$this->db->jdate($obj->subscription);
|
||||||
|
|
||||||
$subscription=new Subscription($this->db);
|
$subscription=new Subscription($this->db);
|
||||||
$subscription->id=$obj->rowid;
|
$subscription->id=$obj->rowid;
|
||||||
@ -1310,9 +1313,9 @@ class Adherent extends CommonObject
|
|||||||
{
|
{
|
||||||
// Change properties of object (used by triggers)
|
// Change properties of object (used by triggers)
|
||||||
$this->last_subscription_date=dol_now();
|
$this->last_subscription_date=dol_now();
|
||||||
$this->last_subscription_amount=$amount;
|
|
||||||
$this->last_subscription_date_start=$date;
|
$this->last_subscription_date_start=$date;
|
||||||
$this->last_subscription_date_end=$datefin;
|
$this->last_subscription_date_end=$datefin;
|
||||||
|
$this->last_subscription_amount=$amount;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (! $error)
|
if (! $error)
|
||||||
@ -2241,8 +2244,13 @@ class Adherent extends CommonObject
|
|||||||
$this->need_subscription=0;
|
$this->need_subscription=0;
|
||||||
|
|
||||||
$this->first_subscription_date=time();
|
$this->first_subscription_date=time();
|
||||||
|
$this->first_subscription_date_start=$this->first_subscription_date;
|
||||||
|
$this->first_subscription_date_end=dol_time_plus_duree($this->first_subscription_date_start, 1, 'y');
|
||||||
$this->first_subscription_amount=10;
|
$this->first_subscription_amount=10;
|
||||||
$this->last_subscription_date=time();
|
|
||||||
|
$this->last_subscription_date=$this->first_subscription_date;
|
||||||
|
$this->last_subscription_date_start=$this->first_subscription_date;
|
||||||
|
$this->last_subscription_date_end=dol_time_plus_duree($this->last_subscription_date_start, 1, 'y');
|
||||||
$this->last_subscription_amount=10;
|
$this->last_subscription_amount=10;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2542,10 +2550,10 @@ class Adherent extends CommonObject
|
|||||||
* Send reminders by emails before subscription end
|
* Send reminders by emails before subscription end
|
||||||
* CAN BE A CRON TASK
|
* CAN BE A CRON TASK
|
||||||
*
|
*
|
||||||
* @param int $daysbeforeend Nb of days before end of subscription (negative number = after subscription)
|
* @param string $daysbeforeendlist Nb of days before end of subscription (negative number = after subscription). Can be a list of delay, separated by a semicolon, for example '10;5;0;-5'
|
||||||
* @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK)
|
* @return int 0 if OK, <>0 if KO (this function is used also by cron so only 0 is OK)
|
||||||
*/
|
*/
|
||||||
public function sendReminderForExpiredSubscription($daysbeforeend=10)
|
public function sendReminderForExpiredSubscription($daysbeforeendlist='10')
|
||||||
{
|
{
|
||||||
global $conf, $langs, $mysoc, $user;
|
global $conf, $langs, $mysoc, $user;
|
||||||
|
|
||||||
@ -2563,96 +2571,110 @@ class Adherent extends CommonObject
|
|||||||
}*/
|
}*/
|
||||||
|
|
||||||
$now = dol_now();
|
$now = dol_now();
|
||||||
|
$nbok = 0;
|
||||||
|
$nbko = 0;
|
||||||
|
|
||||||
dol_syslog(__METHOD__, LOG_DEBUG);
|
$arraydaysbeforeend=explode(';',$daysbeforeendlist);
|
||||||
|
foreach($arraydaysbeforeend as $daysbeforeend) // Loop on each delay
|
||||||
$tmp=dol_getdate($now);
|
|
||||||
$datetosearchfor = dol_time_plus_duree(dol_mktime(0, 0, 0, $tmp['mon'], $tmp['mday'], $tmp['year']), -1 * $daysbeforeend, 'd');
|
|
||||||
|
|
||||||
$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'adherent';
|
|
||||||
$sql.= " WHERE datefin = '".$this->db->idate($datetosearchfor)."'";
|
|
||||||
|
|
||||||
$resql = $this->db->query($sql);
|
|
||||||
if ($resql)
|
|
||||||
{
|
{
|
||||||
$num_rows = $this->db->num_rows($resql);
|
dol_syslog(__METHOD__.' - Process delta = '.$daysbeforeend, LOG_DEBUG);
|
||||||
|
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
|
if (! is_numeric($daysbeforeend))
|
||||||
$adherent = new Adherent($this->db);
|
|
||||||
$formmail = new FormMail($this->db);
|
|
||||||
|
|
||||||
$i=0;
|
|
||||||
$nbok = 0;
|
|
||||||
$nbko = 0;
|
|
||||||
while ($i < $num_rows)
|
|
||||||
{
|
{
|
||||||
$obj = $this->db->fetch_object($resql);
|
$blockingerrormsg="Value for delta is not a positive or negative numeric";
|
||||||
|
$nbko++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
$adherent->fetch($obj->rowid);
|
$tmp=dol_getdate($now);
|
||||||
|
$datetosearchfor = dol_time_plus_duree(dol_mktime(0, 0, 0, $tmp['mon'], $tmp['mday'], $tmp['year']), $daysbeforeend, 'd');
|
||||||
|
|
||||||
if (empty($adherent->email))
|
$sql = 'SELECT rowid FROM '.MAIN_DB_PREFIX.'adherent';
|
||||||
|
$sql.= " WHERE datefin = '".$this->db->idate($datetosearchfor)."'";
|
||||||
|
|
||||||
|
$resql = $this->db->query($sql);
|
||||||
|
if ($resql)
|
||||||
|
{
|
||||||
|
$num_rows = $this->db->num_rows($resql);
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/class/html.formmail.class.php';
|
||||||
|
$adherent = new Adherent($this->db);
|
||||||
|
$formmail = new FormMail($this->db);
|
||||||
|
|
||||||
|
$i=0;
|
||||||
|
while ($i < $num_rows)
|
||||||
{
|
{
|
||||||
$nbko++;
|
$obj = $this->db->fetch_object($resql);
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$adherent->fetch_thirdparty();
|
|
||||||
|
|
||||||
// Send reminder email
|
$adherent->fetch($obj->rowid, '', '', '', true, true);
|
||||||
$outputlangs = new Translate('', $conf);
|
|
||||||
$outputlangs->setDefaultLang(empty($adherent->thirdparty->default_lang) ? $mysoc->default_lang : $adherent->thirdparty->default_lang);
|
|
||||||
$outputlangs->loadLangs(array("main", "members"));
|
|
||||||
dol_syslog("sendReminderForExpiredSubscription Language set to ".$outputlangs->defaultlang);
|
|
||||||
|
|
||||||
$arraydefaultmessage=null;
|
if (empty($adherent->email))
|
||||||
$labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION;
|
|
||||||
|
|
||||||
if (! empty($labeltouse)) $arraydefaultmessage=$formmail->getEMailTemplate($this->db, 'member', $user, $outputlangs, 0, 1, $labeltouse);
|
|
||||||
|
|
||||||
if (! empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0)
|
|
||||||
{
|
{
|
||||||
$substitutionarray=getCommonSubstitutionArray($outputlangs, 0, null, $adherent);
|
$nbko++;
|
||||||
//if (is_array($adherent->thirdparty)) $substitutionarraycomp = ...
|
|
||||||
complete_substitutions_array($substitutionarray, $outputlangs, $adherent);
|
|
||||||
|
|
||||||
$subject = make_substitutions($arraydefaultmessage->topic, $substitutionarray, $outputlangs);
|
|
||||||
$msg = make_substitutions($arraydefaultmessage->content, $substitutionarray, $outputlangs);
|
|
||||||
$from = $conf->global->ADHERENT_MAIL_FROM;
|
|
||||||
$to = $adherent->email;
|
|
||||||
|
|
||||||
$trackid = 'mem'.$adherent->id;
|
|
||||||
$moreinheader='X-Dolibarr-Info: sendReminderForExpiredSubscription'."\r\n";
|
|
||||||
|
|
||||||
include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
|
|
||||||
$cmail = new CMailFile($subject, $to, $from, $msg, array(), array(), array(), '', '', 0, 1, '', '', $trackid, $moreinheader);
|
|
||||||
$result = $cmail->sendfile();
|
|
||||||
if (! $result)
|
|
||||||
{
|
|
||||||
$error++;
|
|
||||||
$this->error = $cmail->error;
|
|
||||||
$this->errors += $cmail->errors;
|
|
||||||
$nbko++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$nbok++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
$blockingerrormsg="Can't find email template, defined into member module setup, to use for reminding";
|
$adherent->fetch_thirdparty();
|
||||||
$nbko++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
$i++;
|
// Send reminder email
|
||||||
|
$outputlangs = new Translate('', $conf);
|
||||||
|
$outputlangs->setDefaultLang(empty($adherent->thirdparty->default_lang) ? $mysoc->default_lang : $adherent->thirdparty->default_lang);
|
||||||
|
$outputlangs->loadLangs(array("main", "members"));
|
||||||
|
dol_syslog("sendReminderForExpiredSubscription Language set to ".$outputlangs->defaultlang);
|
||||||
|
|
||||||
|
$arraydefaultmessage=null;
|
||||||
|
$labeltouse = $conf->global->ADHERENT_EMAIL_TEMPLATE_REMIND_EXPIRATION;
|
||||||
|
|
||||||
|
if (! empty($labeltouse)) $arraydefaultmessage=$formmail->getEMailTemplate($this->db, 'member', $user, $outputlangs, 0, 1, $labeltouse);
|
||||||
|
|
||||||
|
if (! empty($labeltouse) && is_object($arraydefaultmessage) && $arraydefaultmessage->id > 0)
|
||||||
|
{
|
||||||
|
$substitutionarray=getCommonSubstitutionArray($outputlangs, 0, null, $adherent);
|
||||||
|
//if (is_array($adherent->thirdparty)) $substitutionarraycomp = ...
|
||||||
|
complete_substitutions_array($substitutionarray, $outputlangs, $adherent);
|
||||||
|
|
||||||
|
$subject = make_substitutions($arraydefaultmessage->topic, $substitutionarray, $outputlangs);
|
||||||
|
$msg = make_substitutions($arraydefaultmessage->content, $substitutionarray, $outputlangs);
|
||||||
|
$from = $conf->global->ADHERENT_MAIL_FROM;
|
||||||
|
$to = $adherent->email;
|
||||||
|
|
||||||
|
$trackid = 'mem'.$adherent->id;
|
||||||
|
$moreinheader='X-Dolibarr-Info: sendReminderForExpiredSubscription'."\r\n";
|
||||||
|
|
||||||
|
include_once DOL_DOCUMENT_ROOT.'/core/class/CMailFile.class.php';
|
||||||
|
$cmail = new CMailFile($subject, $to, $from, $msg, array(), array(), array(), '', '', 0, 1, '', '', $trackid, $moreinheader);
|
||||||
|
$result = $cmail->sendfile();
|
||||||
|
if (! $result)
|
||||||
|
{
|
||||||
|
$error++;
|
||||||
|
$this->error = $cmail->error;
|
||||||
|
$this->errors += $cmail->errors;
|
||||||
|
$nbko++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$nbok++;
|
||||||
|
|
||||||
|
// TODO Add event email sent for member
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$blockingerrormsg="Can't find email template, defined into member module setup, to use for reminding";
|
||||||
|
$nbko++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$this->error = $this->db->lasterror();
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
$this->error = $this->db->lasterror();
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($blockingerrormsg)
|
if ($blockingerrormsg)
|
||||||
|
|||||||
@ -5938,6 +5938,7 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
|
|||||||
|
|
||||||
$substitutionarray['__THIRDPARTY_ID__'] = '__THIRDPARTY_ID__';
|
$substitutionarray['__THIRDPARTY_ID__'] = '__THIRDPARTY_ID__';
|
||||||
$substitutionarray['__THIRDPARTY_NAME__'] = '__THIRDPARTY_NAME__';
|
$substitutionarray['__THIRDPARTY_NAME__'] = '__THIRDPARTY_NAME__';
|
||||||
|
$substitutionarray['__THIRDPARTY_NAME_ALIAS__'] = '__THIRDPARTY_NAME_ALIAS__';
|
||||||
$substitutionarray['__THIRDPARTY_EMAIL__'] = '__THIRDPARTY_EMAIL__';
|
$substitutionarray['__THIRDPARTY_EMAIL__'] = '__THIRDPARTY_EMAIL__';
|
||||||
|
|
||||||
if (is_object($object) && $object->element == 'member')
|
if (is_object($object) && $object->element == 'member')
|
||||||
@ -6000,6 +6001,12 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
|
|||||||
$substitutionarray['__MEMBER_PHONE__']=$msgishtml?dol_htmlentitiesbr($object->phone):$object->phone;
|
$substitutionarray['__MEMBER_PHONE__']=$msgishtml?dol_htmlentitiesbr($object->phone):$object->phone;
|
||||||
$substitutionarray['__MEMBER_PHONEPRO__']=$msgishtml?dol_htmlentitiesbr($object->phone_perso):$object->phone_perso;
|
$substitutionarray['__MEMBER_PHONEPRO__']=$msgishtml?dol_htmlentitiesbr($object->phone_perso):$object->phone_perso;
|
||||||
$substitutionarray['__MEMBER_PHONEMOBILE__']=$msgishtml?dol_htmlentitiesbr($object->phone_mobile):$object->phone_mobile;
|
$substitutionarray['__MEMBER_PHONEMOBILE__']=$msgishtml?dol_htmlentitiesbr($object->phone_mobile):$object->phone_mobile;
|
||||||
|
$substitutionarray['__MEMBER_FIRST_SUBSCRIPTION_DATE__'] = dol_print_date($object->first_subscription_date, 'dayrfc');
|
||||||
|
$substitutionarray['__MEMBER_FIRST_SUBSCRIPTION_DATE_START__'] = dol_print_date($object->first_subscription_date_start, 'dayrfc');
|
||||||
|
$substitutionarray['__MEMBER_FIRST_SUBSCRIPTION_DATE_END__'] = dol_print_date($object->first_subscription_date_end, 'dayrfc');
|
||||||
|
$substitutionarray['__MEMBER_LAST_SUBSCRIPTION_DATE__'] = dol_print_date($object->last_subscription_date, 'dayrfc');
|
||||||
|
$substitutionarray['__MEMBER_LAST_SUBSCRIPTION_DATE_START__'] = dol_print_date($object->last_subscription_date_start, 'dayrfc');
|
||||||
|
$substitutionarray['__MEMBER_LAST_SUBSCRIPTION_DATE_END__'] = dol_print_date($object->last_subscription_date_end, 'dayrfc');
|
||||||
|
|
||||||
if (is_object($object) && $object->element == 'societe')
|
if (is_object($object) && $object->element == 'societe')
|
||||||
{
|
{
|
||||||
@ -6162,7 +6169,7 @@ function getCommonSubstitutionArray($outputlangs, $onlykey=0, $exclude=null, $ob
|
|||||||
* @param array $substitutionarray Array with key->val to substitute. Example: array('__MYKEY__' => 'MyVal', ...)
|
* @param array $substitutionarray Array with key->val to substitute. Example: array('__MYKEY__' => 'MyVal', ...)
|
||||||
* @param Translate $outputlangs Output language
|
* @param Translate $outputlangs Output language
|
||||||
* @return string Output string after substitutions
|
* @return string Output string after substitutions
|
||||||
* @see complete_substitutions_array
|
* @see complete_substitutions_array, getCommonSubstitutionArray
|
||||||
*/
|
*/
|
||||||
function make_substitutions($text, $substitutionarray, $outputlangs=null)
|
function make_substitutions($text, $substitutionarray, $outputlangs=null)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -124,7 +124,7 @@ CardContent=Content of your member card
|
|||||||
ThisIsContentOfYourMembershipRequestWasReceived=We want to let you know that your membership request was received.<br><br>
|
ThisIsContentOfYourMembershipRequestWasReceived=We want to let you know that your membership request was received.<br><br>
|
||||||
ThisIsContentOfYourMembershipWasValidated=We want to let you know that your membership was validated with the following information:<br><br>
|
ThisIsContentOfYourMembershipWasValidated=We want to let you know that your membership was validated with the following information:<br><br>
|
||||||
ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded.<br><br>
|
ThisIsContentOfYourSubscriptionWasRecorded=We want to let you know that your new subscription was recorded.<br><br>
|
||||||
ThisIsContentOfSubscriptionReminderEmail=We want to let you know thet your subscription is about to expire. We hope you can make a renewal of it.<br><br>
|
ThisIsContentOfSubscriptionReminderEmail=We want to let you know that your subscription is about to expire or is already expired (__MEMBER_LAST_SUBSCRIPTION_DATE_END__). We hope you can make a renewal of it.<br><br>
|
||||||
ThisIsContentOfYourCard=This is a remind of the information we get about you. Feel free to contact us if something looks wrong.<br><br>
|
ThisIsContentOfYourCard=This is a remind of the information we get about you. Feel free to contact us if something looks wrong.<br><br>
|
||||||
DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Subject of the e-mail received in case of auto-inscription of a guest
|
DescADHERENT_AUTOREGISTER_NOTIF_MAIL_SUBJECT=Subject of the e-mail received in case of auto-inscription of a guest
|
||||||
DescADHERENT_AUTOREGISTER_NOTIF_MAIL=E-mail received in case of auto-inscription of a guest
|
DescADHERENT_AUTOREGISTER_NOTIF_MAIL=E-mail received in case of auto-inscription of a guest
|
||||||
@ -194,4 +194,4 @@ SubscriptionRecorded=Subscription recorded
|
|||||||
NoEmailSentToMember=No email sent to member
|
NoEmailSentToMember=No email sent to member
|
||||||
EmailSentToMember=Email sent to member at %s
|
EmailSentToMember=Email sent to member at %s
|
||||||
SendReminderForExpiredSubscriptionTitle=Send reminder by email for expired subscription
|
SendReminderForExpiredSubscriptionTitle=Send reminder by email for expired subscription
|
||||||
SendReminderForExpiredSubscription=Send reminder by email to members when subscription is about to expire (parameter is number of days before end of subscription to send the remind)
|
SendReminderForExpiredSubscription=Send reminder by email to members when subscription is about to expire (parameter is number of days before end of subscription to send the remind. It can be a list of days separated by a semicolon, for example '10;5;0;-5')
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user