Attention Le plugin ne s’occupe pas de la gestion des paniers, ni des paiements, ni des factures. Pour l’aspect «boutique», voir le post-scriptum.
Ce plugin a été élaboré grâce aux contributions de Matthieu Marcillaud, Rastapopoulos, Yffic, touti, Cyril, et du rédacteur de cet article.
Principe
Le plugin agit sur 2 fronts :
→ d’une part il permet aux utilisateurs de gérer les commandes depuis l’espace privé.
→ d’autre part, il fournit les outils permettants et aux développeurs et aux autres plugins de créer et manipuler des commandes.
Installation et dépendances
Le plugin est repertorié dans le dépôt proposé par défaut : «SPIP-Zone - Plugins». Aussi, il est installable depuis la page Gestion des plugins
, onglet Ajouter des plugins
si vous avez activé ce dépôt.
2 dépendances seront installées automatiquement :
D’autres plugins sont plus ou moins optionnels, là c’est à vous de voir :
- Notifications avancées : à installer si on veut bénéficier de l’envoi de notifications par email.
- Facteur : sans lui, les notifications seront au format texte au lieu d’un joli HTML.
- Coordonnées : fortement recommandé afin de pouvoir gérer les adresses liées aux commandes (livraison et facturation).
- Contacts et organisations : peut vous servir à gérer les auteurs/clients des commandes.
Fonctionnement
A l’installation, 2 tables sont créées :
- La table principale
spip_commandes
sert à enregistrer les données de base des commandes : l’auteur/client, le numéro de référence, le statut et les dates. - La table auxiliaire
spip_commandes_details
sert à enregistrer les «détails» correspondants aux commandes, c’est à dire tous les éléments à partir desquels on va pouvoir calculer le prix total d’une commande : objets et services commandés, frais annexes, ristournes etc.
En théorie, à chaque commande enregistrée dans la table spip_commandes
doit correspondre une ou plusieurs lignes de détails dans la table spip_commandes_details
.
La table spip_commandes :
Une commande est un objet éditorial, au même titre que les articles, brèves et cie. Elles ont un auteur (le client), différents statuts et 3 types de dates : date de création, date de paiement & date d’envoi.
La date de création correspond au champ «date», elle est définie à la création de la commande, et n’est pas censée être altérée par la suite.
Le changement d’un statut peut déclencher l’envoi de notifications par email, et la mise à jour de la date s’y rapportant :
→ passer le statut à “payée” met à jour la date de paiement.
→ passer le statut à “envoyée” met à jour la date d’envoi.
id_commande |
Identifiant unique de la commande |
reference |
Numéro de référence (il ne s’agit pas d’une clé unique). |
id_auteur |
Identifiant de l’auteur/client |
statut |
encours , attente , partiel , paye , envoye , retour_partiel , retour , erreur |
date |
Date de création |
date_paiement |
Date de paiement |
date_envoi |
Date d’envoi |
maj |
Date de la dernière mise à jour |
La table spip_commandes_details :
Pour le contenu des commandes, on parle de «détails» : chaque commande est constituée d’une ou plusieurs lignes de détails.
Un détail est tout élément qui participe au prix d’une commande.
On peut distinguer 2 types de détails :
- Les détails correspondants directement aux objets ou aux services commandés.
- Les détails «annexes» : il peut s’agir des frais de port, des frais de dossier, des ristournes etc.
Une ligne de détail comprend à minima les champs descriptif
et prix_unitaire_ht
, le cas échéant complétés par les champs taxe
et quantite
.
Dans le cas où l’objet commandé est un objet éditorial SPIP, des champs objet
et id_objet
permettent de l’identifier.
id_commandes_detail |
Identifiant unique du détail (attention au «s» à commandes) |
id_commande |
Identifiant de la commande concernée |
descriptif |
Texte décrivant le détail. S’il s’agit d’un objet éditorial, il peut s’agir de son titre, descriptif ou autre. |
quantite |
Quantité |
prix_unitaire_ht |
Prix Hors Taxe |
taxe |
Taxe (TVA) |
statut |
Statut |
objet |
Type d’objet s’il s’agit d’un objet éditorial |
id_objet |
Identifiant de l’objet s’il s’agit d’un objet éditorial |
maj |
Date de la dernière mise à jour |
Exemple des enregistrements en base pour une commande et ses détails
Prenons une commande de 2 objets avec TVA à 20%, comportant des frais de port et une ristourne. Dans la base de donnée, ça nous donne ceci :
1 ligne dans la table spip_commandes
id_commande | reference | id_auteur | statut | date | date_paiement | date_envoi | maj |
1 | xxxxxx | 1 | encours | 2014-05-14 09:00:00 | 0000-00-00 00:00:00 | 0000-00-00 00:00:00 | 2014-05-14 09:00:00 |
4 lignes dans la table spip_commandes_details
id_commandes
_detail |
id_commande | descriptif | quantite | prix
_unitaire_ht |
taxe | statut | objet | id_objet | maj |
1 | 1 | Gibolin 2000 | 2 | 8 | 0.2 | produit | 1 | 2014-05-14 09:00:00 | |
2 | 1 | Ripolin 5000 | 1 | 12 | 0.2 | produit | 2 | 2014-05-14 09:00:00 | |
3 | 1 | Frais de port | 0 | 4 | 0 | 2014-05-14 09:00:00 | |||
4 | 1 | Ristourne | 0 | -2 | 0 | 2014-05-14 09:00:00 |
Boucles et balises
Balises #PRIX
et #PRIX_HT
Grâce au plugin API prix, les balises #PRIX
et #PRIX_HT
permettent d’obtenir automagiquement les prix TTC et HT d’une commande ou d’un de ses détails.
Dans une boucle COMMANDES :
-
#PRIX
= somme des prix TTC des détails. -
#PRIX_HT
= somme des prix HT des détails.
Dans une boucle COMMANDES_DETAILS :
-
#PRIX
=#QUANTITE
* (#PRIX_UNITAIRE_HT
+ (#TAXE
*#PRIX_UNITAIRE_HT
)) -
#PRIX_HT
=#QUANTITE
*#PRIX_UNITAIRE_HT
.
Boucles
Exemple minimal de boucle affichant pour chaque commande un résumé de ses détails et son prix total TTC:
<BOUCLE_commandes(COMMANDES)>
<h4>Commande N°#ID_COMMANDE</h4>
<ul><BOUCLE_details(COMMANDES_DETAILS){id_commande}>
<li>[(#QUANTITE) *]#DESCRIPTIF = #PRIX</li>
</BOUCLE_details></ul>
Prix total TTC : #PRIX
</BOUCLE_commandes>
Gestion dans l’espace privé
Configuration
La page de configuration est accessible depuis le menu Configuration
> Commandes
On peut y gérer les 3 points suivants :
- La durée d’expiration des commandes ayant le statut «en cours». On considère que les commandes restant «en cours» pendant plus d’un certain temps sont des commandes abandonnées : il est inutile de les conserver dans la base.
- l’activation et le fonctionnement des notifications (cf. plus bas).
- L’affichage en page d’accueil de la liste des commandes «actives» (cf. plus bas).
Liste des commandes
Une page Commandes
est accessible depuis le menu Edition
.
L’encart à gauche sert à filtrer les commandes en fonction de leurs états, de leurs dates de création, et des auteurs/clients.
Au niveau de la liste, les commandes ayant le statut «envoyé» sont surlignées en vert, afin de repérer facilement les commandes terminées.
Fiche d’une commande
La fiche d’une commande est composé de 3 parties :
- Le contenu de la commande : il s’agit d’un tableau listant les détails de la commande.
- Les adresses : si le plugin Coordonnées est installé, sont affichées les adresses associées à la commande, ou à défaut celles associées à l’auteur de la commande.
- L’auteur/client de la commande : si le plugin Contacts et Organisations est installé, on affiche les infos du contact, sinon des infos sur le client.
A noter : Pour les adresses, il n’est pas nécessaire d’activer l’ajout de coordonnées aux commandes dans les options du plugin Coordonnées.
Commandes «actives»
Il est possible d’afficher en page d’accueil la liste des commandes «actives». il s’agit des commandes nécessitant une prise en charge. Pour se faire, il faut activer l’option dans la configuration du plugin, et choisir les statuts correspondants.
Notifications
Mise en place
On peut activer ’envoi d’emails de notification au vendeur et au client lorsque les commandes acquièrent certains statuts.
Le plugin «Notifications avancées» doît être installé. Le plugin Facteur est également fortement recommandé afin d’envoyer les messages au format HTML.
Rendez vous ensuite sur le formulaire de configuration du plugin pour activer et configurer les notifications.
Personnalisation des emails
Par défaut, les messages envoyés sont spartiates :
Leurs squelettes sont présents dans le répertoire /notifications
du plugin.
Pour chaque type de notification (vendeur
& client
), il y a 3 variantes :
-
commande_xxx_html.html
au format HTML. -
commande_xxx.html
au format texte brut. -
commande_xxx_court.html
au format court, type microblog ou SMS.
Par commodité, ces 6 squelettes incluent tous le même squelette mutualisé, avec différents paramètres pour moduler l’affichage : contenu_commande_mail.html
.
Il suffit de surcharger ce squelette pour le personnaliser selon vos besoins.
Si vous avez besoin de 2 squelettes vraiment différents pour les emails vendeur et client, vous pouvez au choix :
- Faire ça au niveau du squelette
contenu_commande_mail.html
en jouant sur le paramètre#ENV{qui}
:[(#ENV{qui}|=={client}|oui)<INCLURE{fond=mon_squelette_mail_client, env}>][(#ENV{qui}|=={vendeur}|oui)<INCLURE{fond=mon_squelette_mail_vendeur, env}>]
- Ou bien surcharger directement les 6 squelettes clients et vendeurs.
Fonctions utiles
Voici une liste non exhaustive de certaines fonctions, celles qui pourront vous être utiles lors de l’intégration du plugin dans votre projet. Pour les détails (paramètres etc.) et la liste complète, voir le site https://code.spip.net/commandes/.
commandes_lister_statuts Cette fonction retourne les différents statuts des commandes. On peut s’en servir comme filtre dans les squelettes pour obtenir la chaîne de langue d’un statut : [(#STATUT|commandes_lister_statut)] |
creer_commande_encours Crée une commande avec le statut «en cours» pour le visiteur actuel. La commande créée est «vide» : la fonction ne se charge pas de créer les détails. C’est le rôle des plugins tiers (Commandes de paniers par ex.). A noter : on considère qu’il ne peut y avoir qu’une commande «en cours» par session et par auteur. Si une telle commande est déjà présente dans la session, elle va être supprimée de la base et de la session avant la création de la nouvelle.
|
commandes_supprimer Permet de supprimer «proprement» une ou plusieurs commandes, en s’occupant également des données associées. Pour chaque commande à supprimer, la fonction effectue les actions suivantes : - suppression de la commande - suppression de ses détails - dissociation de ses adresses liées, et éventuellement suppression si elles se retrouvent orphelines. Exemple :
|
traiter_notifications_commande Envoie les notifications par email d’une commande, si les conditions sont réunies. Cette fonction est appelée lors de la création d’une commande, puis à chaque changement de statut. |
inc_commandes_reference_dist Cette fonction retourne une référence unique utilisée pour remplir le champ éponyme lors de la création d’une commande. Il s’agit du temps écoulé depuis le 1er janvier 1970, en secondes. Elle est destinée à être surchargée pour l’adapter à vos besoins. |
supprimer_commande Supprime «proprement» une commande. Fait appel à la fonction commandes_effacer , avec les mêmes effets donc.Exemple : #URL_ACTION_AUTEUR{supprimer_commande,#ID_COMMANDE,#SELF} |
instituer_commande Change le statut d’une commandes Exemple : #URL_ACTION_AUTEUR{instituer_commande,#ID_COMMANDE-envoye,#SELF} |
Discussions by date of activity
38 discussions
Sur un site 3.2.19 j’ai fait la mise à jour des plugins commandes (de la version 1.15.13 à 1.19.2) et paniers (de la version : 1.4.0 à 1.7.0),
mais pas de l’API prix toujours en 1.0.0 (vu les ennuis safehtml décrits sur le forum pour les nouvelles versions).
Je n’ai pas de customisation de fonctions de prix.
Mais depuis cette mise à jour (avant les prix sont corrects) la balise #PRIX (tout comme #PRIX_HT) arrondit le prix à l’euro supérieur.
Par exemple, avec une commande avec dans la table commandes_details d’un seul détail d’une quantité 1, sans taxe, de prix HT 19.91 Euros :
le résultat dans une BOUCLE_commande est:
#PRIX* affiche 20 ( tout comme #PRIX_HT*)
Qu’est-ce qui pourrait bien expliquer cet arrondi après mise à jour?
Merci!
De mémoire il y a eu un bug d’arrondi à un moment dans le plugin, mais ça a été corrigé de longue date. Il faut passer à une version à jour (la v1.0 a 4 ans !).
Pour l’histoire du safehtml il y a une solution temporaire, c’est dans un ticket, faut que je retrouve lequel.
Ah voilà, pour safehtml c’était là : https://git.spip.net/spip-contrib-extensions/intl/pulls/5#issuecomment-34336
Ok, Tcharlss,
Merci pour tout! Je vais donc voir avec le nouvel API prix.
Cheers!
Reply to this message
Bonjour,
je souhaite créer une page qui liste l’ensemble des objets commandés (qui dans mon cas sont soit des événements gratuits, événements payants, soit des articles) par auteur ayant effectué une commande.
Pourriez-vous m’aider ? Me donner des indications ?
Grand merci.
Bonjour,
La table spip_commandes_details contient toutes les infos sur les objets commandés.
De tête, cela pourrait se faire de cette façon (non testé, à adapter/corriger au besoin) :
bonjour et merci pour cette explication. Le résultat que me retourne
est équivalent à celui que me retourne #ID_OBJET dans la boucle précédente :(
Cette solution ne fonctionne pas. Pourriez vous me venir en aide ?
Reply to this message
Il y a une modification de CSS semble-t-il depuis SPIP 3 et donc en SPIP 4 la pagination en
du bloc Commandes (et Produits aussi d’ailleurs) sur la page d’accueil de l’admin n’est pas
reconnue :
Liste articles OK :
Liste produits et commande : pas d’équerre, les items de pagination sont empilés à gauche
Merci
Ça a normalement déjà été corrigé : https://git.spip.net/spip-contrib-extensions/commandes/commit/687261d54a6fbc03aaf19ffad640791e150070c2
Quelle version du plugin tu as ?
Arg, je m’aplatis de honte.
Ma faute, j’avais Commandes 2.19.1 et je viens d’aller chercher la 2.0.0 et c’est bon (il n’y a pas d’indication dans la page d’admin des plugins qu’il y a une mise à jour dispo).
Nul besoin :D
La v2 est bien disponible au téléchargement, mais elle est encore en état de test : https://plugins.spip.net/commandes
Peut-être que SVP ne propose pas de remplacer une version stable par une version test ? Je crois qu’il y a une évolution sur ce point dans la prochaine version de SPIP.
Reply to this message
Bonjour, j’ai une petite boutique associative et je souhaite améliorer certaines fonctionnalités, notamment la page “commande_panier” dans laquelle je bloque avec le squelette “inc-panier-description-emplette”.
- comment afficher des informations supplémentaires sur des objets qui comportent un prix (par exemple la date et le logo de l’article lié à un événement) ?
- si l’événement ne dispose pas d’un prix, j’affiche la date à l’aide de cette boucle :
. En revanche, s’il existe un prix, cela ne fonctionne pas.
- je n’arrive pas non plus à afficher le logo de l’article lié à l’événement :(
Je ne suis pas sûr d’avoir compris grand chose, ni surtout quel est le rapport spécifique avec le plugin Commandes.
desole, de ma faute. le fichier dont je parle (inc-panier-description-emplette) fait parti du plugin paniers (il se trouve dans le dossier formulaires). J’aimerais y ajouter des infos (logo de l’evenement ou de l’article lié à l’événement, etc.., mais je n’y arrive pas
Reply to this message
Bonjour,
Merci pour ce plugin que j’utilise sur quelques sites.
Savez-vous s’il va passer sur SPIP 4.0.0 ?
Merci d’avance
Hello, alors il marche déjà en SPIP 4, mais juste ça n’a pas encore été distribué en ZIP pour plugins.spip.
Cf le paquet.xml dans le dépôt : https://git.spip.net/spip-contrib-extensions/commandes
Tu as un bouton Télécharger en ZIP en haut à droite, si tu veux pas attendre. Sinon on va taguer ça pour que ça génère le paquet ZIP pour le dépôt des plugins.
Reply to this message
Bonjour,
Je me permets de vous demander une petite aide.
Ce plugin rajoute deux types d’adresse dans le plugin coordonnées.
Je voudrais rajouter dans le plugin coordonnées des types de numeros tel.
Donc en m’inspirant de votre commandes_pipelines.php, j’ai repris la fonction commandes_types_coordonnees($liste) et adapté suivant
et malgré de multiples corrections, ma fonction n’est pas efficace
quelle est mon erreur ?
Merci
Bé… copier le nom d’une fonction qui implémente un pipeline alors que c’est pas du tout comme ça qu’on utilise un pipeline ?
Le plugin Commandes *implémente* le pipeline “types_coordonnees” fourni par le plugin Coordonnées. Donc si tu veux modifier/augmenter aussi il faut de même l’implémenter *de ton côté* donc surtout pas avec le même nom de fonction.
https://programmer.spip.net/Qu-est-ce-qu-un-pipeline
Bonsoir
J’ai essayé de suivre tes explications, tjs sans résultat, pas d’erreur de mon plugin, mais toujours pas d’ajout de type de numéros,
Voici les corrections que j’ai cru comprendre suivant ton message, est-ce la bonne voie ?
Merci
le paquet.xml
Bé non t’as pas suivi la doc :)
Si ton préfixe c’est “truc” par défaut toutes tes pipelines doivent être préfixés par… le préfixe, donc “truc_”, sauf quand on précise un autre nom de fonction dans l’attribut du XML. Du coup je vois pas pourquoi ta fonction s’appelle “numeros_…”. Faut aussi bien penser à passer dans la page d’admin des plugins à chaque fois qu’on change le XML.
Merci,
en effet je n’avais pas bien lu ton document, et donc pas appréhendé le champ prefix du paquet /o\,
j’ai bien ajouté mes type d’entrée, mais vu la complexité pour gerer install et desinstall, je me suis penché sur le plugin champs-extras qui sera plus compréhensible pour la maintenance.
Reply to this message
Bonjour, uniquement après la validation d’une commande, je souhaiterai faire apparaitre un lien vers une url exterieure au site sur la page d’un objet - commandé par l’utilisateur - (dans mon cas, un evenement). L’idée est que ce lien ne doit apparaitre sur la page de l’objet que lorsqu’un utilisateur a finalisé sa commande. Il manque des arguments dans ma boucle... Et je seche. Pourriez vous m’aider ?
<B_commandeok><BOUCLE_commandeok(CONDITION){si #SESSION{id_commande}|oui}> <hr> <a href="[(#VISIO_LIEN)]">Se connecter à la visioconférence</a> </BOUCLE_commandeok></B_commandeok>
Bonjour,
Je ne sais pas ce que tu obtiens avec ta boucle.
Il faut peut être ajouter un critère de statut de la commande comme :
<BOUCLE_commande(COMMANDES) {id_commande?} {statut IN paye}>
et id_auteur? ??
dd
Ça ne peut pas être #SESSION si ton but c’est qu’illes le retrouvent à tout moment plus tard, même après s’être déconnecté et reconnecté.
Commence par formuler en phrase ce que tu cherches à sortir, il me semble un truc du genre : “s’il y a un utilisateur connecté (auteur) uniquement, est-ce qu’il y a au moins une commande payée par cet utilisateur connecté qui dans ses détails de commande (commandes_details) contient l’objet XXX”.
Soit tu peux essayer de faire tout dans la même boucle si t’arrives à trouver la bonne jointure, la bonne combinaison à faire. Soit il faut faire plusieurs boucles.
Du genre (mais là je fais ça de tête à l’arrache)
Bonjour, et merci de votre aide. OUI, c’est bien ca. Je souhaite qu’une personne qui s’est inscrite puisse voir le lien. La boucle indiquée n’a pas fonctionnée. J’ai testé ceci sans plus de succès ;(
Si vous avez des idées... JE PRENDS !!!
Merci bcp.
RE-Bonjour,
après un jus de tomate et un 20h rigolo, je me suis dit que j’allais y retourner. Du coup, grace à votre aide, voici une boucle qui semble donner un résultat pas mal :
<BOUCLE_commandeautre(COMMANDES) {id_commande?}{id_auteur=#SESSION{id_auteur}}{statut IN paye}><BOUCLE_commandeautredetail(COMMANDES_DETAILS){objet=evenement}{id_objet=#ID_EVENEMENT}>[<hr><a href="(#VISIO_LIEN|unique)">Se connecter à la visio</a>]</BOUCLE_commandeautredetail></BOUCLE_commandeautre>
Qu’en dites vous ? Ca vous semble bien et correct comme boucle ?
Ce que je souhaite est très bien résumé par RastaPopoulos, à savoir : qu’un lien (champs extra nommé ici visio_lien) ne s’affiche sur la page événement choisie qu’une fois une commande avec le statut “payée” a été effectué par ce même auteur. Les internautes n’ayant pas commandé cet “article” ne voient pas ce bouton. Les internautes non enregistrés ne voient pas non plus ce bouton. Personne ne doit le voir, si ce n’est que les personnes qui ont effectué la commande de ce produit (événement) et qui ont obtenu le statut “payé”.
bé si ça marche… c’est bon ? :)
Mais en fait moi je te dirais que le plus propre ça serait plutôt d’entourer ton lien d’un #AUTORISERvoir_viso, evenement, #ID_EVENEMENT|oui
Et ensuite tu fais une autorisation en PHP où tu mets ce que tu veux, donc la même chose, aller tester si la personne a payé au moins une fois. Mais on peut très bien imaginer que ça change, et que c’est soit l’avoir payé dans l’année passé, ou tout autre test plus compliqué. Et tout ça sera regroupé dans une autorisation dédiée. C’est mieux rangé, plus propre à maintenir, et tu peux le réutiliser en plusieurs endroits.
Après le encore mieux, si t’as rien d’autre qui est sessionné dans ce morceau de squelette, le mieux c’est quand même de faire ton test d’autorisation (ou tout ce qui a rapport avec la session de l’utilisateur) pour une fois dans du PHP dans le squelette (c’est en gros le seul cas où c’est ce qui est recommandé).
Un truc du genre
Ça fait que le squelette ne sera pas sessionné et n’aura pas un cache compilé différent par visiteur. C’est seulement à l’exécution finale que ça va tester l’autorisation du visiteur.
Toujours + ^^.
Merci de vous intéresser à mes problématiques. Je vais tester avec #AUTORISER. Et puis j’aimerais aussi que #MONSUPERLIEN soit envoyé par email à ceux qui l’ont commandé ! Alors avant j’étais à la ramasse, avec notifications avancées, je suis sous terre ;( Je vous tiens informé :).
Bonsoir à vous deux,
je n’y arrive pas avec #AUTORISER, mais je pense être bien avec la boucle suivante :
<BOUCLE_recupliensicommande(COMMANDES) {id_commande?}{id_auteur=#SESSION{id_auteur}}{statut IN paye}><BOUCLE_recupliensicommandedetail(COMMANDES_DETAILS){id_commande?}{objet=evenement}{id_objet=#ID_EVENEMENT}> [<hr><a href="(#VISIO_LIEN|unique)">Se connecter à la visioconférence</a>] </BOUCLE_recupliensicommandedetail></BOUCLE_recupliensicommande>
En revanche, pour faire envoyer mon super lien (#VISIO_LIEN ; champs extra d’un événement) par email une fois la commande validée, je suis bien à la ramasse... Si des exemples existent... Je continu de chercher.
Merci !
Reply to this message
Bonjour,
Le mail “Votre commande” reçue par le client reste en français , même si la commande est passée avec une autre langue (notamment l’anglais “en” qui est bien complet) .
J’ai copié sous squelettes/notifications une version de contenu_commande_mail.html
pour y voir
#LANG
et#ENV{lang}:
ça reste toujours “fr”.Que faudrait-il ajouter pour avoir un mail dans la bonne langue?
(spip 3.2.7 , plugin commandes 1.15.13 notifications avancées 0.4.4 )
C’est bien un bug, mais pas de ce plugin.
C’est notifications avancées 0.4.4
Je le signalerai donc sur le bon forum
Oui on a vu ça récemment aussi pour un site multilingue, il manque le passage d’une langue dans le contexte des squelettes de contenu de mail dans Notifs avancées (qui partent avec avec des tâches programmées, donc ça peut être sur le hit php de n’importe quel autre visiteur ne naviguant pas sous la même langue).
Ok,
Pour avoir la bonne langue provisoirement j’ajoute la langue aux options dans la fonction pipeline de notifications avancées. Puis je la récupère dans notifications_envoyer pour le contexte des recuperer_fonds.
Ça a bien été corrigé dans Notifs avancées il y a 2 mois :
https://git.spip.net/spip-contrib-extensions/notifications_avancees/commit/f3ee10569d7f22c1982a8ea26fd86acaa65946f2
Reply to this message
Bonjour à tous,
Dans un(e tentative de dev de) tunnel de commande, j’utilise ce plugin avec un SPIP 3.2, Produits, Déclinaisons prix, Prix objets, Paniers, Coordonnées, Contacts et Organisations, et Livraisons. J’essaie de comprendre comment tout cela s’articule, et vos messages sont d’une grande aide, mais je bloque depuis quelques jours sur le récap de commande. En me rendant dans l’administration des commandes, je m’aperçois que :
- la désignation des déclinaisons produits sont bien prises en compte, mais que la colonne “contenu lié” (ou “Objet”) reste vide ; le prix de la commande est cependant bien incrémenté,
- le client est bien lié, avec le n° auteur et le n° contact, mais aucune adresse n’est associée à la commande (alors que j’ai bien créé une adresse de facturation obligatoire et éventuellement une adresse de livraison, avec le plugin Profils),
- aucun frais de livraison ne sont mentionnés, alors que j’ai paramétré ces frais et renseigné des dimensions et poids d’articles...
Bien entendu avec tout ça, le formulaire #adresser_commande ne fonctionne pas non plus, bref !
Un truc m’échappe c’est sûr, est-ce que ce sont des liaisons qu’il manque quelque part, que je ne m’y suis pas pris correctement, mais quoi où comment, ça je n’en ai pas la moindre idée, après avoir pourtant creusé (à hauteur de mon niveau de compréhension), je m’en remets donc à vos lumières... =)
Bonjour,
Le plugin Commandes ne reconnaît que 2 sources pour les adresses : soit celles liées directement aux commandes si tu as le plugin Coordonnées, soit celles enregistrées directement dans la commande si tu as le plugin Livraison (il ajoute des champs dans la table spip_commandes).
Hors via le plugin Profils, tu édites les adresses liées à l’auteur SPIP, elles n’ont aucune association avec la commande. Il te faudrait donc les copier puis les associer à la commande par la suite via un pipeline. Mais quand bien même, ça pose d’autres problèmes, je déconseille d’utiliser Profils pour gérer les adresses d’une commande.
Et surtout dans ton cas il y a la question des frais de livraison : dans ce cas pas le choix, il faut utiliser le formulaire #adresser_commande pour la saisie des adresses, there is no alternative comme dirait l’autre. C’est par le biais de ce formulaire que les frais sont ajoutés ou mis à jour dans la commande.
Le truc, c’est que pour l’instant Livraison ne prend pas en compte le plugin Coordonnées : il enregistre les adresses directement dans la commande. Mais elles seront bien visibles dans la fiche de la commande dans le privé.
Donc au final je dirais : retire les adresses de livraison/facturation de la config du profil utilisé dans ton tunnel, puis utilise le formulaire adresser_commande, et le tout sera joué.
Voilà, sinon je n’utilise pas les plugins Déclinaisons prix et Prix objets, donc je ne peux en dire plus sur ce sujet.
Merci tcharlss !!
Mais ça veut dire que les clients devront re-remplir l’adresse à chaque commande si je comprends bien... ?
Est-ce qu’il y aurait un moyen d’injecter ou proposer d’injecter ou lier les adresses (et autres coordonnées) de Coordonnées dans les adresses de Livraison (contenues dans la table Commandes) par un pipeline(, et éventuellement inversement) ?
Dommage de se heurter à cette “incompatibilité”, le plugin Coordonnées est top, et Livraison l’est tout autant (comme tous les autres d’ailleurs, et c’est sincère !!!). À moins de faire le choix d’inclure les frais d’expédition dans le prix des produits, mais je trouve que c’est moins transparent vis-à-vis du client.
Pour essayer de mieux comprendre (et m’y retrouver), j’ai pris le problème dans l’autre sens et ai recommencé une installation à partir d’un SPIP tout neuf avec API Prix, Commandes, Livraison, Paniers, Produits et Banques et Paiements, en me basant sur le squelette de Cerdic shop-draft. Le tunnel de commande est OK pour le moment, me reste “plus qu’à” comprendre comment ça s’articule avec Déclinaisons prix et Prix objets, et si ça peut aider d’autres rookies comme moi je viendrai compléter (vague impression de submersion entre les différents plugins, Tutocommerce (que je recommande pour comprendre le chainage des ACTIONS, mais qui n’éclaire ni sur l’identification du visiteur [1] ni sur l’étape de livraison), Zcommerce — surtout quand on n’utilise pas les squelettes Z ^_^, shop-draft, etc, alors si ça peut être utile à d’autres !).
Les conseils, recommandations, trucs et astuces sont bien entendu les bienvenus, et je prends aussi toute piste qui permettrait de lier les coordonnées de Coordonnées et celles de Livraison, et tout retour sur un fonctionnement avec les Déclinaisons. Merci ! =D
Le plugin Livraison a prévu ce cas : les adresses sont pré-remplies avec celles de la commande précédente. Pour la 1ère commande je ne sais plus s’il y a un fallback, mais en tout cas dès la 2ème c’est pré-rempli à coup sûr.
Pour l’instant la seule option c’est de faire un dérivé du formulaire adresser_commande en le basant sur des coordonnées.
C’est possible hein, mais si tu veux du simple à implémenter et du maintenu, je conseille de garder le fonctionnement du plugin livraison pour l’instant (et donc pas de coordonnées sur les commandes).
Il n’empêche que c’est une évolution intéressante, surtout depuis que coordonnées sait gérer les bons formats d’adresses pour tous les pays, mais ça demande un peu de réflexion pour faire ça proprement.
Oui c’est dans la liste des todos de longue date :D
La cité idéale ne s’est pas construite en un jour ! =)
Grand merci pour les conseils ! Je vais effectivement rester sur du
je crois que ce sera plus sage, et pertinent ^_^
Au risque d’être hors sujet, concernant l’identification, et histoire d’être sûre : est-ce suffisant juste avec un système de pages du tunnel ou est-il préférable d’inclure ces pages dans des articles d’une zone restreinte pour plus de sécurité ? Tout est tellement imbriqué que je ne sais pas trop où publier...
Je ne sais pas si j’ai bien compris la dernière question, mais généralement dans de l’achat, on peut (on doit pouvoir) tout démarrer en anonyme, c’est seulement à l’une des étapes à l’intérieur du tunnel, que là on demande à soit s’inscrire, soit se connecter et vérifier ses infos, et du coup on se retrouve connecté (pour l’inscription : ajouter le plugin “Connexion à l’inscription”). Et du coup une fois un utilisateur sous la main, on peut enfin générer la vraie commande finale (avant c’est juste un panier temporaire).
Bonjour RastaPopoulos,
pour préciser mon interrogation : j’ai cru voir des pages qui comprenaient “de quoi” (je vais pas me lancer dans de grands discours ornithologiques quand je peine à différencier un corbeau d’un moineau, hein) reconnaître un utilisateur connecté, au moins à l’étape de validation de panier, avec l’inclusion à un moment ou à un autre d’un formulaire d’identification (connexion #LOGIN, #LOGIN_PUBLIC ou inscription #FORMULAIRE_INSCRIPTION).
Mais ces boucles d’autorisation (? moineau ?), pas forcément bien utilisées car non maîtrisées ( :-) ), sont-elles utilisables telles quelles ou suffisantes en terme de sécurité, ou est-il préférable d’intégrer chaque page comportant des informations personnelles (a priori à partir de commande, livraison, puis les éventuelles pages d’un espace perso), dans autant d’articles répertoriés dans une rubrique qu’on appellerait “Espace perso” (par exemple), gérée par Accès restreint (avec effectivement Connexion à l’inscription, Mot de passe dès l’inscription, la gestion de Profils, etc...) ?
Suis-je en train d’enfoncer une porte ouverte ou est-ce que j’ai raté une marche ou alors suis-je en train de monter une tour de Babel en chantilly ?
Non, c’est dans les squelettes ou des différentes étapes de ton tunnel, que tu dois (si l’étape en question en a besoin…) testé si l’utilisateur est connecté ou pas, et lui dire de se connecter ou s’inscrire si ce n’est pas le cas.
Typiquement pour le panier ce n’est pas le cas, et après le panier tu rediriges généralement vers une étape “Mes informations” qui si connecté affiche le form de profil, mais si pas connecté, ça afficher le form de connexion et celui d’inscription. Etc.
Avec tcharlss on a commencé un plugin permettant de faciliter la création de tunnel : https://git.spip.net/spip-contrib-extensions/tunnels
Reply to this message
Sur cette page : ?exec=commandes_detail_edit&reference=2019031300....
lorsque l’on veut créer et valider un détail de commande le champ descriptif est rouge et n’est pas rempli automatiquement même si l’on a indiqué un Type du contenu SPIP et un Identifiant du contenu SPIP
(dans mon cas produit et son ID)
Effectivement si le champ peut être rempli automatiquement, il ne devrait pas être obligatoire.
Après en enlevant l’obligation pour tester, je ne reproduis pas l’erreur que tu indiques : tu as bien rempi les champs “type de contenu SPIP” et “Identifiant du contenu SPIP” et laissé le descriptif vide ?
Oui c’est ce que j’ai fait.
(l’infobulle “veuillez compléter ce champ” est là mais pas visible sur la capture)
merci
C’est corrigé dans la prochaine version qui devrait être disponible au téléchargement bientôt (tout de suite si tu es en svn)
Youpi
Merci
Reply to this message
Add a comment
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
Merci d’avance pour les personnes qui vous aideront !
Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.
Follow the comments:
|
