- Charge extra fee for a payment method
- Typical usage: Cash on Delivery
- Taxes are implemented the same way as taxes for shipping fees
-
Run
composer require 3brs/sylius-payment-fee-plugin
-
Add plugin class to your
config/bundles.php
return [ ... ThreeBRS\SyliusPaymentFeePlugin\ThreeBRSSyliusPaymentFeePlugin::class => ['all' => true], ];
-
Your Entity
PaymentMethod
has to implement\ThreeBRS\SyliusPaymentFeePlugin\Model\PaymentMethodWithFeeInterface
. You can use TraitThreeBRS\SyliusPaymentFeePlugin\Model\PaymentMethodWithFeeTrait
.- see test PaymentMethod for inspiration
For guide how to use your own entity see Sylius docs - Customizing Models
- Include
@ThreeBRSSyliusPaymentFeePlugin/Admin/_form.html.twig
into@SyliusAdmin/PaymentMethod/_form.html.twig
.
{# ... #}
{% include '@ThreeBRSSyliusPaymentFeePlugin/Admin/_form.html.twig' %}
- Include
@ThreeBRSSyliusPaymentFeePlugin/Admin/_order_show.html.twig
into@AdminBundle/Order/Show/Summary/_totals.html.twig
.
{# ... #}
{% include '@ThreeBRSSyliusPaymentFeePlugin/Admin/_order_show.html.twig' %}
- Include
@ThreeBRSSyliusPaymentFeePlugin/Shop/Checkout/SelectPayment/_choice.html.twig
into@ShopBundle/Checkout/SelectPayment/_choice.html.twig
.
{# ... #}
{% include '@ThreeBRSSyliusPaymentFeePlugin/Shop/Checkout/SelectPayment/_choice.html.twig' %}
- Add variable fee
{% set fee = form.method.vars.payment_costs[choice_form.vars.value] %}
into@ShopBundle/Checkout/SelectPayment/_payment.html.twig
intoforeach
.
{# ... #}
{% for key, choice_form in form.method %}
{% set fee = form.method.vars.payment_costs[choice_form.vars.value] %}
{% include '@SyliusShop/Checkout/SelectPayment/_choice.html.twig' with {'form': choice_form, 'method': form.method.vars.choices[key].data} %}
{% else %}
{% include '@SyliusShop/Checkout/SelectPayment/_unavailable.html.twig' %}
{% endfor %}
- Include
@ThreeBRSSyliusPaymentFeePlugin/Shop/Common/Order/Table/_payment.html.twig
into@ShopBundle/Common/Order/Table/_totals.html.twig
.
{# ... #}
<tr>
{% include '@SyliusShop/Common/Order/Table/_shipping.html.twig' with {'order': order} %}
</tr>
{% include '@ThreeBRSSyliusPaymentFeePlugin/Shop/Common/Order/Table/_payment.html.twig' with {'order': order} %}
- Create and run doctrine database migrations
bin/console doctrine:migrations:diff bin/console doctrine:migrations:migrate
- how to use your own entity see Sylius docs - Customizing Models
- Alter plugin in
/src
- See
bin/
dir for useful commands
After your changes you must ensure that the tests are still passing.
composer install
bin/console doctrine:database:create --if-not-exists --env=test
bin/console doctrine:schema:update --complete --force --env=test
yarn --cwd tests/Application install
yarn --cwd tests/Application build
bin/behat
bin/phpstan.sh
bin/ecs.sh
vendor/bin/phpspec run
- Install symfony CLI command: https://symfony.com/download
- hint: for Docker (with Ubuntu) use Debian/Ubuntu — APT based
Linux installation steps as
root
user and withoutsudo
command- you may need to install
curl
firstapt-get update && apt-get install curl --yes
- you may need to install
- hint: for Docker (with Ubuntu) use Debian/Ubuntu — APT based
Linux installation steps as
- Run app
(cd tests/Application && APP_ENV=test bin/console sylius:fixtures:load)
(cd tests/Application && APP_ENV=test symfony server:start --dir=public --port=8080)
- change
APP_ENV
todev
if you need it
This library is under the MIT license.