What's New
Stay up to date with the latest features, improvements, and fixes
What's New in Margin Master
Stay up to date with the latest features, improvements, and fixes.
MarginMaster v2026.302.40256 v2026.302.40256
March 2, 2026 18 changes(4 deployments combined)-
Update notification snooze options
Replaced the simple toast notification with a new snooze dialog when auto-update detects a new version. Users can now choose "Update Now" or snooze the reminder for 1 Hour, 1 Day, 1 Week, or 1 Month. The snooze interval is tracked by recording the last-checked timestamp, and automatic checks are suppressed until the interval elapses. Manual "Check for Updates" from the Help menu always works regardless of active snooze, and updates the last-checked time without clearing the snooze setting. Added comprehensive documentation for auto-update behavior and snooze options.
-
Auto-validation on Store Configuration dialog
The Store Configuration dialog now automatically validates credentials and closes itself when the window loads if all required fields (store number, vendor, POS system) are already populated and the license is valid. This eliminates unnecessary user interaction during startup when credentials are already configured.
-
Enhanced vendor and POS system name matching across database versions
Added multi-strategy matching that handles name variations from different database versions: enum values, RetailerSoftVendor mappings, display names, legacy aliases (like "ACTIVANT" for Epicor), numeric IDs, and normalized fuzzy matching. This ensures vendor and POS system values are correctly recognized regardless of how they were stored in older database versions or naming convention variations.
-
Enhanced reference data loading with multi-level fallback
Reference data loading (vendors, POS systems, RSCs) now uses a three-tier fallback approach: first attempts API load, then falls back to local cache if API fails or returns empty data, and finally populates POS systems from a built-in list if both API and cache are unavailable. This ensures the application remains functional even with limited or no internet connectivity.
-
Database Setup now extracts vendor and POS from database naming convention
When creating from or connecting to an existing database, the Database Setup screen now attempts to parse vendor and POS system information from the database name itself (format: VendorShort_StoreNumber_StoreName_PosShort_Timestamp). This provides a fallback when table data is incomplete or ambiguous.
-
Saved view settings now preserved across database switches
Fixed a migration gap where the active selection box view and column view settings were being lost during database switches. A previous migration had moved these settings under different key names, but the current code wasn't checking the intermediate location before falling back to the legacy configuration file. The application now checks all possible storage locations in the correct order, ensuring view preferences are preserved.
-
Boolean field display normalization corrected
The application failed to normalize boolean fields that were declared as non-nullable (bool) rather than nullable (bool?), causing the Discontinued field and similar fields to display raw SQL BIT values ("0" and "1") in selection dropdowns. Updated all four normalization sites to handle both nullable and non-nullable boolean types correctly.
-
Database Setup now reads vendor and POS system from ApplicationSettings table
The Database Setup screen was only reading from legacy About and GlobalFileConfig tables, missing the ApplicationSettings table where modern versions of Margin Master store RetailerSoftVendor and PointOfSaleSystem. This caused the vendor and POS dropdowns to appear empty even when connecting to databases that contained this information, forcing users to manually re-enter values that were already stored.
-
Auto-update timer now respects enable/disable setting
The automatic update check timer previously ignored the USEAUTOUPDATEREFRESHCHECK setting and ran even when disabled. The timer now properly checks this setting before performing update checks, so disabling "Auto Update Check" in Tools > Options > Miscellaneous now fully stops automatic checks.
-
API authentication fallback during initial setup
Added automatic fallback to the anonymous v1 API endpoint when the v2 endpoint returns a 401 Unauthorized error during store validation. This resolves an issue where the Store Configuration dialog couldn't validate store credentials before the JWT token was available (which requires saving vendor/store settings first).
-
Pricing strategy save ordering and special entry handling
Fixed strategy save logic to load and save strategy steps in database ID order (ORDER BY Id) and exclude special entries (custom groups, SKU-level exceptions, placeholder) from positional mapping. This prevents data corruption when reordering strategy steps. Also added dirty state notification after step reordering so the UI correctly reflects unsaved changes.
-
Filter query builder updated for new boolean display values
Modified the SQL WHERE clause builder in SelectionService to recognize and handle "Yes"/"No" display values in addition to the legacy "True"/"False" and "1"/"0" formats, ensuring filters continue to work correctly after the display change.
-
Changed boolean display from "true"/"false" to "Yes"/"No"
Updated the display format for all boolean fields from lowercase "true"/"false" to more user-friendly "Yes"/"No" throughout the Main Table filtering interface.
-
New update snooze dialog
Added UpdateSnoozeView dialog (480x280) showing version number, "Update Now" button, and five snooze/dismiss options with appropriate icons. Dialog appears centered on the main window and is managed through the UpdateSnoozeViewModel.
-
Warning banner shown when vendor or POS system cannot be matched
Instead of displaying a misleading green success message when vendor or POS system values cannot be matched, the Database Setup screen now shows a warning banner with the raw stored values, allowing users to manually select the correct options before proceeding.
-
Added intermediate migration step for view settings
Added logic to check for settings stored under the raw configuration keys "ACTIVE-SELECTIONBOXVIEW" and "ACTIVE-COLUMNVIEW" before falling back to the legacy GlobalFileConfig source. This bridges a gap where settings migrated by an older version weren't being found by the current migration code, preventing accidental deletion of valid user preferences.
-
Improved reference data caching logic
Reference data is now only cached when successfully retrieved from the API, and cache loading only occurs for collections that are still empty after the API attempt. This prevents overwriting good data with stale cache entries and reduces unnecessary cache operations.
-
Auto-update support documentation
Added comprehensive user and support documentation (docs/marginmaster/getting-started/auto-updates.md) covering auto-update behavior, snooze options, manual checks, disabling updates, downgrading, common questions, and technical implementation details.

