THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour à tous,

J'ai un problème pour dissocier 1 produit suivant ses déclinaisons lors d'une Query. Seul son ID diffère selon la déclinaison cependant il m'est impossible de les dissociés lors de ma Query ...

Je travail sur la fusion de 2 modules : Un gérant un système de garantie et l'autre une gestion direct en Back-office de mes produits . Ce module me permet de gérer les Attributs, Features etc de mes produits et modifie directement les fiches produits du catalogue.

Je ne sais pas si cela à déjà été effectuer mais je serais ravis de mettre à disposition sur Gitub cette fusion de module qui pourrait se révéler intéressante et surtout adaptable par la suite.

Cela étant dit j'aimerai un petit coup de main pour m'aider à terminer ce projet s'il vous plaît !!! Je peux envoyé code, screen ou autre infos mais il faudrait que quelqu'un me réponde pour ça ..

Manos

Offline


Connais tu le module EasyProductManager ? https://github.com/thelia-modules/EasyProductManager

Il permet de gérer plus facilement les produits.


OpenStudio Toulouse

Offline


Ah super merci beaucoup pour cette réponse !!!!!!
Je vais dès maintenant le lancer en local pour tester et voir si il correspond à mes attentes

Et-t-il possible de gérer ou d'ajouter un système de garantie pour les produits ?

Dernière question, Ou puis-je trouver une liste des modules compatible et disponible pour thélia ?

Respectueusement
Merci encore !!!

Manos

Offline


Regarde ici : https://github.com/thelia-modules et là : https://github.com/roadster31?tab=repositories. Il y a sûrement Nog qui en à, mais je n'ai pas son Github sous la main (Coucou Nog !)

"Système de garantie, c'est vague" smile Précise ton besoin.


OpenStudio Toulouse

Offline


Oui ! On m'appelle ;-) ? Voici mon Github : https://github.com/nicolasleon

Offline


Merci beaucoup pour les liens !!!!! Je m'y rend de ce pas !

Système de garantie j'entend par la, l'ajout de déclinaison sur un produit.
Je m'explique : 1 produit par default à son prix HT , avec une déclinaison "garantie 5 ans" par exemple le prix de ce produit change et est ajouté un pourcentage à son prix de base mais cette déclinaison produit aura un "product_sale_elements_id" différent mais gardera le même "product_id" . Et ce système s'effectue pour chaque garantie appliquée .

Soit par défaut : Prix HT -> Product_id= 20-> IsDefualt=1
Garantie 5 ans :  Prix HT * 1.1% -> product_id=20 -> product_sale_elements_id= 100 -> attribut_av_id=7-> IsDefault=0
Garantie 10 ans : Prix HT *1.2% -> product_id=20 -> product_sale_elements_id=101 -> attribut_av_id=8-> IsDefault=0

Et c'est ce fameux ID que je n'arrive pas sélectionner/dissocié car ils ont le même statut dans la table "Product_price"( IsDefault=0) dans ma Query pour les garantie 5 et 10 car le "$id" que je récupère de ma requête est celui "product_id" et c'est à partir de lui que je travail mes Query pour mettre à jour les prix suivant les declinaisons .

Ce système touche 3 tables en BDD :

Product Sale Elements -> pour récupérer "product_sale_elements_id" en fonction de  "$id "
Attribut Combination  -> pour récupérer "attribut_av_id" en fonction du "product_sale_elements_id "
Product Price -> pour mettre à jour les prix en fonction des "product_sale_elements_id" 


Code pour les garantie

Last edited by Manos (29-01-2020 09:52:57)

Offline


CodeV2


Voici une rédaction simple de mes besoins mais comme souligner en rouge la partie Garantie 10 est, elle, rédiger en dur .
J'ai mis la valeur de l'id rechercher en dur pour vérifier que c'était bien la "Query ProductSaleElement"  qui me pose problème .

En effet j'ai bien 1 seul produit "$id" en 3 déclinaison dont 2 qui ont le même statut "IsDefault=0" et un id différent pour chaque mais je n'arrive pas à les dissociés lors de mes Query pour que les nouveaux prix soit associés à leurs pse_id respectif .

Offline


Je ne comprends pas pourquoi tu ne crées pas tout simplement une déclinaison "Durée de la garantie" avec les valeurs 0, 5 ans et 10 ans, et pour chaque produit, tu définis dans le BO le prix du produit pour chaque valeur de déclinaison.

Du coup, ça marche sans avoir à coder quoi que ce soit, et en front tes clients ont juste à choisir la durée qu'ils souhaitent pour mettre le prosuit au panier avec le bon prix.


OpenStudio Toulouse

Offline


Module


Les déclinaisons sont déjà créés. le code que je rédige permet à mon module TankDatas ( qui gére toutes les données de mes produits depuis le back office : dimensions, prix, visibilité ... et qui implémente/update toutes mes fiches produit  ) de prendre en compte aussi les déclinaisons de garantie qui sont déjà créé,  ce qui me permet de gérer toutes les données concernant mes produit dans un seul et même endroit au lieu de modifier les fiches produits indépendamment.

Offline


Pour retrouver les prix associés à un PSE d'un produit donné et un niveau de garantie donné, il te faut :

1) L'ID du produit (disons 304)
2) L'ID de la valeur de déclinaison ( = AttributeAv ID) .concerné (disons 8)

Tu vas retrouver le prix du PSE du produit pour la valeur de déclinaison avec cette requête :

select * from product_price pp
left join product_sale_elements pse on pse.id = pp.product_sale_elements_id
left join attribute_combination ac on ac.product_sale_elements_id = pse.id
where
ac.attribute_av_id = 8
and pse.product_id = 304

Ce qui nous donne, en utilisant Propel et en ajoutant un petit contrôle sur l'existence du prix:

if (null !== $price = ProductPriceQuery::create()
    ->useProductSaleElementsQuery()
        ->filterByProductId(12)
            ->useAttributeCombinationQuery()
                ->filterByAttributeAvId(8)
            ->endUse()
    ->endUse()
->findOne()) {
    $price
        ->setPrice(...)
        ->setPromoPrice(...)
        ->save()
    ;
}

Et voilà. Les useXXXXQuery sont super pratiques pour faire des jointures.

Attention, la méthode ci-dessus ne fonctionne que si les combinaisons n'ont qu'une seule déclinaison.
L'essentiel est de bien comprendre les relations entre les tables, et d'écrire d'abord la requête SQL avant de commencer à écrire avec Propel.


OpenStudio Toulouse

Offline


A...MA...ZING ...

Mille merci Roadster31 !!!!!

Les useXXXQuery était la notion qu'il me manquait pour enfin terminer mon module ! Et cette réflexion d'écrire la requête SQL avant de rédiger le Propel est excellent ! Mais je ne t'apprends rien ^^

Merci encore pour la réactivité et d'avoir pris le temps de me répondre ! Je poursuis ma découverte de Thélia et mon développement

Respectueusement

Manos