Changelog

Presage Desktop
2/19/2026

Database

  • Fixed: several issues with pgetsubtreebylookup, which is used by the graphing website to look up child products.
  • Fixed: an issue where fgetsetting was looking for Stores instead of Plants.
  • Added: fuseraccounthassiteaccess function used by the isoft authentication node module to know if a user has access to a plant
  • Changed: (case 38185) fgetsetting and pchecksetting now defer to setting.defaultvalue over the default that was passed in as an argument.
  • Removed: references to the no longer supported group setting levels.
  • Fixed: (case 40544) (case 45627) fcountproblems added for verification interface. Moved function above the 3.7 version tag so that it goes out when Gwyn updates people to 3.6
  • Added some queries that create the password security settings at their default values so that someone can see them to change them.
  • Added: a new permission that controls whether a user is able to see/create/revoke API tokens. These tokens allow other applications to access Presage data through the (in development) Presage API. The accessor will inherit all the privileges of the user account that the token is on (not the user account that generated the token).

CommonResources

  • Added: support for tri-state checkboxes for boolean options. This makes it so that companies can track and visually discern between boolean options that are Yes vs No vs Not yet set. This should help situations where companies have to set up various Choice options instead of booleans.
  • Fixed: a possible database error that could happen if two users wanted to create a new user hotkey in the action table from two different user sessions at the same time.

Configuration

  • Changed: (case 38185) in the configure settings area, the user can now edit the 'default' column. Previously, this value used to only be for reference, but will now specify the value for new users/sites that do not currently have a value.
  • Removed: the configure settings area no longer has a 'scope' dropdown. Also the user can no longer view or edit settings at other levels, as this behavior was deprecated previously.
  • Removed: references to the no longer used cascade argument for settings, as they now operate at their specified level, and no other.
  • Added: in the configure users area, there is now a section where an admin can see, generate, and revoke API tokens for each user account in the system. These tokens allow other applications to access Presage data through the (in development) Presage API. The accessor will inherit all the privileges of the user account that the token is on (not the user account that generated the token). This area is hidden if the user does not have the new "Manage API keys" permission.

Login

  • Fixed: an issue where the login popup might be stuck in the "No DB Connection" locked down mode if the popup appeared while the database was unreachable. This could effectively lock the user out.
  • Fixed: an issue where user plant access was not being checked correctly.
  • Fixed: an issue where the login dialog would not be visible if the main application window was minimized or off screen when the application was locked. Now, the popup will be centered in the main monitor if the application is not visible to center on.

Sampling

  • Fixed: (case 44349) an issue where some sampling history filters would search correctly, but not save the search correctly or navigate to the correct search URL for graphing.
  • Fixed: (case 44411) an issue where graphing URLs might be incorrect if some of the values contain restricted values like "&" or "=".
  • Changed a text label from Sample Category to Analysis Category to match other interface elements.

Work Orders

  • Fixed: (case 44590) an issue where 'empty' values might be deleted off of a sample if another option was changed and the first option's default was blank. Now, option values (blank or not) will persist indefinitely unless the sample is deleted or the analysis is changed.

Reports

Failed Results (FailedResults.rpt)

  • Fixed: (case 45605) added exclusion for inactive thresholds in subreport
  • Changed: (case 45605) added inclusion for thresholds relevant to parent productid and top level ancestor productid.
2/19/2026

Crystal Reports

  • Changed: (case 40474) the 'choose which report to print' popup no longer has an orientation column, as it confused some users. Also, the 'default' checkbox column has been moved to the right so as to avoid confusion between this marking an item as a default print option and selecting the item to print this time. Also, changing whether a report is a default now immediately resorts the report list. This should make the function of favorite reports more obvious to the user.

Database

  • Fixed: (case 40664) the end date of product batches now allows NULL to avoid a MySQL bug on some systems.
  • Fixed: an issue with an incorrect index on the productbatch table.
  • Added: (case 40855) a new stored procedure that can RENAME a table, replace it with a copy (so that people can still insert into it), perform a potentially slow ALTER on the original, combine the rows, then swap them back. This is useful for making changes to large tables in a way that does not take a system down for as long due to table locks.
  • Fixed: pconfigurelog_tables will no longer do unnecessary, expensive work if the database is not named presage.
  • Changed: (case 40855) the procedure pconfigurelogtables has been rewritten to use the new procedure pswapandalter_table so as to not lock the logs up for as long.
  • Changed: pswapandaltertable now applies the alter operation to the placeholder table so that adding or removing columns will not cause an error when the tables get merged.
  • Changed: historical version 3.3.1 now changes the trigger on analysisoptionvalue beforehand to be faster. This seemed to speed up the query as much as 95%.
  • Added: (case 40544) fcountproblems added for verification interface.
  • Added: (case 41117) stored procedures that restore information from the logs to all databases.
  • Fixed: (case 42224) an issue where right click graphing would not render correctly (sometimes) due to a race condition introduced by google into their charts.
  • Added: (case 42447) to improve HDD consumption on systems with integrations that commonly drop and re-add rows from the analysisoptionchoice and productbatch tables, the logging triggers for those tables have been re-created with a feature that allows suppression of the logs.
  • Changed: (case 42365) the email recipient of emailed reports and report subscriptions now supports nearly unlimited number of recipients.
  • Changed: (case 42488) when an investigation triggers an automatic retest, if the retest analysis is a production analysis (recipe), the production volume of the newly created sample will correctly inherit from the default batch volume instead of 0.
  • Added: a table that is used for optional password blocking based on security preferences.
  • Changed: useraccess.username is now long enough to store an entire username.
  • Added: (case 24295) support for useraccess.accesstype of 'Session Unlock'

Home

  • Added: by request, hitting 'enter' will open the selected WO on the WO screen.

Login

  • Added: new user passwords can now no longer match the user's first or last name, or their work email or recovery email, due to ease of guessing that kind of password. It also cannot contain the account name, as this does not add any complexity to guessing the password.
  • Added: the change password popup now shows some warnings/errors as the user types, and some other, slower tests when the user leaves the field.
  • Added: support for many new (optional) Password security settings, including minimum/maximum length, minimum number of characters from character classes (upper, lower, special, number), checking against a block list of the top 10k passwords, checking to see if the password was involved in any password breaches, and making sure the password doesn't match any recent passwords the user employed. All of these settings default to off.
  • Added: support for a global setting to set a threshold on how many breaches a password must be involved in before it is not allowed. Below this, the user simply sees a warning.
  • Added: (case 24295) as part of logging in, a new setting is checked "Security"->"Passwords: maximum number of days between user password changes" which checks to see if the user has changed their password recently enough. If not, they are shown a popup forcing them to change their password now.
  • Added: (case 24295) a new global setting: "Security"->"Passwords: number of days before password expiration to prompt user to change password". This represents a number of days before password expiration to begin prompting the user to change their password and let them know that the password will expire soon.
  • Added: (case 24295) support for locking and unlocking user sessions. There is now a menu option File->Lock Session which will lock the current session, requiring a password to continue. This is useful for security when a user walks away from a terminal. By default, this can be activated by Ctrl + L, but this hotkey can be customized in the user hotkeys dialog.
  • Added: (case 24295) a global setting of 'minutes of inactivity before automatically locking user session' (defaults to off). If a machine has no activity for this many minutes, the session will automatically be locked, requiring the user to type in their password to continue.

Master

  • Added: a separator to the File menu for better organization.
  • Added: support for customizable user hotkeys in top level menus. This is being used in the new File->Lock Session option.
  • Fixed: the help->about box now correctly shows all modules loaded by the system with their full absolute path on the file system.
  • Fixed: an issue where help->about module list wouldn't show modules correctly if the working directory was not the install directory (common in terminal services installs).
  • Fixed: an issue where help->about didn't show modules where the module name and filename didn't match.
  • Added: by request, the help->about box now shows the last file modification time for each module. This is useful when checking to see if files were downloaded and applied during update without opening windows explorer. This dialog now has a large minimum size to facilitate more data that is shown in it.
  • Added: the help->about box now splits the directory off the filename so that the filename can be more obvious and easier sorted. The version and filename are now bolded and the path and hash are slightly gray to make the important information easier to see.
  • Added: help->about now has a last modified timestamp, which is read from the file in the filesystem.

Products

  • Fixed: (case 42322) an issue where copying and pasting a product at the same level will automatically name the product " - Copy" at the end so that the user can rename the product instead of just getting an error.
  • Added: on save, we now test to see if there are duplicate products at any given level and show the user an error if any are found. This should help prevent issues where the user can get confused by products with the same name at the same level.

Sampling History

  • Fixed: an issue where a blank user/location/product/etc might be selected in the dropdown (instead of nothing) when the screen was cleared. This would lead to users inadvertantly searching for only those samples that were associated with the user/location/product/etc with a blank name.
  • Changed: if the user doesn't have permission to edit samples on this screen (the most common situation) all the readonly fields in the list are hidden. This makes using the arrows to navigate the list easier since up/down will no longer open up some columns' dropdowns.
  • Added: hitting enter in this list now opens the selected WO on the WO screen.

Work Orders

  • Added: a global hotkey to open a 'find/open WO #' popup. Entering a WO # into this popup and hitting enter will load that WO on the WO screen, no matter what screen the user is currently on. This is the same popup the user sees when loading a WO # on the WO screen. The hotkey for this global action defaults to F4, but can be customized per user.

Reports

Analysis Change Log (AnalysisChangeLog.rpt)

  • Removed: (case 39891, case 39892, case 39894) older report file. Functionality will now be handled by the file ChangeLog.rpt, which handles multiple change log modes

(Analysis,Users/Groups,Investigation Trigger,Product) Change Log (ChangeLog.rpt)

  • Added: (case 39891, case 39892, case 39894) the updated version of AnalysisChangeLog.rpt, which has a mode parameter. Each mode is a different report entry in the table and shows logs for different things, which slight variations in columns, headers, and active parameters.

Certificate Of Analysis (CertificateOfAnalysis.rpt)

  • Added: (case 43792) Lot and Expiration for Recipe analyses, when present
  • Fixed: (case 43792) Comments and Findings shading

Data Entry Tagnumber(1.1x2.4_DataEntryTagnumber.rpt)

  • Changed: (case 40366) barcodes are now not center aligned by default, but there is a setting to change that back. All tag reports with barcodes respect the same setting.

Location Analysis Label (0.66x2.1) (0.66x2.1_LocationAnalysisLabel.rpt)

Added: (case 39137) a supplemental alternate sized report

Location Analysis Label (1.1x2.4con) (1.1x2.4con_LocationAnalysisLabel.rpt)

Added: (case 39137) a supplemental alternate sized report

Sample Barcode (0.66x2.1)(0.66x2.1_LabelWithBarcode.rpt)

  • Changed: (case 40366) barcodes are now not center aligned by default, but there is a setting to change that back. All tag reports with barcodes respect the same setting.

Sample Barcode(1.1x2.4_LabelWithBarcode.rpt)

  • Changed: (case 40366) barcodes are now not center aligned by default, but there is a setting to change that back. All tag reports with barcodes respect the same setting.

Sample Barcode (1.1x2.4con)(1.1x2.4con_LabelWithBarcode.rpt)

  • Changed: (case 40366) barcodes are now not center aligned by default, but there is a setting to change that back. All tag reports with barcodes respect the same setting.

Screening (Screening.rpt)

  • Added: (case 40396) a new report that shows COVID-19 Symptom Screening results

Work Order Barcode (0.66x2.1)(0.66x2.1_WOLabelWithBarcode.rpt)

  • Changed: (case 40366) barcodes are now not center aligned by default, but there is a setting to change that back. All tag reports with barcodes respect the same setting.

Work Order Barcode(1.1x2.4_WOLabelWithBarcode.rpt)

  • Changed: (case 40366) barcodes are now not center aligned by default, but there is a setting to change that back. All tag reports with barcodes respect the same setting.

Work Order Barcode (1.1x2.4con)(1.1x2.4con_WOLabelWithBarcode.rpt)

  • Changed: (case 40366) barcodes are now not center aligned by default, but there is a setting to change that back. All tag reports with barcodes respect the same setting.

Work Order Copy Barcode (0.66x2.1) (0.66x2.1_WOCopyBarcode.rpt)

Added: (case 39137) a supplemental alternate sized report

Work Order Copy Barcode (1.1x2.4con) (1.1x2.4con_WOCopyBarcode.rpt)

Added: (case 39137) a supplemental alternate sized report

Work Order Copy Barcode (Label)(1.1x2.4_WOCopyBarcode.rpt)

  • Changed: (case 40366) barcodes are now not center aligned by default, but there is a setting to change that back. All tag reports with barcodes respect the same setting.
2/19/2026

Analyses

  • Moved: the thresholds area has been moved from the main form into a property page.
  • Added: (case 24089) new property page area for the future for managing rules and restrictions.
  • Added: analysis option rules page for viewing and editing rules that trigger different states on an option depending on the presence or absence of various tags.
  • Changed: for speed purposes, analysis option choices and rules are now only loaded when they are needed. This is to avoid slowdowns at plants with large numbers of rules and threhsolds.
  • Added: the analysis option rules page now pops up a 'add/edit/delete' associated tags dialog when you double-click the tags cell in the rule list.
  • Added: synchronization between the tag lists in the rule tag popup with the product tags area on the products screen.

Common Resources

  • Added: support for checking analysis option rules. These rules can be triggered off of tags on the plant, the product, or the location.
  • Added: support for Hidden option rules. They now hide those options in the sample detail page.
  • Changed: when options are hidden for any reason now, samples with the same analysis will now correctly align values for the same option.
  • Added: the configure analysis page now loads option thresholds and option rules for each analysis as they are selected instead of when the screen is loaded.
  • Added: configure option rules/thresholds pages now show an asterisk in the title bar if any are modified. In addition, the number of thresholds/rules on the page are shown in parenthesis in the title bar. This makes it easier to tell at a glance whether an option has any thresholds or rules.
  • Changed: the tags field in the configure tags area is now a multi-line readonly edit box for easier review.
  • Added: an edit icon to the tags column to make it more obvious that the user can click into the tags area to choose tags.
  • Changed: the user can no longer open the edit tags dialog if the item is not editable.

Configuration

  • Changed: the city/state/zip/country feature in the edit plants area now uses shared state/zip functionality for speed purposes.
  • Added: (case 24089) support for tags on plants.
  • Fixed: hitting the reset button after visiting the configure plants page could lead to duplicated plants in the dropdown.
  • Fixed: (case 39720) the timezone autocomplete now strips out many redundant and deprecated timezones.

Database

  • Added: (case 24089) tables and changes to enums to support tags associated with plants.
  • Renamed: zipcode and state.stateid have been renamed to statecode to better match other products.
  • Added: function fgetcompanyproductcode, which is a product agnostic API for getting a company product code.
  • Added: fgetsetting and fchecksetting for consistency with other products.
  • Added: some JSON utility functions, useful in new JSON operations.
  • Added: fgetoptionrestrictions and fcheckoptionrestrictions, functions for testing whether an option should be shown/editable/etc.
  • Added: the Disabled option rule outcome has been renamed to Inactive to match the Inactive flag/behavior on options themselves.
  • Added: if an analysis option is inactive or marked as required to close or perform directly (not through a rule), ftestoption_restrictions will correctly return the status of 'Inactive' or required.
  • Added: support for specifying an email subject in reportqueue.
  • Removed: calls to pconfigurelog_tables in versions 2.6, 2.7, 3.3 so as to not do unnecessary work when updating to a new version.
  • Changed: pconfigurelogtables no longer sets enums on logchange.column and logchangegroup.table. Its going back to VARCHAR(100) for both. This only costs 10% more HDD space and requires a lot less update time. Also, if either of the live log tables are found to not be using ROWFORMAT=COMPRESSED (which accounts for 50% of the HDD space), the row format will be set to COMPRESSED.
  • Added: active flag to the analysisoptionrule table.
  • Changed: ftestoption_restrictions now respects active flag, and properly handles rules with no tags.

Home

  • Removed: the date pickers are no longer locked if the user is not searching closed documents.
  • Fixed: load times have been improved significantly, especially at plants with large numbers of thresholds.

Investigations

  • Fixed: (case 38843) an issue where loading investigations would show that the investigations had been modified and needed to be saved, despite the fact that the user did not change them.
  • Fixed: (case 38843) an issue where saving investigations with retests could move those retests to a different work order whose WO # matched the investigation #.

Locations

  • Added: several new "Group results by" options, including a 10min option, hour option, and a Custom option.
  • Added: an edit button that shows when the custom group by is selected, which allows the user to change the number of minutes that the custom group by uses.
  • Fixed: an issue where the selected 'group by' option is not saved correctly on screen close.
  • Fixed: an issue where the previously selected animation speed is not restored correctly on screen open.
  • Changed: when group by was changed, the tree was auto-expanded, but not when results were loaded. Now it expands when items are loaded as well.
  • Fixed: an issue where hitting the animation button doesn't work if nothing is selected in the tree.
  • Fixed: (case 39875) an issue where selecting the group by option of "None" could lead to strange issues with colorizing locations.
  • Changed: Moved group by and speed labels above their fields.
  • Added: Made group dropdown typeable.

Product

  • Added: analysis option rules and choices are now loaded when the user goes to copy a product batch to ensure that all things that reference that batch are loaded.
  • Changed: analysis option rules and thresholds are no longer loaded automatically for all analyses. This will speed up loading the product thresholds page. Thresholds are loaded for each product as they are selected.
  • Fixed: a crash when deleting tags from the product tags area.

Sampling

  • Changed: improved the speed of loading large numbers of results.
  • Added: all samples' restrictions are loaded up front after a search is performed to avoid loading them as samples are being displayed.

Settings Framework

  • Added: support for a shared zip code cache.

Work Orders

  • Fixed: an issue where loading a work order with a due date or a verification due date with seconds might say the work order had been modified when it had not.
  • Added: support for Hidden option rules on recipes.
  • Added: now, analysis options that are hidden for any reason will still calculate defaults and acceptability, while inactive options will not calculate or save defaults.
  • Fixed: various issues with regards to default values on production samples (recipes).
  • Fixed: changing recipe values now updates other values' defaults in realtime now.
  • Added: sample tag # to the recipe list.
  • Changed: recipes should now correctly load dropdown choices as they are selected instead of when the screen is opened, speeding up the screen on larger databases.

Reports

Analysis Change Log (AnalysisChangeLog.rpt)

  • Fixed: (case 40145) removed archive change log section of the UNION ALL

Certificate of Analysis (CertificateOfAnalysis.rpt)

  • Added: (case 39675) performed on datetime
  • Changed: (case 39675) minor date to datetime updates with formatting, where appropriate.

Contact Tracing (ContactTracing.rpt)

  • Added: (case 40335) a new simple contact tracing report showing where people performed samples in users by location or locations by user format.
  • Added: (case 40335) location parameter header

Failed Results (FailedResults.rpt)

  • Fixed: (case 39681) report was not automatically pulling logo from the database

Sample Barcode (1.1x2.4_LabelWithBarcode.rpt)

  • Added: (case 39138) a setting to pick which datetime field is displayed, updated from showing workorder scheduled date
  • Changed: (case 39138) minor rearranging fields more likely to be short on the same line while giving fields more likely to be long more room
  • Changed: (case 39619) changed the optionvalue setting in the subreport from Global to Plant.
  • Changed: (case 39561) right-aligned the barcode to fix an issue where barcodes were not scanning. I suspect the "centered" barcode was being interpreted as "jusitifed" by an aggressive printer driver.

Sample Barcode (0.66x2.1) (0.66x2.1_LabelWithBarcode.rpt)

  • Added: (case 39138) a setting to pick which datetime field is displayed, updated from showing workorder scheduled datetime
  • Changed: (case 39619) changed the optionvalue setting in the subreport from Global to Plant.

Sample Barcode (1.1x2.4con) (1.1x2.4con_LabelWithBarcode.rpt)

  • Added: (case 39138) a setting to pick which datetime field is displayed, updated from showing workorder scheduled date
  • Changed: (case 39138) minor rearranging fields more likely to be short on the same line while giving fields more likely to be long more room
  • Changed: (case 39619) changed the optionvalue setting in the subreport from Global to Plant.

Samples By Analysis (SamplesByAnalysis.rpt)

  • Changed: (case 39678) minor query improvements, date performed field now shows a datetime instead of a date. Dynamic option headers can grow. The header box can grow.
  • Added: (case 39691) a mode to print from the Sampling History Screen, with new parameters to support that and defaults to make the inactive mode benign
  • Changed: (case 39691) cleaned up the report header, added plant logo, and changed the analysis parameter to a combined category analysis parameter
  • Fixed (case 40383) fixed subreport links
  • Fixed: issue in the subreports causing options and option headers not to print in Sampling History Mode

Testing Barcode (0.5x2.4LabelWithBarcode.rpt)

  • Fixed: (case 39133) tidied the report, improved the query to be more consistent with the Work Order Tags, and saved it with printer settings that match the size in the report filename. With necessary margins, this required a reduction in the number of fields displayed. Report now only shows barcode, tagnumber, workorderid, and a date (which date is shown and the format of that date are specified by settings).
2/19/2026

Analysis

  • Changed: (case 38064) the user can now check the "Global" check on a threshold when a product is specified.
  • Fixed: (case 39003) thresholds and the 'test value acceptability' popup now both correctly handle european-style number formatting windows preferences (period and comma switched).

CommonResources

  • Fixed: the edit default value dialog now correctly handles european-style number formatting for other option defaults.

Configuration

  • Fixed: an issue where multi-line lock notes weren't displaying right.
  • Added: (case 37587) a filter to the user account list for easily filtering down to specific users by account name, first and last name, email, or lock notes.

Database

  • Changed: (case 38584) option values can now be 100 characters.
  • Added: (case 38631) a description to alert subscriptions
  • Fixed: (case 38918) an issue where option choices were not logging changes correctly.
  • Added: (case 38776) logging triggers on the useraccount table have been readded because they were missing on some databases.
  • Added: (case 38880) Support custom query data tables in dashboard

Home

  • Fixed: (case 38431) an issue where doubleclicking an empty row could cause a crash.

ITMySQLConnection

  • Removed: the unnecessary and confusing text "APPCRASH" that was added to some unknown mysql client errors.
  • Fixed: if there is an issue establishing a secure connection to the database (and secure connections [SSL] are enabled) the error "APPCRASH: the operation completed successfully" will no longer be shown instead of the intended "SSL is not configured correctly or secure connection refused."

Locations

  • Fixed: (case 38262) an issue where the user can get a crash when adding a new top-level location.
  • Fixed: an issue where the user would be asked to save again even though nothing had changed.

Product

  • Added: wait cursor when loading product specifications.
  • Fixed: (case 38258) an issue where loading specifications could cause a very long delay on a system with a large number of products.
  • Changed: (case 38064) the user can now change product specs to allow "All Plants"
  • Fixed: (case 39003) thresholds now correctly handle european-style number formatting windows preferences (period and comma switched).

Sampling

  • Fixed: (case 39003) values, defaults, and 'calculated values' now correctly handle european-style number formatting windows preferences (period and comma switched).

Work Orders

  • Fixed: (case 38312) an issue where the time of day of automatic WOs would show midnight until the user clicked into the field, and it would be switched to the current time of day.
  • Fixed: (case 38147) an issue where recipes with default value formulae might not calculate 'Per Batch' values correctly. The ratio between production and batch volume was being applied twice.
  • Added: (case 38640) a 'show inactive schedules' checkbox, which defaults to unchecked. Check this box to see schedules that have been deactivated.
  • Fixed: if the user hits the button to add a new schedule, focus will automatically be put into that item so the user can fill it out.
  • Fixed: (case 39003) values, defaults, and 'calculated values' now correctly handle european-style number formatting windows preferences (period and comma switched).
  • Fixed: recipes now handle european-style number formatting preferences correctly.
  • Fixed: the 'value calculation' popup was not handling european-style number formatting correctly if the user did a calculation in scientific format.
  • Fixed: using the 'value calculation' popup to create a computed value now correctly puts the right value in the background for graphing as well as acceptability testing.
  • Fixed: work order change log now correctly displays modified values in european-style number formatting correctly.
  • Fixed: saved value calculations now correctly load back up when loading a WO.
2/19/2026

Crystal Reports

  • Changed: the choose printer dropdown in the edit default printers dialog is now wider to facilitate networked printers.
  • Added: (case 38210) a global setting called "Printing"->"Automatically set windows default printer before printing". This setting defaults to False. When set to True, every time the user prints, the default printer in windows will be set to the printer the user is printing to, and the printer will be set back to the previous default afterwards. This may help with some printing scenarios where default windows printer affects some print jobs.

Data Management

  • Fixed: an issue where permissions were not being checked correctly for this shared module.
  • Fixed: (case 36908) an issue where a table that had foreign keys on it would throw an error when importing.

EDocuments

  • Changed: how data sources are handled has been changed so that objects are not loaded from the database if they are not referenced in the EDocument template. Also, passing objects into multiple edocument evaluations won't load the same objects more than once.
  • Added: support for edocuments to be evaluated in such a way that invalid tokens are left in. Also, edocuments can be evaluated in a way where the values are escaped and quoted, which is useful for when the output is a query that needs to be run.
  • Fixed: an issue where the handling of global variables wasn't working correctly.
  • Fixed: a crash that could happen when subreports were present in an edocument request.

Shared Controls

  • Fixed: (case 37729) an issue where sometimes column tooltips would be left even after columns were deleted, leading to incorrect or overlapping tooltips.
  • Fixed: several issues where 'dead whitespace' would be left in a list if the user was scrolled to the right when columns are deleted.
  • Fixed: (case 36452) an issue where using the mouse scroll wheel to scroll a list control with close buttons (little red x's), the x's would not get redrawn correctly.
  • Added: (case 36809) an option for exporting just selected items in a list to a spreadsheet.
  • Removed: the option for exporting to an HTML table, as I don't think this is valuable to anyone.
  • Added: the shared 'dropdown choice' popup dialog now uses a typeable dropdown for easier searching.
  • Added: 'automatic' list cell tooltips that appear when the text doesn't fit (has an elipsis at the end) now works if the string has line breaks in it, which also causes an elipsis. This helps in lists where multi-line data (like addresses) can be present.
  • Fixed: an issue where tree controls that contained checkboxes might not toggle the check boxes correctly if the user used the keyboard (space button) to toggle the checks.

Common resources

  • Fixed: (case 13589) the user can no longer save option choices/thresholds with an empty value.
  • Added: (case 13589) if the user modifies a saved choice/threshold to have an empty value, they will be prompted that they are invalid choices and given the option to delete them.
  • Added: a general 'edit tags' page that is now used in various places for adding/editing/deleting tags on various objects.
  • Fixed: (case 35851) an issue where switching between analyses on a WO that contains multiple different analysis types can cause option values to be saved for the previous analysis if any of its options had defaults. Also added several checks that will attempt to delete such invalid values if they are found in the future.
  • Added: (case 20177) sample default SQL formulas now support parameters in the format {?sample.comments}/{?sample.locationid} as well as related tables like {?location.location} and {?product.name}. The following tables can be referenced: sample, plant, analysis, product, location, collectedby (the user account), platesreadby (the user account), investigation.
  • Added: (case 20177) the 'test/edit' default value formula popup now supports many other data sources, such as workorder, sample, location, etc.
  • Fixed: an issue where changing analyses on a sample could take a noticable amount of time as columns were added or removed and the user would see a lot of flickering. Now this operation is essentially instant.
  • Added: (case 20177) default value formulas now support the workorder data source as well as assignedtogroup, workordertype, verifiedby, productbatch.
  • Fixed: (case 37546) an issue where 'calculate once' SQL defaults were not being handled correctly. Now they will correctly calculate the default only once and stay at that value.

Configuration

  • Fixed: (case 36948) the user now gets an error if they attempt to create a new account with a blank user name.

Database

  • Added: entitytag table, which stores tags that are applicable to various entities like products and suppliers.
  • Added: producttag and suppliertag, which associate tags with products and suppliers respectively.
  • Added: (case 36675) location tags and analysis tags.
  • Added: (case 36658) if the user has a failed login/access attempt, some new settings are checked that control how many failures can occur before locking the user out. If these thresholds are exceeded in a given time limit, the user's account will automatically be locked. These new settings are: Login->Security: number of failed attempts before locking an account Login->Security: number of minutes before failed attempts expire
  • Removed: sample values that were incorrectly created previously have been cleaned up. These were invalid values for the incorrect analysis.
  • Added: (case 21232) support for alert subscriptions related to supplier documents expiring, being added/removed/modified. This required adding support to alert subscription and alert templates.
  • Added: palerttrigger can now check for expiration of supplier documents.
  • Added: support in ealertscheduler for supplier documents.
  • Added: palertprocess_content can now handle building alerts for supplierfile records and can now handle edocument style tokens in the destination address of an alert as well as the title and body.
  • Added: eprocessalert can now handle edocument tokens in the destination address.
  • Added: pedocumentreplacegeneraltokens, a new procedure that can find and process edocument style tokens that refer to non-table/field data sources like settings and session variables.
  • Added: (case 37366) cloning WOs/Samples now does not copy various sample comments if copying sample values is turned off.
  • Changed: (case 36676) the scheduled date on work orders now has a time as well. This is important because the scheduled date/time represents a moment at which the WO will be considered valid after. For now, WOs scheduled for the future will not be filtered out of anywhere in the software, but such changes may come later.
  • Changed: (case 36676) cloned work orders now synchronize the date/times on the cloned WO such that the scheduled date/time of the new WO will be the moment of creation, and all due/scheduled dates on the WO will be offset based on the template WO's scheduled date. (Previously newly created WOs were synchronized on the original WO's creation date, which the user could not see or edit, making dates on cloned WOs hard to set correctly).
  • Added: (case 36676) sample.scheduled and sample.due, which represent (optional) overrides to the WO scheduled/due dates that apply to specific samples. This is especially useful now that we will be using cloned WOs to handle hourly checks. If the template WO has samples with scheduled dates exactly one hour apart, the cloned WOs will also have samples scheduled into the future, each an hour apart.
  • Changed: Standardized maximum user name length to be long enough to store a full length email address (320 characters).

Document

  • Changed: (case 38036) if the user has "Plant" level permissions for "Edit document associations", "All Plants" is no longer an option in the plant dropdown. In such situations, new rules will automatically use the current plant instead of "All Plants". Also, a rule cannot be saved if the only thing filled out is plant now.

Locations

  • Changed: much of the configure locations page has been rearranged. The copy/cut/paste/delete buttons are now below the location tree. Most of the edit location fields have moved to a Location Info tab. This more closely matches the edit products/suppliers areas.
  • Added: a location tags page to the configure locations area. When creating locations or editing existing ones, the user can choose which tags apply to each location. By default, locations inherit tags from parent locations, similar to other information.
  • Added: a filter to the location area. This allows the user to quickly filter down the location tree.
  • Fixed: copy/pasting locations should now correctly copy any location tags. Also, fixed various issues that could lead to crashing when rearranging locations with tags.
  • Fixed: (case 37236) an issue where the locations were not changing their color when locations were being visualized due to a recent regression.
  • Fixed: a possible crash that could happen if the user cut a location, then filtered the tree before pasting.
  • Fixed: some issues where cutting a location then filtering the list before pasting could cause the original location to not get removed.

Login

  • Fixed: a possible issue that could cause the password recovery button to not send the recovery email.
  • Added: for added security, if a user logs in using a less secure password encoding (because they have not changed their password since the newer password encodings were added) their password will automatically and silently be reencoded using a more secure method.

Product

  • Added: (case 21719) a "Tags" page to the configure products and configure suppliers. The user can add/edit/delete tags from these interfaces as well as associate them with various products and suppliers.
  • Added: the user can now filter suppliers and products by tags.
  • Changed: support for new tag management interface.
  • Added: (case 31740) cut/copy/paste functionality to the product management area. This should facilitate copying and moving products along with their tags and plant usage.
  • Added: Copying products now properly copies (instead of moving over) associated batches and other info.
  • Fixed: a possible crash that could occur when deleting a product with sub-products.
  • Added: if products are cut and pasted, all specifications and attachments should correctly move with the products.
  • Added: copy/pasting products should now copy specifications and active batches to the new product(s).
  • Fixed: a crash when an unsaved product was deleted after adding a new attachment to it.
  • Fixed: an issue where copy/pasting products wouldn't show the copied tags initially.
  • Changed: batches and batch specifications no longer get copied as part of the copy/paste of products.
  • Fixed: an issue where attachments wouldn't show if you cut/paste an unsaved product with an attachment.
  • Added: (case 31740) there are now some fields on the supplier attachment page where an alert subscription can be generated for the current supplier. There are options for how many hours ahead of expiration to send as well as what recipient(s) should be included.
  • Added: change detection to the new alert subscription fields.
  • Fixed: an issue where switching suppliers could lose data from the last field where data was modified.
  • Changed: supplier documents will now show as red AFTER the expiration date and blue ON the expiration date, rather than blue the day before and red on that date. This more closely matches how expiration systems work intuitively in other systems.
  • Changed: (case 37597) when products are loaded, all their product batches are loaded as well. This solves an issue where batches were loaded one product at a time when the user attempted to use the filter. Now, loading products might take a bit longer if there are many batches, but filtering should be quick.

Work Orders

  • Fixed: date/time scheduled, due, and verification due will now save with 00 for the seconds instead of the current seconds (this was causing small amounts of offset on cloned WOs because of these hidden seconds).
  • Added: (case 36676) support for scheduled and due date/time (optional) overrides on every sample. These fields are hidden any time the performed date is hidden.
  • Changed: the scheduled date picker now supports time. In addition, this field now has a new meaning when cloning work orders. When the work order is cloned, the scheduled date/time will be set to the moment of copy, and all other date/time values (workorder due, verification due, sample scheduled, sample due) will be an offset based on the original work order's scheduled date/time.
2/19/2026

General

  • Changed: the defaults have been shifted so that the user can show/hide list columns by default instead of it needing to be enabled by default.
  • Fixed: a possible crash if the user right-clicked on a list header control to the right of the last column and chose to sort.
  • Added: More protection against crashes when viewing images.

Database

  • Changed: location and drawobject no longer store coordinates. They have been moved to drawmapobject.
  • Added: a map for each plant named "1", containing all map information for that plant.
  • Added: (case 21721) analysis options can now be marked as required to perform in addition to being required to close.
  • Changed: various triggers and procedures to deal with the above change.
  • Added: a permission for whether a user can mark a WO as performed despite required values not being filled out.

Configuration

  • Added: Edit->My Preferences->Database configuration, which allows configuring the database connection of the local system without logging in.
  • Added: Edit->My Preferences->Hotkeys…, which allows configuration of the current user's hotkeys.
  • Added: icon to the edit->plants dialog and moved it under the Global Preferences area.
  • Fixed: an issue where plant settings showed up as Global settings in the configure settings area.
  • Removed: the configure->Locations page. Now, clicking the configure locations button just takes the user to the locations screen, as its more well suited for management of the location system.

Common Resources

  • Fixed: a crash due to an unreleased change regarding the new product batch column in the sampling detail screen.

Data Management

  • Fixed: an issue where CSVs containing quotes escaped by more quotes (a common CSV format) were not being read correctly.
  • Fixed: a potential crash when doing a test import.
  • Added: tooltips to all onscreen fields and fixed various tab order issues.
  • Added: the import type now remembers the last selected import type for the user.
  • Fixed: an issue where hiding and then showing the advanced fields could lead to them being smaller than intended.
  • Added: more descriptive error messages.

Document

  • Added: (case 35796) image files are now marked as 'mobile friendly in the' document attachment interface.

Location

  • Added: the location attachments popup now remembers if the user has shown it previously and automatically reopens.
  • Added: the visualization page now has an attachments popup that shows sample attachments in a read only popup.
  • Added: attachment count to sample tree in the visualization page.
  • Fixed: Fixing an issue where the screen might select a bunch of squares whenever the user selects a location.
  • Added: better settings headings for the attachment dialogs.
  • Changed: the plant dropdown has been moved from the configure locations page to above the map, as it controls everything the user is seeing on the screen.
  • Added: a map dropdown next to plant that allows the user to choose between map versions at that plant.
  • Added: a default map to each plant titled "1", and all current location information has been moved into that map.
  • Added: add/edit/remove buttons for maps.
  • Added: user-level settings for remembering the last selected map for each user for each plant.
  • Fixed: issues with the map dropdown reverting when the plant dropdown was changed.

Settings framework

  • Changed: when the user logs out or closes the application, only modified user hotkeys are saved. Previously, all user hotkeys were deleted and resaved on every logout, causing unnecessary database activity.
  • Removed: the concept of Group level settings, which has been deprecated. All settings will continue to exist at either user, plant, or global levels.

Transaction List

  • Fixed: (case 36181) an issue where saved search filters were not loading onto the screen correctly, and new saved searches were not saving their filter names correctly.
  • Fixed: an issue where column orders were not saving.

WorkOrders

  • Added: (case 21721) saving a WO now checks whether the options are required to perform a sample.
2/19/2026

General

  • Fixed: an issue where the application could crash in situations where columns are added and removed from list controls with active items.
  • Fixed: (case 35533) crashes caused by an issue with removing items from tree controls.

Analysis Management

  • Fixed: (case 34310) an issue where testing default calculation formulae for unsaved options might not work right.

Crystal Reports

  • Fixed: an issue where an 'empty' error popup would appear if the user attempted to print a report with no valid report file associated.
  • Added: (case 35444) support for limits on which email address sources are shown in the advanced print dialog.

Database

  • Added: permission for managing other users' saved searches.
  • Added: (case 34951) a stored procedure that can compress the primary key IDs of the analysisoptionchoice table, useful for integrations where rows are deleted and recreated often.
  • Added: schema support for static url type of dashboard items

Edocuments

  • Fixed: (case 34762) an issue where nested sub-reports might not generate correctly due to a recent change that caused unknown variables in a template to be replaced with empty strings. Now, unknown variables are left alone when building subreports, but cleared out in the final pass.

Location:

  • Added (Case 12601) : Visualizations now support grouping by day, week, month and year.
  • Added (Case 34858) : Added a slider for custom timing on location visualization animations.

Login

  • Added: support for a permission for managing other users' saved searches.

Master

  • Added: (case 35221) to fix crashes and other image issues, the image library is now initialized just once on application initialization and cleaned up just once on application close.

Report Viewer

  • Removed: (case 33111) the user can no longer 'uncheck' date parameters when printing reports. Now, date parameters without defaults will show a default value of the current date and the user can change the value, but cannot uncheck it. This solves issues where it was unclear that when the user unchecked a date parameter, the default date was used instead. The new process should be more explicit and clear.

Sampling

  • Added: (case 33111) a saved searches page, which will allow the user to save and load favorite searches and share them with other users.
  • Added: most search filters can now be correctly saved to a saved search.
  • Added: support for loading saved searches back onto the screen.
  • Added: all date range filters are now saved 'relative' to the current date.
  • Changed: all filters now show a user-friendly label. Also, all options being shown that have no filter on them are suppressed in the default user description.
  • Added: save search button to the search page. Also, the saved search page is now the first place the user is taken.
  • Added (Case 34345) : We now have support for searching via batch.
  • Added (Case 29366) : Added work order title column to sampling history results when work order details is checked.
  • Fixed (Case 33745) : Only sending analysis options to the visualization screen that are selected, not all that are a part of that sample.
  • Fixed (Case 33745) : Saved searches that contain batch now load batch correctly
  • Fixed (Case 33745) : Layout no longers overlaps and cannot be resized to hide search buttons.
  • Changed: product batch searches should now filter the graph correctly.
  • Fixed: an issue where doing a search and displaying a graph, then doing another search, would not update the graph correctly.

Work Orders

  • Fixed: an unnecessary 'error' beep that would happen when the user loaded a WO with a product batch selected.
2/19/2026

Analysis

  • Added: the check thresholds dialog now has support for batch based thresholds.
  • Added: (case 30665) all the configuration pages on the analysis management screen can now be viewed even if the user does not have permission to edit those things. Instead, if they select one of those plants, they will see read-only information.
  • Fixed: the analysis scheduling page no longer shows severity classes from plants other than the one that is selected.

Crystal Reports Extension

  • Changed: printer lists in the software are now displayed in alphabetical order.
  • Fixed: an issue where printer handles were not being cleaned up.
  • Added: (case 33904) support for report parameters of type 'SQL Clause'. These are not escaped before they are passed to Crystal reports, allowing certain reports to print correctly still.
  • Added: support for SQL Clause option in the parameter type dropdown.

Common Resources

  • Added: the configure analyses page now suppresses any thresholds and choices that have a product batch associated.
  • Added: (case 30665) analysis configuration page now allows the user to view read-only analyses for plants they cannot edit at.
  • Changed: the view/edit option default popup can now be in read-only mode (useful for when a the user wants to test a default formula for options they cannot edit).

Configuration

  • Added: each work order type can now say whether product batches are allowed (Show), not allowed (Hide), or necessary (Require) for work orders of that type.

Database

  • Added: (case 27982) support for an optional location on product batches.
  • Added: support for work order product batches to be considered as part of value acceptabilities.
  • Added: 2 new permissions relating to setting batches on WOs. Neither are granted to existing users by default.
  • Added: (case 27982) support for work order types that specify whether product batches are required or allowed on work orders.
  • Added: support for report parameters that are put directly into queries and should not be escaped.
  • Fixed: an issue where some databases did not have a unique index on a couple mapping tables because they had duplicate entries in those tables. The duplicates have been removed, and unique indices added.
  • Fixed: an issue where documentfile couldn't be created on some MySQL database versions. The table creation is now more explicit and should not have an error.

Master

  • Added: support for application-wide messagebox callbacks to be set and invoked.
  • Fixed: an issue where, if a computer was set up to capture crash dumps, but not transmit them, they were still transmitted.
  • Fixed: an issue where, if crash dumps were set to "Full", they were adding in information that could cause them to appear to be corrupted.

Products

  • Added: (case 27982) the product filter now allows filtering by product batches' batch #'s.
  • Added: (optional) location to product batches.
  • Fixed: batch locations now load correctly.
  • Added: if the user chooses to configure a batch on the work order screen, (if possible) that plant/product/batch is selected on the products screen.
  • Added: when the user is 'editing' a batch, coming from the WO screen, the correct product and plant will now be selected first.
  • Fixed: an issue where copying and pasting a batch between plants might keep the old plant's location. Now, a location with the same name at the new plant will be selected, if possible.

Report Viewer

  • Added: (case 34190) an issue where the report viewer screen might not allow good view of the parameter list at screen resolutions below the minimum supported application resolution.

Sampling History

  • Fixed (Case: 29364): Expiration date values are encoded correctly for JSON and URL export.
  • Fixed (Case: 29364): Fixed issues with the new filters not passing to graphing successfully.

ITSQLFramework

  • Added: the error reporting dialog now writes its queries out to the main database log, without overwriting the main query log.
  • Added: queries run as part of reporting errors to the error reporting database will now be logged in the main query log. This will improve debugging future issues with error reporting. In addition, any errors received while performing these queries will now write those errors out to the log.
  • Fixed: the application could sometimes take a particularly long time to open if the database credentials were incorrect.

Work Orders

  • Added: support for choosing a top-level batch for the entire WO.
  • Added: a "configure batch" button that will take the user to the batch configuration area.
  • Added: when adding a new sample to a document with a batch selected, the product/location associated with that batch will automatically be applied to the sample.
  • Changed: the batch dropdown is now filtered to only those active batches at the current plant associated with products that the user could add to the current document.
  • Added: support for batch-specific choices in choice dropdowns.
  • Added: changing product batch on a work order now refreshes the options in all dropdowns, in case there are any batch-specific choices.
  • Added: there is now a permission required for setting an initial batch on a work order.
  • Added: there is now a permission required for changing an existing batch on a work order.
  • Added: the current work order type now dictates whether the product batch dropdown is visible and whether a value is required to be filled out before saving.
  • Fixed: a crash when saving if a new sample has no analysis selected.
  • Removed: duplicate error popups during save.
  • Fixed: (case 34121) previously, if the user saved a WO after viewing the change log page, the change log contents would be refreshed from the database twice, which could take a long time on some databases. Now, if the user is saving and closing, no reload will happen; if the user is saving and not closing the WO, the data is reloaded only once.
2/19/2026

Tools

  • Added: all TrimTrailingZeros calls now have an argument that can specify whether the string argument is a locale string or a raw string. This solves some scenarios where raw strings were being assumed to be locale strings and were being incorrectly parsed.
  • Fixed: a crash (release mode only) when using an ITVector in a LoadMultiple operation when using SO_ImpLoadMultiple due to iterator invalidation.
  • Changed: ITDecimalNumbers now use bigint version 10.2, which now supports 64 bit integers better.
  • Performance: ITDecimalNumbers now load faster in most scenarios.
  • Changed: ITDecimalNumber::operator/ no longer rounds the result to the lowest of the inputs' precisions. When dividing by a whole number, this generally just rounded to a whole number. Now, the precision is the sum of the inputs plus one, so 10 / 3 is 3.3.
  • Fixed: an issue where ITDecimalNumber::GetDatabaseString was not trimming trailing zeroes correctly, depending on the user locale settings.
  • Changed: ITDragStatics now track the 'desired' offset separately from the current/UI offset. This solves a common issue where dialogs are initially small and then resized larger, causing the last desired position to be forgotten.
  • Changed: (case 31994) drag statics can now no longer chain move operations, which can cause stack overflow on some machines.
  • Fixed: (case 32117) an issue where viewing enough images in attachment managers over time could cause a crash, depending on the windows per-process GDI object count.
  • Reconfigured: all "Configure" menu options have been sorted into the "Edit" menu, as they were redundant. Edit->Options has been removed and its constituent pages have been moved to reasonable Edit submenus.
  • Added: icons for various Edit menus that did not have them previously.
  • Fixed: some issues with menus not being active/inactive at the right times of login.
  • Updated: (case 32836) the version of curl/SSL/zlib we use for contacting the update server has been upgraded. This adds support for the more modern TLS 1.2 and 1.3 SSL encryption. For this reason, there is a new file (zlib1.dll) that is required by the application.
  • Fixed: an issue where lists could crash when the user put focus into a dropdown with no auto-complete registered.
  • Fixed: dozens of potential crashes on all screens that could be caused by financial numbers.
  • Fixed: an issue where ITDateTimeCtrl::SetFormat could get stuck in an infinite loop.
  • Fixed: an issue where combos could crash if they were destroyed while the user was killing leaving an auto-complete edit.
  • Added: the third party image library has been rebuilt to add debugging features to try to debug crashes related to image viewing.
  • Fixed: {{case|31059}} a misspelling of an item in the extension list. The incorrect setting will be removed and the correct setting will be added on the next update.

Registration

  • Changed: {{case|31058}} it is now easier to copy out of, paste into, and type into the registration code.
  • Added: better exception handling for crashes.

Analysis

  • Added: {{case|28444}} when the user enters a option value or threshold for text or choice options, all trailing whitespace will be removed.
  • Fixed: {{case|33523}} an issue where an incorrect severity class would be used when inspecting value acceptability if a location was chosen.

Common resources

  • Fixed: {{case|33523}} an issue where switching plants then choosing a location that exists at the previous plant as well may silently save the sample with the previous plant's location.

Configuration

  • Added: configure->plants now saves in a single transaction so that an unexpected error or interruption won't lead to a partial change.
  • Fixed: an issue where resetting the Configure->Settings page wouldn't correctly roll back the changes and the current selection in the list would be lost.
  • Performance: saving after configuring users will no longer take a long time if the list of users is very long.
  • Added: saving changes to users is now a transaction, so if there are any issues, all changes will be rolled back, and the user will be able to try again.
  • Fixed: an issue where the user permissions page could throw database errors.
  • Fixed: the timezone shown in the session area in the corner of the system is now shown before the user logs in. Also, instead of showing SYSTEM as the default timezone, an accurate timezone will be shown.
  • Fixed: if the user gets an error while saving changes to users, re-attempting the save should now correctly retry the save operation.
  • Fixed: a database error and crash that could occur if the database connection could not be established.
  • Changed: if a database connection could not be established, the connection timezone will now display as Unknown.

Database

  • Fixed: efaileddataclonereporter now correctly inspects recent logs using server timestamps.
  • Added: fgetplanttimezone, a new function that can be used as part of reports that wish to display dates in plant timezones.
  • Fixed: {{case|31219}} an issue where warnings were being unnecessarily logged to the mysql error log in some versions of MySQL.
  • Changed: setting types have been turned into an enum, as it only accepts certain values and this takes less space.
  • Fixed: {{case|31491}} an issue where multiple users subscribed to nightly reports might cause all such users to get multiple emails.
  • Fixed: an issue where alert filters might not always work right if there were a lot of items to examine for the filters.
  • Fixed: {{case|31491}} an issue where one schedule could fire alerts for a different schedule.
  • Removed: a possible issue where palerttrigger was called for schedules that were not being triggered in the current period.
  • Added: tables for tracking document management, their attachments, and plants.
  • Changed: {{case|32405}} deactivated thresholds now correctly show an "Applicability" of "Deactivated". This should make the "what thresholds apply" popups clearer when it comes to deactivated thresholds.
  • Added: the event that checks to ensure that data clone operations did not fail now attaches the name of the database it ran from if an unknown error occurs.
  • Added: stored procedures for showing SOP documents on mobile devices.
  • Fixed: yearly data clone rules will no longer throw a database error.
  • Fixed: possible issues with right-click graphing due to bad escape characters in the last version.
  • Performance: {{case|33255}} locations that have millions of rows in their print queue history now take .2s to load print history on the report viewer screen instead of 8s.
  • Fixed: {{case|33304}} certain issues that could occur on MySQL 5.7 since CAST operations would throw errors instead of returning NULL.
  • Fixed: the before insert trigger on option values now handles invalid statuses correctly.
  • Added: reportqueuesummary table, which is kept up to date as print jobs are executed. This makes loading print history meta data faster in the report viewer screen.
  • Added: support for Currency report parameters.
  • Added: {{case|32569}} new tables for managing user dashboards.
  • Added: {{case|27982}} the new productbatch table, which will soon accommodate product batches.
  • Added: productbatchid to workorders.
  • Fixed: eextendschedules had an error in it that was causing it to fail.
  • Fixed: an issue where the check acceptability popup would display "Wrong severity class" when "Wrong plant" seems more appropriate.

Crystal Reports Extension

  • Added: {{case|31106}} if report parameters have 'defaults' and are not specified by a print job, those defaults will now automatically be passed to the report to be printed.
  • Added: saving modifications to reports now happens in a single transaction so that an unexpected error or interruption won't lead to a partial modification.
  • Fixed: {{case|31379}} an issue where some parameters would go into the print queue in user visible formatting instead of 'raw' formatting. This means that if the user was emailing or delaying a print, it might fail if the user's date/datetime/number locale formatting was different enough from what crystal was expecting. Now, all print jobs log parameters as 'raw' numbers and dates.
  • Changed: the Edit->reports option is now under Edit->Global Preferences->Reports so that users don't get confused with editing their printer options.
  • Added: (case 32992) string parameters sent to crystal reports now escape certain wildcard and string characters that could cause errors when printing.
  • Added: (case 33260) Crystal "Number" parameter types now support fractional values up to 6 digits of precision.
  • Added: support for Crystal "Currency" parameters.

Documents

  • Added: {{case|19345}} a new screen for management of documents, and associating them with plants, products, etc.
  • Added: various extra columns to the attachments area.
  • Added: a basic version of the document associations tab now saves and loads. The user can choose various filters, and they should narrow down by plant now.
  • Added: support for notes on each version of a document.
  • Added: 'mobile friendly' checkbox to documents. If this is checked, and the active document version is not mobile friendly, the user is warned.
  • Added: optional review date to the document info.
  • Changed: association rules now cannot choose a severity class unless a plant is chosen.
  • Added: tooltip text to various fields on the document detail page.
  • Added: attention icon to document versions. One icon will show the 'active' version (newest file that is approved and has its effective date passed). Another icon shows which attachments are mobile friendly.
  • Added: a description of the screen to the document version screen.

EDocuments

  • Changed: any document parameters (like {?table.field}) that could not be found are now replaced with an empty string instead of being left in.

Home

  • Added: support for {?sessiontoken} as part of the home screen URL template. The default for the home screen URL now includes the {?sessiontoken} as part of the template.

ITrack Online

  • Added: a new global hotkey for opening a given URL in the internal browser. The default hotkey is F12.
  • Added: support for opening a given web page while sending POST and HEADER data along with. This is useful for some internal web page operations.
  • Added: if a URL is opened that requires additional data to be sent, and ITrack Online cannot be found, the user is shown a more specific error. More info is sent along with all web errors.
  • Added: if a URL is opened that requires the internal browser and the browser type is set to something other than "Internal", Internal will still be used.
  • Changed: (case 5938) to accommodate the module in different products, this module has been renamed just "Online" in the application.
  • Added: support for OpenURL requests to force in an external browser, useful for launching a web page from a modal popup.
  • Fixed: (case 32040) an issue where data would not be passed to the internal shipping app correctly.
  • Changed: when building a POST request, key/value pairs are now encoded with CURL, as the previous methods did not encode correctly.
  • Fixed: an issue where the last piece of data passed to a web page through a POST request would be left off.

Login

  • Fixed: an issue where the plant dropdown was not in the tab order correctly.
  • Changed: fgetvalueacceptability and pcheckapplicablethresholds no longer use the first severity class at a plant if no default is selected. This should make severity class based thresholds more easy to understand.
  • Added: new permission for controlling management of the new product batches.
  • Added: analysisoptionchoice (option thresholds) now has an optional product batch.
  • Added: testing option values for acceptability now considers optional product batch.

Master

  • Changed: when updater.exe is downloaded, it is applied with a move file instead of a copy file so that the old file is not kept around.
  • Added: the database update downloader will write the file Updates/UpdateQueryList.sql with all the queries that were parsed out of the main database update file for debugging purposes.
  • Fixed: an issue where a comprehensive database update would not correctly handle version tags unless they were all uppercase. Now, version tags are case insensitive.
  • Fixed: (case 33445) an issue introduced by recent windows changes where crashes were not causing any error popups. Now, the original behavior should be restored.
  • Added: double-clicking the updater status area will now always show the updater detail popup, even if there are not updates to apply.
  • Changed: if there are no updates to apply, the update downloader dialog will no longer show an apply button.
  • Changed: the update downloader no longer cuts off part of the "do you want to restart to apply updates" message. It now also says how many updates need to be applied.
  • Added: (case 33086) new types of crashes and unexpected behavior are now caught by the application and reported with the error reporter.
  • Added: if no debugger is attached, the Debug button is now hidden in the error report popup.
  • Added: now, crashes that happen anywhere in the application should be reported to the user. Before, depending on what was happening, they could be missed, causing the application to just close.
  • Added: if the user gets a crash or other unexpected termination of the application, a .dmp file and a .png file are written to the %TEMP%/ITrack/CrashDumps directory. This file should help ISoft debug the crash.
  • Added: when a crash cannot be recovered from, the "Ignore" button on the popup should now be hidden.
  • Added: new ini settings that control the crash dump information that is generated and uploaded to the ISoft servers:
  • "errorreporting" -> "crashdumpgeneration" -> valid values: "small", "full", "none". The default is small, which generates minimal mini-dumps (generally about 9KB), full generates full crash dumps, which can be closer to 1MB after compression.
  • "errorreporting" -> "sendcrashdumps" (default True). If true, the crash dump file specified above will be transmitted to ISoft servers in addition to saving the file locally.
  • "errorreporting" -> "sendcrashscreenshots" (default True). If true, an 'at crash time' screenshot will be generated and transmitted to ISoft servers in addition to saving the file locally.
  • Added: if the user experiences crashes but cannot upload those crashes, they will now be logged to a errorlog.xml file that is saved in the %TEMP% directory, like the crash dump files. When ITrack is launched, these queued error reports will be uploaded, including crash dump files and screenshots.
  • Fixed: some minor issues with printing the application screenshots.

MySQL Connection

  • Performance: checking to see whether the database connection is live no longer attempts to connect if the config is invalid. This makes application startup slightly faster.
  • Changed: START TRANSACTION; COMMIT; and ROLLBACK; are now always written to the log. They were not always logged before. Also local date/time stamp of occurrence should be consistent with other queries.
  • Fixed: {{case|31215}} an issue where the user could get a database error and hit 'retry' in the middle of a transaction (such as document save). This is not safe because retry won't retry the queries before that one. Now, if the user gets an error in the middle of a transaction, the only option will be "Ignore" (meaning continue). They will generally have the entire transaction rolled back and they can retry by hitting save again.
  • Fixed: {{case|31144}} an issue where we were not correctly suppressing mysql auto-reconnect behavior. This was supposed to be disabled for {{case|31144}} to catch implicit reconnects in the middle of a transaction (causing a rollback). This confusion lead to session variables such as @ITRACKUSERID and the connection timezone to not get properly reset on reconnect, leading to issues in the logs or other areas that rely on these settings.
  • Changed: the "database connection failed, do you want to configure?" popup is now phrased more precisely.
  • Added: (case 33025) previous save status now gets set back to None at the end of a save operation (Commit or Rollback) as well as Clear to avoid an issue where attempting to save after calling Rollback might cause a new object to be created.
  • Fixed: a possible unhandled exception crash that could occur if the user could not connect to the database.
  • Changed: if a query fails because of no connection, it will no longer try 3 times if reconnecting fails. This should speed up queries failing due to no database connection.

Products

  • Added: new product batch page. This area allows a user to add or edit plant specific batches to a product which can optionally have an expiration date. Soon, specifications will be able to reference specific batches.
  • Added: product batch screen now has an embedded copy of the product specifications tab. In this pane, the user will see all specifications that reference that product batch.
  • Added: copy/paste product batch buttons. There is also a Paste With Specifications button that will also copy all specifications on the original product batch.
  • Added: show/hide inactive batches filter check.

Report Viewer

  • Fixed: a memory leak caused by reprinting reports from the print queue.

SamplingHistory

  • Fixed {{case|29364}}: Added filtering for expiration dates and lot numbers on recipe analysis options.
  • Added: {{case|30664}} a print button that allows the user to print the selected analysis options for the currently visible search results.
  • Added: session_token to the graphing URL. This will be involved with upcoming security changes.
  • Fixed: an issue where the Apply button could 'float' over the result list if the user had permission to change samples on the sampling history screen.
  • Fixed (Case: 29364): Expiration date filters now require both dates to be set. If one is unchecked, both will be cleared. If one is filled out and the other is blank, it will be copied into the blank field.
  • Fixed (Case: 29364): Expiration date values are encoded correctly for JSON and URL export.

Settings Framework

  • Added: filter to the Settings page of the configuration screen.
  • Performance: {{case|33255}} loading aggregate print history on the report viewer screen is now much faster.

SQL Framework

  • Added: tools for screens to easily retry an entire transaction in the case of deadlocks or lock wait timeouts.
  • Added: support for turning off auto-retry at the database connection level. This is useful when retrying transactions manually.
  • Added: transaction tools now turn off auto-retry so that we can retry at the transaction level. Failures that cause a transaction auto-retry are now logged to the query log just like automatically retried queries.
  • Changed: the debug button is now tied exclusively to whether a debugger is attached to the process. This allows debugging crashes in release mode.
  • Added: if crash dumps or crash screenshots are generated as part of a crash, they are now uploaded to our error database as part of the error report.

Work Orders

  • Added: {{case|28444}} when the user enters a option value or threshold for text or choice options, all trailing whitespace will be removed.
  • Changed: when setting the timezone of a WO clone rule, if the connection timezone is set to SYSTEM, the timezone that gets saved will now be the true timezone.
  • Added: if no work order type is selected, the screen now tells the user that that is required instead of throwing a database error.
  • Fixed: overactive change detection that would occur when saving a new WO (the user would be asked if they wanted to save right after the save completed).
  • Fixed: an issue where date created was not a readonly field even though the user could not change it.
2/19/2026

Master

  • Changed: the error reporting system now formats Windows COM errors in a more easy to understand format. These errors could be reported by partner applications, such as QuickBooks, VINPower, and Crystal Reports.
  • Added: company code box to the about box. There is also a 'copy to clipboard' button next to it.
  • Changed: product code was renamed to workstation code and has become an edit for easy copying. There is now a 'copy to clipboard' button next to it.
  • Added: the About dialog now has field and column tooltips.
  • Added: the about dialog now has a 'updater version' column that shows the version of each module for the current install according to the versionlist table.
  • Added: the about dialog now saves and loads its last known position.
  • Changed: the query log will now have a default comment style and automatically run reconnect queries across all products. Previously, they were not run until the login dialog was displayed.
  • Added: the queries that are run automatically when the database connection is established (or reestablished) are now logged to the query log.
  • Performance: minor efficiency gains every time a query is run.
  • Added: the status bar now has a couple more areas designed to store information about the site the user is logged into as well as the timezone of the connection. This is useful for scenarios where users are logging into systems in the cloud, or into sites with different timezone settings.
  • Changed: before logging in for the first time, the site and timzone indicators will now correctly get reset.
  • Fixed: a crash that could happen when the user attempted to change a status pane.
  • Changed: reconnect queries are only run once less when the application launches.
  • Added: support for retrieving the current database connection time (or current system time if no database connection could be found). This is used by date/time pickers across the software as the 'default' date/time to show.
  • Fixed: {{case|29841}} a bug where the mysql parsing logic would break if a string enclosed by double-quotes contained a single quote, breaking subsequent DELIMITER statements.
  • Fixed: an issue where a double-quote enclosed string containing unescaped single quotes could cause issues, as the string would be changed to single quotes.

MySQL Connection

  • Changed: increased the number of times the database connection will automatically retry a query due to a server disconnect to twice instead of once.
  • Added: {{case|29287}} basic support for getting/setting a connection timezone on the database connection.
  • Fixed: an issue where reconnect queries could be run before the connection was established.
  • Added: GetConnectionTime, which returns the current timestamp, according to the server. This will be useful when comparing local timestamps to saved server timestamps and saving objects with the correct time, despite computers in different timezones.
  • Performance: to make code faster, when we get a connection time, the UTC offset is cached for calculating subsequent connection times. This offset is recalculating any time the hour changes or the connection timezone is changed.

Crystal Reports Extension

  • Added: when adding a report from a file, the user visible report name and parameter names now automatically format more human readable forms, using our database dictionary. Spaces are automatically added between capital letters.
  • Fixed: {{case|24372}} an issue where report descriptions with newlines would sometimes be turned into two line breaks.
  • Fixed: version was not being exported with the report.
  • Added: {{case|24372}} a DELETE statement is run to remove all parameters that are not in the current list, to possibly remove historic unused parameters.
  • Added: support for setting logging timestamps based on connection timezone in those cases where its different than local timezone.
  • Changed: if a date/time parameter being sent during a print job is invalid, the current connection time will be sent instead of the current local system time.
  • Changed: {{case|29286}} all datetime values passed to Crystal Reports as report parameters are now converted from the timezone of the local database connection to the timezone of the server, as that is what the crystal report will be querying in. This should avoid any misunderstandings in situations where these are in different timezones.
  • Fixed: {{case|30331}} an issue where numbers with thousands separators were not being sent to print jobs correctly.

Common Resources

  • Fixed: an issue where the next/previous page buttons in the log viewer didn't work.
  • Changed: {{case|29948}} the log viewer now attempts to find child objects using parentrowid instead of looking for objects by inserted row, as that can be much slower.

Data Management

  • Added: the column order/widths for the field tree and 'todo' list now load and save.
  • Added: {{case|5432}} import type fields now have a 'rank' for ordering fields by something other than display name.

SQL Framework

  • Added: The ability to set what type of 'connection times' returned to the application. By default, it uses 'local time' which is being used for all products that are not ready to have timezones controlled by the database yet.
  • Added: the ability to convert from date/times in the connection timezone to date/times in the server timezone as well as UTC+0 time (GMT timezone)
  • Performance: refactored the way normal queries are run to make the common case fast (running queries on the default connection no longer requires a lookup).

Common Resources

  • Fixed: {{case|29700}} options that are not continuous (such as text, choice, or boolean) now allow the user to choose between Equals and Not Equals in the value constraint dropdown. Also, the constraint that applies to a required option now hides the Above and Below options for discrete option types (text, choice, boolean).

Product

  • Fixed: {{case|29700}} specifications on options that are not continuous (such as text, choice, or boolean) now allow the user to choose between Equals and Not Equals in the value constraint dropdown. Also, the constraint that applies to a required option now hides the Above and Below options for discrete option types (text, choice, boolean).
  • Fixed: {{case|30030}} an issue where the user could enter specifications that were dependent on choice options above or below a specified value, despite the fact that equals and not equals are the only options.

Database

  • Fixed: {{case|29444}} analysisoptionvalue.filledout gets set to NOW() if values are copied during a clone
  • Added: database version 2.7.1, which releases several new database logging triggers.
  • Fixed: an issue where text and choice options could have > or < comparisons in the previous version, though its not allowed anymore.
  • Fixed: version 2.6 was not correctly changing the ARCHIVElogchange table to engine=archive due to a missing index. This is being done again to help customers save hdd space.
  • Added: {{case|29948}} a new column to the log called parentrowid. This is designed to make lookups faster. Finding entries by the document they were attached to is now possible.
  • Changed: parentrowid has been set retroactively for all samples and analysisoptionvalues.
  • Changed: {{case|29286}} many database columns that were date-times have been changed into TIMESTAMP columns.
  • Fixed: fgetlastreferencedschedule_instance was using tinyint for its return type, causing it to not work correctly.
  • Changed: the procedure and event that populate schedule instances are now timezone aware.
  • Changed: {{case|30279}} the event that reports failures in data clones now waits an hour before sending failure emails.
  • Added: dataclone records now store the timezone of the user that specified what time of day to schedule the clone operation for.
  • Changed: fgetnextscheduledate now takes the timezone of the dataclone entry into account when scheduling.
  • Added: plant.timezone, a new field to track what timezone a plant prefers to display and enter values in.
  • Changed: scheduleinstance is now using timestamps instead of DATETIMEs, and an unused column has been dropped.
  • Changed: many events have been modified to use TIMESTAMPs instead of DATETIME values wherever possible.
  • Changed: pclonescheduleddata now uses the existing fgetnextdataclonedate to see whether to clone the data during a single trigger execution. This should resolve any issues where the reported 'next execution date/time' and the time the data is cloned would disagree. This also makes the process respect plant timezone selections.
  • Fixed: efaileddataclonereporter now correctly inspects recent logs using server timestamps.
  • Added: fgetplanttimezone, a new function that can be used as part of reports that wish to display dates in plant timezones.

Analysis

  • Fixed: {{case|30030}} an issue where the user could enter text/choice/boolean option specifications that would be above or below a specific value.
  • Fixed: an issue where some dropdowns in the specifications list would grow larger as the user clicked into them again.
  • Changed: schedules now use current connection time instead of local time (for those cases when they're in different timezones).
  • Changed: in order to avoid issues with start date and end date due to timezones, the time of day to start the schedule on is now required.

Home

  • Changed: when loading WOs and samples, now only analyses required to display entries is loaded. This makes the home screen faster for plants with huge numbers of thresholds or analyses.
  • Changed: to match mobile, the 'blue' work orders will now be work orders due in the next 24 hours instead of later the same day. This will allow users in every timezone to see the same thing.

Login

  • Added: {{case|29287}} support for setting the connection timezone based on the timezone of the plant the user chooses to log into.
  • Changed: when the user attempts to login, all saved login attempts and password reset tokens will be properly set and compared, no matter what the time and timezone of the local machine is. These operations will now use server time.

Configuration

  • Added: configure->plants dialog now has a field for choosing the timezone for each plant.
  • Changed: configure->plants popup now has tooltips on the controls.

Work Orders

  • Added: timezone column to the automatic work order cloning interface. This field defaults to the current plant time-zone.
  • Changed: scheduling an automatic WO now uses the timezone of the plant the work order is at.
  • Changed: work orders now use current connection time instead of local time (for those cases when they're in different timezones).
  • Changed: in automatic WO scheduling, the 'blue' work orders will now be work orders due in the next 24 hours instead of later the same day. This will allow users in every timezone to see the same thing.
  • Fixed: an issue where the automatic WOs page wouldn't empty previous results if the user did another search.
  • Fixed: {{case|30723}} an issue where a user could not choose a default analysis for a work order type unless that analysis was in use at plant # 1.

Investigation

  • Changed: in investigation history, the 'blue' documents will now be the documents due in the next 24 hours instead of later the same day. This will allow users in every timezone to see the same thing.

Suppliers

  • Changed: for supplier attachments, the 'blue' documents will now be the documents expiring in the next 24 hours instead of later the same day. This will allow users in every timezone to see the same thing.

Graphing

  • Changed: {{case|29286}} the datetime values passed back and forth for sample graphing are now in UTC times so as to avoid any ambiguity for graphing.

Controls

  • Added: all date/time pickers now default to the current date/time of the default database connection instead of the local system time.
Newer Older