### PATCH V0.23.1 2025-05-19 ### Features - Added a "project admin" role, that has all the admin permissions, but limited to the projects they are assigned to - Added "owner" role that is the only one with access to stripe billing portal - Added "client user assignment" feature that allows assigning users to a client, allowing them to see all client projects and campaigns - Added the ability to add custom project job codes for some users. - Added the ability to upload multiple files at once - Added the ability to assign users to client record directly for some users. ### Tweaks - Removing a fringe from a parent in the estimate, should also remove it from the UI for its children - Show all department groups in the category print view, unless they do not have any lines within them - No longer allow changing status of an expense manually once it has been added to an invoice ### Bug Fixes - Updated the campaign dashboard to ensure the breakdowns in each widget are using the same data - Corrected an issue where some users dashboards did not filter "assigned projects" correctly - Fixed an issue whereas some vendors were unable to delete expense lines from their invoice / timecard submissions during a rejection dispute. - Fixed an issue where workspace users could not be restored after their access was revoked by an administrator - Fixed an issue where discounts were appearing without a value in estimate print views - discount lines should be hidden if they do not have a value. - Fixed an issue where the client record was not searchable directly after creation - Fixed an issue where looking at live margins may cause an app crash in AICP estimates - Fixed an issue where fringes would not "Delete" until after a page refresh was performed Question? Feedback? Email us at [email protected]