We've done some scoping and estimates of the feature as proposed and we estimate it is about 23 developer days work (see below).
We won't have any core developers available now until after the 2.6 release cycle. We can prioritise this as our first 2.7 enhancement but it would still take until mid-June before it would be done (based on the estimates below).
Alternatively we could commission a Totara partner's development team to complete the work sooner, but that would be dependent on funding and also developer availability within our partner network.
Integration into a stable release definitely won't happen until 2.7 now but if developed sooner you could apply a patch knowing it will definitely be in 2.7 (so any customisation would be temporary).
Appraisal work estimate
Close an appraisal on a per user basis when a user is unassigned (1 day):
* Display message indicating it closed
* Prevent reminders being sent
* Update appearance in My Appraisals
Add a new user to an active appraisal (1 day):
* Check if user has any existing data
* If so reopen the closed appraisal for that user
* If not, add a new user
* Prevent reminders on overdue stages for new user
Handle users with missing roles (2 days):
* Update user's appraisal record on cron
* Display a warning message on that appraisal
* Make sure appraisals still work with null userids
Handle a role switching to a new user (1.5 days):
* Check if there are any existing answers
* If so take a snapshot for each role
* Create new 'role changes table'
* Add record to new 'role changes' table
Changes to activation (0.5 days):
* Change current errors into warnings
Changes to snapshots (1 day):
* Include the user's name as well as their role
* Change userid to appraisalroleassignmentid
Changes to reporting (1 day):
* Add aggregate reporting of closed appraisals
* Add a report to display closed appraisals (and/or exclude them from the other report)
Changes to assignments tab (5 days):
* Don't prevent changes to groups following activation
* Don't update role assignments immediately when saving changes to groups
* Store the last role assignment update time on activation, cron run or manual updates (see below)
* Following activation display a message indicating the assignment data is not live and was last updated at "last update time"
* Provide a button to manually update the assignments list
* Updating role assignment records to reflect changes on activation, cron run and after manual update
Missing role warnings on assignment tab (2 days):
* Add a warning if any assigned users have null roles (based on live pos assignment data)
* Add a new page to display list of users and which roles they are missing (based on live pos assignment data)
Unit testing (4 days).
QA and Bug fixing (4 days).
TOTAL: 23 developer days.