Bronn Offer Requests
Description
Highlights
- Quote requests directly from the cart with optional message and desired delivery date
- Complete offer management in customer account with status tracking and message history
- Offer prices per line item – automatically added to cart on acceptance
- Automatic email notifications for new requests, status changes and messages
- Fully integrated with Shopware Flow Builder with three custom events
Features
- Create quote requests directly from the shopping cart
- Optional message and desired delivery date with the request
- Quantities adjustable before submission
- Cart automatically cleared after submission
- Dedicated quote overview in customer account
- Detail view with line items, prices and status
- Integrated message history between customer and admin
- Accept offer – products added to cart with offer prices
- Decline offer – directly from customer account
- Set offer prices per line item in admin
- Automatic email notifications to customer and admin
- Status changes trigger notifications
- Three custom events for the Shopware Flow Builder
- Fully configurable via plugin settings
- Compatible with Shopware 6.7
About the Extension
With "Bronn Quote Requests" you enable your customers to submit individual quote requests directly from the shopping cart. The plugin covers the complete quoting process – from the request through price negotiation to the final order.
Customers add products to the cart as usual and can create a quote request with a single click on "Request Quote". They can optionally include a message, a desired delivery date, and adjusted quantities. After submission, the cart is automatically cleared and the customer receives a confirmation email.
In their customer account, your customers find a dedicated overview of all quote requests with status tracking, message history, and the ability to accept or decline offers directly. When accepting, products are automatically added to the cart with the negotiated offer prices.
On the admin side, you can set offer prices per line item, manage statuses, and communicate directly with customers through an integrated messaging function. All status changes and new messages automatically trigger email notifications.
The plugin is fully integrated with the Shopware Flow Builder and provides three custom events for individual automations. All settings are conveniently managed through the plugin configuration.
Full documentation including installation guide, configuration overview and usage examples is available at: https://bronner-b2b.de/docs/angebotsanfragen
With "Bronn Quote Requests" you enable your customers to submit individual quote requests directly from the shopping cart. The plugin covers the complete quoting process – from the request through price negotiation to the final order.
Customers add products to the cart as usual and can create a quote request with a single click on "Request Quote". They can optionally include a message, a desired delivery date, and adjusted quantities. After submission, the cart is automatically cleared and the customer receives a confirmation email.
In their customer account, your customers find a dedicated overview of all quote requests with status tracking, message history, and the ability to accept or decline offers directly. When accepting, products are automatically added to the cart with the negotiated offer prices.
On the admin side, you can set offer prices per line item, manage statuses, and communicate directly with customers through an integrated messaging function. All status changes and new messages automatically trigger email notifications.
The plugin is fully integrated with the Shopware Flow Builder and provides three custom events for individual automations. All settings are conveniently managed through the plugin configuration.
Full documentation including installation guide, configuration overview and usage examples is available at: https://bronner-b2b.de/docs/angebotsanfragen
Details
- Available: English, German
- Latest update: 7 April 2026
- Version: 1.7.7
- Category: B2B extensions
About the Extension Partner
Bronner Consulting Inh. Daniel Bronner
Partner Status
-
Shopware
Extension Starter
Details
- Partner since: 2025
Support
- Based in: Germany
- Speaks: German, English
- Response time: Very quickly
After installation, you can find the configuration under Extensions > My Extensions > Bronn Quote Requests > Configuration. All settings take effect immediately.
General
In the "General" section, activate the plugin using the global toggle. With "Login required" you control whether only logged-in customers can see the request button.
Button
Under "Button" you can customise the button text and button colour. With "Show button in cart" you control whether the request button appears on the cart page.
Form
In the "Form" section you define which fields the request form contains: desired delivery date, message field, and whether customers can adjust quantities before submission.
Features
Under "Features" you enable or disable the chat function in the customer account, which allows customers and admins to exchange messages.
Email Notifications
In the "Email" section you control all notifications: confirmation to the customer, notification to the admin, status changes, and new messages. The admin email address can be set individually – if left empty, the default shop address is used.
1.7.7
# Changelog
## 1.7.7 – 2026-04-07
- Fix: isAdmin() renamed to getIsAdmin()
## 1.7.6 – 2026-04-07
- Fix: Vue 3 compatibility for admin detail page (Shopware 6.7)
- Pipe filters (| date, | currency) replaced with Shopware.Filter.getByName()
- v-model bindings corrected (sw-textarea-field, sw-single-select, sw-number-field)
- Request information card renders correctly again
- Sending messages in admin works again
- Search bar removed from list view
- License changed to proprietary
## 1.7.5 – 2026-04-07
- Admin route references corrected: bc.* prefix updated to bronn.* after namespace rename. Admin modules, navigation and routing functional again.
## 1.7.4
### Fix: Customer account pages following Shopware standard layout
#### Page Structure (Overview + Detail)
- Both customer account pages (overview and detail) now use the exact Shopware standard layout
- `account-orders` wrapper class instead of custom `account-offer-request-detail` class
- `account-welcome` for heading with correct padding/margin (identical to orders, addresses, etc.)
- `account-orders-main` content wrapper for correct backgrounds and spacing
- Block hierarchy following Shopware convention (`page_account_offer_request_detail` → `_welcome` → `_main`)
#### Missing Snippet
- `accountSubtitle` snippet added for DE and EN (was referenced in overview page but missing)
## 1.7.3
### Fix: Sidebar menu item following Shopware standard
#### Active State in Customer Account Menu
- `active` class replaced with `is-active` (Shopware standard)
- `controllerAction` check replaced with `activeRoute` variable (Shopware 6.7 best practice, `controllerAction` is deprecated from 6.8)
- `starts with('frontend.bronn-offer-request.account')` correctly recognises overview and detail
- `aria-current="page"` added for accessibility
- Menu item now behaves identically to Shopware standard entries (orders, addresses, etc.)
## 1.7.2
### Fix: Storefront styling and theme compatibility
#### Offer Price Input Field in Admin
- White background and border of sw-number-field in positions table removed
- Input field is now transparent and adapts to the zebra striping of table rows
- Border only appears on hover or focus for better usability
#### "Offer Available" Block
- Large green card replaced with simple Bootstrap alert (alert-success)
- Custom heading removed, only description text with buttons remains
- Responsive layout (buttons below on mobile, side by side on desktop)
#### Custom Styles Minimised
- Storefront SCSS reduced from 104 lines to 23 lines
- Only `.bronn-offer-request-btn { width: 100%; }` as custom styling
- All inline styles removed (message border, quantity input, success icon)
- Replaced with Bootstrap standard classes (border, d-inline-block, w-auto, text-success)
- Maximum compatibility with third-party themes
## 1.7.1
### Fix: Shopware Store conformity
#### Uninstall – Complete Data Cleanup
- `uninstall()` now removes all plugin data when "Delete all data" is selected:
- 4 mail template types + translations (bronn_offer_request_customer_confirmation, bronn_offer_request_admin_notification, bronn_offer_request_status_changed, bronn_offer_request_message_sent)
- 4 mail templates + translations
- 3 flows + flow sequences (bronn_offer_request.created, .status_changed, .message_sent)
- 3 database tables (bronn_offer_request_message, bronn_offer_request_item, bronn_offer_request)
- Previously only custom tables were deleted – mail templates and flows remained as orphans in the database
#### Performance: Missing Tax Association
- `getCustomerOfferRequest()` now loads `items.product.tax` instead of just `items.product`
- Fixes: N+1 query problem in `acceptOffer()` – tax rate was loaded individually per item
#### Code Quality
- Hardcoded tax rate fallback (19%) replaced with sales channel default
- Duplicate PHPDoc block in `createFromCart()` removed
## 1.7.0
### Feature: Decline Offer
- New service method `declineOffer()` – customer can decline offers (status → declined)
- New controller route `POST /account/offer-requests/{id}/decline`
- Decline button in frontend next to accept button (only visible when offer price exists and status is neither accepted nor declined)
- Storefront snippets (DE + EN) for decline texts
### Feature: Auto-Status on Offer Prices
- When saving in admin: if at least one item has an offer price > 0 and status is still 'new' or 'in_progress', status automatically changes to 'answered'
- Saves the admin from manually changing the status
### Feature: Configurable Email Notifications
- New plugin configuration: `sendStatusChangeMail` – email on status change toggleable (default: active)
- New plugin configuration: `sendMessageMail` – email on new admin message toggleable (default: active)
- OfferRequestWriteSubscriber checks config before event dispatch
- Existing toggles (sendCustomerConfirmation, sendAdminNotification) structurally optimised
### Feature: Configurable Chat Function
- New plugin configuration: `showChatFunction` – message history and form in customer account toggleable (default: active)
- AccountMenuSubscriber passes `bronnOfferRequestShowChat` to all storefront templates
- Frontend template conditionally shows/hides chat section
## 1.6.0
### Feature: Email Notification on Status Change and New Messages
- New flow event `bronn_offer_request.status_changed`: triggered on every status change of a quote request
- New flow event `bronn_offer_request.message_sent`: triggered on new admin messages for a quote request
- Both events implement FlowEventAware, MailAware, CustomerAware and ScalarValuesAware
- Mail templates (DE + EN, HTML + plain) created for both events
- Default flows created in Flow Builder (status change → email to customer, new message → email to customer)
- New OfferRequestWriteSubscriber: listens to DAL write events and automatically detects status changes and new admin messages
- FlowEventSubscriber extended with both new events
- Migration for mail template types, mail templates and flows
## 1.5.3
### Fix: Email Sending via Flow Builder
- ScalarValuesAware interface implemented in OfferRequestCreatedEvent
- New getValues() method provides template variables (offerNumber, customerMessage, itemCount, offerRequestId) via ScalarValuesStorer
- Fixes: flow emails were not sent because template variables never reached the StorableFlow
- Cause: Shopware 6.7 requires ScalarValuesAware for the ScalarValuesStorer to write values into the flow – without this interface all custom variables were empty in the mail template
## 1.5.2
### Fix: Admin Vue 3 Compatibility
- Pipe filters (| date, | currency) replaced with Shopware.Filter.getByName() calls
- Fixes: "date is not a function" error – Vue 3 runtime-compiled templates do not support pipe filters
- Status dropdown (sw-single-select) changed to explicit :value + @update:value binding
- Fixes: status could not be changed because v-model was incompatible with sw-single-select
### Fix: Frontend "Accept Offer" Button
- hasOfferPrice variable is now calculated outside of Twig blocks
- Fixes: variable was unavailable in accept block due to block scoping
### Fix: Quantity Transfer on Quote Request
- Controller now reads `quantities` inputs from the form
- Service uses form quantities instead of cart quantities only
- Fixes: adjusted quantities in the form were ignored
## 1.5.1
### Fix: Admin Message History
- Messages are now loaded separately via own repository search instead of EntityCollection association
- Fixes: EntityCollection proxy (Vue 3) was not reliably iterable – getIds/forEach/Array.from failed
- Messages refresh immediately after sending without page reload
### Fix: Accept Offer Button
- "Accept offer & order" button now appears as soon as an offer price is set
- Only exception: status "Declined" – button remains hidden
- Previously the button was only visible with status "Answered" or "Accepted"
## 1.5.0
### Accept Offer & Order at Offer Price
- New button "Accept offer & order" in customer account detail view (visible with status answered/accepted when offer prices are set)
- Click adds all items to cart with offer price as custom line items (QuantityPriceDefinition)
- Products without offer price are added normally via product ID
- Request status automatically set to "accepted"
- Redirect directly to checkout (checkout/confirm)
- Tax rate taken from product (fallback: 19%)
### Admin Fix: Message History
- EntityCollection iteration triple-secured (getIds+get, forEach, Array.from)
- Fixes: message history was empty despite messages being present
### Admin Fix: httpClient URL
- Double /api/api/ in send-message URL corrected
## 1.4.0
### Flow Builder & Email Sending
- New flow event `bronn_offer_request.created` – triggered on every new quote request
- Event implements FlowEventAware, MailAware, CustomerAware – fully compatible with Shopware Flow Builder
- FlowEventSubscriber registers the event in Flow Builder (Settings > Flow Builder)
- Available template variables: `offerNumber`, `customerMessage`, `itemCount`, `customer.*`, `salesChannel.*`
### Mail Templates (automatically created via migration)
- Customer confirmation (DE/EN): confirms receipt of quote request with request number and customer message
- Admin notification (DE/EN): informs admin with customer data, item count and message
- Default flow created: automatically sends both emails on new quote request
### Admin Fixes
- All v-model:value bindings changed to v-model (Shopware 6.7 Vue 3 compatibility)
- Fixes: send message button was greyed out because sw-textarea-field did not pass value back to data property
- Also affects: status dropdown, admin comment, offer price input
## 1.3.2
- Admin: send message completely reworked – now uses httpClient directly instead of repositoryFactory.save() (fixes sending error)
- Admin: EntityCollection iteration made safe – forEach instead of spread operator for proxy-compatible conversion
- Admin: positions tab with compactMode and more compact offer price cell (130px max, right-aligned)
- Admin: message history container max-height/overflow reset via CSS (no more scrolling)
- Frontend: message history condition changed from `is not empty` to `|length > 0` (EntityCollection-compatible)
- Frontend: Twig arrow function in sort removed (compatibility issue) – sorting now server-side in service
- Service: getCustomerOfferRequest() now sorts messages chronologically via criteria association
- CSS: offer price input field in own wrapper class (bronn-offer-request-offer-price-cell) for clean alignment
## 1.3.1
- Frontend customer account: status badges updated to Bootstrap 5 (bg-* instead of badge-*)
- Frontend customer account: offer price column now displayed as soon as a price is set (not only with status answered/accepted)
- Frontend customer account: complete message history from messages association displayed (admin and customer messages chronologically)
- Frontend customer account: message form built into detail view, customer can send messages to admin
- Frontend: text-right corrected to text-end (Bootstrap 5)
- Admin: send message function reworked – repositoryFactory.create() without parameters, better error handling
- Admin: message history container unscrolled – no more artificial max-height/overflow
- Admin: empty state as text instead of sw-empty-state for more compact display
- New snippets: messageThreadTitle, sendMessageTitle, sendMessageButton (DE/EN)
## 1.3.0
- "Request Quote" button added to cart page (below the "Proceed to Checkout" button)
- New configuration: show/hide button on cart page (showButtonInCart)
- Login requirement and active status are now also respected on the cart page
- Admin positions tab: column widths corrected (product, product number, quantity, prices) for better readability
- Admin message history: data grid replaced with chat display with colour-separated messages (admin/customer)
- Admin CSS: styling for positions table and message history added
## 1.2.3
- Deprecated sw_csrf() Twig function removed from quote request page (no longer exists in Shopware 6.7, CSRF is handled automatically via Symfony)
## 1.2.2
- Compatibility with VioB2BLogin plugin: strict GenericPageLoader type hint removed, as VioB2BLogin replaces the service via decorator (GenericB2BPageLoader)
- Affects: OfferRequestPageLoader and AccountOfferRequestPageLoader
## 1.2.1
- Fallback inline script added to buy widget template that works without storefront JS build (solves memory limit issues during theme:compile)
- Script automatically checks if PluginManager plugin is registered and only activates fallback when needed
- Button adds product to cart via AJAX and then redirects to quote request page
## 1.2.0
- config.xml: explicit language attributes lang="de-DE" set for all German labels (Shopware 6.7 interprets labels without lang attribute as en-GB fallback)
- Admin module: missing entrypoints.json for Pentatrion ViteBundle added (without this file Shopware 6.7 cannot load admin assets)
- SCSS: base styling for quote request button and pages
## 1.1.0
- "Request Quote" button added to product pages below the add-to-cart button
- Quote request page with cart overview, message field and desired date created
- Customer account section with overview and detail view of quote requests integrated
- Admin module under Orders → Quote Requests with list view, detail view, position editing and message history implemented
- Three database tables created: bronn_offer_request, bronn_offer_request_item, bronn_offer_request_message
- Complete plugin configuration with button settings, form options and email notification settings
- Request number generation in format OR-YYYYMMDD-XXXXX
- Status management (New, In Progress, Answered, Declined, Accepted)
- Messaging system between customer and admin
- Offer prices per position editable in admin
- Pre-compiled admin bundle for immediate availability without separate build process
- German and English translations for storefront and administration
## 1.0.0
- Initial plugin structure with Shopware 6.7 compatibility
- Basic entity definitions and migrations
- Controller and service architecture created