rikazarai/sylius-mondial-relay-plugin

Plugin Sylius 2.1 pour l'intégration Mondial Relay avec sélection de points relais et impression d'étiquettes

v1.0.3 2025-08-27 13:13 UTC

This package is auto-updated.

Last update: 2025-08-27 13:48:44 UTC


README

Latest Version PHP Version Sylius Version Symfony Version License

Plugin Sylius moderne pour l'intégration de Mondial Relay avec sélection de points de retrait et impression d'étiquettes.

Développé par @RiKaZaRai 🚀

✨ Fonctionnalités

  • 🎯 Sélection de points relais avec interface utilisateur moderne
  • 🗺️ Cartographie interactive (OpenStreetMap ou Google Maps)
  • 🏷️ Impression d'étiquettes d'expédition automatique
  • 💰 Calcul de prix configurable par tranches de poids
  • 🌐 Support multilingue (FR/EN)
  • 📱 Interface responsive compatible mobile
  • API moderne avec support HTTP Client de Symfony
  • 🧪 Compatible Sylius 2.1, Symfony 7.3, PHP 8.4

📋 Prérequis

  • PHP 8.3+
  • Sylius 2.1+
  • Symfony 7.3+
  • Extension SOAP de PHP
  • Compte marchand Mondial Relay

🚀 Installation

1. Installation via Composer

composer require rikazarai/sylius-mondial-relay-plugin

2. Enregistrer le plugin

Ajoutez le plugin à config/bundles.php :

<?php
return [
    // ...
    RiKaZaRai\SyliusMondialRelayPlugin\RiKaZaRaiSyliusMondialRelayPlugin::class => ['all' => true],
];

3. Configuration

Créez le fichier config/packages/rikazarai_sylius_mondial_relay.yaml :

rikazarai_sylius_mondial_relay:
    wsdl: '%env(MONDIAL_RELAY_WSDL)%'
    merchant_id: '%env(MONDIAL_RELAY_MERCHANT_ID)%'
    private_key: '%env(MONDIAL_RELAY_PRIVATE_KEY)%'
    map_provider: open_street_map # ou 'google'
    google_api_key: '%env(GOOGLE_API_KEY)%' # requis si map_provider: google
    enable_ticket_printing: true

Sylius Mondial Relay Plugin

Latest Version PHP Version Sylius Version Symfony Version License Downloads

Plugin Sylius moderne pour l'intégration de Mondial Relay avec sélection de points de retrait et impression d'étiquettes.

Développé par @RiKaZaRai 🚀

✨ Fonctionnalités

  • 🎯 Sélection de points relais avec interface utilisateur moderne
  • 🗺️ Cartographie interactive (OpenStreetMap ou Google Maps)
  • 🏷️ Impression d'étiquettes d'expédition automatique
  • 💰 Calcul de prix configurable par tranches de poids
  • 🌐 Support multilingue (FR/EN)
  • 📱 Interface responsive compatible mobile
  • API moderne avec support HTTP Client de Symfony
  • 🛠️ Configuration via interface admin (plus de fichiers .env !)
  • 🧪 Compatible Sylius 2.1, Symfony 7.3, PHP 8.4
  • 🔧 Test de connexion API intégré
  • 🏢 Multi-canal - Configuration par boutique

📋 Prérequis

  • PHP 8.4+
  • Sylius 2.1+
  • Symfony 7.3+
  • Extension SOAP de PHP
  • Compte marchand Mondial Relay

🚀 Installation

1. Installation via Composer

composer require rikazarai/sylius-mondial-relay-plugin

2. Enregistrer le plugin

Ajoutez le plugin à config/bundles.php :

<?php
return [
    // ...
    RiKaZaRai\SyliusMondialRelayPlugin\RiKaZaRaiSyliusMondialRelayPlugin::class => ['all' => true],
];

3. Routing

Ajoutez les routes dans config/routes.yaml :

rikazarai_sylius_mondial_relay_plugin:
    resource: "@RiKaZaRaiSyliusMondialRelayPlugin/Resources/config/routing.yaml"

# Routes d'administration
rikazarai_sylius_mondial_relay_admin:
    resource: "@RiKaZaRaiSyliusMondialRelayPlugin/Resources/config/admin_routing.yaml"
    prefix: /admin

4. Modification de l'entité Shipment

Dans votre entité src/Entity/Shipping/Shipment.php :

<?php

namespace App\Entity\Shipping;

use Doctrine\ORM\Mapping as ORM;
use Sylius\Component\Core\Model\Shipment as BaseShipment;
use RiKaZaRai\SyliusMondialRelayPlugin\Model\PickupPointTrait;

#[ORM\Entity]
#[ORM\Table(name: 'sylius_shipment')]
class Shipment extends BaseShipment
{
    use PickupPointTrait;
}

5. Migration de base de données

php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate

6. Configuration Webpack (optionnel)

Ajoutez les assets JavaScript dans votre configuration Webpack :

// webpack.config.js (shop)
Encore
    // ...
    .addEntry('rikazarai-mondial-relay', './vendor/rikazarai/sylius-mondial-relay-plugin/src/Resources/public/js/mondial-relay.js')

⚙️ Configuration

Configuration via Interface Admin (Recommandé) 🆕

  1. Connectez-vous à l'administration Sylius
  2. Allez dans "Configuration""Mondial Relay"
  3. Remplissez vos identifiants Mondial Relay :
    • Identifiant marchand (ex: BDTEST13)
    • Clé privée
    • Informations expéditeur (nom, adresse, etc.)
  4. Testez la connexion avec le bouton dédié
  5. Choisissez votre fournisseur de cartes :
    • OpenStreetMap (gratuit)
    • Google Maps (nécessite une clé API)
  6. Sauvegardez

Avantages de la configuration admin :

  • 🔒 Plus sécurisé - Pas de clés dans les fichiers
  • 👥 Multi-utilisateurs - Chaque admin peut configurer
  • 🖥️ Interface graphique - Plus simple à utiliser
  • 🏢 Multi-canal - Configuration différente par boutique
  • 🧪 Test intégré - Vérification automatique des identifiants

Configuration Legacy (.env)

Si vous préférez l'ancienne méthode, ajoutez à votre fichier .env :

MONDIAL_RELAY_WSDL=https://api.mondialrelay.com/Web_Services.asmx?WSDL
MONDIAL_RELAY_MERCHANT_ID=votre_id_marchand
MONDIAL_RELAY_PRIVATE_KEY=votre_cle_privee
GOOGLE_API_KEY=votre_cle_google_maps # optionnel

🎛️ Tarification

Le plugin utilise un système de tranches de prix par poids. Configuration par défaut :

  • Jusqu'à 500g : 3,90€
  • Jusqu'à 1kg : 4,90€
  • Jusqu'à 2kg : 5,90€
  • Jusqu'à 5kg : 6,90€
  • Jusqu'à 10kg : 8,90€
  • Jusqu'à 20kg : 12,90€
  • Jusqu'à 30kg : 16,90€

Ces tarifs sont configurables dans l'administration Sylius lors de la création de la méthode d'expédition.

📖 Utilisation

1. Création de la méthode d'expédition

  1. Allez dans l'administration Sylius : ConfigurationMéthodes d'expédition
  2. Créez une nouvelle méthode
  3. Sélectionnez "Mondial Relay" comme calculateur
  4. Configurez les tranches de prix selon vos besoins

2. Processus de commande

  1. Le client sélectionne "Mondial Relay" comme mode de livraison
  2. Une interface apparaît pour rechercher des points relais
  3. Le client saisit son code postal et recherche
  4. Une liste et une carte des points relais s'affichent
  5. Le client sélectionne son point relais préféré
  6. Les informations sont sauvegardées avec la commande

3. Gestion des commandes

  1. Dans l'administration, accédez aux détails d'une commande
  2. Si la commande utilise Mondial Relay et a un point relais sélectionné
  3. Un bouton "Imprimer l'étiquette Mondial Relay" apparaît
  4. Cliquez pour générer et imprimer l'étiquette

🗺️ Fournisseurs de cartes

OpenStreetMap (Gratuit, par défaut)

  • Gratuit et open source
  • Aucune clé API requise
  • Respect de la vie privée

Google Maps

  • 🔑 Clé API Google requise
  • Interface familière pour les utilisateurs
  • Recherche avancée avec suggestions de lieux
  • ⚠️ Payant au-delà du quota gratuit

🧪 Tests

# Tests unitaires
vendor/bin/phpunit

# Tests Behat
vendor/bin/behat

🔧 Développement

Structure du projet

src/
├── Controller/           # Contrôleurs API et admin
├── DependencyInjection/ # Configuration bundle
├── Entity/              # Entités Doctrine
├── EventListener/       # Gestionnaires d'événements
├── Form/                # Types de formulaires
├── Menu/                # Menu builders
├── Migrations/          # Migrations base de données
├── Model/               # Traits et modèles
├── Service/             # Services (API client, etc.)
├── ShippingCalculator/  # Calculateur de frais
├── Twig/                # Extensions Twig
└── Resources/
    ├── config/          # Configuration YAML
    ├── public/          # Assets JavaScript/CSS
    ├── translations/    # Traductions FR/EN
    └── views/           # Templates Twig

API Endpoints

  • GET /mondial-relay/pickup-points/search?zipcode={code} - Recherche de points relais
  • POST /mondial-relay/pickup-points/select - Sélection d'un point relais
  • GET /mondial-relay/pickup-points/map/{zipcode} - Interface carte
  • GET /admin/orders/{token}/mondial-relay/print-ticket - Impression d'étiquettes

🤝 Contribution

Les contributions sont les bienvenues ! Merci de :

  1. Fork le projet
  2. Créer une branche pour votre fonctionnalité (git checkout -b feature/amazing-feature)
  3. Commiter vos changements (git commit -m 'Add amazing feature')
  4. Pousser vers la branche (git push origin feature/amazing-feature)
  5. Ouvrir une Pull Request

🐛 Signaler un bug

Si vous trouvez un bug, merci d'ouvrir une issue avec :

  • Une description détaillée du problème
  • Les étapes pour reproduire
  • Votre environnement (PHP, Sylius, Symfony versions)
  • Les logs d'erreur si disponibles

📝 Licence

Ce plugin est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

🙏 Remerciements

🔗 Liens utiles

📊 Statistiques

GitHub stars GitHub forks GitHub issues

Développé avec ❤️ par @RiKaZaRai pour la communauté Sylius

🚀 Version 2.0 avec interface d'administration intégrée !

Ajoutez les routes dans config/routes.yaml :

rikazarai_sylius_mondial_relay_plugin:
    resource: "@RiKaZaRaiSyliusMondialRelayPlugin/Resources/config/routing.yaml"

6. Modification de l'entité Shipment

Dans votre entité src/Entity/Shipping/Shipment.php :

<?php

namespace App\Entity\Shipping;

use Doctrine\ORM\Mapping as ORM;
use Sylius\Component\Core\Model\Shipment as BaseShipment;
use RiKaZaRai\SyliusMondialRelayPlugin\Model\PickupPointTrait;

#[ORM\Entity]
#[ORM\Table(name: 'sylius_shipment')]
class Shipment extends BaseShipment
{
    use PickupPointTrait;
}

7. Migration de base de données

php bin/console doctrine:migrations:diff
php bin/console doctrine:migrations:migrate

8. Configuration Webpack (optionnel)

Ajoutez les assets JavaScript dans votre configuration Webpack :

// webpack.config.js (shop)
Encore
    // ...
    .addEntry('rikazarai-mondial-relay', './vendor/rikazarai/sylius-mondial-relay-plugin/src/Resources/public/js/mondial-relay.js')

🎛️ Configuration

Calcul des prix

Le plugin utilise un système de tranches de prix par poids. Configuration par défaut :

  • Jusqu'à 500g : 3,90€
  • Jusqu'à 1kg : 4,90€
  • Jusqu'à 2kg : 5,90€
  • Jusqu'à 5kg : 6,90€
  • Jusqu'à 10kg : 8,90€
  • Jusqu'à 20kg : 12,90€
  • Jusqu'à 30kg : 16,90€

Ces tarifs sont configurables dans l'administration Sylius lors de la création de la méthode d'expédition.

Cartes

Le plugin supporte deux fournisseurs de cartes :

OpenStreetMap (gratuit, par défaut)

rikazarai_sylius_mondial_relay:
    map_provider: open_street_map

Google Maps (nécessite une clé API)

rikazarai_sylius_mondial_relay:
    map_provider: google
    google_api_key: '%env(GOOGLE_API_KEY)%'

📖 Utilisation

1. Création de la méthode d'expédition

  1. Allez dans l'administration Sylius : ConfigurationMéthodes d'expédition
  2. Créez une nouvelle méthode
  3. Sélectionnez "Mondial Relay" comme calculateur
  4. Configurez les tranches de prix selon vos besoins

2. Processus de commande

  1. Le client sélectionne "Mondial Relay" comme mode de livraison
  2. Une interface apparaît pour rechercher des points relais
  3. Le client saisit son code postal et recherche
  4. Une liste et une carte des points relais s'affichent
  5. Le client sélectionne son point relais préféré
  6. Les informations sont sauvegardées avec la commande

3. Gestion des commandes

  1. Dans l'administration, accédez aux détails d'une commande
  2. Si la commande utilise Mondial Relay et a un point relais sélectionné
  3. Un bouton "Imprimer l'étiquette Mondial Relay" apparaît
  4. Cliquez pour générer et imprimer l'étiquette

🧪 Tests

# Tests unitaires
vendor/bin/phpunit

# Tests Behat
vendor/bin/behat

🤝 Contribution

Les contributions sont les bienvenues ! Merci de :

  1. Fork le projet
  2. Créer une branche pour votre fonctionnalité
  3. Commiter vos changements
  4. Pousser vers la branche
  5. Ouvrir une Pull Request

🐛 Signaler un bug

Si vous trouvez un bug, merci d'ouvrir une issue avec :

  • Une description détaillée du problème
  • Les étapes pour reproduire
  • Votre environnement (PHP, Sylius, Symfony versions)
  • Les logs d'erreur si disponibles

📝 Licence

Ce plugin est sous licence MIT. Voir le fichier LICENSE pour plus de détails.

🙏 Remerciements

🔗 Liens utiles

Développé avec ❤️ par @RiKaZaRai pour la communauté Sylius

GitHub stars GitHub forks