On utilise la nouvelle date d'échéance.
1) Lorsqu'on initialise les dates, c'est ça qu'on teste. Par défaut la date de fin est la date d'échéance. Mais s'il y a Commandes et Bank, on regarde si l'abonnement a été activé par une transaction : - si c'est SEPA, on annule la date de fin, par défaut ça sera infini - si c'est carte bleue, on met comme date de fin celle de la carte bleue puisqu'on l'a 1bis) Au passage on déplace les tâches d'initialisation dans une fonction à part pour y voir plus clair. 2) Quand un abonnement est modifié et qu'on check les dates, on active entre date_debut et date_echeance maintenant. 3) Mais on désactive toujours seulement après date_fin, pas date_echeance. Ce qui permet de laisser une marge si jamais l'échéance est passée mais sans désactiver. Car ça se trouve c'est justement un paiement un peu en retard. 4) Quand on renouvelle un abonnement, on renouvelle à partir de la date d'échéance, et non plus de la date de fin. Et on repousse la date de fin si elle se retrouve avant la nouvelle échéance décalée. 5) Une nouvelle tâche génie est programmée toutes les heures pour vérifier les échéances. Si on a trop dépassé (48h par défaut qui sera configurable) alors on change la date de fin pour maintenant, ce qui va désactiver l'abonnement. Ce n'est PAS FINI. Il manque : - rendre configurable les deux délais qui sont en lire_config() - afficher la nouvelle date d'échéance dans l'admin et la rendre éditable dans le form d'édition d'un abonnement - possiblement changer la désactivation par Jobs en utilisant un génie (perf issue d'après cerdic) - sûrement plein de bugs à corriger, j'espère pas trop…svn/attic/branches/v3.0.12/98521
parent
99787eecdb
commit
687e9f2644
@ -0,0 +1,39 @@
|
||||
<?php
|
||||
|
||||
// Sécurité
|
||||
if (!defined('_ECRIRE_INC_VERSION')) return;
|
||||
|
||||
/**
|
||||
* Vérifier si des échéances sont dépassées
|
||||
**/
|
||||
function genie_abonnements_verifier_echeances_dist($time){
|
||||
include_spip('base/abstract_sql');
|
||||
lire_spip('inc/config');
|
||||
$jourdhui = date('Y-m-d H:I:s');
|
||||
$heures_max_retard = lire_config('abonnements/echeance_heures_limite', 48); // 48h par défaut
|
||||
$date_max_retard = date('Y-m-d H:i:s', strtotime('-'.$heures_max_retard.'hours'));
|
||||
|
||||
// On va chercher tous les abonnements sans fin ou avec fin future,
|
||||
// dont la dernière échéance est TROP dépassée (48h par défaut, configurable)
|
||||
if (
|
||||
$abonnements_retard = sql_allfetsel(
|
||||
'id_abonnement, date_fin',
|
||||
'spip_abonnements',
|
||||
array(
|
||||
"date_fin = '0000-00-00 00:00:00' or date_fin > $jourdhui",
|
||||
"date_echeance < $date_max_retard",
|
||||
)
|
||||
)
|
||||
and is_array($abonnements_retard)
|
||||
) {
|
||||
include_spip('action/editer_objet');
|
||||
|
||||
// Pour chaque abonnement trop dépassé, on met la date de fin à maintenant
|
||||
// ce qui va normalement provoquer la désactivation immédiate
|
||||
foreach ($abonnements_retard as $abonnement) {
|
||||
objet_modifier('abonnement', $abonnement['id_abonnement'], array('date_fin' => $jourdhui));
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
Loading…
Reference in New Issue