credit-direct/app/libraries/credit-reminder.php
2025-12-18 09:44:42 +01:00

224 lines
7.6 KiB
PHP
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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();