Changeset 90429 in spip-zone


Ignore:
Timestamp:
Jun 22, 2015, 1:02:15 PM (4 years ago)
Author:
rastapopoulos@…
Message:

Les dérogations pour des dates de fin différentes ne doivent se faire que s'il s'agit de renouvellements automatiques : pas juste car CB ou SEPA. En effet, on peut payer CB ou SEPA aussi pour des paiements uniques, sans renouvellement. Donc il faut tester s'il y a abo_uid. Au passage, on déplace toute la partie Commande/Bank? dans une fonction dédiée à part, comme ça on peut la réutiliser pour d'autres choses, et notamment le renouvellement ! En effet, pour l'instant ces dates de fin dérogatoires ne sont changées que pour l'initialisation, lorsqu'on crée un nouvel abonnement. Sauf que si on renouvèle un abonnement existant avec renouvellement auto, il faudrait aussi changer cette fin (ou bien on peut choisir de faire un nouvel abonnement obligatoirement peut-être).

Location:
_plugins_/abonnements/trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/abonnements/trunk/inc/abonnements.php

    r90423 r90429  
    4343        $modifs['date_fin'] = $modifs['date_echeance'];
    4444       
    45         // Mais s'il y a le plugin Commandes et Bank et qu'on trouve commande et transaction
    46         if (
    47                 _DIR_PLUGIN_COMMANDES
    48                 and _DIR_PLUGIN_BANK
    49                 and include_spip('action/editer_liens')
    50                 and $lien_commande = objet_trouver_liens(array('commande' => '*'), array('abonnement' => $abonnement['id_abonnement']))
    51                 and is_array($lien_commande)
    52                 // On prend juste la première commande qu'on trouve
    53                 and $id_commande = intval($lien_commande[0]['id_commande'])
    54                 // On cherche le dernier paiement bien payé pour cette commande
    55                 and $transaction = sql_fetsel(
    56                         '*', 'spip_transactions', array('id_commande = '.$id_commande, 'statut = "ok"')
    57                 )
    58         ) {
    59                 // On a trouvé la transaction qui a activé la commande qui a activé l'abonnement
    60                 // Si on détecte un prélèvement SEPA, on annule la date de fin !
    61                 if ($refcb = $transaction['refcb'] and strpos($refcb, 'SEPA') === 0) {
    62                         $modifs['date_fin'] = '0000-00-00 00:00:00';
    63                 }
    64                 // Si ya une fin de validité de carte bleue on en déduit une fin d'abonnement !
    65                 elseif ($validite = $transaction['validite']) {
    66                         include_spip('inc/bank');
    67                         list($year, $month) = explode('-', $validite);
    68                         $modifs['date_fin'] = bank_date_fin_mois($year, $month);
    69                 }
     45        // Mais si c'est un renouvellement auto avec Commandes et Bank
     46        if ($date_fin = abonnements_bank_date_fin($abonnement['id_abonnnement'])) {
     47                $modifs['date_fin'] = $date_fin;
    7048        }
    7149       
     
    8159}
    8260
     61/**
     62 * Trouver la date de fin d'un renouvellement automatique éventuel
     63 *
     64 * @param int $id_abonnement
     65 *              Identifiant de l'abonnement dont on veut trouver la date de fin
     66 * @param int $id_commande
     67 *              Possibilité de donner la commande pour éviter une requête SQL
     68 * @return bool|datetime
     69 *              Retourne la date de fin du renouvellement si on trouve, sinon false pour ne rien faire
     70 **/
     71function abonnements_bank_date_fin($id_abonnement, $id_commande=0){
     72        $date_fin = false;
     73       
     74        // On teste si on trouve un renouvellement auto
     75        if (
     76                _DIR_PLUGIN_COMMANDES
     77                and _DIR_PLUGIN_BANK
     78                and (
     79                        // Soit on a déjà une commande sous la main
     80                        (
     81                                $id_commande = intval($id_commande)
     82                                and $id_commande > 0
     83                        )
     84                        // Soit on va chercher une commande liée à l'abonnement
     85                        or
     86                        (
     87                                include_spip('action/editer_liens')
     88                                and $lien_commande = objet_trouver_liens(array('commande' => '*'), array('abonnement' => $id_abonnement))
     89                                and is_array($lien_commande)
     90                                // On prend juste la première commande qu'on trouve
     91                                and $id_commande = intval($lien_commande[0]['id_commande'])
     92                        )
     93                )
     94                // On cherche un paiement bien payé pour cette commande
     95                and $transaction = sql_fetsel(
     96                        '*', 'spip_transactions', array('id_commande = '.$id_commande, 'statut = "ok"')
     97                )
     98                // Et que c'est un renouvellement auto !
     99                and $transaction['abo_uid']
     100        ) {
     101                // On a trouvé la transaction qui a activé la commande qui a activé l'abonnement
     102                // Si on détecte un prélèvement SEPA, on annule la date de fin !
     103                if ($refcb = $transaction['refcb'] and strpos($refcb, 'SEPA') === 0) {
     104                        $date_fin = '0000-00-00 00:00:00';
     105                }
     106                // Si ya une fin de validité de carte bleue on en déduit une fin d'abonnement !
     107                elseif ($validite = $transaction['validite']) {
     108                        include_spip('inc/bank');
     109                        list($year, $month) = explode('-', $validite);
     110                        $date_fin = bank_date_fin_mois($year, $month);
     111                }
     112        }
     113       
     114        return $date_fin;
     115}
    83116
    84117/*
  • _plugins_/abonnements/trunk/paquet.xml

    r90424 r90429  
    22        prefix="abonnements"
    33        categorie="auteur"
    4         version="3.0.3"
     4        version="3.0.4"
    55        schema="2.2.0"
    66        etat="dev"
Note: See TracChangeset for help on using the changeset viewer.