As we make the run into the end of the year we are continuing the PHP migration fixes, and also ploughing on through our customer requests.
The big change this release was asked for by TF Jones. They complete fire door surveys with a mixture of compliance questions and practical measurements for the door replacements, and whilst the engineers are very careful they sometimes make minor mistakes in the surveys. Our customer had asked us to look into the possibility that we could allow changes to some surveys. For compliance surveys this is a very tricky request, because historically we have had to be able to show that the survey completed by an engineer is immutable within the system, and the final print out matches what they recorded. However, today, we have a request to by-pass this for questions that obviously related to non-compliance information. We spent a lot of time working with the customer and the development team to make sure that we enabled this feature without breaking the underlying security of our surveys. To support this we have added several layers of protection, and a mechanism that leaves a clear audit trail.
- The underlying process is driven via a secondary table. We stash a request to update the recorded value from “old value” to “new value” which indirectly triggers the update of the survey value. This gives a clear trail of which values changed.
- Each requested change is shown below the final values on jobsheet and various survey reports to instantly show who changed what data and when within the system.
- Each time a value is changed then this is independently stored in the global audit trail.
- Only users granted the “edit_survey” permission have access to this feature.
- Updates can only be applied to survey elements configured with the “allow_edit_survey” attribute.
- Surveys can only be marked for allowing edit in systems where the global system option to allow editing of surveys is turned on.
- Finally, the data structure for the survey answers needs to be modified to allow updates – something requiring direct intervention from the support team.
This is all means that for customers that still require to be able to demonstrate the immutability of surveys we are able to show that their system is unable to amend these. However, for less rigorous use cases we can support relaxing this limitation, but without compromising the auditability of the data.
New Features
- Restricted and logged editing of (defined) surveys
- Auto-population of default values for some mandatory fields when creating a new engineer
- New sales invoice export format to support Sage Cloud
- Improvements to engineer rate screen to make rates and code mapping separate and simpler
- Simplification of the engineer setup screens to show either engineer part rates or banded costs, not both
- Bulk allocation: new filter for job description containing
- Changes to the emerging diary view to support easier filtering for a whole depot
- Supplier invoice passing: new column to show depot (aka department)
- Changes to the completion service jobs report to suppress archived jobs
- Changes to CIS VAT export to Quickbooks Web
- Added monitored clients to the project status summary report – to echo the jobs requiring action report
- Added client branch to the invoice jobs report
- Changed the bulk issue screen to carry forward the attend-by time when allocating for the attend-by date
- Support for conditional survey questions: added setup screens
- Added support for recording overnight visits to the mobile timesheet portal
- Support for “show only my costcodes” to a number of related job reports
Platform Improvements
- Continued PHP8 migration work – switch to spaceship operators in array comparison functions; mapping of call_user_func_array() to callback functions;
- Changed Firebird config to support separate per-customer lock folders
- Increased phpfpm config setting for min_spare_servers to reduce noisy log files
- Changes to attachment storage to reduce lag for archived attachments
- New report for billing of SMS usage
- Data structure cleansing: dropped redundant INSPCOUNT table; dropped redundant IUSER/MUSER from AddDefaultFields() process
Bug Fixes
- Improved handling of html special characters when entering sales lines
- Fixed editing of multi-line absences
- Fixed cloning of banded costs from one engineer to another to always trigger unique codes
- Fixed empty rate when adding new purchase order lines whilst recording a delivery
- Fixed high ascii problem with PDF generation of some templates
- Fixed automatic purchase order status progression to ignore incomplete but deleted lines
- Improvements to the list of engineer names associated with individual assets on a PPM/FSC job
