224 lines
7.6 KiB
PHP
224 lines
7.6 KiB
PHP
<?php
|
||
|
||
use Carbon\Carbon;
|
||
/* use models\CRED_credit; */
|
||
|
||
if (!defined('_CREDEXEC_')) die();
|
||
|
||
if(!class_exists('CRED_credit')) {
|
||
require_once _CRED_ABSPATH_ . 'app/models/credit.php';
|
||
}
|
||
/* require_once _CRED_ABSPATH_ . 'app/models/credit.php'; */
|
||
|
||
class CRED_Credit_Reminder extends CRED_base {
|
||
private static $instance = null;
|
||
|
||
public static function instance() {
|
||
if (!self::$instance) {
|
||
self::$instance = new self();
|
||
}
|
||
return self::$instance;
|
||
}
|
||
|
||
public function __construct() {
|
||
|
||
// Ajouter le rappel dans le footer
|
||
|
||
|
||
add_action('wp_footer', array($this, 'display_credit_reminder_btn'));
|
||
add_action('get_footer', array($this, 'display_credit_reminder_modal'));
|
||
|
||
|
||
// Ajouter des styles CSS personnalisés
|
||
/* add_action('wp_head', array($this, 'add_custom_styles')); */
|
||
}
|
||
|
||
public function add_custom_styles() {
|
||
?>
|
||
<style>
|
||
|
||
@media (max-width: 768px) {
|
||
.credit-reminder {
|
||
position: relative;
|
||
}
|
||
.credit-reminder > div {
|
||
flex-direction: column;
|
||
text-align: center;
|
||
}
|
||
.credit-reminder .button {
|
||
margin-top: 10px;
|
||
}
|
||
}
|
||
</style>
|
||
<?php
|
||
}
|
||
|
||
public function display_credit_reminder() {
|
||
// Ne pas afficher sur les pages de demande de crédit
|
||
if (is_page('credit-step1') || is_page('credit-step2') ||
|
||
is_page('credit-step3') || is_page('credit-step4') ||
|
||
is_page('credit-step5')) {
|
||
return false;
|
||
}
|
||
|
||
$model = new \models\CRED_credit();
|
||
$credit_request = $model->checkOngoingCreditRequest();
|
||
|
||
/* echo '<pre>';
|
||
print_r($credit_request);
|
||
echo '</pre>'; */
|
||
|
||
if ($credit_request) {
|
||
$last_update = \Carbon\Carbon::parse($credit_request['last_update_date']);
|
||
$now = \Carbon\Carbon::now();
|
||
$interval = $now->diffInDays($last_update);
|
||
|
||
if ($interval <= 60) { // 2 mois maximum
|
||
/* include(_CRED_MODULES_PATH_ . 'credit-reminder-btn.php'); */
|
||
return true;
|
||
} else {
|
||
setcookie('credit_data', '', time() - 3600, '/');
|
||
return false;
|
||
}
|
||
}
|
||
}
|
||
|
||
public function display_credit_reminder_modal() {
|
||
if($this->display_credit_reminder()) {
|
||
include(_CRED_MODULES_PATH_ . 'credit-reminder-modal.php');
|
||
}
|
||
}
|
||
|
||
public function display_credit_reminder_btn() {
|
||
if($this->display_credit_reminder()) {
|
||
include(_CRED_MODULES_PATH_ . 'credit-reminder-btn.php');
|
||
}
|
||
}
|
||
|
||
/**
|
||
* Envoie des rappels par email pour les crédits en attente.
|
||
* Cette méthode doit être appelée dans un contexte WordPress où la fonction wp_mail est disponible.
|
||
*/
|
||
public function send_reminder_email() {
|
||
global $wpdb;
|
||
|
||
$now = Carbon::now();
|
||
|
||
$model = new \models\CRED_credit();
|
||
$credit_types = $model->getCreditTypes();
|
||
|
||
$one_day = 1; // Carbon gère la différence en jours directement
|
||
$results = $wpdb->get_results("
|
||
SELECT c.idCredit, c.type_credit, c.create_date, c.last_step, c.reminder_sent, c.last_reminder, c.token, e.email, e.nom, e.prenom
|
||
FROM cdf_Credit c
|
||
JOIN cdf_Emprunteur e ON e.FK_demande_creditdirect = c.idCredit
|
||
WHERE e.email IS NOT NULL AND e.email <> ''
|
||
AND c.create_date >= DATE_SUB(NOW(), INTERVAL 3 MONTH)
|
||
AND (
|
||
(c.type_credit = 'am' AND c.last_step = 1)
|
||
OR
|
||
(c.type_credit <> 'am' AND c.last_step < 4)
|
||
)
|
||
AND c.type_credit NOT IN ('am','amr','cied','frais_notaire','cdp')
|
||
");
|
||
|
||
/* echo '<pre>';
|
||
print_r($results);
|
||
echo '</pre>';
|
||
die(); */
|
||
|
||
// getMain() est défini dans CRED_base et retourne l'instance de CRED_Main
|
||
$main = $this->getMain();
|
||
$template_path = $main::template('credit-reminder-mail.php', 'email', true);
|
||
$mail_ar = [];
|
||
|
||
|
||
foreach ($results as $row) {
|
||
/* echo '<pre>';
|
||
print_r($row);
|
||
echo '</pre>'; */
|
||
$send = false;
|
||
$reminder_to_send = null;
|
||
$create_date = Carbon::parse($row->create_date);
|
||
$last_reminder = $row->last_reminder ? Carbon::parse($row->last_reminder) : null;
|
||
|
||
// Premier rappel : +3 heures
|
||
$target1 = $create_date->copy()->addHours(3);
|
||
|
||
$limit_target1 = $create_date->copy()->addDays(1);
|
||
// Deuxième rappel : +7 jours
|
||
$target2 = $create_date->copy()->addDays(7);
|
||
$limit_target2 = $create_date->copy()->addDays(8);
|
||
// Troisième rappel : +1 mois
|
||
$target3 = $create_date->copy()->addMonth();
|
||
|
||
if ((is_null($row->reminder_sent) || $row->reminder_sent == 0)) {
|
||
|
||
// Tolérance : 1h
|
||
if ($now->greaterThanOrEqualTo($target1) && $now->lessThan($limit_target1) && ($last_reminder === null || $last_reminder->diffInHours($now) >= 1)) {
|
||
$send = true;
|
||
$reminder_to_send = 1;
|
||
}
|
||
} elseif ($row->reminder_sent == 1) {
|
||
// Tolérance : 1 jour
|
||
if ($now->greaterThanOrEqualTo($target2) && $now->lessThan($limit_target2) && ($last_reminder === null || $last_reminder->diffInDays($now) >= 1)) {
|
||
$send = true;
|
||
$reminder_to_send = 2;
|
||
}
|
||
} elseif ($row->reminder_sent == 2) {
|
||
// Tolérance : 1 jour
|
||
if ($now->greaterThanOrEqualTo($target3) && ($last_reminder === null || $last_reminder->diffInDays($now) >= 1)) {
|
||
$send = true;
|
||
$reminder_to_send = 3;
|
||
}
|
||
}
|
||
|
||
if ($send) {
|
||
// Préparer l'email HTML via le template
|
||
|
||
if(empty($row->email))
|
||
continue;
|
||
|
||
if(in_array($row->email, $mail_ar))
|
||
continue;
|
||
|
||
$mail_ar[] = $row->email;
|
||
|
||
$vars = array(
|
||
'main' => $main,
|
||
'prenom' => $row->prenom,
|
||
'nom' => $row->nom,
|
||
'type_credit' => $credit_types[$row->type_credit],
|
||
'reminder_num' => $reminder_to_send,
|
||
'step' => $row->last_step,
|
||
'token' => $row->token
|
||
);
|
||
$message = $main->renderTemplate($template_path, $vars);
|
||
|
||
/* echo 'message : ' . $message;
|
||
die(); */
|
||
|
||
$to = $row->email;
|
||
$subject = 'Rappel concernant votre demande de crédit';
|
||
$headers = array('Content-Type: text/html; charset=UTF-8');
|
||
|
||
// Envoyer l'email
|
||
/* $to = 'jps@esi-informatique.com'; */
|
||
wp_mail($to, $subject, $message, $headers);
|
||
|
||
// Mettre à jour la base
|
||
$wpdb->update(
|
||
'cdf_Credit',
|
||
array(
|
||
'reminder_sent' => $reminder_to_send,
|
||
'last_reminder' => $now->toDateTimeString()
|
||
),
|
||
array('idCredit' => $row->idCredit)
|
||
);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
// Initialiser le rappel
|
||
CRED_Credit_Reminder::instance();
|