[spip-dev] Plugin pour gérer des livraisons en points relais

Hello la liste,

Les Éditions de la Cerise ont besoin de faire des livraisons en points relais, je vais donc me coller à la tâche.
On a retenu Mondial Relay pour les tarifs et la doc technique accessible.
Le but est de faire un plugin le plus générique possible qui fonctionne de concert avec livraison (celui de cedric) et commandes.

Ci-dessous un cachier des charges préliminaire après avoir consulté la doc de Mondial Relay + l’implémentation du plugin pour Woocommerce + survol de la doc de Relay Colis. Rien n’est encore gravé dans le marbre.

Dans les grandes lignes il s’agirait d’implémenter ces fonctionnalités :

  • Enregistrer chaque livraison individuellement (pour le suivi, les dates, etc)

  • Communiquer avec des prestas pour enregistrer les livraisons et récupérer des infos : permaliens de suivi, étiquettes à coller sur les colis, liste des points relais, etc.

Plutôt que de faire un plugin propre à Mondial Relay, je pense faire plutôt comme Bank : un plugin « Points Relais » générique avec plusieurs prestataires possibles à activer. Dans un 1er temps il n’y aurait que Mondial Relay, mais ça permettrait d’en ajouter d’autres par la suite.

Il s’appuyera sur le plugin livraison : de nouveaux modes de livraison seront ajoutés/activés en fonction des prestas sélectionnés. Donc si on a implémenté un tunnel de commande utilisant #FORMULAIRE_ADRESSER_COMMANDE, rien à changer à priori, ça sera s’insèrera dedans.

Côté public, le workflow devrait être en principe similaire pour tous les prestas :

  1. La personne choisit un mode de livraison « Point Relai X »

  2. Elle est invitée à choisir le point relai sur une carte. Soit depuis une modale donc sans quitter le formulaire, soit en ajoutant une étape supplémentaire en bidouillant le redirect, mais sans quitter le site dans tous les cas. Elle ne peut passer à l’étape suivante si aucun choix n’est fait.

  3. Après confirmation, ce choix est transmis et enregistré chez le presta, et également sur le site spip.

  4. Enfin, si le presta propose le suivi, le permalien est inséré dans le mail de notif de la commande, et peut-être aussi dans le message de retour de bank.

Côté sql, cela supposerait 2 choses :

  1. Augmenter la table spip_livraisonmodes afin d’identifier les modes de livraison qui correspondent à des prestas points relais
  2. Ajouter une table pour enregistrer les livraisons

C’est pour ce 2ème point que je m’interrogationne. Cette table n’est pas forcément propre aux points relais, elle est nécessaire pour ces derniers mais pourrait servir pour n’importe quel mode de livraison.
De base elle contiendrait juste ces infos :

  • le mode de livraison lié

  • l’auteur lié

  • la commande liée

  • un état (colis enregistré, en cours de transfert, etc. Cela dépend de chaque mode de livraison. À priori c’est différent d’un statut)

  • l’adresse de livraison (texte libre ou id_adresse, à voir)

  • le nécessaire pour obtenir un permalien pour le suivi (ou directement le lien)

Pour les points relais, il y aurait en plus : la référence du point relai sélectionné, une référence unique propre au presta, etc.
Bref, elle pourrait être fournie directement par le plugin Livraison, puis utilisée et augmentée par le plugin Points Relais selon ses besoins.

Enfin pour donner une idée de la gestion dans le privé, on aurait au final quelque chose d’assez proche de l’extension (payante :p) de Woocommerce :

  • Config d’un presta :
  • Suivi des livraisons :
  • Vue de la livraison sur la page d’une commande (étiquettes + suivi) :

Voilà en gros.
Si vous avez des remarques/objections, c’est le moment.

Les Éditions de la Cerise ont besoin de faire des livraisons en points
relais, je vais donc me coller à la tâche.

cool: effectivement c'est un peu la brique qui manque dans la suite des
plugins "kit boutique"

Plutôt que de faire un plugin propre à Mondial Relay, je pense faire
plutôt comme Bank : un plugin « Points Relais » générique avec plusieurs
prestataires possibles à activer. Dans un 1er temps il n'y aurait que
Mondial Relay, mais ça permettrait d'en ajouter d'autres par la suite.

très bonne idée! Tu envisage un plugin sur la zone et ouvert à tous les
contributeurs ou une formule à la "bank" sur une forge "externe" où
toutes les contributions passent par PR ?

2. Ajouter une table pour enregistrer les livraisons

C'est pour ce 2ème point que je m'interrogationne. Cette table n'est pas
forcément propre aux points relais, elle est nécessaire pour ces
derniers mais pourrait servir pour n'importe quel mode de livraison.
De base elle contiendrait juste ces infos :
* le mode de livraison lié
* l'auteur lié
* la commande liée
* un état (colis enregistré, en cours de transfert, etc. Cela dépend
de chaque mode de livraison. À priori c'est différent d'un statut)
* l'adresse de livraison (texte libre ou id_adresse, à voir)
* le nécessaire pour obtenir un permalien pour le suivi (ou
directement le lien)

Pour les points relais, il y aurait en plus : la référence du point
relai sélectionné, une référence unique propre au presta, etc.
Bref, elle pourrait être fournie directement par le plugin Livraison,
puis utilisée et augmentée par le plugin Points Relais selon ses besoins.

vu comme ça c'est séduisant mais pas certain qu'essayer de faire une
base générique complètement intégrable avec le prestataire ne soit pas
une embuscade à moyen terme : pour avoir fait de l'intégration de
modules de livraisons sur un outil de e-commerce, j'ai pu constater que
certains d'entre eux ne se gênent pas pour faire des mise à jour de
sauvages avec rupture complète de compatibilité sans se poser de questions!
=> peut être qu'une base "livraison" la plus agnostique possible serait
suffisante, la connexion avec un prestataire étant limité à une liaison ?

très bonne idée! Tu envisage un plugin sur la zone et ouvert à tous les
contributeurs ou une formule à la "bank" sur une forge "externe" où
toutes les contributions passent par PR ?

Je pense le mettre sur la zone pour encourager les contributions. En ce
qui me concerne ça va être fait sur mon temps libre, dans l'immédiat
c'est pour dépanner des amis. Et donc le temps disponible étant limité,
autant ouvrir les contributions :slight_smile:

vu comme ça c'est séduisant mais pas certain qu'essayer de faire une
base générique complètement intégrable avec le prestataire ne soit pas
une embuscade à moyen terme : pour avoir fait de l'intégration de
modules de livraisons sur un outil de e-commerce, j'ai pu constater que
certains d'entre eux ne se gênent pas pour faire des mise à jour de
sauvages avec rupture complète de compatibilité sans se poser de questions!
=> peut être qu'une base "livraison" la plus agnostique possible serait
suffisante, la connexion avec un prestataire étant limité à une liaison ?

Oui je crois que n'aurais pas dû rentrer si tôt dans le détail pour le
cdc, surtout avant d'avoir fini de poser les specs.
Mais dans l'idée je pense que ça rejoint ce que tu dis : pour
reformuler, il s'agirait bien d'avoir une base fonctionnelle toute
simple, et par dessus chaque presta pourra ajouter des fonctionnalités
afin d'avoir une intégration plus ou moins poussée.

La base fonctionnelle me semble être ça : un widget pour choisir un
point relai sur une carte, et l'enregistrement de ce choix sur le site.

Et ensuite chaque presta pourrait ajouter des fonctionnalités
supplémentaires de cet ordre : faire le suivi d'une livraison, récupérer
les étiquettes à imprimer, etc.
Mais tu as raison, il faudra limiter les fonctionnalités pour ne pas se
perdre en maintenance.

Mondial Relay permet une intégration relativement complète (des
webservices basés sur du xml, youpi), mais pour Relais Colis il semble
n'y avoir aucune API donc l'intégration se résumerait à un lien vers
leur BO et basta.

Merci pour les retours :slight_smile: