THELIA Forum

Welcome to the THELIA support and discusssion forum

Offline


Hello!

[edit]Allez directement au message : CustomerFamilyPlus [/edit]

J'ai créé un module pour restreindre l'accès à certaines catégories (le client doit être connecté et autorisé à y accéder)

Jusque là ça fonctionne, je n'ai plus qu'à vérifier au niveau du panier (à l'ajout/mise à jour de produit et avant la validation commande) que le client a bien accès à ces produits (rubriques).

Mais en parallèle, j'aurais besoin de défini un prix spécifique à ces produits.

Si le produit n'existe que dans cette catégorie restreinte, pas de souci.

Si le produit existe aussi dans d'autres catégories (non  restreintes) ça se corse...

Il existe quelque chose pour cela ?
Exemple : mettre le client en "revendeur" et affecter un "prix revendeur" ?

Si rien n'existe il faut que le module gère l'affichage des prix mais aussi lors de l'ajout au panier etc ?

Last edited by Elyos (21-07-2021 12:58:37)


Aide les autres, ils t'aideront en retour.

Offline

Offline


Merci!

Je vais l'adapter à ce que j'ai fait alors wink


Aide les autres, ils t'aideront en retour.

Offline


C'est bien ce qu'il me semblait... je ne peux pas l'utiliser tel quel car j'ai besoin de définir des prix par produits et non une équation...


Aide les autres, ils t'aideront en retour.

Offline


Bon.

J'ai dupliqué le module, tout renommé (pour éviter de faire doublon), ajouté/modifié quelques trucs pour :
- avoir la liste des catégories via le "tree" dans le B.O.
- pouvoir ajouter des prix fixes pour chaque produit selon la famille

Sauf que à peine testé... à peine j'ai un souci ^^'

Comme je n'ai pas vraiment testé le module d'origine je me pose quelques questions :

- faut-t-il changer les boucles catégories et produits dans le template ? (là je peux accéder à tout quand je suis pas connecté alors que ça ne devrait pas être le cas...)
- si j'accède à une catégorie/produit donc je n'ai pas l'accès, c'est censé me redirigé quelque part ? (j'ai pas vu dans le code)
- si je me connecte, que j'ajoute un produit restreint (dont j'ai l'accès) que je me déconnecte, ça supprime le produit de mon panier ? (j'ai pas vu dans le code)

(en passant je viens de voir que si je mets une rubrique "hors ligne" les sous-rubriques restent en ligne ainsi que les produits... Ô.o)

Last edited by Elyos (19-07-2021 13:17:29)


Aide les autres, ils t'aideront en retour.

Offline


Elyos wrote:

- faut-t-il changer les boucles catégories et produits dans le template ? (là je peux accéder à tout quand je suis pas connecté alors que ça ne devrait pas être le cas...)

Dans CategoryLoopExtend.php :

$customerFamilyPlus = $this->getCustomerFamilyPlus();

if (null === $customerFamilyPlus || !$customerFamilyPlus->getCategoryRestrictionEnabled()) {
	return;
}

Dans BaseCustomerFamilyPlusLoopExtend.php :

public function getCustomerFamilyPlus()
{
	$currentCustomer = $this->securityContext->getCustomerUser();

	if (null === $currentCustomer) {
		return null;
	}

	$customerFamilyPlus = CustomerFamilyPlusQuery::create()
		->useCustomerCustomerFamilyPlusQuery()
			->filterByCustomerId($currentCustomer->getId())
		->endUse()
		->findOne();

	return $customerFamilyPlus;
}

Donc si pas loggué...pas de famille... donc => accès à tout..?!


Aide les autres, ils t'aideront en retour.

Offline


Je sais pas si j'étais censé modifié quelque chose mais... j'ai modifié par ça

public function getCustomerFamilyPlus()
{
	$currentCustomer = $this->securityContext->getCustomerUser();

	if (null === $currentCustomer) {
		return CustomerFamilyPlusQuery::create()
			->filterByIsDefault(1)
			->findOne();
	}

	$customerFamilyPlus = CustomerFamilyPlusQuery::create()
		->useCustomerCustomerFamilyPlusQuery()
			->filterByCustomerId($currentCustomer->getId())
		->endUse()
		->findOne();

	return $customerFamilyPlus;
}

et ça fait le job...!

Last edited by Elyos (19-07-2021 14:00:17)


Aide les autres, ils t'aideront en retour.

Offline


Petit question :
Je vérifie lors de l'ajout au panier que le client peut ajouter le produit en question (selon les restrictions) mais comment renvoyer dans la popup de confirmation d'ajout le message "Ce produit ne peut être ajouté au panier" ?

Ou renvoyer vers la page d'accueil ?


Aide les autres, ils t'aideront en retour.

Offline


Tu pourrais peut-être passer par un listener  JS ?

Le contenu de la popup templates/frontOffice/includes/addedToCart.html est affiché en réponse l'appel à l'url suivante : http://boutique.com/ajax/addCartMessage … quantity=1
Tu pourrais modifier le template addedToCart.html en fonction de la présence ou  non du {$smarty.get.pse_id} dans le panier.

Offline


En fait, dans mon CartListener de mon module j'ai

public function addCartItem(CartEvent $cartEvent)
{
	//.. SI PAS BON
			$cartEvent->getCartItem()->delete();
			return; // là ça me fait une popup vide... j'aimerais que ça renvoie le message "c'est pas bon!"
	//SINON FAIT CE QU'IL FAUT
}

J'arrive pas à dire au core de thelia "Le produit n'a pas été ajouté! Renvoie une erreur à l'utilisateur!!!" big_smile


Aide les autres, ils t'aideront en retour.

Offline


OK!

En fait, ça retourne une popup vide car le produit en question n'est pas accessible à l'utilisateur qui a tenté de l'ajouter au panier.

En gros je suis connecté, j'ai accès au produit, je vais dessus, j'ouvre une nouvelle fenêtre, je me déconnecte, je retourne sur la page produit et je l'ajoute au panier.

Là mon CartListener l'empêche de l'ajouter au panier (le supprime) et donc dans ma popup addetToCart.html j'ai juste à modifier pour faire une condition sur la loop wink


Aide les autres, ils t'aideront en retour.

Offline


Et voilà !
J'ai développé le module CustomerFamilyPlus (basé sur CustomerFamily).

J'ai corrigé le bug (?) suivant : Si pas connecté => pas de famille => aucune restriction d'accès / Maintenant si pas connecté => Famille "par défaut"

J'ai amélioré le système :
- en y intégrant la possibilité d'ajouter des prix fixes (promo ou non) à chaque produit par catégorie de famille (avec calcul automatique HT/TTC) :

  1. Affichage prix fixe si existant sinon

  2. Affichage prix calculé si existant sinon

  3. Affichage prix standard

- en faisant des redirections : si pas l'autorisation d'accès à la rubrique/produit => redirection vers accueil si client connecté ou vers login si client non connecté
- à l'ajout panier : si pas l'autorisation d'accès à la rubrique/produit => le produit ne s'ajoute pas

Je crois que c'est tout ^^'


Aide les autres, ils t'aideront en retour.

Offline

Offline


Elyos wrote:

Et voilà !
J'ai développé le module CustomerFamilyPlus (basé sur CustomerFamily).

J'ai corrigé le bug (?) suivant : Si pas connecté => pas de famille => aucune restriction d'accès / Maintenant si pas connecté => Famille "par défaut"

J'ai amélioré le système :
- en y intégrant la possibilité d'ajouter des prix fixes (promo ou non) à chaque produit par catégorie de famille (avec calcul automatique HT/TTC) :

  1. Affichage prix fixe si existant sinon

  2. Affichage prix calculé si existant sinon

  3. Affichage prix standard

- en faisant des redirections : si pas l'autorisation d'accès à la rubrique/produit => redirection vers accueil si client connecté ou vers login si client non connecté
- à l'ajout panier : si pas l'autorisation d'accès à la rubrique/produit => le produit ne s'ajoute pas

Je crois que c'est tout ^^'

Félicitations pour le développement de ce module. As-tu prévu de le publier sur Github ?

Offline


Nog wrote:

Félicitations pour le développement de ce module. As-tu prévu de le publier sur Github ?


Comme pour tous les modules que je développe actuellement, je le ferais sûrement quand j'aurais de la dispo (il faudra aussi que je fasse du nettoyage dans certains wink )


Aide les autres, ils t'aideront en retour.

Offline


Je viens de voir un petit souci par rapport aux produits qui se retrouvent dans plusieurs rubriques : ça coince au niveau des restrictions.


Aide les autres, ils t'aideront en retour.

Offline


À priori c'est bon.

[edit]

Ah non... ça me double le PSE_COUNT si le produit est dans deux rubriques...

Last edited by Elyos (22-07-2021 23:34:46)


Aide les autres, ils t'aideront en retour.

Offline


Il faudrait dans la requête du core remplacer

COUNT(`pse_count`.ID) AS pse_count

par

COUNT(distinct(`pse_count`.ID)) AS pse_count

En attendant que je trouve une autre solution, j'ai assigné une nouvelle valeur à pse_count dans mes templates via {$LOOP_TOTAL}

Si quelqu'un a une idée...


Aide les autres, ils t'aideront en retour.

Offline


Fais un override, et lève une issue dans Github.


OpenStudio Toulouse