2013-05-07 10:52:14 +00:00
#!/usr/bin/php
< ? php
/*
* Copyright ( C ) 2005 Rodolphe Quiedeville < rodolphe @ quiedeville . org >
* Copyright ( C ) 2005 - 2013 Laurent Destailleur < eldy @ users . sourceforge . net >
* Copyright ( C ) 2013 Juanjo Menent < jmenent @ 2 byte . es >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation ; either version 3 of the License , or
* ( at your option ) any later version .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program . If not , see < http :// www . gnu . org / licenses />.
*/
/**
* \file scripts / contracts / email_expire_services_to_representatives . php
* \ingroup contracts
* \brief Script to send a mail to dolibarr users linked to companies with services to expire
*/
$sapi_type = php_sapi_name ();
$script_file = basename ( __FILE__ );
$path = dirname ( __FILE__ ) . '/' ;
// Test si mode batch
$sapi_type = php_sapi_name ();
if ( substr ( $sapi_type , 0 , 3 ) == 'cgi' ) {
echo " Error: You are using PHP for CGI. To execute " . $script_file . " from command line, you must use PHP for CLI mode. \n " ;
2013-06-09 12:40:33 +00:00
exit ( - 1 );
2013-05-07 10:52:14 +00:00
}
if ( ! isset ( $argv [ 1 ]) || ! $argv [ 1 ] || ! in_array ( $argv [ 1 ], array ( 'test' , 'confirm' )))
{
2013-07-31 10:33:18 +00:00
print " Usage: $script_file (test|confirm) [delay] \n " ;
2013-05-07 10:52:14 +00:00
print " \n " ;
2013-05-07 11:18:16 +00:00
print " Send an email to remind all contracts services to expire, to users that are sale representative for. \n " ;
2013-05-07 10:52:14 +00:00
print " If you choose 'test' mode, no emails are sent. \n " ;
2013-05-07 11:18:16 +00:00
print " If you add a delay (nb of days), only services with expired date < today + delay are included. \n " ;
2013-06-09 12:40:33 +00:00
exit ( - 1 );
2013-05-07 10:52:14 +00:00
}
$mode = $argv [ 1 ];
require ( $path . " ../../htdocs/master.inc.php " );
require_once ( DOL_DOCUMENT_ROOT . " /core/class/CMailFile.class.php " );
$langs -> load ( 'main' );
$langs -> load ( 'contracts' );
2013-06-05 14:12:07 +00:00
// Global variables
$version = DOL_VERSION ;
$error = 0 ;
2013-05-07 10:52:14 +00:00
/*
* Main
*/
2013-06-05 14:12:07 +00:00
@ set_time_limit ( 0 );
2013-05-22 10:23:42 +00:00
print " ***** " . $script_file . " ( " . $version . " ) pid= " . getmypid () . " ***** \n " ;
2013-07-13 19:14:05 +00:00
dol_syslog ( $script_file . " launched with arg " . join ( ',' , $argv ));
2013-05-15 09:24:18 +00:00
2013-05-07 10:52:14 +00:00
$now = dol_now ( 'tzserver' );
2013-05-20 19:04:00 +00:00
$duration_value = isset ( $argv [ 2 ]) ? $argv [ 2 ] : 'none' ;
2013-05-07 10:52:14 +00:00
2013-07-31 10:33:18 +00:00
print $script_file . " launched with mode " . $mode . " default lang= " . $langs -> defaultlang . ( is_numeric ( $duration_value ) ? " delay= " . $duration_value : " " ) . " \n " ;
2013-05-07 10:52:14 +00:00
2013-06-05 14:12:07 +00:00
if ( $mode != 'confirm' ) $conf -> global -> MAIN_DISABLE_ALL_MAILS = 1 ;
2013-05-22 09:29:19 +00:00
2014-03-15 14:10:03 +00:00
$sql = " SELECT DISTINCT c.ref, c.fk_soc, cd.date_fin_validite, cd.total_ttc, cd.description as description, p.label as plabel, s.rowid, s.nom as name, s.email, s.default_lang, " ;
2013-07-31 10:33:18 +00:00
$sql .= " u.rowid as uid, u.lastname, u.firstname, u.email, u.lang " ;
$sql .= " FROM " . MAIN_DB_PREFIX . " societe AS s, " . MAIN_DB_PREFIX . " contrat AS c, " . MAIN_DB_PREFIX . " contratdet AS cd " ;
$sql .= " LEFT JOIN " . MAIN_DB_PREFIX . " product AS p ON p.rowid = cd.fk_product, " . MAIN_DB_PREFIX . " societe_commerciaux AS sc, " . MAIN_DB_PREFIX . " user AS u " ;
$sql .= " WHERE s.rowid = c.fk_soc AND c.rowid = cd.fk_contrat AND c.statut > 0 AND cd.statut<5 " ;
2013-05-20 19:04:00 +00:00
if ( is_numeric ( $duration_value )) $sql .= " AND cd.date_fin_validite < ' " . $db -> idate ( dol_time_plus_duree ( $now , $duration_value , " d " )) . " ' " ;
2013-07-31 10:33:18 +00:00
$sql .= " AND sc.fk_soc = s.rowid AND sc.fk_user = u.rowid " ;
$sql .= " ORDER BY u.email ASC, s.rowid ASC, c.ref ASC " ; // Order by email to allow one message per email
2013-05-07 10:52:14 +00:00
//print $sql;
$resql = $db -> query ( $sql );
if ( $resql )
{
$num = $db -> num_rows ( $resql );
$i = 0 ;
$oldemail = 'none' ; $olduid = 0 ; $oldlang = '' ;
$total = 0 ; $foundtoprocess = 0 ;
print " We found " . $num . " couples (services to expire - sale representative) qualified \n " ;
dol_syslog ( " We found " . $num . " couples (services to expire - sale representative) qualified " );
$message = '' ;
if ( $num )
{
while ( $i < $num )
{
$obj = $db -> fetch_object ( $resql );
if (( $obj -> email <> $oldemail || $obj -> uid <> $olduid ) || $oldemail == 'none' )
{
// Break onto sales representative (new email or uid)
if ( dol_strlen ( $oldemail ) && $oldemail != 'none' )
{
envoi_mail ( $mode , $oldemail , $message , $total , $oldlang , $oldsalerepresentative , $duration_value );
}
else
{
if ( $oldemail != 'none' ) print " - No email sent for " . $oldsalerepresentative . " , total: " . $total . " \n " ;
}
$oldemail = $obj -> email ;
$olduid = $obj -> uid ;
$oldlang = $obj -> lang ;
$oldsalerepresentative = dolGetFirstLastname ( $obj -> firstname , $obj -> lastname );;
$message = '' ;
$total = 0 ;
$foundtoprocess = 0 ;
$salerepresentative = dolGetFirstLastname ( $obj -> firstname , $obj -> lastname );
if ( empty ( $obj -> email )) print " Warning: Sale representative " . $salerepresentative . " has no email. Notice disabled. \n " ;
}
2013-06-24 15:55:08 +00:00
// Define line content
$outputlangs = new Translate ( '' , $conf );
$outputlangs -> setDefaultLang ( empty ( $obj -> lang ) ? $langs -> defaultlang : $obj -> lang ); // By default language of sale representative
$outputlangs -> load ( " bills " );
$outputlangs -> load ( " main " );
2013-07-31 10:33:18 +00:00
$outputlangs -> load ( " contracts " );
$outputlangs -> load ( " products " );
2013-07-13 17:20:01 +00:00
2013-05-07 10:52:14 +00:00
if ( dol_strlen ( $obj -> email ))
{
2013-07-31 10:33:18 +00:00
$message .= $outputlangs -> trans ( " Contract " ) . " " . $obj -> ref . " : " . $langs -> trans ( " Service " ) . " " . dol_concatdesc ( $obj -> plabel , $obj -> description ) . " ( " . price ( $obj -> total_ttc , 0 , $outputlangs , 0 , 0 , - 1 , $conf -> currency ) . " ) " . $obj -> name . " , " . $outputlangs -> trans ( " DateEndPlannedShort " ) . " " . dol_print_date ( $db -> jdate ( $obj -> date_fin_validite ), 'day' ) . " \n \n " ;
2013-05-07 10:52:14 +00:00
dol_syslog ( " email_expire_services_to_representatives.php: " . $obj -> email );
$foundtoprocess ++ ;
}
2013-07-31 10:33:18 +00:00
print " Service to expire " . $obj -> ref . " , label " . dol_concatdesc ( $obj -> plabel , $obj -> description ) . " , due date " . dol_print_date ( $db -> jdate ( $obj -> date_fin_validite ), 'day' ) . " (linked to company " . $obj -> name . " , sale representative " . dolGetFirstLastname ( $obj -> firstname , $obj -> lastname ) . " , email " . $obj -> email . " ): " ;
2013-05-07 10:52:14 +00:00
if ( dol_strlen ( $obj -> email )) print " qualified. " ;
else print " disqualified (no email). " ;
print " \n " ;
2013-07-31 10:33:18 +00:00
unset ( $outputlangs );
$total += $obj -> total_ttc ;
2013-05-07 10:52:14 +00:00
$i ++ ;
}
// Si il reste des envois en buffer
if ( $foundtoprocess )
{
if ( dol_strlen ( $oldemail ) && $oldemail != 'none' ) // Break onto email (new email)
{
envoi_mail ( $mode , $oldemail , $message , $total , $oldlang , $oldsalerepresentative , $duration_value );
}
2013-06-05 14:12:07 +00:00
else
{
if ( $oldemail != 'none' ) print " - No email sent for " . $oldsalerepresentative . " , total: " . $total . " \n " ;
}
2013-05-07 10:52:14 +00:00
}
}
else
2013-06-09 12:40:33 +00:00
{
2013-05-07 10:52:14 +00:00
print " No services to expire (for companies linked to a particular commercial dolibarr user) found \n " ;
}
2013-06-09 12:40:33 +00:00
exit ( 0 );
2013-05-07 10:52:14 +00:00
}
else
{
dol_print_error ( $db );
dol_syslog ( " email_expire_services_to_representatives.php: Error " );
2013-06-09 12:40:33 +00:00
exit ( - 1 );
2013-05-07 10:52:14 +00:00
}
/**
* Send email
*
* @ param string $mode Mode ( test | confirm )
* @ param string $oldemail Old email
* @ param string $message Message to send
* @ param string $total Total amount of unpayed invoices
* @ param string $userlang Code lang to use for email output .
* @ param string $oldsalerepresentative Old sale representative
* @ param int $duration_value duration value
* @ return int < 0 if KO , > 0 if OK
*/
function envoi_mail ( $mode , $oldemail , $message , $total , $userlang , $oldsalerepresentative , $duration_value )
{
global $conf , $langs ;
2013-05-20 19:04:00 +00:00
if ( getenv ( 'DOL_FORCE_EMAIL_TO' )) $oldemail = getenv ( 'DOL_FORCE_EMAIL_TO' );
2013-05-07 10:52:14 +00:00
$newlangs = new Translate ( '' , $conf );
2013-05-20 19:04:00 +00:00
$newlangs -> setDefaultLang ( empty ( $userlang ) ? ( empty ( $conf -> global -> MAIN_LANG_DEFAULT ) ? 'auto' : $conf -> global -> MAIN_LANG_DEFAULT ) : $userlang );
2013-05-07 10:52:14 +00:00
$newlangs -> load ( " main " );
$newlangs -> load ( " contracts " );
if ( $duration_value )
2013-07-31 10:33:18 +00:00
{
if ( $duration_value > 0 ) $title = $newlangs -> transnoentities ( " ListOfServicesToExpireWithDuration " , $duration_value );
else $title = $newlangs -> transnoentities ( " ListOfServicesToExpireWithDurationNeg " , $duration_value );
}
2013-05-07 10:52:14 +00:00
else
$title = $newlangs -> transnoentities ( " ListOfServicesToExpire " );
2013-05-15 09:24:18 +00:00
2013-07-31 10:33:18 +00:00
$subject = ( empty ( $conf -> global -> SCRIPT_EMAIL_EXPIRE_SERVICES_SALESREPRESENTATIVES_SUBJECT ) ? $title : $conf -> global -> SCRIPT_EMAIL_EXPIRE_SERVICES_SALESREPRESENTATIVES_SUBJECT );
2013-05-07 10:52:14 +00:00
$sendto = $oldemail ;
$from = $conf -> global -> MAIN_MAIL_EMAIL_FROM ;
$errorsto = $conf -> global -> MAIN_MAIL_ERRORS_TO ;
2013-06-05 11:54:38 +00:00
$msgishtml = - 1 ;
2013-05-07 10:52:14 +00:00
print " - Send email for " . $oldsalerepresentative . " ( " . $oldemail . " ), total: " . $total . " \n " ;
dol_syslog ( " email_expire_services_to_representatives.php: send mail to " . $oldemail );
$usehtml = 0 ;
2013-05-07 11:18:16 +00:00
if ( dol_textishtml ( $conf -> global -> SCRIPT_EMAIL_EXPIRE_SERVICES_SALESREPRESENTATIVES_FOOTER )) $usehtml += 1 ;
if ( dol_textishtml ( $conf -> global -> SCRIPT_EMAIL_EXPIRE_SERVICES_SALESREPRESENTATIVES_HEADER )) $usehtml += 1 ;
2013-05-07 10:52:14 +00:00
$allmessage = '' ;
2013-05-07 11:18:16 +00:00
if ( ! empty ( $conf -> global -> SCRIPT_EMAIL_EXPIRE_SERVICES_SALESREPRESENTATIVES_HEADER ))
2013-05-07 10:52:14 +00:00
{
2013-05-07 11:18:16 +00:00
$allmessage .= $conf -> global -> SCRIPT_EMAIL_EXPIRE_SERVICES_SALESREPRESENTATIVES_HEADER ;
2013-05-07 10:52:14 +00:00
}
else
{
$allmessage .= $title . ( $usehtml ? " <br> \n " : " \n " ) . ( $usehtml ? " <br> \n " : " \n " );
2013-07-31 10:33:18 +00:00
$allmessage .= $newlangs -> transnoentities ( " NoteListOfYourExpiredServices " ) . ( $usehtml ? " <br> \n " : " \n " ) . ( $usehtml ? " <br> \n " : " \n " );
2013-05-07 10:52:14 +00:00
}
$allmessage .= $message . ( $usehtml ? " <br> \n " : " \n " );
2013-06-21 10:47:35 +00:00
$allmessage .= $langs -> trans ( " Total " ) . " = " . price ( $total , 0 , $userlang , 0 , 0 , - 1 , $conf -> currency ) . ( $usehtml ? " <br> \n " : " \n " );
2013-05-07 10:52:14 +00:00
if ( ! empty ( $conf -> global -> SCRIPT_EMAIL_EXPIRE_SERVICES_SALESREPRESENTATIVES_FOOTER ))
{
$allmessage .= $conf -> global -> SCRIPT_EMAIL_EXPIRE_SERVICES_SALESREPRESENTATIVES_FOOTER ;
if ( dol_textishtml ( $conf -> global -> SCRIPT_EMAIL_EXPIRE_SERVICES_SALESREPRESENTATIVES_FOOTER )) $usehtml += 1 ;
}
$mail = new CMailFile (
$subject ,
$sendto ,
$from ,
$allmessage ,
array (),
array (),
array (),
'' ,
'' ,
0 ,
$msgishtml
);
$mail -> errors_to = $errorsto ;
// Send or not email
if ( $mode == 'confirm' )
{
$result = $mail -> sendfile ();
2013-06-05 14:12:07 +00:00
if ( ! $result )
{
print " Error sending email " . $mail -> error . " \n " ;
dol_syslog ( " Error sending email " . $mail -> error . " \n " );
}
2013-05-07 10:52:14 +00:00
}
else
{
print " No email sent (test mode) \n " ;
dol_syslog ( " No email sent (test mode) " );
$mail -> dump_mail ();
$result = 1 ;
}
if ( $result )
{
return 1 ;
}
else
{
return - 1 ;
}
}
2013-06-05 14:04:00 +00:00
?>