brille24/sylius-tierprice-plugin

A plugin that allows to add tierprices to Sylius

Installs: 8 321

Dependents: 1

Suggesters: 0

Security: 0

Stars: 37

Watchers: 4

Forks: 21

Open Issues: 2

Type:sylius-plugin


README

68747470733a2f2f73796c6975732e636f6d2f6173736574732f62616467652d617070726f7665642d62792d73796c6975732e706e67

Build Status

Sylius allows for many different customizations like channels and different prices for different product variants. However, one thing that Sylius is missing is the ability to set the price based on the amount of items the customer wants to buy. This tier pricing methodology can be implemented when this plugin is installed.

Installation

  • Install the bundle via composer composer require brille24/sylius-tierprice-plugin
  • Register the bundle in your bundles.php:
return [
    //...

    Brille24\SyliusTierPricePlugin\Brille24SyliusTierPricePlugin::class => ['all' => true],
];
  • Add the config.yml to your local config/config.yml
imports:
    ...
    - { resource: '@Brille24SyliusTierPricePlugin/Resources/config/config.yml'}

and resources.yml to your local config/resource.yml

imports:
    ...
    - { resource: '@Brille24SyliusTierPricePlugin/Resources/config/resource.yml'}

That way all the Sylius resource overriding happens in the app/config/resources.yml

  • For API functionality add the bundle's routing.yml to the local app/config/routing.yml
...
brille24_tierprice_bundle:
    resource: '@Brille24SyliusTierPricePlugin/Resources/config/routing.yml'
  • Finally update the database, install the assets and update the translations:
bin/console doctrine:schema:update --force
bin/console assets:install
bin/console translation:update <locale> --force

Integration

  • This bundle overrides the ProductVariant class provided by Sylius. If you wish to override the class in your application too, you have to merge the configuration in the bundle's resource.yml with your own.
  • This bundle decorates the sylius.calculator.product_variant_price service. If you wish to change that, you could register a compiler pass.
  • This bundle decorates the sylius.order_processing.order_prices_recalculator service. If you wish to use your own order processor or change its priority, you could register a compiler pass.

Usage

First of all you have to set up a product with as many variants as you want. Then in each of these variants you can set the tier pricing based on the channels. The table automatically sorts itself to provide a better overview for all different tiers, you configured.

Backend.png

In the frontend the user will see a nice looking table right next to the "add to cart" button that shows the discount for the different tiers like so:

Front-End.png

Creating data

You can easily create the tier prices with fixtures like that.

sylius_fixtures:
    suites:
        my_suite:
            fixtures:
                tier_prices:
                    options:
                        custom:
                            - product_variant: "20125148-54ca-3f05-875f-5524f95aa85b"
                              channel: US_WEB
                              quantity: 10
                              price: 5

For this the products need to be created first and the product variant must also exist.