Skip to content

mangoweb-sylius/SyliusPaymentRestrictionsPlugin

Repository files navigation

Payment Restrictions Plugin

Features

  • Restrict payment method by zone. This enables to limit selected payment methods to specific zones or areas from the delivery address.
  • Restrict payment method by shipping method - this means that it can disable specific shipment-payment combinations.

Installation

  1. Run $ composer require mangoweb-sylius/sylius-payment-restrictions-plugin.

  2. Add plugin class to your config/bundles.php:

    return [
       ...
       MangoSylius\PaymentRestrictionPlugin\MangoSyliusPaymentRestrictionPlugin::class => ['all' => true],
    ];
  3. Your Entity PaymentMethod has to implement \MangoSylius\PaymentRestrictionPlugin\Model\PaymentMethodRestrictionInterface. You can use Trait MangoSylius\PaymentRestrictionPlugin\Model\PaymentMethodRestrictionTrait.

    <?php 
    
    declare(strict_types=1);
    
    namespace App\Entity\Payment;
    
    use Doctrine\Common\Collections\ArrayCollection;
    use Doctrine\ORM\Mapping as ORM;
    use Sylius\Component\Core\Model\Payment as BasePayment;
    use MangoSylius\PaymentRestrictionPlugin\Model\PaymentMethodRestrictionInterface;
    use MangoSylius\PaymentRestrictionPlugin\Model\PaymentMethodRestrictionTrait;
    
    /**
     * @ORM\Entity
     * @ORM\Table(name="sylius_payment")
     */
    class PaymentMethod extends BasePayment implements PaymentMethodRestrictionInterface
    {
        use PaymentMethodRestrictionTrait;
    
        public function __construct()
        {
            parent::__construct();
        
            $this->shippingMethods = new ArrayCollection();
        }
    }
  4. Change @SyliusAdmin/PaymentMethod/_form.html.twig.

    ...
    <div class="ui segment">
        <h4 class="ui dividing header">{{ 'sylius.ui.details'|trans }}</h4>
        {{ form_errors(form) }}
    
        <div class="three fields">
            {{ form_row(form.code) }}
            {{ form_row(form.zone) }}
            {{ form_row(form.position) }}
        </div>
        {{ form_row(form.enabled) }}
        <div class="two fields">
            {{ form_row(form.channels) }}
            {{ form_row(form.shippingMethods) }}
        </div>
    </div>
    ...
  5. Create and run doctrine database migrations.

For guide to use your own entity see Sylius docs - Customizing Models

Development

Usage

  • Develop your plugin in /src
  • See bin/ for useful commands

Testing

After your changes you must ensure that the tests are still passing.

$ composer install
$ bin/console doctrine:schema:create -e test
$ bin/behat
$ bin/phpstan.sh
$ bin/ecs.sh

License

This library is under the MIT license.

Credits

Developed by manGoweb.

About

Restrict payment methods by zone or by shipping method.

Resources

Stars

Watchers

Forks

Packages

No packages published

Contributors 2

  •  
  •