### 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]