osCommerce France : Accueil Forum Portail osCommerce France Réponses aux questions Foire aux contributions

Bienvenue invité ( Connexion | Inscription )

2 Pages V   1 2 >  
Reply to this topicStart new topic
> Supprimer un article d'un panier enregistré, au moment du login [Nouvelle Contribution]
gotcha5832
posté 2 Nov 2008, 11:30
Message #1


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 343
Inscrit : 27-February 08
Lieu : lune
Membre no 20966



Bonjour à tous,

Voilà, j'aimerais supprimer les articles du panier, lorsque la quantité est à zéro.
Aucun problème sur les panier immédiat, car mes produits à quantité nul ne s'affiche pas donc ne peut pas être ajouter au panier.
Mais le problème c'est pour les panier enregistrer. (je suis enregistrer, je fais mon panier, je me deconnecte et je reviens après.)

Comment puis je alors supprimer c'est produits?

une idée de votre coté?

Merci à vous


--------------------
Osc-2.2-ms2-FR
Os : Linux 2.6.24.7-desktop-2mnb
Version PHP : 5.2.5 (Zend : 2.2.0)
Base de données : MySQL 5.0.51a
Serveur HTTP : Apache/2.2.8 (Mandriva Linux/PREFORK-6.1mdv2008.1)
Go to the top of the page
 
shoprun
posté 2 Nov 2008, 12:18
Message #2


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Salut

Normalement c'est pas possible, car osC prévois le cas, le code se trouve dans la classe shopping_cart, c'est la méthode cleanup() qui se charge de nettoyer, de supprimer les produits dont la quantité est < à 1 (donc 0).

Si tu vois les produits présents dans la BDD alors qu'entre temps la quantité est passée à 0, c'est possible, mais lorsque le client va revenir, donc récupérer le panier, ces produits à 0 seront supprimés grâce à ce cleanup().

Le code en question : (ligne ~173)
Code
    function cleanup() {
      global $customer_id;

      reset($this->contents);
      while (list($key,) = each($this->contents)) {
        if ($this->contents[$key]['qty'] < 1) {
          unset($this->contents[$key]);
// remove from database
          if (tep_session_is_registered('customer_id')) {
            tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'");
            tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'");
          }
        }
      }
    }


Un p'tit problème de code peut être ?


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
oneill
posté 2 Nov 2008, 19:00
Message #3


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 7619
Inscrit : 28-December 03
Lieu : Hollywood les Granits
Membre no 1773



Citation (shoprun @ 2 Nov 2008, 13:18) *
Normalement c'est pas possible, car osC prévois le cas, le code se trouve dans la classe shopping_cart, c'est la méthode cleanup() qui se charge de nettoyer, de supprimer les produits dont la quantité est < à 1 (donc 0).

Si tu vois les produits présents dans la BDD alors qu'entre temps la quantité est passée à 0, c'est possible, mais lorsque le client va revenir, donc récupérer le panier, ces produits à 0 seront supprimés grâce à ce cleanup().

Un p'tit problème de code peut être ?


Il s'agit de la quantité dans le panier pas de celle en stock. Entre nous, je ne vois pas comment on pourrait avoir une quantité inférieure à 1 dans le panier alors que le produit s'y trouve.

Remarque on peut modifier cette fonction qui me semble inutile pour faire une chose plus utile : Enlever les produits plus en stock du panier au moment du login comme le souhaite gotcha5832


--------------------
Go to the top of the page
 
shoprun
posté 2 Nov 2008, 19:49
Message #4


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation (oneill @ 2 Nov 2008, 22:00) *
Il s'agit de la quantité dans le panier pas de celle en stock.
C'est vrai ça mrgreen.gif biggrin.gif
C'est qu'j'en raconte des craks dites moi. Bah, c'est Dimanche, y a prescription, non laugh.gif

Ben vu en tout cas Oneil wink.gif

Alors 3 petites requêtes dans le cleanup() pourrait arranger le truc, du genre :
(Je laisse volontairement la suppession effectuée si la quantité du panier est à 0.
A chacun de juger si les requêtes sont utiles ou non)
Code
    function cleanup() {
      global $customer_id;

      reset($this->contents);
      while (list($key,) = each($this->contents)) {
        if ($this->contents[$key]['qty'] < 1) {
          unset($this->contents[$key]);
// remove from database
          if (tep_session_is_registered('customer_id')) {
            tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'");
            tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'");
          }
        }
            $query_prod = tep_db_query("SELECT COUNT(products_id) AS total FROM ".TABLE_PRODUCTS."
                WHERE products_id = '".$db->real_escape_string($key)."'
                AND products_quantity < '1' OR products_status < '1'");
            //
            $total = tep_db_fetch_array($query_prod);
            if ((int)$total['total'] >= 1) {
            // Supprime le produit dans la session
            unset($this->contents[$key]);
            // Elimine les produits dont la quantité est < 0
            // ET les produits dont le statut est à 0 (optionnel -> à supprimer si pas utile)
            if (tep_session_is_registered('customer_id')) {
                tep_db_query("DELETE FROM ".TABLE_CUSTOMERS_BASKET."
                    WHERE customers_id = '".(int)$customer_id."'
                    AND products_quantity = '".$db->real_escape_string($key)."'");
                //
                tep_db_query("DELETE FROM ".TABLE_CUSTOMERS_BASKET_ATTRIBUTES."
                    WHERE customers_id = '".(int)$customer_id."'
                    AND products_quantity = '".$db->real_escape_string($key)."'");
            }
        }
      }
    }


La dessus, c'est la solution de facilité, il y a moyen de faire ça bien avant, dans la méthode -> restore_content().
Mais bon, ça reste néanmoins une solution.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
oneill
posté 2 Nov 2008, 20:08
Message #5


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 7619
Inscrit : 28-December 03
Lieu : Hollywood les Granits
Membre no 1773



En fait il ne faut pas utiliser la même fonction. Elle sert à deux choses : La restauration du panier enregistré et l'ajout au panier des produits par la fonction add_cart()
Du coup les produits à zéro ne vont plus du tout dans le panier... C'est balot

Il faut créer une autre fonction dans classes/shopping_cart.php

Code
    function cleanup_no_stock() {
      global $customer_id;

      reset($this->contents);
      while (list($key,) = each($this->contents)) {
       if (tep_get_products_stock(tep_db_input($key)) < 1) {
          unset($this->contents[$key]);
// remove from database
          if (tep_session_is_registered('customer_id')) {
            tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'");
            tep_db_query("delete from " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . " where customers_id = '" . (int)$customer_id . "' and products_id = '" . tep_db_input($key) . "'");
          }
        }
      }
    }


Et ne l'appeler que dans restore_contents() comme ceci

Code
      $this->cleanup_no_stock();
      $this->cleanup();
à la fin de la fonction.


Quand le client se logue, les produits hors stock sont sortis du panier. Le mieux serait d'avoir un déclenchement de l'admin.
On peut ajouter le statut des produits comme tu as fait. Faudrait fignoler et faire un truc propre


--------------------
Go to the top of the page
 
shoprun
posté 2 Nov 2008, 20:25
Message #6


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation
La dessus, c'est la solution de facilité, il y a moyen de faire ça bien avant, dans la méthode -> restore_content().
Mais bon, ça reste néanmoins une solution.
C'est ce que je disais, mais tu m'a devancé happy.gif

Du coup, pourquoi ne pas le mettre directement dans le restore_content() ?
Le code est exécuter qu'une seule fois, non ? Du coup c'est pas vraiment utile de créer une méthode, non ?

M'enfin, ça mange pas d'pain d'en faire une spécifique, j'en conçois wink.gif

Mais quand est il pour ceux qui vendent hors stock ?
Faudrait peut être mettre une condition non ?
Je me rappel plus des noms des constantes, mais j'vais cherché ça demain, un peu tard pour ce soir tongue.gif
A moins que la fonction tep_get_products_stock() gère la situation ? Je sais plus mrgreen.gif

[edit]
Je vient de regarder sur une MS2 de base, la fonction ne gère pas le cas de la vente hors stock.

Bon, je regarderais ça de plus près demain ou autre, un peu tard ici ... happy.gif
[/edit]


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
oneill
posté 2 Nov 2008, 20:37
Message #7


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 7619
Inscrit : 28-December 03
Lieu : Hollywood les Granits
Membre no 1773



Oui tu as raison. On ne pourrait que modifier le restore_content(). Des conditions liées à la vente hors stock ou pas. Je n'ai pas regardé mais les produits à statut 0 ne sont ils pas supprimés du panier d'origine ? Je ne pense pas, je ne sais plus non plus.
Il y a moyen de faire un truc utile en tous les cas.

Bonne soirée.


Edit
Je pense que la fonction est pratique car on peut aussi l'utiliser dans add_cart() si on y met des conditions, ca peut être utile aussi.


--------------------
Go to the top of the page
 
shoprun
posté 2 Nov 2008, 20:41
Message #8


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation
Il y a moyen de faire un truc utile en tous les cas.

Bonne soirée.

Tout à fait, de plus j'ai jamais rien fait dans ce sens, jamais géré la situation.

Allez, je remets à plus tard.

Bonne soirée à toi aussi blush.gif


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
gotcha5832
posté 3 Nov 2008, 05:07
Message #9


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 343
Inscrit : 27-February 08
Lieu : lune
Membre no 20966



Merci les gars, biggrin.gif

Je voulais avant tout vous remercier pour tout votre aide.
On le fais pas assez souvent. Et pourtant sans cette communauté tout serais bcp, bcp plus difficile.
Alors un grand MERCI....

Bon là j'ai pas le temps de tester tout de suite...
Mais je vais faire celà dans les prochaines heure, et je vous tiens au courant.

P.S.: désolé si je suis pas très réactif, mais je suis au Japon, et donc on as 8h de décallage... Quand je poste vous dormez, et quand vous postez je dors!!! wacko.gif


--------------------
Osc-2.2-ms2-FR
Os : Linux 2.6.24.7-desktop-2mnb
Version PHP : 5.2.5 (Zend : 2.2.0)
Base de données : MySQL 5.0.51a
Serveur HTTP : Apache/2.2.8 (Mandriva Linux/PREFORK-6.1mdv2008.1)
Go to the top of the page
 
shoprun
posté 3 Nov 2008, 06:29
Message #10


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation
Je n'ai pas regardé mais les produits à statut 0 ne sont ils pas supprimés du panier d'origine ? Je ne pense pas, je ne sais plus non plus.
Je crois pas non plus, c'est même certain, car je regarde dans le checkout_process.php, et si la quantité d'un produit est à 0, un code modifie le statut à 0, mais c'est tout.
Il y a rien qui parcourt les paniers pour éliminer le produit en question.

Citation
Quand le client se logue, les produits hors stock sont sortis du panier. Le mieux serait d'avoir un déclenchement de l'admin.
On peut ajouter le statut des produits comme tu as fait. Faudrait fignoler et faire un truc propre
Le gérer coté admin est tout à fait envisageable, mais ça sera jamais suffisant, le stock décroit lors d'une commande, donc c'est surtout du coté catalog que ça se passe.
Pour ma part, le faire aussi du coté admin c'est plus une question d'optimisation qu'autre chose, de vouloir limiter les DELETE du coté catalog du cleanup_no_stock().
Par contre, rajouter le statut me semble indispensable, ça peut éviter des incohérences.


Cependant, je vois au moins un autre cas particulier. Il y en a peut être d'autres, qui sait.
C'est pour les produits ayant des attributs, et là, à mon avis, faudrait traiter la chose au cas par cas, c'est selon la politique de la boutique.
Théoriquement faudrait les éliminer, mais on sait bien que tous ont des contributions qui gère les attributs de manière différentes et variées.
A mon sens, si on veux gérer ce cas là de manière un peu plus souple, faudrait créer une nouvelle constante coté admin, dans les configurations->Stock, une constante du genre STOCK_ALLOW_CHECKOUT_ATTRIBUTES
Mais bon, si on regarde osCommerce de base, dans le checkout_process.php, c'est assez radical, si la quantité est à 0 le statut est modifié est le produit devient invisible, donc impossible de commander. (si -> décompte du stock).

Après, si on part du fait de gérer le cas hors stock dans le panier, ça peu déboucher sur des comportements non attendues.
Exemple, toujours dans le cas où la vente hors stock n'est pas permise, et bien osC ne prévois rien (il me semble) pour éviter de commander un produit hors stock.
Du coup, avec le code que l'on rajoute, c'est assez déroutant, car quand un client va cliquez sur "ajouter", le produit ne va pas être rajouter au panier ??? Il va ce dire : Mais que ce passe t-il ?
Donc théoriquement faudrait gérer le cas avant qu'il puisse être ajouter, du genre masquer le bouton "ajouter", et ceci aussi bien dans le products_info que les box et modules.


Maintenant il y a la condition lors de la suppression des produits, et j'hésite un peu.
Faut juste un SI STOCK_ALLOW_CHECKOUT == 'false' -> suppression ?
Ou cumuler : SI STOCK_ALLOW_CHECKOUT == 'false' && STOCK_LIMITED == 'true' -> suppression ?


Bref, un fonctionnement comme celui ci débouche à mon sens sur des modifs un peu plus conséquentes.
Mais bon, j'en oubli peut être le fonctionnement normal de osC, qui sait.


Vous en pensez quoi ? Oneill, vous tous ? blush.gif


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
oneill
posté 3 Nov 2008, 09:14
Message #11


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 7619
Inscrit : 28-December 03
Lieu : Hollywood les Granits
Membre no 1773



Merci gotcha5832


Le système sert à enlever les produits hors stock ou disparus depuis la dernière mise en panier du client et de l'enregistrement de celui-ci. Le client revient plus tard, se logue, le panier est "scanné", tout ce qui est hors stock ou retiré de la vente ou les 2 doit être enlevé uniquement à ce moment la et pas autrement. C'est à dire pas à la mise au panier. C'est déjà géré par Osc, nous n'y reviendrons pas. Seule la restauration du panier nous intéresse ici pour l'instant.

On pourrait imaginer une commande de l'admin à 4 positions (c'est pas le kamasutra non plus)


0 -> Inactif par défaut
1 -> On enleve les produits hors stock et seulement eux
2 -> On enleve les produits retirés de la vente et seulement eux
3 -> On enleve les 2.


--------------------
Go to the top of the page
 
shoprun
posté 3 Nov 2008, 10:37
Message #12


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation (oneill @ 3 Nov 2008, 12:14) *
Seule la restauration du panier nous intéresse ici pour l'instant.

On pourrait imaginer une commande de l'admin à 4 positions (c'est pas le kamasutra non plus)


0 -> Inactif par défaut
1 -> On enleve les produits hors stock et seulement eux
2 -> On enleve les produits retirés de la vente et seulement eux
3 -> On enleve les 2.

Exacte, ne le faire que sur le restore_content() est à la fois plus simple et évite des comportement déroutant, et des codes contradictoires.
Et pour la création d'une constante, là encore c'est bien vu, ça offre une certaine souplesse.

Bon, j'ai pas trop le temps, mais je vais juste mettre la requête pour la création de la nouvelle constante, c'est mieux que rien, ça s'ra déjà ça d'fait smile.gif

Pour le nom de la constante j'ai opté pour -> CONFIG_CUSTOMERS_BASKET
S'il y a mieux, plus explicite, et bien tant mieux.

Requête nouvelle config :
Code
insert into configuration (configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order, date_added) values ('Gestion de la restauration du panier', 'CONFIG_CUSTOMERS_BASKET', '0', 'Gestion de la restauration du panier selon 4 cas de figure<br />0 : Inactif par défaut<br />1 :On enleve les produits hors stock et seulement eux<br />2 :On enleve les produits retirés de la vente et seulement eux<br />3 : On enleve les 2.', '9', '6', now())


A suivre smile.gif


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
oneill
posté 3 Nov 2008, 10:43
Message #13


5eme dan OSC
Icône de groupe

Groupe : Administrateur
Messages : 7619
Inscrit : 28-December 03
Lieu : Hollywood les Granits
Membre no 1773



Je suis charrette en temps aujourd'hui, le lundi est chargé....
Je vais faire ce que je peux. Demain sera beaucoup mieux pour moi pour aider


--------------------
Go to the top of the page
 
delete
posté 3 Nov 2008, 10:53
Message #14


2eme dan OSC
Icône de groupe

Groupe : Bannis
Messages : 3022
Inscrit : 12-November 07
Lieu : Massilia
Membre no 19718



J'ai trouvé ce topic intéressant car souvent confronté au problème de restauration de panier.

Je n'ai rien fait dans l'admin mais côté catalog, j'ai implémenté ceci :

Dans general.php après la fonction : tep_get_products_stock

Code
////
// Return a product's availability
// TABLES: products
  function tep_get_products_availability($products_id) {
    $products_id = tep_get_prid($products_id);
    $stock_query = tep_db_query("select products_quantity, products_status from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'");
    $stock_values = tep_db_fetch_array($stock_query);

    if ( ! $stock_values['products_status'] ) return(-1);

    return $stock_values['products_quantity'];
  }


Je n'ai rien inventé c'est un doublon de tep_get_products_stock avec la gestion du status.

Et dans la classe shopping cart, j'ai rajouté la fonction :
Code
function cleanup_unavailable() {

          while (list($key,) = each($this->contents))
          {
               $availability = $this->get_quantity(tep_db_input($key));

               if ( tep_get_products_availability(tep_db_input($key)) < 0 ||
                    (tep_get_products_availability(tep_db_input($key)) - ($availability -1)) <= 0 )
                {
                  $this->remove( tep_db_input($key) );
                }
          }
      }


Ca gère donc les produits status 0 / 1 et les quantités ...

La function cleanup_unavailable est appelée avant cleanup dans restore_contents comme l'a judicieusement proposé Oneill.

A affiner pour la gestion des quantités, idem c'est Lundi ... wink.gif

Ce message a été modifié par delete - 3 Nov 2008, 10:55.
Go to the top of the page
 
shoprun
posté 3 Nov 2008, 13:19
Message #15


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Bon, voilà un code qui à mon sens devrait répondre au besoin du cadre que l'on s'est fixé, donc en tenant compte de la nouvelle config -> CONFIG_CUSTOMERS_BASKET (de 0 à 3)

Nouvelle méthode cleanupNoStock() :
Code
public function cleanupNoStock() {
    //0 -> Inactif par défaut
    //1 -> On enleve les produits hors stock et seulement eux
    //2 -> On enleve les produits retirés de la vente et seulement eux
    //3 -> On enleve les 2.
    if (CONFIG_CUSTOMERS_BASKET == '1' || CONFIG_CUSTOMERS_BASKET == '2' || CONFIG_CUSTOMERS_BASKET == '3') {
        reset($this->contents);
        while (list($key,) = each($this->contents)) {
            //
            $clause = false;
            switch (CONFIG_CUSTOMERS_BASKET) {
                case '1' : $clause = " AND products_quantity < '1'";
                break;
                case '2' : $clause = " AND products_status < '1'";
                break;
                case '3' : $clause = " AND (products_quantity < '1' OR products_status < '1')";
                break;
            }
            //
            if (!empty($clause)) {
                $rs_prod = tep_db_query("SELECT COUNT(products_id) AS total
                    FROM ".TABLE_PRODUCTS."
                    WHERE products_id = '".tep_db_input($key)."' ".$clause." ");
                //
                $total = tep_db_fetch_array($rs_prod);
                //
                if ((int)$total['total'] > 0) {
                    $this->remove(tep_db_input($key));
                }
            }
            //
        }
    }
}


Déclenchement des éliminations des produits selon les 4 cas :
Code
function restore_contents() {
      .... code ...
      ...............
      $cart->cleanupNoStock();
      $this->cleanup();
}


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
gotcha5832
posté 3 Nov 2008, 14:04
Message #16


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 343
Inscrit : 27-February 08
Lieu : lune
Membre no 20966



Je viens de tester.

Et y a un petit bug.
Quand je me met en CONFIG_CUSTOMERS_BASKET en 3.
Il me vide tout le panier... stock, pas de stock... tout.
Sinon ca à l'air d'être cela.
Mais j'arrive pas à saisir la nuance entre hors stock et retiré de la vente?

hors stock ==> qté à 0
retiré de la vente==> qté >0, mais hors stock?


--------------------
Osc-2.2-ms2-FR
Os : Linux 2.6.24.7-desktop-2mnb
Version PHP : 5.2.5 (Zend : 2.2.0)
Base de données : MySQL 5.0.51a
Serveur HTTP : Apache/2.2.8 (Mandriva Linux/PREFORK-6.1mdv2008.1)
Go to the top of the page
 
delete
posté 3 Nov 2008, 14:29
Message #17


2eme dan OSC
Icône de groupe

Groupe : Bannis
Messages : 3022
Inscrit : 12-November 07
Lieu : Massilia
Membre no 19718



Citation (shoprun @ 3 Nov 2008, 14:19) *
Code
public function cleanupNoStock() {
                $rs_prod = tep_db_query("SELECT COUNT(products_id) AS total FROM ".TABLE_PRODUCTS."
                    WHERE products_id = '".tep_db_input($key)."' ".$clause." ");}


Pourquoi dans ta requête un count sur products_id alors que cet ID est censé être unique ?

Les champs nous intéressant étant products_status et products_quantity ...
Go to the top of the page
 
NoZic
posté 3 Nov 2008, 14:37
Message #18


Ceinture noire OSC
Icône de groupe

Groupe : Membres
Messages : 2871
Inscrit : 27-June 07
Lieu : Elancourt (78)
Membre no 18127



Bonjour,

Juste pour la nuance... hors-stock faut le virer du panier (mais j'y met perso une autre nuance du coup, seulement dans le cas où le propriétaire de la boutique ne veut pas vendre d'articles hors-stock, c'est un réglage dans l'admin dans une osc-défaut..., par contre il ne faut pas les supprimer si il faut vendre des produits hors-stocks... blush.gif [EDIT] d'où les différents réglages que proposait shoprun, qui pense souvent à tout...) c'est les produits dont le stock est à 0.
Et les "retiré de la vente" sont les produits qui dans tous les cas ne doivent pas apparaitre dans le panier (sans aucune question de stock ou autre) car la boutique ne les vends plus (ou pour être plus précis que le propriétaire de la boutiques a configurés comme "retirés de la vente" mais les a conservés pour le jour où il veut les remettre en vente, en clair quand c'est réglé comme ça, c'est que la boutique ne commercialise plus ces produits, tout simplement).

Bon courage

Ce message a été modifié par NoZic - 3 Nov 2008, 14:39.


--------------------
"Les solutions existent toujours depuis longtemps, il suffit de les trouver."
Go to the top of the page
 
shoprun
posté 3 Nov 2008, 15:59
Message #19


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation (delete @ 3 Nov 2008, 17:29) *
Pourquoi dans ta requête un count sur products_id alors que cet ID est censé être unique ?

Normalement c'est pour compter le nombre de produit de cet ID, et selon la CLAUSE, et théoriquement le total doit être 0 ou 1.
En fait, ici je souhaite juste savoir si ça correspond à la clause ou pas, rien de plus, la quantité (le nombre) n'est pas utile à savoir, donc en retour de la requête on obtient soit 1, soit 0.
1/ soit il y en a des produits, soit il y en a plus
2/ soit le statut est à 0, soit à 1
3/ soit il ne reste plus de produits ou soit sont statut est à 0

Cependant, j'ai strictement rien testé, donc tout à fait possible qu'il y est un truc mal fait.
Proposez de réparer le truc (code, requête) blush.gif

@gotcha5832
Je pense que Oneill à bien saisie la problématique, et qu'il faut surtout éviter d'en faire de trop, sinon on tombe dans des cas trop spécifiques, et même contradictoire, ce qui demandera obligatoirement de modifier d'autres codes.
Ce n'est pas le but ici, le truc c'est juste de pouvoir gérer le panier QUE lorsque le client revient sur la boutique, donc que lors de la restauration du panier. Ca va pas plus loin.
Cependant, ceci ce gère coté admin grâce à la config, et selon 4 cas de figures. Selon les cas de figure il est possible de choisir précisément ce qu'on veux faire, et même rien faire, donc tout conserver.

Donc si :
On vend hors stock, le problème ne ce pose pas, on ne fait rien -> 0 (on conserve tout en faite)
On vend pas hors stock -> 1 (Suppression SI quantité = à 0)
On vend hors stock mais ne souhaite pas les produits dont le statut est à 0 -> 2
On vends pas hors stock OU on ne souhaite pas les produits dont le statut est à 0 -> 3


Ceci dit, je vois pas ou est mon erreur, elle est dans la clause -> AND products_quantity < '1' OR products_status < '1'
Bizarre, ça me parais bon unsure.gif
Ou c'est qu'c'est pas bon ? biggrin.gif

Toujours pas l'temps de tester mrgreen.gif


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
delete
posté 3 Nov 2008, 16:08
Message #20


2eme dan OSC
Icône de groupe

Groupe : Bannis
Messages : 3022
Inscrit : 12-November 07
Lieu : Massilia
Membre no 19718



J'aurais plutôt vu SELECT sum(products_quantity) as quantity ... logique, car il faut tester le cas dans lequel le client a ajouter parex. 10 produits identiques dans son panier ... Je le répète products_id est censé être unique !

Citation (shoprun @ 3 Nov 2008, 16:59) *
Ceci dit, je vois pas ou est mon erreur, elle est dans la clause -> AND products_quantity < '1' OR products_status < '1'


Simple erreur de concaténation qui donne un truc du genre :

SELECT COUNT(products_id) AS total FROM products WHERE products_id = "1234"AND products_quantity < '1' OR products_status < '1'

Il manque l'espace ...
Go to the top of the page
 
shoprun
posté 3 Nov 2008, 16:21
Message #21


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation
J'aurais plutôt vu SELECT sum(products_quantity) as quantity

Franchement, je ne crois pas Delete, comme je te l'ai dis, ce qui m'intéresse ici c'est juste de savoir si le SELECT retourne 0 ou 1, donc la quantité importe peu, et même pas du tout. Donc soit il y en a, soit il y en a pas, c'est tout.

Après, si le nombre de résultat est positif, on supprime, là encore c'est 0 ou 1, c'est tout ce qu'il faut savoir.

Donc normalement un SECLECT COUNT(products_id) retourne le nombre de lignes trouvées. Et vu qu'un produit est unique comme tu le dis, alors soit c'est 0 ou 1 seul produit, et c'est bien ça que je veux.

Peut être faudrait il faire un SELECT COUNT (*) as total, mais je crois pas que ça changera grand chose.

De plus, l'astuce est de faire qu'une seule requête dynamique qui répondra aux 3 cas différents, et tu remarqueras qu'il peut avoir 1 cas ou la quantité de produit n'est pas du tout dans la clause, le cas 2.

Code
Il manque l'espace ...
Ok, bien vu, j'ai pas fait gaffe wink.gif


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
delete
posté 3 Nov 2008, 16:37
Message #22


2eme dan OSC
Icône de groupe

Groupe : Bannis
Messages : 3022
Inscrit : 12-November 07
Lieu : Massilia
Membre no 19718



Quand on a les yeux dans le code, on ne le voit plus laugh.gif

Sinoin, je ne veux pas être lourd mais l'intérêt pour le commerçant est d'optimiser le panier et son rendement ergonomique.

Le panier est garnit avec un produit qui n'est plus en stock, le client clique sur commandé et ne comprends généralement pas pourquoi il ne passe pas à l'étape suivante ce que cette contrib résoud.

Le panier est garnit avec 10 produits et il n'y en a plus que 9 en stock, il est intéressant de pouvoir honorer la commande de 9 produits ... donc de traiter le cas ... mais bon, chacun son point de vue...
Go to the top of the page
 
shoprun
posté 3 Nov 2008, 20:42
Message #23


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation (gotcha5832 @ 3 Nov 2008, 17:04) *
Quand je me met en CONFIG_CUSTOMERS_BASKET en 3.
Il me vide tout le panier... stock, pas de stock... tout.
Il manquait des parenthèses blush.gif

Un code comme ceci :
( -> J'ai corrigé dans le code plus haut aussi)
Code
case '3' : $clause = " AND (products_quantity < '1' OR products_status < '1')";


J'ai donc fais quelques essais, j'obtiens exactement ce qui a été décrit, enfin, je pense. (n'en déplaise à certain tongue.gif ).
Maintenant, faut voir s'il faut pousser certains points plus loin ou pas ?
A mon sens non, tout le reste peut être géré avec les fonctionnalités de base de osC (ou autre contributions).

Le point ou on pourrait pousser plus loin par exemple, serait de faire une différence entre la quantité du panier par rapport à la quantité du produit.
Exemple possible pour un produit dans le panier :
Quantité dans le panier : 5
Quantité du produit (stock) : 3
Dans le cas présent le produit ne sera pas supprimé vu que la quantité en stock n'est pas < à 1.
-> Je précise que pour le cas 1 (par exemple), un produit est supprimé QUE si la quantité en stock est < à 1 (donc 0)
Il pourrait être envisagé de réguler la quantité du panier, comme la réduire ici à 3.

Mais à mon sens c'est pas souhaitable.
Un petit retour la dessus serait le bienvenue wink.gif


@ Delete
Citation
Le panier est garnit avec 10 produits et il n'y en a plus que 9 en stock, il est intéressant de pouvoir honorer la commande de 9 produits ... donc de traiter le cas ... mais bon, chacun son point de vue...
Relis le petit cahier des charges qu'à fait Oneill, il est nullement fait allusion du cas de figure que tu décrit, enfin, il n'est pas supprimé, il est donc honoré selon ton exemple.
Si tu remarque cela, alors il y a une erreur de code.
Toujours est il que j'ai fais des essais (certes assez rapide, pas très poussé) et j'ai pas remarqué cette erreur.


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 
gotcha5832
posté 4 Nov 2008, 07:19
Message #24


Ceinture orange+ OSC
Icône de groupe

Groupe : Membres
Messages : 343
Inscrit : 27-February 08
Lieu : lune
Membre no 20966



Nikel,
Je viens de tester, et c'est ce que je voulais...

Merci à toi.


--------------------
Osc-2.2-ms2-FR
Os : Linux 2.6.24.7-desktop-2mnb
Version PHP : 5.2.5 (Zend : 2.2.0)
Base de données : MySQL 5.0.51a
Serveur HTTP : Apache/2.2.8 (Mandriva Linux/PREFORK-6.1mdv2008.1)
Go to the top of the page
 
shoprun
posté 4 Nov 2008, 07:35
Message #25


2eme dan OSC
Icône de groupe

Groupe : Membres VIP
Messages : 3712
Inscrit : 11-April 07
Lieu : Ile de la Réunion
Membre no 16487



Citation
Nikel,
Je viens de tester, et c'est ce que je voulais...
Y pas d'quoi smile.gif

C'est aussi ce que je voulais.
Faut pas oublié Oneill, c'est tout de même lui qui à cerner, bien cadré la chose.
Merci à lui wink.gif

Maintenant, il serait bien de pousser les essais, de voir où, ou quelle condition mettrait à mal cet ajout de code.

La suppression de manière intempestive serait la grosse tuile, car on a pas grand chose, voir rien qui pourrait nous l'avertir, sinon de remarquer une baisse du prix moyen des paniers.
C'est quand même pas rien sad.gif


--------------------
Nous ne sommes pas un Service Après-Vente ni une Hot-Line !!!, et pas de "UP" et de doublon svp ...
Prenez le temps de lire les informations mises à votre dispositions avant de créer un sujet.
Démarrer du bon pied -> Bien utiliser les forums | Bien poser sa question | Règles d'usage des forums
Prés-Requis -> Les compétences requises pour réussir avec osCommerce
Docs / Infos -> LA FAQ | Rechercher | Contributions | Contribution US
Sujets épinglés -> Manuel d'utilisation MS2 | Structure OsC2.2 MS2 | ms2-fr-rc1-w3c | SSL : une obligation? | Design de la MS2 | Tutoriels CSS | Optimisez les performances de votre boutique | Taux de TVA à appliquer
Utile -> WampServer | EasyPhp | Xampp | Mamp - Ftp -> FileZilla
Apprendre -> siteduzero | alsacreations | apprendre-php | developpez.com
Go to the top of the page
 

2 Pages V   1 2 >
Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



RSS Version bas débit Nous sommes le : 26th May 2013 - 02:32
Ce site est déclaré auprès de la commision Nationale
de l'Informatique et des Libertés (déclaration n°: 1043896)