Skip to main content
September 2026
HighlightsCategory-specific templatesFor each root category you can now define your own templates for the item list, item card and shop navigation. This lets you design individual assortments differently without changing the shop code.
  • Sticky boxes without JavaScript - Sticky boxes such as the order box on the item card now use position: sticky. This reduces script code and prevents jumps while scrolling
  • Load phone-number library on demand - dynamic commerce loads the library only when needed and via a fixed cache URL
  • Test coverage - Codeception tests use their own test data instead of the demo data. New end-to-end tests cover the b2b user account, the field-sales login and category permissions. Additional unit tests cover repository, cache and attribute logic
  • Cleanup work - Unused AJAX endpoints were removed. Repository and collection classes have unambiguous types. The campaign factory receives its logger via dependency injection, and the password parameter of the database wrapper is marked as sensitive
Items & item card
  • Direct order: price column - Now shows the unit price instead of the line amount, matching the item list and cart
  • Duplicate item attributes - Identical attributes on a variant and master item now appear only once on the item card
  • Item sorting - The item number serves as the secondary sort criterion so the order remains stable when values are equal
  • Catalog item card - The sticky order bar was removed in the catalog shop
Order & payment
  • Cart after session change - dynamic commerce reliably transfers a new session ID into the visitor record. Carts and other session-bound data are retained
  • Campaigns with an invalid free item - Faulty campaigns are logged and skipped. Page rendering and subsequent campaigns continue
  • Discounts from Business Central - Discounts permitted in Business Central no longer result in an empty page in the shop
  • Document archive - Invoices are no longer incorrectly set to the “completed” status
  • CollanaPay callback - A missing database connection no longer aborts the mail dispatch in the callback. The logging provides more details
Permissions & security
  • Customer permissions - Exclusion rules now apply only to the intended tenant, shop and respective language
  • Sensitive data in the log - dynamic commerce no longer writes access credentials from web forms and feed generation into the log
  • Shop code - The shop_code parameter is secured against SQL injection
Feeds & tracking
  • Google Merchant feed - If credentials are missing, the feed no longer produces an error. Google can still retrieve it directly
  • Tag Manager: order completion - Fixed a possible type error when reading the phone number in the purchase event
Operations
  • Channable lock file - An orphaned lock file no longer stops the complete cron run
  • Cronjobs - The message “Cronjob already running” is logged as a warning instead of an error
August 2026
HighlightsFlexibly configurable dealer searchYou can now adapt the dealer search to your market: the starting location of the search is maintainable, and you control the number of displayed dealers via the building block or the shop configuration. When customers select a dealer, additional dealer data is stored directly in the customer record.
Configuration of the dealer search with starting location and number of dealers
b2b: VAT according to the customer’s VAT posting groupIn b2b checkout, VAT is now based on the VAT business posting group stored on the customer. This ensures that the web document and the BC document match even in differing tax constellations, such as EU foreign countries or reverse charge.b2c customer account: order history & document archiveThe order history now loads page by page from the server - even accounts with many orders open significantly faster. In addition, your customers can search directly for a document number and also find their deliveries in the document archive. Order details of voucher orders no longer remain empty, and customers maintain their phone number themselves in the account.Field lengths aligned between BC and webThe database columns in the shop now match the definitions from Business Central: item descriptions hold 200 characters, amount columns in the cart and document calculate with four decimal places. Truncated texts and rounding deviations when transferring from BC therefore no longer occur.Security hardening in the shopThe shop now reads page parameters centrally and type-safely - this additionally blocks XSS and SQL injection. File names from uploads are sanitized, and the server enforces the password criteria during registration in addition to the check in the browser.
  • Cross-selling configurable - Number of displayed cross-sellers adjustable per theme
  • VAT queries cached - The tax-rate determination per product posting group was extracted and cached
  • NAV logging throttleable - Maximum line length for the JSON request logging of the NAV interface configurable
  • Solr integration removed - The deprecated Solr search, including configuration and pipeline remnants, was removed
  • Test coverage - New end-to-end tests for b2c registration, campaigns, the b2b order process and item card, new unit tests for AdvancedPriceProvider and item availability; unstable tests stabilized
Items & item card
  • Item list with variants - “Add all to cart” only added the first item of the list
  • Item detail: variant vs. master item - Controllable via the shop configuration whether the first variant or the master item is shown; the title now shows only the name of the master item
  • Order button (buybox) - Correctly locked without order permission or without an active customer
  • Item ratings - Empty-state box when no rating exists yet for an item
  • Item descriptions from text modules - Were no longer displayed; the title is resolved local-first
  • Descriptions of subordinate items - Are now output
  • Individualized items - More unambiguous customization hash, clean error handling during upload, scalar hash for the cart line
  • Item card: cart fallback (b2c) - Fallback path repaired
  • Item card: thumbnails - React to a click again
  • Brand feature as name prefix - Prepended even without a brand icon
  • Rich snippets - Item-card markup updated
Search & filter
  • Item search: umlauts - HTML-encoded umlauts and ß are found
  • Feature filter - Incorrect column name (lenght) corrected; filter order deterministic, global filters first
  • Top-seller building block - Sorts by sales rank instead of by item ID
  • Algolia search results - Price text corrected
Prices & vouchers
  • Vouchers set VAT to zero - Value vouchers zeroed out the tax amount of the document line
  • Invoice discount: VAT correction - The tax correction scales by taxable discount share instead of group total
  • Shipping voucher - Was no longer overwritten by percentage shipping costs
  • Price: negative result - Very high discounts led to negative prices
Cart & order
  • Free items in the cart - Are displayed in the cart and mini basket without a price output
  • Cart button - Uses the configured TextProvider (correct translations)
  • Checkout checkbox - Markup of the text module corrected
  • Order history: variant images - Variants without their own image show the image of the master item
  • Subscription overview - Limited to the current shop and current language
b2b
  • b2b checkout: addresses - Default delivery address is selectable again; creating an address no longer overwrites the contact person
  • b2b: quotation request - NULL guard for an empty delivery date during insert
  • b2b: user management - Modal for new users is rendered when needed, permissions remain editable
  • Main-user rights - Blanket-order permission of the main user corrected
  • Welcome texts - Main-user placeholder no longer displayed in the text
Account & email
  • Forgot password without mail (catalog shop) - User mail texts are inherited from the shop of the customer master; shops without their own texts send the mail again
  • Password reset - Redirect to login after reset
  • Phone number input - Country code removes the leading 0, formatting adjusted
  • Email footer - %linkToShop% placeholder is replaced; /userdata/ paths only made absolute for relative URLs
  • Order mail: image sizes - Image dimensions are calculated for the template, with error handling for unreadable files
Interfaces & miscellaneous
  • NAV: item renaming - rename_item is filtered by tenant (company)
  • NAV: customer login - send_customer_login also checks the company
  • Login email change - Is marked for pickup by BC
  • Shop company cleaner - Faulty table query in the UnlinkedShopCompanyCleaner corrected
  • Header overflow - No more overflow caused by the AI button; flash message position at the top
Juli 2026
HighlightsPasswordless login (OTP)b2c customers now sign in entirely without a password - simply via a code from the email - and can register directly this way as well. The login mask offers either a password or an email code (as a theme setting). Earlier guest orders appear automatically in the customer account after login.
Passwordless login for b2c customers via email code
E-invoiceCustomers now request their invoice as an e-invoice - via a new building block in the shop. Delivery is made to the logged-in user, exactly as with the familiar invoice copy.
Request e-invoice in the document archive
New price engine (KUMAVISION support)In addition to our proven standard price determination, dynamic commerce now also supports the price determination of our partner KUMAVISION. This lets you choose the appropriate price model - including your own discount classes, discounts on item groups and fallback rules at line level. Extensive new tests ensure that every price is reliably correct.Payment options by order amountPayment methods can now be coupled to the order total: via a minimum and maximum amount you define from when a payment method is available - ideal, for example, to offer purchase on invoice only from a certain cart value.Weighted searchThe shop search now delivers more relevant results: hits are sorted by weighted relevance instead of purely by match - customers find suitable items faster.
  • CurrencyManager throughout - Uniform price formatting with rounding methods, symbol resolution and locale support; integrated into format_amount and KumaPriceProvider, broad test coverage
  • Favorites: shop code - Favorites are kept per shop (shop_code)
  • Discount formatting unified - Rule discounts use a common value formatting
  • Registration: text management - Texts via RegionalizedTextProvider instead of GLOBALS
  • Cleanup work - ESAG special code removed, unused queries/columns and the discount-type field removed from Kuma migrations, namespace fixes
Cart & order
  • Cart: VAT calculation - Incorrect VAT calculation in the GenericUserBasket corrected
  • Campaigns: free items stacked up - Free items were added multiple times when the cart was reloaded
  • Order confirmation: shipping-cost line (b2c) - Shipping costs were missing in the confirmation mail
  • Order confirmation: individualized items - Marking in the confirmation and customer account
  • Direct order: sticky bar - Item counter was not updated after removing a line
  • Quotations: cart tabs - Tabs now only appear when quotation is allowed
Prices & payment
  • Kuma discounts applied twice - Discounts from the PriceProvider are no longer additionally applied
  • CollanaPay: fault tolerance - Checkout survives outages of the payment service provider; no more external calls from tests
  • Item list: strikethrough price - Strikethrough prices are also shown in the logged-in item list
Account & address
  • b2c registration - Form routing to the registration handler and error feedback repaired; confirmation mail with “here” placeholder
  • Delivery address: phone number - Field phone_no instead of telephone; the phone number is correctly cleared when the address changes
  • Customer attributes - PrimaryContactNo and further attributes correctly transferred
  • Login: session only in DB - open_customer_login did not work when the session ID existed only in the DB
Tracking
  • Tag Manager: consent states - Consent output now independent of the GTM container ID
  • Tracking: Jentis on shop-less websites - The script was not output on websites without a shop
Security & miscellaneous
  • Security: SQL-injection hardening - Variables consistently bound as parameters in prepared statements
  • Item comments: false spam alert - Manual reload after submitting a comment incorrectly raised spam suspicion
  • b2b: shipping options - The defined $shopConfig is passed to getShippingOptions
  • Google Merchant: field name - sales_price corrected to sale_price
  • Layout: order button in item box - Alignment corrected
Juni 2026
Bug Fixes
  • Order process: apostrophe in customer names - Backslash escaping was written literally into the DB
  • Order process: phone number not editable - Logged-in b2c customers could not change the phone number in checkout
  • Order process: hard error on unexpected data - Faulty address expectations crashed the checkout instead of reacting gracefully
  • Collana Pay: crash without shipping options - Shops without a configured shipping method crashed during Collana payment
  • Order history: VAT and sorting - Incorrect tax calculation and faulty sorting in the order overview
  • Voucher: key generation + percent/amount logic - Coupon key collisions and the simultaneous setting of amount + percent fixed
  • Catalog layout: rendering error - Faulty CSS output in the catalog frontend
  • Currency: formatting of float(-0) - Negative sign for zero amounts removed
  • Price: quantity change without set price data - Price was not correctly initialized on a qty update
  • Item variants: permission check - Navigation variants checked the wrong class
  • Firefox: incorrect mobile detection - Touch-device detection recognized Firefox Desktop as a mobile device
  • Address: cast salutation as integer - Incorrect data type for salutation led to errors
  • User creation: reject duplicate email - New shop users could be created with an already existing mail
  • Operator precedence: missing parentheses - Condition evaluation returned the wrong result
  • Footer: width and cancellation information - b2c footer layout and cancellation info corrected
  • Modal: title and footer centered - Info/error/success modals aligned uniformly
  • Comment: max length - Name field in item comments without a length limit
  • Shipping weight: packing unit ignored - Packing-unit multiplier was not taken into account in the weight calculation
  • Category: initialization - Category global correctly initialized via CategoryService and request_uri
Features & Improvements
  • Subscription management - Subscription orders in cart, payment, price/shipping/voucher merging, promotion fields
  • Filter options: hide empty/unqualified - Unavailable filter values are automatically hidden
  • Brand search - Full-text search finds items via brand names
  • Top-seller display - Sitepart for automatically displaying bestsellers
  • RMA: accessibility + image upload - Returns form made more accessible, images can be uploaded
  • Scrollbar: linear control with loop - Horizontal scrollbar with optional linear behavior and endless loop
  • Icons for quotations and blanket orders - New icons in the customer area for quotes/blanket orders
  • Non-permitted countries in the address modal - List of blocked delivery countries is shown directly in the order dialog
  • Salesperson breadcrumb - Link back to the salesperson account visible in the breadcrumb
  • Blanket orders: quantity display - Spacers between quantity fields for better readability
  • Refactoring: ItemFiles → Repository - Image queries moved from the decorator into the WebshopItemFileRepository
  • Refactoring: user factory - Decision of which repository is used moved into a separate factory
  • Refactoring: permissions - Permission merging extracted into its own function
  • Refactoring: campaign interface - CampaignRuleHelper now uses the interface instead of concrete classes
  • Cleanup work - mcrypt dependency removed, CustomerPermissionGroupDecorator removed, show_random_items removed
Mai 2026
Features
  • Add unit tests for GenericUserItemPermissionProvider.
  • Add tests for isWebshopItemOrderable to cover various scenarios.
  • First unit test for GenericWebshopItemOrderabilityService.
Improvements
  • Use getCustomerNo instead of accessing customer_no directly in isShopSalespersonShop check.
  • Remove getShowRandomItems and getNoOfRandomItems methods from the CategoryInterface.
Bug Fixes
  • Fix PHPStan errors and Codeception errors.
  • Fix too many PDO parameters in check_duplicate_user function.
  • Fix mails for Outlook.
  • Fix return value in documentation of setCustomerNo method in Salesperson.php.
April 2026
Features
  • add custom success message, add placeholder to confirmation email, success messages and subjects
  • add confirmation email in contactform. change checkbox infield from lines to header
  • add centralAuthV2 (security improvements)
  • add env var to directly redirect to auth0 for login
Improvements
  • Use prep stmt with correct params
  • refactor migration handling to improve transaction management
  • refactor mysqli_query calls to prepared statements
  • Refactor shop_payment_option query to use prepared statements
  • refactor basket profile to basket type
  • Paypal: use the calculate_totals to determine the amount
  • CustomerAddress: initialize the CustomerAddress prior to session_save_data_b2c()
  • Payment: remove useless count on the not defined variable $resultArray for paypal express
  • Availability: change literals in getItemAvailability to constants
  • AttributeFilter: change the querys HAVING COUNT from item_no to the attribute_code
Bug Fixes
  • fix codeception migrations - fix basket quantity change
  • fix sql params in register_new_customer
  • fix sql injection in user_order_payment.inc.php refactors mysqli_query calls to PDOQueryWrapper
UI/UX Adjustments
  • styling inquiry basket
  • changed localized strings for quotes
Other
  • merge from lulatour
  • cleanup db dump
  • Deleted unlink.svg:Zone.Identifier
  • set collana pay paid order to successfully on callback
März 2026
Features
  • Add navconnect functions for NextGen Migration
  • Add option to load custom favicon from userdata
  • Add script for exporting database from remote to local and config variable for remote branch
Improvements
  • Cast right_blanket_order to boolean in getter/setter functions
  • Extend shop user SQL data for new schema
Bug Fixes
  • Fix migration tool
  • Fix missing colon on PDO parameters
  • Fix shop user modals
Other
  • Update KSS documentation
Februar 2026
Features
  • Add CRSF token class and use for payment page to prevent multiple post attempts
  • Add new Amazon Pay URLs
  • Add GitHub coding agent for legacy
  • Add Junie guidelines
  • Add original viewmodel context into AdditionalData renderRows
  • Add table indexes
  • Add role for accessibility in lists
  • Add logs to pipeline output
  • Add min, max, and step for search list
  • Add default values for new ShopSetup fields
Improvements
  • Update SQL migrations in demo
  • Improve test execution via composer
  • Optimize scripts for tests
  • Optimize performance of tests
  • Optimize performance of ItemCardTests
  • Optimize test b2b
  • Optimize test execution via composer
  • Refactor and fix open_salesperson_login to create a new session for the given salesperson
  • Refactor getUpdateInsertQueryFromArray to improve safety and stability
  • Simplify price queries, add caches, and remove unused parameters
  • Change the default sorting from customer_no to name for salesperson
  • Change caching keys from arrays to string for price
  • Change default DE country code getting pulled instead of customer country code
  • Change the used parameters in getWebshopItemByItemNo to the correct ones
  • Change the default sorting from customer_no to name for salesperson
  • Fixed env for additional env variables
Bug Fixes
  • Fixed wrong YAML entries for color in mailConfig
Dezember 2025
Improvements
  • DataCleaning: Change the data cleaning to remove only unlinked/unreferenced data.
  • Salesperson: Move customer fetching to repository to have only one logic.
  • Payment: Refactor the payment response files order_error, order_notify, and others.
  • Feeds: Use the permission provider to export only the permitted items.
  • Top Items: Intersect the top items with the allowed item prior to the query.
  • Permissions: Add annotations from the code review.
Bug Fixes
  • Fix quick order get item number from cross-reference.
  • SQL injection fix in item card.
  • Fix navconnect function -> get_field_content.
  • Heisenbug when initializing the MustacheRenderer in Docker with XDEBUG_MODE.
  • Top Items: Make sure that topItemsArray is an array to work with.
  • Fix empty customer class after login.
  • Fixed move up and down in page list view.
UI/UX Adjustments
  • Add item card flag in item list.
  • Fixed icons markup for KSS.
  • Change password link placeholder in BC Webform from %password_link% to %link%.
Other
  • Remove b2c/ajax.php and references of it in dc/common/common.js.
  • Tests: Add test for delete() in navconnect.
November 2025
Features
  • Add legacy tarball creation for new deployment pipeline method and update build exclusions in Makefile
  • Add pipelines for demo
Improvements
  • Change category structure to mustache template
Bug Fixes
  • Fix infieldInputs: also handle blur for not flickering labels, refactoring
  • Fix infieldInputs: special inputs like tel, date, masketDate that these fields are always focused prevent overlapping label with placeholder
  • Fixed missing index and set default sorting when items have the same ranking
  • Fix rename_item: mysqli 3rd param causes error, field ‘type’ not in shop_user_basket_line_new anymore
  • Fix type error when no items are present in query
  • Fixed sm cell in linklist if is a boolean format
  • Fix BC item preview
  • Fix demo pipeline triggers
  • Fix round values for collanaPay
  • Hotfix: prevent failed order emails due to empty recipient
  • Fixed share URL in item card
UI/UX Adjustments
  • Quantity spinner: prevent add to favorites when quantity input is changed and hitting enter
  • Mobile menu set top 0 of mobile menu when sub-entry is opened - prevent submenu not accessible
  • Tag manager remove noscript-tag
Other
  • Adding files for deployment hooks
  • Prices: add discount_group to unique nav_primary index for the nav sync
  • HighlightEditor: remove line feeds from the description
  • Cache DB connection (PDO and mysqli) to force using only one open connection
Oktober 2025
Features
  • Add custom value for field ‘your_reference’ for ordering blanket order.
Improvements
  • Improve healthcheck.
  • Replace sleep with proper wait conditions.
  • Make sure currShopConfig is filled in MustacheRenderer.
Bug Fixes
  • Fix tests.
  • Fix demo DB data encoding problem for tests.
  • Fix DB dump issues.
  • Fix migrations.
  • Fix webshop login site part.
  • Fix correct the doc-block to string.
  • Fix currency format on b2c item card.
  • Fix GetOrders, check for SubArray.
  • Fix bug that no item_list is shown if no filter is set in the main_shop_item_preview table.
  • Fix bug that wrong salesperson text constant shown if only one salesperson is available.
  • Fix add default value and type casting for salesperson code in customer.
Other
  • Restore git user after release.
  • Remove debug code.
  • Update DB dump.
  • Various fixes from the current shop update.
September 2025
Features
  • Webforms: add theme creation to download_file_new.php
  • Hide orders on other reasons
Improvements
  • DB: Don’t echo database credentials
  • ShowAddress: True on default in b2b
  • Composer: Update composer.lock to match composer.json state
Bug Fixes
  • Fix item obj parameter for function get_itemcard_descriptions
  • Fixed: Save sales_line_customize in b2b how it’s done in b2c
  • Fixed: Set customization_hash or it will not be displayed in step 1 in b2b
  • Fix product search cron
  • Fixed: Order subscription header by payment type or it is sorted by ID (inconsistent view)
  • Fixed order button icon color
  • Fix checkPasswordStrength
  • Fix UnitPrice Tax
August 2025
Improvements
  • Change all htdocs path to /app
  • Change docker path everywhere to /usr/local/apache2/htdocs
  • Load themes always from disk
  • Add Algolia styling
Bug Fixes
  • Call login listener before setting salesperson data to prevent silent errors
  • Fix layout class migration
  • Fix order bar
  • Fix Algolia variants
  • Fix Algolia attributes
  • Fix blanked orders
  • Fix false function calls in GeneralAjaxData
  • Fix load variants in b2b item list
  • Fixed SQL error after set page link insert
  • Fix multiple script load error
UI/UX Adjustments
  • Removed headline in topsellerPreview
Other
  • Update releaseTools
  • Add text constant
  • Changed TCS group classes
  • Get Webshop Order Line Additional Data
  • Add blanketorderhelper to basket button class in GeneralAjaxData
  • Prevent usage of dummy items in getAlgoliaItemListRender
  • Algolia add variant description
  • Algolia add prices
  • Algolia add is b2b in renderInstantSearch, adapt sorting
Juli 2025
Features
  • Add possibility to get more information from shop
  • Add GTIN to shop_item and search and quick_order
Improvements
  • Cleanup docker-compose.yml files and add support for profiling for PHP8.1 and PHP8.3
  • Refactor: use container images from dynamiccommerce instead of building them again for every automated tests execution
  • Optimize performance and disk space usage of PHP8.3 Docker image build
  • Refactor run-codeception.yml to use dynamic Docker prefix for container management
  • Refactor pipeline for running Codeception
  • Config vendor filter in item statistics
  • Make Dice error more verbose to find the initial error faster
Bug Fixes
  • Fix redirect to search after login
  • Fix correct graduate price cache key
  • Fix false array structure for order tables on older MariaDB versions
  • Fix update of text constants from file to prevent overwriting of changed entries
  • Fix selector to pass BasketCest.testRemoveItemBasket successfully
  • Fixed backslash in mail color
  • Fix problem that Docker volumes are always named lowercase
  • Fix permissions in pipeline
  • Fix permission error at the end of pipeline execution
  • Fix error when trying to run Codeception pipeline
  • Fix shipping options & payment options permission queries
UI/UX Adjustments
  • Add styling for itemlist in order
  • Add itemlist slider to order
  • Add accessibility in b2b, catalog, website, login
Other
  • DB: Change length of shop_nav_sales_header.shipment_method from 80 to 100
  • DB: Change length of shop_nav_sales_header.payment_terms from 80 to 100
  • Add cleanup step to adjust ownership after test execution in run-codeception.yml
  • Add PHP script to rewrite the docker-compose.yaml file for the use in the pipeline
  • Remove unnecessary environment variables
Juni 2025
Features
  • Implemented group by functionality.
  • Added NOT LIKE comparator for SQL find by criteria from repository.
  • First implementation of additional_data table.
  • Added script for automatic MySQL migration.
Improvements
  • Updated database dump.
  • Added sorting column and order filter by sorting column in collection filter group.
Bug Fixes
  • Fixed division by zero by type casting qty as float in item price data.
  • Fixed link for Excel XLS.
  • Fixed Channable mark as shipped.
UI/UX Adjustments
  • Dealer search removed radius.
Mai 2025
April 2025
März 2025
Februar 2025
Januar 2025
Dezember 2024
November 2024
Oktober 2024
September 2024
August 2024
Juni 2024
Mai 2024
April 2024
März 2024
Februar 2024
Dezember 2023
November 2023
Oktober 2023
September 2023
August 2023
Juli 2023
Juli 2023
Juni 2023
April 2023
Oktober 2022
September 2022
August 2022
Juli 2022
Juni 2022
Mai 2022
April 2022
März 2022
Februar 2022
Dezember 2021
November 2021
Oktober 2021
September 2021
August 2021
Juli 2021
Juni 2021
Mai 2021
April 2021
März 2021