Changeset 96445 in spip-zone


Ignore:
Timestamp:
Apr 4, 2016, 10:51:50 AM (4 years ago)
Author:
cedric@…
Message:

Quand on rappelle la fonction pour un panier qui correspond a la commande deja en cours de l'auteur, eviter de recreer une nouvelle commande.
A la place on recupere la commande existante et on met a jour les details. Cela permet de conserver les infos de commande en cours quand l'utilisateur revient en arriere dans le processus de commande puis retourne a la commande

Location:
_plugins_/commandes_paniers/trunk
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/commandes_paniers/trunk/action/commandes_paniers.php

    r90631 r96445  
    5656                return;
    5757
     58        $id_auteur = sql_getfetsel("id_auteur","spip_paniers","id_panier=".intval($id_panier));
     59
     60
    5861        include_spip('inc/commandes');
     62        include_spip('inc/config');
     63        // si une commande recente est encours (statut et dans la session de l'utilisateur), on la reutilise
     64        // plutot que de recreer N commandes pour un meme panier
     65        // (cas de l'utilisateur qui revient en arriere puis retourne a la commande)
     66        include_spip('inc/session');
     67        $id_commande = sql_getfetsel("id_commande","spip_commandes",$w="statut=".sql_quote('encours')." AND date>".sql_quote(date('Y-m-d H:i:s',strtotime('-'.lire_config('paniers/limite_ephemere', 24).' hour')))." AND source=".sql_quote("panier#$id_panier")." AND id_commande=".session_get('id_commande'));
    5968
    60         // création d'une commande "en cours"
    61         // et remplir les details de la commande d'après le panier en session
    62         if ($id_commande = creer_commande_encours()){
    63                 panier2commande_remplir_commande($id_commande,$id_panier);
     69        // sinon on cree une commande "en cours"
     70        if (!$id_commande){
     71                $id_commande = creer_commande_encours();
    6472        }
    6573
     74        // et la remplir les details de la commande d'après le panier en session
     75        if ($id_commande){
     76                panier2commande_remplir_commande($id_commande,$id_panier,false);
     77        }
    6678
    6779        // Supprimer le panier ?
     
    8496 * @param  int $id_commande
    8597 * @param  int $id_panier
     98 * @param  bool $append
     99 *   true pour ajouter brutalement le panier a la commande, false pour verifier que commande==panier en ajoutant/supprimant uniquement les details necessaires
    86100 */
    87 function panier2commande_remplir_commande($id_commande,$id_panier){
     101function panier2commande_remplir_commande($id_commande,$id_panier,$append=true){
    88102
    89103        include_spip('action/editer_objet');
     
    103117
    104118        // Pour chaque élément du panier, on va remplir la commande
     119        // (ou verifier que la ligne est deja dans la commande)
    105120        if ($panier and is_array($panier)){
     121                $details = array();
    106122                include_spip('spip_bonux_fonctions');
    107123                $fonction_prix = charger_fonction('prix', 'inc/');
     
    114130                        else
    115131                                $taxe = 0;
    116                         // création du détail de la commande
    117                         if ($id_commandes_detail = objet_inserer('commandes_detail')) {
    118                                 $set = array(
    119                                         'id_commande' => $id_commande,
    120                                         'objet' => $emplette['objet'],
    121                                         'id_objet' => $emplette['id_objet'],
    122                                         'descriptif' => generer_info_entite($emplette['id_objet'], $emplette['objet'], 'titre', '*'),
    123                                         'quantite' => $emplette['quantite'],
    124                                         'prix_unitaire_ht' => $prix_ht,
    125                                         'taxe' => $taxe,
    126                                         'statut' => 'attente'
    127                                 );
     132
     133                        $set = array(
     134                                'id_commande' => $id_commande,
     135                                'objet' => $emplette['objet'],
     136                                'id_objet' => $emplette['id_objet'],
     137                                'descriptif' => generer_info_entite($emplette['id_objet'], $emplette['objet'], 'titre', '*'),
     138                                'quantite' => $emplette['quantite'],
     139                                'prix_unitaire_ht' => $prix_ht,
     140                                'taxe' => $taxe,
     141                                'statut' => 'attente'
     142                        );
     143                        $where = array();
     144                        foreach($set as $k=>$w){
     145                                if (in_array($k,array('id_commande','objet','id_objet'))){
     146                                        $where[] = "$k=".sql_quote($w);
     147                                }
     148                        }
     149                        // est-ce que cette ligne est deja la ?
     150                        if ($append OR !$id_commandes_detail = sql_getfetsel("id_commandes_detail","spip_commandes_details",$where)){
     151                                // sinon création et renseignement du détail de la commande
     152                                $id_commandes_detail = objet_inserer('commandes_detail');
     153                        }
     154                        if ($id_commandes_detail) {
    128155                                objet_modifier('commandes_detail', $id_commandes_detail, $set);
     156                                $details[] = $id_commandes_detail;
    129157                        }
     158                }
     159                if (!$append){
     160                        // supprimer les details qui n'ont rien a voir avec ce panier
     161                        sql_delete("spip_commandes_details","id_commande=".intval($id_commande)." AND ".sql_in('id_commandes_detail',$details,"NOT"));
    130162                }
    131163        }
  • _plugins_/commandes_paniers/trunk/panier2commande_options.php

    r96346 r96445  
    55 * @plugin     Commandes de Paniers
    66 * @copyright  2014
    7  * @author     Les Développements Durables
     7 * @author     Les Dveloppements Durables
    88 * @licence    GNU/GPL
    99 * @package    SPIP\Panier2commande\options
    1010 */
    1111
    12 // Sécurité
     12// Securite
    1313if (!defined("_ECRIRE_INC_VERSION")) return;
    1414
     
    2424        $commandes_paniers($arg);
    2525        include_spip('inc/cookie');
    26         spip_setcookie("spip_pwl",'',0);
     26        spip_setcookie("spip_pwl",$_COOKIE['spip_pwl'] = '',0);
    2727}
    2828
     
    3232 */
    3333function action_commandes_paniers_if_loged_dist($arg=null){
    34         // Si $arg n'est pas donné directement, le récupérer via _POST ou _GET
     34
     35        // Si $arg n'est pas donne directement, le recuperer via _POST ou _GET
    3536        if (is_null($arg)) {
    3637                $securiser_action = charger_fonction('securiser_action', 'inc');
  • _plugins_/commandes_paniers/trunk/paquet.xml

    r96346 r96445  
    22        prefix="panier2commande"
    33        categorie="divers"
    4         version="2.0.1"
     4        version="2.0.2"
    55        etat="test"
    66        compatibilite="[3.0.0;3.1.*]"
Note: See TracChangeset for help on using the changeset viewer.