Jump to content

[Résolu] Changer le système de quantité (mètre carré) - PS 1.1


widget

Recommended Posts

Bonjour a tous ! je suis nouveau sur ce forum et également sur prestashop.

Apparemment après plusieurs jours de manipulation, j'ai pu constater que prestashop était personnalisable au niveau du templates, mais je bloque sur un truc :

J'ai une boutique de vente de tissus au m2. Je veux donc gérer ma quantité non pas en objet disponible mais en m2 disponible. Je pensais pondre un petit algorithme mais le système de gérance de la quantité n'a pas l'air simple du tout...

Question 1 : Est-t-il possible de modifier le système de gérance de la quantité dispo, restante....

Question 2 : Si oui, Le code a modifier est dans Cart.php ?

Si quelqu'un veut bien m'expliquez le raisonnement de ce code... Merci bien et bonne chance a toute la communauté de prestashop !

Link to comment
Share on other sites

Réflexion, réflexion.
Le client ne choisi que des m2 complet ou pas ?
Parce que sinon pourquoi tu ne rentre pas dans ton BO la valeur de ton nombre de m2 plutôt que de produit disponibles.

Et après tu change la traduction de ton site pour remplacer produit pas m2.
Je n'ai pas testé donc je ne sais pas ci ça va fonctionner, mais je pense que c'est plus simple.
Autant utiliser les outils déjà disponibles avant de modifier le code directement :)

Link to comment
Share on other sites

Hum j'aimerais un peu plus d'explication si possible.

Non les choix ne se resume pas à : 1m2 2m2 3m2...

Ce sont en fait des formats : 160*160, 100*100, 25*25, 60*60.

Le probleme avec ton idée : Si je change dans le back office disons une quantité disponible normalement de 50 produits à par exemple 30 m2 (ce qui est en effet possible), il faudrait que je puisse mettre des coeffiscients sur les différents formats.

Exemple : Quantité dispo 50m2

1 client choisie une toile de 1m2 soit 1m * 1m
Quantité dispo 49m2

1 deuxième client choisie une toile de 1m60*1m60
Quantité dispo 48m2

Or 1m60*1m60 = 2,56 m2

Donc en gros il faut que j'arrive a convertir la quantité en fonction de la tailles au m2 du tissue...

Merci pour ton aide !

Link to comment
Share on other sites

Mince je pensais que peut-être plusieurs personnes étaient concernés par la question.

Comment faite vous pour gérer votre boutique avec le stock en m2 disponible et non pas avec des Produits disponible ?


Vous allez pas me dire que je suis le seul a faire ca ??

Ca serait gentil de m'aider les potos :(

Link to comment
Share on other sites

Je pense que la première étape serait de changer la base de donnée (rien d'extraordinaire) de passer le champ "quantity" dans la table ps_prodcts en float. Pour pouvoir gérer les nombres à virgule.
Je ne sais pas ce que ça va changer dans la structure du code ni rien. Donc je te conseille de toujours avoir une sauvegarde sous le coude (une sauvegarde pour chaque changement n'est pas superflu aussi ^^)

Après, fais un groupe d'attribut pour chaque tissu. Genre le tissu de chine : 1m par 1m => quantité 15, 1m60 par 1m60 quantité 15.
Mais mince...
C'est le même tissu pour toi... Donc le même stock ? Tu peux différencier les deux ou pas ?

Parce que par défaut prestashop met un stock pour chaque déclinaison. Donc pas le même rouleau... :(

Explique la structure que tu veux avoir, chaque dimension c'est une nouvelle sorte de tissu. Ou tu as un seul immense tissu sur lequel tu prélève des petits bouts ? La deuxième solution serra plus difficile je pense...

Link to comment
Share on other sites

Merci pour ta réponse, je crois que tu a compris mon probleme :

Si je fait un groupe d'attribut pour chaque format, il y aura une certaine quantité pour chaque format, alors que je veux une quantité qui englobe toute les autre quantités... Pas facile d'expliquer alors je refait un exemple :

D'abord une précision : toute les toiles sont en série limitée d'ou la quantité global...

Une toile (On va parler de toiles, c'est plus simple, un peu comme des tableaux). Si possible j'aimerais que quand le client clique sur la toile il voie quelque chose comme : 20 m2 disponible. (quantité global)

Puis il choisi alors son format : 25*25 60*60 100*100 120*120 200*200 (cm).

Je ne veut donc pas dire que par exemple il y a 15 toile dispo pour 25*25; 15 pour 60*60, 15 pour 100*100... Mais Résonner en Quantité global..

Donc quand le client choisi par exemple 60*60 et commande, le client suivant verra la quantité global disponible baisser de 60*60 soit 0,36 m2

La quantité global que tout les client verront serra donc de 19,64 m2

:(

Je suis en train de chercher une solution alternative mais je n'en trouve pas pour l'instant...

Link to comment
Share on other sites

Oui j'ai compris ton problème. Et je t'avouerais qu'il me fait peur ! :)

Je ne vois pas de manière propre de faire ça...
Désolé mais ton problème est super galère et j'espère que tu t'y connais en HTML CSS et tout le tralala ^^

Ce que JE pense, avis personnel encore une fois pense aux sauvegardes !!! Tu vas en avoir besoin ;)

Tu dois faire un code en "dur". Je m'explique. J'espère que tu n'as pas trop de produit et qu'ils ont tous les mêmes attributs ^^
Tu fais dans le Back Office un valeur de quantité globale ! (attend la suite tu vas halluciner :D)
Et tu ne met aucune combinaison !

Alors code en dur :

Au bon endroit dans le .tpl de product tu refais à la mimine le choix des groupes d'attributs. Avec leur attribut.
Donc pas du tout géré par le Back Office... Donc pas modifiable facilement...
Une vérification avec les id peut être faite avant si tu ne veux pas qu'ils aient tous les mêmes attributs.
Et en fonction du choix tu agit sur ton stock global que tu as bien sur passé en float au tout début comme je te l'ai suggéré.

Tu comprend le truc ? :D

Je pense que c'est possible (JE PENSE, pas sur, m'engueule pas si ça marche pas :(), à toi de voir en fonction de ton niveau... Car là c'est trop long pour que je te le fasse tout seul, désolé :(

Astuce : aide toi des codes déjà existant que tu récupère.

Bon courage !
Revient pour tout problème au niveau du code ! Je peux pas tout te faire, mais surement t'aider ;)

Link to comment
Share on other sites

oki mercis pour ta soluc, pour ce qui est du html; css pas de soucie, le php je comprend a peu prés, c'est la façon dont le smarty s'occupe du tout qui m'échappe un peu :)

Je m'y penche dès maintenant, Je pense que je te demanderais de m'expliquer les bases...

merci encore, j'en ai mare de galerer.

Link to comment
Share on other sites

J'aurais a peu prés 25 produits, mais ils ont tous les même attributs..

"Au bon endroit dans le .tpl de product tu refais à la mimine le choix des groupes d’attributs. Avec leur attribut.
Donc pas du tout géré par le Back Office… Donc pas modifiable facilement…
Une vérification avec les id peut être faite avant si tu ne veux pas qu’ils aient tous les mêmes attributs.
Et en fonction du choix tu agit sur ton stock global que tu as bien sur passé en float au tout début comme je te l’ai suggéré."

Ds le template, j'ai :

var id_product = '{$product->id|intval}';
var productHasAttributes = {if isset($groups)}true{else}false{/if};
var quantitiesDisplayAllowed = {if $display_qties == 1}true{else}false{/if};
....

Pour "refaire" le choix des groupes d'attributs ? Comment je démare ?
je veux bien créer un id par produit genre :
var id_product = '01';
var productHasAttributes = {?};

En gros je me dit que ca va être mission impossible de taper tout ce code a la main, surtout que tout les nouveaux produits seront également en dur.

Par contre, en regardant vite fait le code du templates des produits, y aurait pas moyen d'enlever l'affichage de la quantité pour les combinaisons ? Et de faire en sorte qu'il y ai qu'un seul décompte de la disponibilité : la quantité global ?

Link to comment
Share on other sites

Atta, atta !
On c'est mal compris ^^
ça va être long je sais. Ce que je te dis de faire c'est tu créer un select (ta liste déroulant) et tu récupère lechoix et en fonction de ça. TOI tu modifie la quantitée globale ^^

Tu ne fais pas du tout appelle au génarateur des attributs et groupes d'attributs de prestashop. Si tu pouvais même enléver le fichier qui s'ouvre...

En gros :

Dans product.tpl tu va te retrouver avec une grande liste de select !!! (un par format de toile) et dans chaque attribut de ces format tu fait la modif en direct live ;)
5 selects puis le nombre d'attributs et là je sais pas :s

Pour ta deuxième solution, j'y ai pensé mais je crois que dès que tu rentre les attributs dans le BO prestashop génère le décompte sur la disponibilité spécifique à la combinaison... Et je ne sais pas comment changer ça...
Je sais pas lequel est le plus rapide :D
Les deux doivent être faisables (mais pour le deuxième vraiment aucune idée...)

Peut être reprendre le code directement dans la partie admin...
Et refaire tout le déroulement en changeant ce que tu désire...

Dur, dur comme changement widget ! =)

Je t'ai dis ma solution est "sale" et longue mais marchera.
La deuxième est "propre" et rapide si tu sais où chercher et quoi changer donc longue aussi =) Et avec des résultats pas certain.

Commence avec la deuxième !! Chercher bien, dans la génération d'attribut je pense

Link to comment
Share on other sites

  • 4 weeks later...

J'ai enfin trouvé comment changer le système de quantité dans prestashop.

je met ma soluc ici pour tout ceux qui seraient intéressé. Pour plus de détail, merci de me PM !


J'ai dans un premier temps modifier les deux fonctions suivantes dans le fichier Attribute.php (Classe) :

    static public function checkAttributeQty($id_product_attribute, $qty)
   {         
       $result = Db::getInstance()->getRow('
       SELECT `quantity`
       FROM `'._DB_PREFIX_.'product_attribute`
       WHERE `id_product_attribute` = '.intval($id_product_attribute));

       return ($result AND ($qty <= $result['quantity']));
   }

   /**
    * Get quantity for product with attributes quantity
    *
    * @acces public static
    * @param integer $id_product
    * @return mixed Quantity or false
    */
   static public function getAttributeQty($id_product)
   {
       $row = Db::getInstance()->getRow('
       SELECT SUM(quantity) as quantity
       FROM `'._DB_PREFIX_.'product_attribute` 
       WHERE `id_product` = '.intval($id_product));

       if ($row['quantity'] !== NULL)
           return intval($row['quantity']);
       return false;
   }



Ainsi le check et get quantity vont taper dans le systeme global de quantité

Mais ce n'est pas tout, il faut aussi modifier le code de Cart.php (fichier classe)

il faut faire une nouvelle requête :

$quantiteproduit = Db::getInstance()->getRow('
                       SELECT quantity
                       FROM `'._DB_PREFIX_.'product` 
                       WHERE `id_product` = '.intval($id_product));




puis ajouter les lignes de codes suivantes :

if ((intval($productQty) == 0   OR((  !Configuration::get('PS_ORDER_OUT_OF_STOCK')))) AND $newQty > $productQty)return false;




Et c'est la que je m'en rend compte que j'ai bidouiller trop de truc et que j'aurais pas le temps de tout expliquer.. Enfin bref problème résolu pour ma part, c'est l'éssentiel. PM me si manque d'explication

Link to comment
Share on other sites

  • 1 month later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...