Changeset 122466 in spip-zone


Ignore:
Timestamp:
Feb 13, 2020, 10:55:13 PM (6 months ago)
Author:
Charles Razack
Message:

Traitement du formulaire de commande : il peut très bien arriver que quelqu'un fasse tout le cheminement normal pour commander un abonnement, puis se ravise à la dernière étape et revienne au début pour choisir une nouvelle offre ou changer le montant. Dans ce cas là on n'a aucune assurance qu'il repasse ensuite dans un des formulaires pévu pour déclencher la génération de la commande, il peut très bien retourner directement à la fin. Donc quand on détecte qu'il y a déjà une commande d'abonnement en cours pour la personne connectée, on la met à jour avec l'offre sélectionnée au lieu de la mettre en session.

Location:
_plugins_/commandes_abonnements/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/commandes_abonnements/trunk

    • Property subgit:lock:b4eda7d121280895fba76c428ddba2058d11fce5 deleted
    • Property subgit:lock:f036e770f6e2f3513f9ccdc14219a010c8693df7 set to 2020-02-14T00:01:27.558
  • _plugins_/commandes_abonnements/trunk/formulaires/commander_abonnement.php

    r122464 r122466  
    7272        $id_abonnements_offre = _request('id_abonnements_offre');
    7373        $montant = _request('montant');
    74         $renouvellement_auto = sql_getfetsel('renouvellement_auto', 'spip_abonnements_offres', 'id_abonnements_offre = '.$id_abonnements_offre);
    75        
    76         // On va enregistrer en session les infos nécessaires à la commande
    77         // elle sera créée quand on aura un utilisateur sous la main et qu'on sera sûr d'avoir ses infos à jour
    78         $commande_abonnement = array(
    79                 'id_abonnements_offre' => $id_abonnements_offre,
    80                 'montant' => $montant,
    81                 'renouvellement_auto' => $renouvellement_auto,
    82         );
    83        
    84         session_set('commande_abonnement', $commande_abonnement);
     74        $offre = sql_fetsel('*', 'spip_abonnements_offres', 'id_abonnements_offre ='.$id_abonnements_offre);
     75        $renouvellement_auto = $offre['renouvellement_auto'];
     76
     77        // 1) Soit il y a déjà une commande d'abonnement en cours,
     78        // on la met à jour avec l'offre sélectionnée
     79        if ($detail = sql_fetsel(
     80                'd.*',
     81                'spip_commandes_details AS d INNER JOIN spip_commandes AS c ON c.id_commande=d.id_commande',
     82                array(
     83                        'd.objet=' . sql_quote('abonnements_offre'),
     84                        'c.statut=' . sql_quote('encours'),
     85                        'c.id_auteur=' . intval(session_get('id_auteur')),
     86                )
     87        )) {
     88                $montant_ht = $montant;
     89                $echeances = array();
     90                $periodicite = '';
     91
     92                // Si on trouve une taxe, on regénère un montant HT
     93                // (car comme le montant peut être personnalisé, ce qu'on a c'est toujours le TTC)
     94                if ($taxe = floatval($offre['taxe'])) {
     95                        $montant_ht = round($montant * (1 / (1 + $taxe)), 2);
     96                }
     97
     98                // Échéances avec les deux seuls cas qu'on sait gérer pour l'instant
     99                if ($renouvellement_auto) {
     100                        if ($offre['periode'] == 'mois' and $offre['duree'] == 1) {
     101                                $periodicite = 'mois';
     102                        } elseif ($offre['periode'] == 'mois' and $offre['duree'] == 12) {
     103                                $periodicite = 'annee';
     104                        }
     105                        $echeances = array(
     106                                array('montant_ht' => $montant_ht, 'montant' => $montant),
     107                        );
     108                }
     109
     110                $set_detail = array(
     111                        'descriptif'       => $offre['titre'],
     112                        'id_objet'         => $id_abonnements_offre,
     113                        'prix_unitaire_ht' => $montant_ht,
     114                        'taxe'             => $taxe,
     115                );
     116                $set_commande = array(
     117                        'echeances_type' => $periodicite,
     118                        'echeances'      => $echeances,
     119                );
     120                sql_updateq('spip_commandes', $set_commande, 'id_commande='.intval($detail['id_commande']));
     121                sql_updateq('spip_commandes_details', $set_detail, 'id_commandes_detail='.intval($detail['id_commandes_detail']));
     122
     123                // Puis juste au cas-où, on supprime la session éventuelle
     124                session_set('commande_abonnement', null);
     125
     126        // 2) Soit pas de commande, et on enregistre en session les infos nécessaires,
     127        // elle sera créée quand on aura un utilisateur sous la main
     128        // et qu'on sera sûr d'avoir ses infos à jour
     129        } else {
     130                $commande_abonnement = array(
     131                        'id_abonnements_offre' => $id_abonnements_offre,
     132                        'montant' => $montant,
     133                        'renouvellement_auto' => $renouvellement_auto,
     134                );
     135                session_set('commande_abonnement', $commande_abonnement);
     136        }
    85137       
    86138        return $retours;
  • _plugins_/commandes_abonnements/trunk/paquet.xml

    r122464 r122466  
    22        prefix="commandes_abonnements"
    33        categorie="divers"
    4         version="1.2.3"
     4        version="1.2.4"
    55        schema="1.0.0"
    66        etat="dev"
Note: See TracChangeset for help on using the changeset viewer.