Welcome
View it on github.com
Business Relationship Types
This is the Odoo 16 branch.
This module is in alpha state. Feel free to provide feedback.
Extend your contacts with business relationship types, e.g. B2C, B2B and
Internal and configure automatic assignment of pricelists and fiscal positions.
Change tax display (Tax-Excluded (B2B)
, Tax-Included (B2C)
) of login users
according to the business relationship of the associated partner contact.
Table of contents
Features
Configurable business relationship types on contact level. Usable for
automatic assignment of pricelists and fiscal positions
different tax display settings for different users
customize the default business relationship for new contacts
assign a default image, salesperson or sales team to new contacts
assign default salesperson and analytic account to sale orders
restrict website menus, pages, redirects and block visibilities to certain users
use different access permission groups for portal users
restrict product visibility to certain user groups
create and configure your own business relationships
recompute existing cart prices on login and address changes
individual pricelists for child contacts and sale order pricelists by shipping address
Typical use cases
Different prices for user groups
You want to offer different prices for customers like employees or agents? No problem, just create the desired pricelist with a business relationship filter.
Business Relationship dependent Tax Display
Depending on your country’s laws, you may have to show tax-included prices to B2C
customers, while you still want to show the lower tax-excluded prices for logged-in
B2B users.
By default, tax display is a global setting in Odoo. With this module you can
activate Business Relationship Dependent
tax display and configure this option for
each business relationship separately.
The defaults are tax_excluded
for Internal and B2B, but tax_included
for
B2C.
Round prices for B2C
Odoo manages tax-excluded and tax-included prices easily, but not both together. Still, this may be your exact use case: You want to provide beautifully rounded tax-included prices for your B2C customers, but correct tax-excluded prices for other B2B transactions.
In Manage prices for B2B (tax excluded) and B2C (tax included) you find a detailed description of the problem and the documented workaround: While basically working tax-excluded, you configure separate tax-included pricelists and fiscal positions, that swap tax-excluded to tax-included. These have to be assigned manually to your special tax-included customers and it won’t work if this customer has multiple delivery addresses that differ in tax handling (e.g. tax free export).
Here business_relationships
comes to the help: instead of having to assign the
tax-included pricelists and fiscal position manually on each contact, you may use
automatic assignment based on the business relationships.
Pricelists according to shipping address
Tax included prices come with a drawback: your client might have a delivery address
in another country, that requires tax free export. The problem is, you cannot simply
remove the taxes with the default configuration, because tax free means 0% on the
invoice. To get things right, you will need to switch to a tax excluded pricelist,
easily done with this module by setting the two options
individual pricelists for child contacts
and
sale order pricelist by shipping address
.
Usage
Set your partner’s business relationship in the contact form, right under the name. Out of the box they can be used as additional filter option for your pricelists and fiscal positions.
Automatic assignment
Under Contacts
-> Configuration
-> Business Relationships
you can modify
existing business relationships or create new ones. There is some basic configuration to
assign defaults to new contacts and on app installation, but they can be freely
reassigned.
There are B2B, B2C and Internal. B2B is default for
companies and for contacts, that have Purchase Payment Terms
set (your
suppliers). Internal will be set for your employees (users of group
base.group_user
). All further contacts are set to B2C. The match conditions
are configurable and the first matching business relationship will be assigned as
default to a new contact, if and only if you do not explicitly set another one.
If you need more options, don’t hesitate to file a feature request.
Tax Display
If you want to adapt the Product Prices
display, you need to set the option
under Settings
-> Website
-> Pricing
to Business Relationship Dependent
.
Note, that tax_display
depends on the currently logged-in user. Your website
customers will see prices according to this setting. However, in the admin backend
sale order and account move forms, the total/subtotal line display depends on the
setting for Internal users.
Email Template
Odoo’s sale order and move related email templates (not the attached reports) display taxes according to the settings of the salesperson. If you want to provide a consistent user experience, either create your own templates or assign a salesperson to orders and invoices with the same setting as the targeted partner.
The recommended approach is to configure the B2C business relationship with a
salesperson with type B2C, e.g. My B2C Shop. In Contacts
-> Configuration
-> Business Relationships
you can assign the default salesperson for new contacts
and update existing ones. For this to work in the website context, you need to check
Enforce on sale orders in website context.
Sales Order and Invoice PDF Reports
In difference to email templates, these are generated with the tax display settings of
the OdooBot. Depending on your requirements, you might want to create your own report
templates, that include conditions to display the right tax line values and contain
other business relationship dependent information. However, as an alternative or
support module, you may install the module salesperson_report_context
. Like emails,
the reports will be generated in the context of the associated salesperson and you can
rely on the salesperson configuration from above.
Please note, that this feature is still experimental.
Website User Types
As a website extension, you may install the auxiliary module Website User Types
.
After installation, users/logins will have a special access permission group according
to the configuration of the business relationship of the contact, by default
Group B2C and Group B2B. These groups can be used to customize the portal
experience. Note, that every login can only have one type.
Tipp: you can install Website User Types Optional Interface Extensions
to see and
edit a user’s Website User Types
more comfortably in the settings, individually on
user level.
Block Visibility
The web editor extends the Visibility
option to allow you to restrict the
visibility of any configurable block to Group B2C, Group B2B or any other group of
category Application Website User Types. Use it, for example, to create business
relationship dependent mega menu customizations or show/hide arbitrary website blocks.
Note, these elements are simply hidden from the user, there is no additional server rendering logic involved. For more sophisticated features you might rather consider using a user group specific page or even a custom extension.
Product Accessibility
In the product form, eCommerce tab, you find the new section Website User Visibility. Use it to remove product access of one of the user groups.
When unset, users of the group will not see the product in the shop list and accessing the product page results in 404. However, internal users of group Web Designer are still able to see and access it without limit.
Bug Tracker
Bugs are tracked on GitHub Issues. In case of trouble, please check there if your issue has already been reported. If you spotted it first, help us smashing it by providing a detailed and welcomed feedback.
Please log in to comment on this module
Report comment
Any abuse of this reporting system will be penalizedThere are no ratings yet!
Hello,
Is it possible to restrict internal user to have access to contacts based on B2B or B2C group, etc.? For example: the sales guy cannot see the supplier, the purchase guy cannot see the customer
Thanks
Re:
Hello,
this feature is requested and we might add it in the next months.
The approach would be to extend the user form, Access Rights tab, to select a list of business relationships to restrict this users access. However, because of the amount of edge cases, this quickly leads to undesired permission errors, and at current state of knowledge will require some rework.
I left a note to keep you updated.
Great great module! Kudos, guys for this work.
A few hiccups in the setup but it is working nicely. Only thing I find a bit annoying is the need to create a B2C user as the salesperson. The sales figures will obviously go to that user. That was a bit cumbersome, but understandable (I opted not to change the various templates). I will further test this out and come to you with whatever findings I have.
Btw, where can I report on my findings this if not here? Github?
Re: Great great module! Kudos, guys for this work.
Hello,
thanks for your valuable feedback.
About the B2C salesperson - there is an alternative: You can create another Business Relationship, for example "Internal tax included", and use this. (Another possible solution could be to change tax display individually in the technical settings, but this can cause hiccups again. Therefore, it was not implemented / is not handled currently.)
If you step on issues or if you like to provide more detailed information about he hiccups, please file a bug report on github. We'll try to fix them in the weeks after. Here will be the place for more general feedback, like above.