If you are focused on providing products or services to other businesses (B2B) instead of individual customers, you might wonder if standard eCommerce software is the right choice. Indeed, the purchasing process can be quite different in that case. Usually, the final purchase decision involves a lot more people. Multiple people might be involved in adding products to the cart. Somebody else could be responsible for adding shipping, payment, and invoicing details, and sometimes, an additional person has to approve it. When dealing with organizations, it is common to have individually negotiated discounts, shipping, or payment terms. Even if using the same shop for B2B is possible, it makes sense to make a few adjustments that will make making orders for organizations easier. 

Example features

Let’s examine what features in the shop will accommodate business users and how they might look.

  • Organization member management with permissions – The designated account within the organization has to be able to add and remove other members and assign them permissions to other features within the organization.
  • Shared cart – all organization members should be able to add products to the same cart, so later, it can become one order
  • Shared billing data managed by an organization admin
  • Shared shipping address
  • Orders history view with the ability to pay for the
  • Ability to view organization invoices
  • Ability to restrict promotion to a single organization so it has a custom discount
  • Ability to restrict shipping methods or payment methods to just some organizations.

How can we implement all of these 

You will need to create a new resource for storing organization data, as described in Sylius’ documentation. This will allow you to store organizations’ names and additional relevant information, such as tax identification data. Thanks to the Sylius grid bundle, you will also be able to see and manage organization details in your Sylius admin dashboard.

Next, you will need to create an association between the User entity and the organization, giving it additional properties, like ‘role within the organization’ or ‘is this association verified by the organization administrator. Extending Sylius CustomerType and the relevant template will be required to allow customers to add additional data during the registration process. You can create additional controllers to handle the approval process by organization admins, and finally, you can implement a feature that allows basic user management within an organization.

Sharing carts and orders within an organization can be implemented by modifying the Order entity, which is used for both carts and orders. You will need to add an association between the cart and the organization if this is a cart created by an organization user. Conveniently, Sylius uses CartContext for getting the current user’s cart and this can be extended with logic needed for cart sharing within the organization. Some adjustments will be needed where orders are displayed to show orders made within organizations properly.


Addresses can be modified in a similar way. You will need to add an association with the organization, create a place to manage organization addresses for organization admins, and finally extend Sylius AddressType to allow organization users to use organization addresses as a shipping destination.


Organization orders list can be implemented using Sylius resource bundle and grid bundle. You will need to add appropriate configuration, filtering, and custom templates but it should be possible to get nice looking views, consistent with non-organization users view, without much code. 

Using the Sylius invoicing plugin, by modifying its grid configuration, it should be easy to add basic invoicing functionality for organizations without much coding. However, you may also decide to implement your own custom invoicing feature. Similar to organization orders list, it should be possible to display invoices – no matter how they are created in the system, without much new code. Some template changes and some configuration will be needed. Thanks again to Sylius resource & grid bundle combo. 


Handling an organization’s promotions, shipping methods, and payment methods can all be handled in a similar fashion. For each, you will need to create a rule, the rule’s configuration form, and the rule checker combination. Rules will allow You to restrict methods and promotions when new methods and promotions are added by the general shop administrator. I suggest you also use a grid bundle and create new grids to show promotions and methods applicable to selected organizations. This can really help you not to get lost if you have a lot of individually assigned methods.

How long will it take?

As you can see, changes do not seem very complicated, but there are a lot of them. There are many places, especially in the templates, where you need to take into account whether it is an individual customer or maybe a customer buying for an organization case and display things correctly. Some of the features you might not need, or maybe you want some different ones, maybe personalized wishlists that can be created by the user but added to the cart by any user in the organization. Or perhaps you need some complicated custom invoicing feature. Maybe you have already customized your shop heavily, and all these changes will be more complex than they seem at the simple Sylius installation.

There is also another way, you could use organization plugin that is a part of B2B suite Sylius Plus module. Among other features it already includes described organization functionality. 

If you have any questions about the blog, or the functionality and implementation of eCommerce B2B, please contact us! We will answer all your questions.