Contract prices are visible once you sign inENPL

Architectural Lighting

ARC S7 / architectural fixture

Lighting sales that end in a signature, not in an email thread.

The request, the contract price list, the negotiation and the trade credit in a single view. Acceptance creates the order.

Open the Deal Room
Reach
1000 mm
Finish
Brass
Colour
3000 K
Minimum
10 pcs

0

Domain tables alongside the WooCommerce schema

0

Test cases covering pricing, access and the state machine

0

Warehouses with availability resolved per company

0

Lines changed in the WooCommerce core

01 / Pricing

Every company sees its own price. And nobody else does.

A contract price resolves in order: the company price list, then the price group, then the category rule, and finally the list price. On top of that come quantity breaks and a logistics minimum. The result never reaches the public HTML, the schema.org data or the public Store API, and the response carries a header forbidding cache.

A

Four layers of resolution, one answer

Atelier North buys the ARC S7 at 1960 zl for ten units and at 1590 zl for two hundred and fifty. Aurora Hotels has a different list and a higher minimum. The distributor settles in euro. Three different answers to the same question about the same product, all computed by the same engine.

PriceEngine::get_price / 4 layers / breaks and MOQ

B

Trade credit outside the public checkout

The payment gateway exists, but in the ordinary checkout it reports itself unavailable. Only accepting a quotation in the Deal Room brings it into play. The ledger holds the limit, the drawn amount and every movement separately.

WC_Payment_Gateway / movement ledger

C

Availability per company

A customer sees stock only for the warehouses they are assigned to. The rest of the network stays invisible.

Warehouse::get_stock

D

Revisions are immutable

Every quotation and counter-offer is its own record. Nothing is overwritten, so an argument about who proposed what is settled by the database.

rfq_revisions

E

Orders through the CRUD layer

Acceptance calls the official WooCommerce API. Not a single write straight into the post or meta tables.

wc_create_order / HPOS

02 / Configurator

The variant resolves into a code, and the code goes into the request.

A WebGL scene with studio lighting, a contact shadow rendered to a texture and a diffuser with real light transmission. Every change recomputes the product code. The button at the foot of the panel creates a genuine server-side request and takes you into the Deal Room.

03 / Walkthrough

The life of one order, step by step.

Step 01

The customer submits a request

Anna at Atelier North configures a fixture and sends the request. A record, a first revision and a history entry appear. The sales rep assigns themselves, because the company already has an account owner.

Step 02

The engine applies the price list

The system finds the list assigned to Atelier North and checks the quantity break. At a hundred units the price drops from 1960 to 1720 zl. The logistics minimum is ten units.

Step 03

The sales rep issues a quotation

Julia sets the unit prices and adds a delivery split between Warsaw and Berlin, because no single warehouse holds the whole quantity. She saves a note the customer will never see.

Step 04

Both sides see the same thing

A quantity change on the customer side and a price change on the sales side both recompute the value at once. Tabs in other windows pick the update up over the cross-tab channel, and when that is unavailable, through the change counter.

Step 05

Acceptance creates the order

The value exceeds Anna’s limit, so the request waits for Marek’s signature. Once approved, the order is created, the credit line is drawn against and the proforma is ready.

Submitted
RFQ-202608-0007
CompanyAtelier North Sp. z o.o.
ProjectHotel Norda, lobby
Account ownerJulia Wysocka
Revision1
ARC-S7-1000-W-BRS-3000K 100 pcs
Atelier North
list 2450 zl
10 pcs 1960 zl
50 pcs 1830 zl
100 pcs 1720 zl
250 pcs 1590 zl

Logistics minimum for this product: 10 pcs.

Julia Wysocka
Net value 172 000 zl
Discount13 percent
Terms10 days
Paymentnet_30
WAW 60 BER 40
Warsaw, 05.09 Berlin, 10.09

Internal note: we can go another 4 percent lower. Not visible to the customer.

Change counter
Buyer 100 pcs
Sales rep 1720 zl
event4
event5
event6

The counter rises on every change, so two events in the same second stay distinguishable and neither is lost.

Approved
Order #1247
From requestRFQ-202608-0007
Gross value211 560 zl
ProformaPF/DEMO/00007
Anna’s limit: 50 000 zl Exceeded
Signature: Marek Nowak Approved

04 / Segments

The same data layer, three different views.

Hotel groups

Aurora Hotels: seasonal orders across many properties

Head office files one request to relight several properties. The sales rep breaks the delivery down by site and warehouse, while settlement goes through as a single account on longer terms. The higher quantity minimum is what buys the lower unit rate.

Credit limit
500 000 zl
Terms
net_45
Price list
hotel_chain
Minimum
20 pcs

Design studios

Atelier North

Premium projects, small quantities, high expectations about how fast someone answers. The request goes through the Deal Room and the quotation covers a non-standard finish.

Price list
premium
Terms
net_30
Limit
150 000 zl
Minimum
10 pcs

Distribution

ElektroPartner

Large volumes, settlement in euro, availability checked without picking up the phone. The price drops markedly, because the minimum is five times higher.

Price list
distributor
Currency
EUR
Limit
250 000 zl
Minimum
50 pcs

05 / The difference

What exactly this adds to a standard shop.

WooCommerce on its own handles retail very well. What follows is only what it does not have, and what in B2B decides whether a customer places the order online at all.

Area WooCommerce, unextended LUMORA PRO
Price One list price, coupons at best A list per company and group, quantity breaks, a minimum, the company’s currency
Negotiation None. The conversation moves to email Request, quotation, counter-offer and acceptance in one view, with an immutable revision history
Deferred payment No trade credit A limit, a drawn amount, a movement ledger, and a gateway outside the public checkout
Warehouse One stock figure per product Many warehouses, availability shown per company, delivery split inside the quotation
Roles Customer or administrator Buyer, approver with a limit, sales rep, sales manager
Confidentiality Prices in the HTML, in schema.org and in the public API Prices only for the signed-in company, outside the schema, with cache forbidden
Documents An invoice once paid A proforma from the quotation, before payment, with the delivery split

06 / Working together

Three ways to get this moving at your client.

These ranges cover development work on the GroDev side, as a subcontractor to an agency. The agency keeps the client relationship, the brand and the design. Amounts are net.

Discovery

6 400 zl10 working days

Before anyone quotes a whole project, you have to know what is actually sitting in the client’s data and in their trading system.

  • An audit of the existing price list and discount structure
  • An integration map for the warehouse and accounting systems
  • A data model and a risk list with a price against each one
  • A clickable request flow running on the client’s own data
  • An implementation quote broken down by stage

Extension

Pricedindividually

The things that only surface after go-live, once the sales team is using it every day.

  • Integration with the client’s system, Odoo or Comarch for instance
  • A 3D configurator for their own product family
  • An approval path above the buyer’s limit
  • Multiple languages and multiple currencies
  • Post-launch support on a retainer

07 / Architecture

Layers kept apart, the core untouched.

All the B2B logic lives in its own plugin and its own tables. WooCommerce is touched only through its public API, so updating the shop breaks nothing here. The front end is a single module with no framework and no build step.

Front end

Deal Room, portal, catalogue, WebGL configurator

ES modules, no build

REST lumora/v1

nonce, capability, protection against reaching other people’s data

private, no-store

B2B domain

pricing, requests, credit, warehouses, roles

12 dedicated tables

WooCommerce

orders in the new schema, the trade credit gateway

through the CRUD layer only
FRONT END REST lumora/v1 B2B DOMAIN WOOCOMMERCE

For agencies

We come in as the developer behind the scenes. The client stays yours.

This demo exists so that you do not have to take our word for anything. The code behind it is split into layers precisely so it can be carried over to your client without being rewritten from scratch. We take the back end, the integrations and the tests. The relationship, the brand and the design stay with you.

Stack
WordPress, WooCommerce, a PSR-4 plugin, ES modules, Three.js
Time to a working portal
55 working days for the scope shown in this demo
Model
Subcontracting for agencies, priced in stages
Contact
dominik.gronski@grodev.pl
+48 888 517 845
Srodowisko demonstracyjne