Rotozoom B2B Manager — User Manual
Turn your WooCommerce store into a wholesale channel. B2B Manager adds a dedicated trade-customer role, custom discounts, an approval workflow for new wholesale accounts, a delivery address book for your partners, and — on Pro — three fulfilment modes with margin tracking, deferred payment, commission statements and store credits.
- Free version: B2B customer role, registration and approval, a global discount rule per partner, the partner address book, locked company details and change requests.
- Pro version: brand / category / attribute discounts, fulfilment modes, deferred payment, credits and commission (ledger, statements, payouts, pool transfers), credit hints and email notifications.
- Pro price: €49 / year per site, incl. VAT (EU companies with a valid VAT number: reverse charge).
- How to get Pro: use the edition downloaded from rotozoom.com — it installs Rotozoom Connect automatically — buy Pro on rotozoom.com and sign in through Rotozoom Connect. A licence is active on one site; "Change site" in your rotozoom.com dashboard moves it.
What's new (1.2.x, current 1.2.10)
- Delivery address book for approved partners, under My Account → "Delivery addresses": courier offices and lockers picked from the Sell & Ship nomenclature (list and map) or a plain street address, with an editable recipient. No limit on the number of addresses, on either plan.
- The partner's own company details are locked at checkout and filled in automatically (company name, company ID, VAT number, accountable person, registered address) — enforced on the order on the server, not only in the form.
- Change requests: the partner asks for a company-detail change from My Account → "B2B account"; you review it under the "Change requests" tab. While a request is pending the partner cannot complete an order.
- Fulfilment modes (Pro): "Invoice & ship", "Retail — commission" and "Retail — credits", with a live "Buying for · Selling for · Profit" panel and a margin cap enforced on the data layer.
- Payments per partner (Pro): choose which methods each partner may use, plus a new "Deferred payment (on account)" gateway with a credit limit.
- Credits & commission (Pro): two separate pools (commission and credits), an append-only ledger, commission statements
PR-YYYY-NNNN, payout requestsPO-YYYY-NNNN, and transfers between the two pools. - Credit hints (Pro): a single grey line on the catalogue, product page and cart showing the partner's credit balance and what is left after the purchase.
- Email notifications (Pro): five per-partner events — parcel not delivered after N days, delivered, returned, commission or credits paid out, balance above a threshold — managed from My Account → "Notifications".
- My Account on mobile: with a B2B account active, the non-B2B pages fold under "More about the account".
- Requires Sell & Ship 1.9.2 or later for the office/locker picker inside the address book and for the delivery / return notifications.
- Since 1.2.3: a "Go PRO" tab lists what Pro adds (on a Pro site it reads "PRO"); a B2B role assigned manually under Users shows up under "Pending" for approval; the brand discount type detects the brand taxonomy your store actually uses (for example XStore's own Brands); commission statements and partner invoices are stored under unguessable file names; and the locked company fields are applied exactly as in the company record, even when a field is empty.
For newcomers: what this plugin does
Many stores sell to two kinds of buyer: ordinary shoppers, and trade or wholesale customers who should see special pricing. B2B Manager lets you treat these groups differently in the same store:
- Wholesale buyers log in and automatically see their discounted prices.
- New trade buyers apply for an account that you approve.
- Once approved, a partner keeps a book of delivery addresses, buys at trade prices, and — if you enable it — resells to their own customers while the shop ships directly and the partner's margin is tracked for you.
Setup
1. Understand the B2B customer role
WordPress gives every user a role (Customer, Shop Manager, and so on). B2B Manager adds a B2B Customer role. Any user in this role is treated as a wholesale buyer and receives the discounts you configure.
You can assign the role manually (under Users) — the user then appears under the plugin's "Pending" tab to approve or reject — or let buyers request it through the registration form and approve them there.
2. Set your discount rules
Open the partner's row and add discount rules for that partner. Start with a global rule (for example "10% off everything") and refine from there. Brand, category and attribute rules are Pro.
3. Fill in the partner's company details
Each approved partner carries a company record: "Company name", "Company ID (UIC)", "VAT no.", "Responsible person" and "Registered address". These are what the plugin writes on every order the partner places, so complete them before the partner's first order. You edit them in the "Company details" form inside the partner's row; the partner can only request a change.
4. (Pro) Decide how each partner works with you
Open the partner's row → "Fulfilment & payment settings" and choose the "Enabled modes", the allowed "Payment methods (Invoice & ship)", the "Credit limit", "Minimum margin", "Maximum customer discount", "Margin hold" and the "Programs" (commission and/or credits).
Feature reference
B2B customer role and approval
A distinct role that marks a user as a wholesale buyer. Discounts, the address book, the modes and the credit pools all key off it, so a buyer simply logs in and sees the right prices and pages.
Applicants arrive under "Pending"; approving moves the user into the B2B Customer role. The tabs are "Pending", "Approved", "Rejected", "All" and "Change requests".
Discount engine
Discounts are applied while the cart totals are calculated, so the reduced price flows through the product page, cart and checkout consistently.
- Global discount (Free): one percentage applied to all products for that partner.
- Per brand / category / attribute (Pro): target discounts precisely — for example 15% off one brand, 5% off a category.
Delivery address book (Free)
Under My Account → "Delivery addresses" an approved partner keeps the places their orders are delivered to:
- "Courier office / locker" — chosen from the courier nomenclature through the Sell & Ship picker (searchable list plus map), so the saved point is a real office code, not free text. A point whose code no longer exists in the nomenclature is shown as "Unavailable" and cannot be selected.
- Street address — "Street address", "Apartment, floor, entrance (optional)", "Town / City", "Postcode", "State / Region", "Country".
- Recipient — "First name", "Last name", "Phone", "Email", "Company (optional)", so the waybill travels to the end recipient while the invoice stays with the partner.
- One address can be marked "Default"; there is no limit on the number of addresses on either plan.
At checkout the saved addresses appear as chips under "Delivery to your customer". Applying one fills the courier, the office and the recipient. The recipient card stays editable, and "Save these changes to the saved address" writes the correction back to the book. The office or address itself is always changed in the picker, never by typing.
Works on both the classic checkout and the WooCommerce Checkout block.
Locked company details and change requests (Free)
On checkout the partner's own billing identity is read-only and pre-filled from the company record; the plugin writes it onto the order on the server whatever the form submits. The WooCommerce Addresses → Billing editor is locked for B2B customers for the same reason.
To correct something, the partner opens My Account → "B2B account", sees the current data and submits a "Request a change" with only the fields that differ plus an optional "Note to the administrator (optional)". While the request is pending the partner cannot complete an order — checkout is refused with one sentence on both the classic and the block checkout. You approve or reject it under "Change requests"; the partner is emailed either way, and can also "Withdraw the request".
Fulfilment modes (Pro)
At checkout an approved partner picks from the panel "How are you fulfilling this order?":
| Mode | What it means |
|---|---|
| "Invoice & ship" | The partner buys at B2B prices and you ship to the point they choose. The invoice goes to the partner. |
| "Retail — commission" | You sell to the end customer; the invoice is issued to that customer and the partner's margin accrues to the commission pool. |
| "Retail — credits" | Same, but the margin accrues to the credits pool, which the partner can spend in your shop. |
The panel shows "Buying for", "Selling for" and "Profit", and lets the partner set a "Discount for your customer" as a percentage or an amount. Two caps are enforced on the data layer, not merely in the form: "Minimum margin" and "Maximum customer discount" — a violation refuses the order rather than silently correcting it.
Both retail modes require an applied delivery address (there must be an end customer to ship to). In a retail mode the invoice is issued to the end customer, and the address form's optional group "Invoice to the recipient's company (optional)" supplies that customer's company data.
A mode is only offered when it is enabled globally, enabled for that partner, and its program is on: "Retail — commission" needs the "Commission program", "Retail — credits" needs the "Credits program".
Payments per partner (Pro)
"Payment methods (Invoice & ship)" lists "Card", "Bank transfer", "Deferred payment (on account)" and "Credits". The filter only ever removes methods:
- In "Invoice & ship" the partner sees what you allowed; cash on delivery is always removed.
- In the retail modes only cash on delivery is offered. (A payment link to the end customer is not built.)
- A partner with no mode selected checks out as an ordinary B2B customer, with the shop's normal methods.
"Deferred payment (on account)" places the order on hold and unpaid, and is only offered while the partner's open exposure plus this order stays within their "Credit limit". The exposure is calculated live from the partner's open deferred orders minus refunds — there is no cached counter to drift.
Credits, commission and the ledger (Pro)
Everything a partner earns or spends is recorded as an event in an append-only ledger: nothing is ever deleted, and balances are summed live.
- Two pools. "Retail — commission" accrues to commission; "Retail — credits" accrues to credits. Each pool has its own balance and its own "In process" figure.
- Hold period. A margin accrues as pending and becomes available "Margin hold" days after the order is paid.
- Refunds reverse, they don't delete. A refund books a counter-entry; a balance never goes below zero, and an uncovered remainder waits as a debt until new margin covers it.
- My Account → "Credits & commission" shows both pools side by side with "In process", the payout form, the transfer form and one filterable, paginated "History" across both pools.
- Transfers. With both programs on, the partner can move available money between pools in either direction ("Commission → Credits", "Credits → Commission").
- Paying with credits. The "Pay with credits (B2B)" gateway settles an order against the credits balance — an offset, not a payment run, so invoicing proceeds normally. "Allow partial credit coverage" in the "Settings" tab (a "Use credits" box that applies part of the balance) is off by default; leave it off unless your accountant has confirmed how a partial offset must appear on your invoices.
- Payouts. The partner requests a payout of available credits to the IBAN on file, between "Minimum payout" and their balance. You approve it under the "Credits" tab; an approved payout becomes a document numbered
PO-YYYY-NNNN, which you then "Mark paid".
Commission statements (Pro)
My Account → "Commission statements" lists the partner's commission documents. You issue a statement from the admin "Statements" tab: it collects the partner's available, unlinked commission entries, nets the reversals, and numbers the document PR-YYYY-NNNN from its own counter (it never touches the Sell & Ship invoice numbering).
A statement moves through draft → issued → invoiced → paid. It downloads as HTML, PDF (where a PDF engine is present, for example with Rotozoom Warranty installed) or CSV. For an issued statement the partner sees the exact wording their own invoice should carry — from the "Partner invoice text" template in the admin "Settings" tab, with placeholders such as {number}, {date}, {period}, {amount}, {currency}, {company}, {eik}, {vat}, {mol} — a "Copy text" button, and a form to send back the "Invoice number" and the "Invoice file (PDF, JPG or PNG, up to 5 MB)". Statements and uploaded invoices are stored under unguessable file names and are only served through a protected download link for the partner or a shop manager.
Credit hints (Pro)
One grey line, no call to action: "Credits: €100.00 · after this purchase: €92.00", or "… short by €12.60". It appears on the catalogue, the product page and the cart — for a logged-in approved partner on a Pro site with the credits program on, and for nobody else (guests and ordinary customers get no markup, no stylesheet and no script data). The figure follows quantity steppers and variation changes without a page reload.
Email notifications (Pro)
Five events, each switchable per partner in the "Email notifications" row of the partner panel, and by the partner under My Account → "Notifications":
- "Parcel not delivered after N days" — the threshold is the "Not delivered after" setting (default 3 days).
- "Parcel delivered to your customer".
- "Parcel returned to the shop".
- "Commission or credits paid out" — a
PR-statement or aPO-payout marked paid. - "Balance above the threshold" — the "Balance threshold", sent once per crossing, re-armed when the balance falls back below it.
Shipment events come from Sell & Ship and cover Econt and Speedy; BoxNow is excluded because its tracking does not report back. Mails use your WooCommerce email template. A switch that is off is still recorded, so turning it on later does not replay history.
Free vs Pro at a glance
| Feature | Free | Pro |
|---|---|---|
| B2B customer role | ✓ | ✓ |
| Registration and approval workflow | ✓ | ✓ |
| Global discount rule | ✓ | ✓ |
| Delivery address book (no limit) | ✓ | ✓ |
| Locked company details on checkout | ✓ | ✓ |
| Change requests | ✓ | ✓ |
| Brand / category / attribute discounts | — | ✓ |
| Fulfilment modes and margin panel | — | ✓ |
| Deferred payment (on account) | — | ✓ |
| Credits & commission: ledger, statements, payouts, transfers | — | ✓ |
| Credit hints on products and cart | — | ✓ |
| Email notifications | — | ✓ |
Advanced notes
- Where discounts apply: pricing is adjusted during cart calculation (the standard, safe WooCommerce extension point), so totals, taxes and order records all reflect the trade price.
- Stacking: discounts never add up. When several rules match one product, the highest percentage applies, whatever the rule type.
- Sell & Ship is required for the courier parts. The address book's office/locker picker and the delivery / return notifications read Sell & Ship; 1.9.2 or later is needed, also for the address chips on the block checkout. Without Sell & Ship, My Account → "Delivery addresses" still works as a plain street-address form, without courier offices or lockers.
- Gating is enforced on the server, not only in the form. For example, a Pro payment method sent straight to the Store API on a Free site is rejected and no order is created.
- Combining with Conditions: pair with the free Rotozoom Conditions to change payment and shipping options for trade customers by cart rules as well.
Troubleshooting
- Discounts not applying — confirm the buyer's user really has the B2B Customer role, and that at least one rule exists for that partner and is enabled.
- A buyer sees retail not trade pricing — they may be logged out, or in the wrong role; check Users.
- The partner cannot place an order — a change request is probably pending; approve or reject it under "Change requests".
- A retail mode is missing at checkout — it must be enabled globally, enabled for the partner, and its program ("Commission program" / "Credits program") must be on; retail modes also require an applied delivery address.
- A saved office shows "Unavailable" — the office code is no longer in the courier nomenclature; re-pick the point. Refreshing the Sell & Ship nomenclature restores the list.
- "Deferred payment" is not offered — the partner's open exposure plus this order exceeds their "Credit limit", or the method is not enabled for them.
- The payout form says "between X and X" — the available credits balance equals the minimum payout; the amount must be between the minimum and the balance.
- No notification emails — notifications are Pro, the event must be switched on, the courier must be Econt or Speedy, and the shipment must have been labelled after the feature was enabled.
To activate Pro (sign in through Rotozoom Connect), see Installing and updating plugins.
B2B Manager works entirely inside your shop and sends nothing to Rotozoom. Downloads from rotozoom.com add Rotozoom Connect, which checks rotozoom.com for updates and, after you sign in, sends your site address, site name, and WordPress, PHP, and plugin versions to Rotozoom (EU) for your licence. What is sent and why: Privacy →