Specific context: UU Yoda Data Managers currently use a bulk upload process for inviting users to join COs. The scale tends to be on the order of tens of users invited per week.
Beyond the UU Yoda specific use case, in general it is a common workflow for people at the Data Manager / Unit Manager / Researcher Support level to work with CSVs for bulk operations.
Acceptance Criteria
The user can be an Organization Administrator, Organization Manager, or Unit Manager.
The user can only successfully generate invitations for COs that fall under their purview (e.g. if the user is a Unit Manager, then the CO must fall within one of the user's Units)
The user is presented with a screen describing the required CSV schema and providing an example of a valid schema with dummy values.
The CSV file is validated for format and content before attempting to process the invitations.
The user is informed if the CSV validation was successful or unsuccessful.
If the CSV validation was unsuccessful, the user is informed as much as possible about why and where a problem occurred (Missing required value X on line Y, malformed value A on line B, etc)
If the CSV validation was unsuccessful, no invitations are sent.
If the CSV validation was successful, the user is informed that the import succeeded and that SBS will attempt to send out the invitations.
Successful invitations are sent and use the existing invitation workflow for notifications
Unsuccessful invitations trigger an email-based notification per unsuccessful invitation to the uploading user. This email should include the reason for the error (e.g. "User not found, CO not found, Group not found, Admin doesn't have permission, etc)
Successful invitations can be viewed using the existing functionality within SBS (Invited status in the Members tab of a CO)
Unsuccessful invitations (401 permission denied to unit manager, CO 404, Group 404, etc) trigger an email notification the user. Unsuccessful invitations do not appear in the SBS UI.
A user may re-import a previously imported CSV without any issues, in principle. For invitations sent via the prior import (or non-bulk process) that have not yet expired, the invitation should not be sent again and no error notification should be sent to the user. For invitations sent via the prior import (or non-bulk process) that have expired, new invitations are generated and sent per existing logic and workflow.
Complex Cases
Because the CO and Group columns can have multiple values informing the user of Group 404 error for a given CO + Group combination may be a little tricky. Need to come up with a solve for this.
Nice To Have
More detailed feedback about a successful validation - show a table with the some information about what SBS understands from the import.
After being provided with the more detailed feedback after a successful validation, there is a "process" button that acts as a confirm step. Only after clicking the process button does SBS attempt to batch out the invitations.
See screenshot for example UI for this part
Allow the user to provide the membership_expiry_date and invitation_expiry_date as ISO 8601 Date-Only values (e.g. "2024-12-31") instead of epoch_seconds
Allow the user to optionally provide a CO label or list of CO labels instead of CO short_name or list of CO short_name(s) and use the label to lookup which COs the invitations should be sent to.
Notes
DELETE invitation is out of scope for bulk upload operations
Send one invitation to rdoe@uniharderwijk.nl to join the cumulusgrp CO with the Admin role and add them to the group ID 301ee8e6-b5d1-40b5-a27e-47611f803371. The invitation expires at epoch seconds provided, and the user's membership in the CO expires at epoch seconds provided. The message and sender_name are included in the invitation.
Second example shows multi-values:
Send four invitations - jdoe@surf.nl + cumulusgrp, jdoe@surf.nl + cirrusgrp, joost@surf.nl + cumulusgrp, joost@surf.nl + cirrusgrp and each with the Member role. Add the users to the group IDs supplied in the COs that the group belongs to (possible sticky point, see Complex Cases). The invite_expiry and membership_expiry are not provided, so use platform default logic. The message is provided. The sender_name is not provided, so use the default.
Summary
Specific context: UU Yoda Data Managers currently use a bulk upload process for inviting users to join COs. The scale tends to be on the order of tens of users invited per week.
Beyond the UU Yoda specific use case, in general it is a common workflow for people at the Data Manager / Unit Manager / Researcher Support level to work with CSVs for bulk operations.
Acceptance Criteria
Invited
status in the Members tab of a CO)Complex Cases
Nice To Have
membership_expiry_date
andinvitation_expiry_date
as ISO 8601 Date-Only values (e.g."2024-12-31"
) instead ofepoch_seconds
label
or list of COlabels
instead of COshort_name
or list of COshort_name(s)
and use the label to lookup which COs the invitations should be sent to.Notes
CSV Schema
rdoe@uniharderwijk.nl
to join thecumulusgrp
CO with theAdmin
role and add them to the group ID301ee8e6-b5d1-40b5-a27e-47611f803371
. The invitation expires atepoch seconds
provided, and the user's membership in the CO expires atepoch seconds
provided. Themessage
andsender_name
are included in the invitation.jdoe@surf.nl
+cumulusgrp
,jdoe@surf.nl
+cirrusgrp
,joost@surf.nl
+cumulusgrp
,joost@surf.nl
+cirrusgrp
and each with theMember
role. Add the users to the group IDs supplied in the COs that the group belongs to (possible sticky point, see Complex Cases). Theinvite_expiry
andmembership_expiry
are not provided, so use platform default logic. Themessage
is provided. Thesender_name
is not provided, so use the default.short_name(s)
intended_role
invitee(s)
group(s)
invitation_expiry_date
membership_expiry_date
message
sender_name
admin
,member
]