Common Issues
Start with the failed step, the actor, and the quote's current state. A missing storefront action, a rejected status change, and an expired-quote cron problem have different causes; clearing every cache or reindexing every indexer rarely explains the underlying issue.
Before changing configuration, record:
- quote ID and increment number
- store view and customer group
- customer, guest, administrator, REST, or GraphQL context
- current state and status
- exact action and error message
- request time for matching the event to Magento logs
“Add to Quote” is not visible
Check these items in order:
MageB2B_B2BQuoteis enabled andb2bquote/general/enableresolves to1for the current store.- The current customer group is selected under Allowed Customer Groups. Guest visibility additionally requires guest quotes to be enabled.
- Display on Product Page or Display on Category Page is enabled for the location you are checking.
- The product type and page are handled by the installed storefront implementation.
- If the store uses Hyvä,
MageB2B_B2BQuoteHyvais installed and the Hyvä CSS sources have been rebuilt. - Full-page cache and block cache were cleaned after configuration or layout changes.
Test once as the affected customer rather than only as an administrator. Customer-group and store-scope differences are common causes.
The customer cannot create or submit a quote
Creation is refused
Review the store-scoped limits:
b2bquote/general/max_quotes_per_customerb2bquote/general/max_quote_itemsb2bquote/general/max_item_qtyb2bquote/general/allowed_customer_groupsb2bquote/customer_experience/allow_empty_draft_quote
A value of 0 disables the corresponding quote-count or item-count limit where documented by the setting. Do not assume it means zero allowed records.
Submission is refused
Check that the quote contains the required data for its workflow:
- at least one valid item unless the current operation explicitly allows an empty draft
- billing and shipping data when required
- shipping method when
b2bquote/shipping/requiredis enabled - payment method when
b2bquote/payment/requiredis enabled - a permitted transition from the current status for the customer actor
If the public message is deliberately generic, correlate the request time with var/log/system.log and var/log/exception.log to find the internal cause without exposing it to the customer.
A status change is rejected
B2B Quote separates the system state from the configurable status. A status transition record controls the source status, target status, allowed actor, note requirement, and notification behavior.
- Open B2B Quotes > Status Transitions.
- Confirm that a transition exists for the quote's store, source status, target status, and actor.
- If Workflow Rules Validate Transitions is enabled, review active workflow rules as well.
- Supply a note when the transition requires one.
- Confirm the administrator has the required quote ACL resource.
Use the transition Health Check before manually editing core workflow records. The Reload Fixtures action can restore core data, but review its impact in a non-production environment first.
Expiration, reminders, draft cleanup, or revision cleanup does not run
All four module jobs are registered in Magento's default cron group:
| Job | Schedule |
|---|---|
b2bquote_quote_check_expired |
Daily at 02:00 |
b2bquote_send_expiration_reminders |
Hourly |
b2bquote_delete_old_drafts |
Daily at 03:00 |
b2bquote_cleanup_old_revisions |
Daily at 04:00 |
Run Magento's default group once for diagnosis:
php bin/magento cron:run --group=default
Then inspect cron_schedule for the exact job code and check var/log/cron.log, var/log/system.log, and var/log/exception.log. Also verify:
- the store-local expiration date and status are eligible
- expiration reminder emails are enabled and intervals are configured
- draft lifetime and notice settings are greater than zero where needed
- revision cleanup is enabled and its retention period is configured
Do not create a separate b2bquote cron group; the package does not declare one.
Pricing rules do not apply as expected
- Confirm
b2bquote/pricing_rules/pricing_rules_enabledis enabled for the quote's store. - Check the rule's active dates, priority, store/customer conditions, and quote conditions.
- Decide whether rule stacking is allowed. With stacking disabled, evaluation stops after the first applicable rule.
- Check whether an administrator has already entered an offered item price. Automatic repricing is designed to preserve existing manual offers in supported save flows.
- Recalculate the quote totals and inspect the applied rule IDs.
Magento catalog reindexing is relevant only when the underlying catalog data or index is stale. It is not a general repair step for quote-rule configuration.
Accepted prices or adjustments are missing from the cart or order
Check the configured accept mode and these settings:
b2bquote/general/accept_modeb2bquote/general/allow_quote_accept_mode_choiceb2bquote/general/clear_cart_before_accept_add_to_cartb2bquote/general/clear_cart_after_conversionb2bquote/order_creation/price_change_behaviorb2bquote/order_creation/stock_validation_behaviorb2bquote/order_creation/product_availability_check
Confirm that the quote reached a state allowed for acceptance and that the selected transition exists. If conversion fails, do not repeatedly submit the same request until you know whether an order or cart update was already created.
Shipping methods are missing
Verify that the quote has a complete shipping address and that Magento can estimate rates for its products and quantities. Then check:
b2bquote/shipping/requiredb2bquote/shipping/disallowed_methods- Magento carrier enablement, country restrictions, price/weight rules, and store scope
The quote module can disallow methods, but it cannot make a carrier method available when Magento's carrier configuration rejects the request.
Payment methods are missing
Check b2bquote/payment/disallowed_methods and the payment method's own country, currency, order-total, customer, and store restrictions. B2B Quote filters Magento's available methods; it does not reactivate a method rejected by its payment provider or another availability rule.
Inventory reservation is not balanced
Inventory reservations can be created on approval and released on rejection, expiration, or order creation, depending on configuration. Review:
b2bquote/inventory/reserve_on_approvalb2bquote/inventory/release_on_expirationb2bquote/inventory/release_on_rejection- the reservation compensation code
- the quote's status history and any resulting order
Do not insert or delete MSI reservation rows manually. First establish which lifecycle event ran and whether it was retried. Preserve logs and database evidence for support.
Email notifications do not arrive
- Confirm quote notifications are enabled for the quote's store.
- Check the sender identity, administrator recipients, and the template for the specific event.
- For reminders, also check the direct reminder flag and configured intervals.
- Test another Magento transactional email through the same transport.
- Review
var/log/system.logandvar/log/exception.logat the action time.
The module uses Magento's mail transport. It does not require the async.operations.all consumer for its normal notification observers, and Magento does not guarantee a var/log/mail.log file.
PDF generation fails or the button is unavailable
- Check whether the quote's current status is selected under PDF Download Restricted Statuses.
- Confirm company fields, logo file, and chosen base layout are valid for the store view.
- If the PDF Designer add-on is installed, confirm that the selected custom layout still exists and is valid for the current store.
- Review font and image errors in Magento logs.
- For a stale designer preview, save the layout again and confirm that the request reaches the current layout definition.
See PDF Export & Layouts and PDF Designer Add-On.
REST returns 401 or 403
- Use an administrator/integration token for ACL-protected routes.
- Use a customer token for
selfroutes. - Grant the integration the exact
MageB2B_B2BQuote::*resource declared for the route. - Confirm that
MageB2B_B2BQuoteApiis enabled.
The REST add-on does not provide quote webhooks or its own rate-limit configuration. See REST API Add-On for the supported routes.
GraphQL rejects an owned-quote operation
Confirm that MageB2B_B2BQuoteGraphQl is enabled, the customer token is current, and the quote belongs to that customer. A valid customer token still cannot bypass status transitions or ownership checks. Refresh the client's cached schema after module upgrades.
Import validation fails
Use the header from an export or sample file for the same entity and installed schema. Check encoding, delimiter, required identifiers, and behavior. CLI imports require one of append, add_update, replace, or delete.
Keep the file during diagnosis:
php bin/magento b2bquote:import-projects \
var/import/b2bquote_projects.csv \
--behavior=append \
--delete_file_after_import=0
The add-on prints row-specific validation errors before it attempts the import.
Information to include in a support request
- base and add-on package identity and dependency constraints
- Magento and PHP versions
- store view and actor type
- quote increment number and current status, without customer-sensitive attachments
- exact reproduction steps and error text
- relevant log excerpt around the request time
- whether the problem reproduces with third-party checkout, payment, shipping, and theme customizations disabled in a safe staging environment
Do not send access tokens, passwords, complete customer exports, or production database dumps through a normal support message.