Add stub for email adding

This commit is contained in:
zandercymatics 2024-12-12 15:14:05 -07:00
parent d7ec32d898
commit f6e95cc4f8
No known key found for this signature in database
GPG key ID: FF4636ABEC9682B7
5 changed files with 27 additions and 22 deletions

View file

@ -39,4 +39,4 @@ initPortfolioNewMemberPageToggle();
initAddNewMemberPageListeners(); initAddNewMemberPageListeners();
// Init all other portfolio member pages // Init all other portfolio member pages
initPortfolioMemberPage(); initPortfolioMemberPage();

View file

@ -57,10 +57,10 @@ export function initAddNewMemberPageListeners() {
} }
// Hookup the radio elements // Hookup the radio elements
hookupRadioTogglerListener( hookupRadioTogglerListener(
'member_access_level', 'role',
{ {
'admin': 'new-member-admin-permissions', 'organization_admin': 'new-member-admin-permissions',
'basic': 'new-member-basic-permissions' 'organization_basic': 'new-member-basic-permissions'
} }
); );
@ -115,6 +115,8 @@ export function initAddNewMemberPageListeners() {
// Get all permission sections (divs with h3 and radio inputs) // Get all permission sections (divs with h3 and radio inputs)
const permissionSections = document.querySelectorAll(`#${permission_details_div_id} > h3`); const permissionSections = document.querySelectorAll(`#${permission_details_div_id} > h3`);
console.log(`what is the id? ${permission_details_div_id}`)
console.log(`what is the permissionSections? ${permissionSections}`)
permissionSections.forEach(section => { permissionSections.forEach(section => {
// Find the <h3> element text // Find the <h3> element text
@ -122,17 +124,18 @@ export function initAddNewMemberPageListeners() {
// Find the associated radio buttons container (next fieldset) // Find the associated radio buttons container (next fieldset)
const fieldset = section.nextElementSibling; const fieldset = section.nextElementSibling;
console.log(`what is the fieldset? ${fieldset}`)
if (fieldset && fieldset.tagName.toLowerCase() === 'fieldset') { if (fieldset && fieldset.tagName.toLowerCase() === 'fieldset') {
// Get the selected radio button within this fieldset // Get the selected radio button within this fieldset
const selectedRadio = fieldset.querySelector('input[type="radio"]:checked'); const selectedRadio = fieldset.querySelector('input[type="radio"]:checked');
console.log(`what is the selectedRadio? ${selectedRadio}`)
// If a radio button is selected, get its label text // If a radio button is selected, get its label text
let selectedPermission = "No permission selected"; let selectedPermission = "No permission selected";
if (selectedRadio) { if (selectedRadio) {
const label = fieldset.querySelector(`label[for="${selectedRadio.id}"]`); const label = fieldset.querySelector(`label[for="${selectedRadio.id}"]`);
selectedPermission = label ? label.textContent : "No permission selected"; selectedPermission = label ? label.textContent : "No permission selected";
} }
console.log(`what is the selectedPermission? ${selectedPermission}`)
// Create new elements for the modal content // Create new elements for the modal content
const titleElement = document.createElement("h4"); const titleElement = document.createElement("h4");
@ -198,4 +201,4 @@ export function initPortfolioMemberPage() {
} }
) )
}); });
} }

View file

@ -364,16 +364,14 @@ class NewMemberForm(BasePortfolioMemberForm):
cleaned_data["email"] = email_value.lower() cleaned_data["email"] = email_value.lower()
if email_value: if email_value:
# Check if user exists
requested_user = User.objects.filter(email=email_value, email__isnull=False).first()
if not requested_user:
raise forms.ValidationError("User does not exist.")
# Check if user is already a member # Check if user is already a member
if UserPortfolioPermission.objects.filter(user=requested_user, portfolio=self.portfolio).exists(): if UserPortfolioPermission.objects.filter(user__email=email_value, portfolio=self.portfolio).exists():
raise forms.ValidationError("User is already a member of this portfolio.") self.add_error("email", "User is already a member of this portfolio.")
if PortfolioInvitation.objects.filter(email=email_value, portfolio=self.portfolio).exists():
self.add_error("email", "An invitation already exists for this user.")
########################################## ##########################################
# TODO: future ticket # TODO: #3019
# (invite new member) # (invite new member)
########################################## ##########################################
# Check for an existing user (if there isn't any, send an invite) # Check for an existing user (if there isn't any, send an invite)

View file

@ -89,7 +89,7 @@
</fieldset> </fieldset>
<!-- Admin access form --> <!-- Admin access form -->
<div id="member-admin-permissions" class="margin-top-2"> <div id="new-member-admin-permissions" class="margin-top-2">
<h2>Admin access permissions</h2> <h2>Admin access permissions</h2>
<p>Member permissions available for admin-level acccess.</p> <p>Member permissions available for admin-level acccess.</p>
@ -110,7 +110,7 @@
</div> </div>
<!-- Basic access form --> <!-- Basic access form -->
<div id="member-basic-permissions" class="margin-top-2"> <div id="new-member-basic-permissions" class="margin-top-2">
<h2>Basic member permissions</h2> <h2>Basic member permissions</h2>
<p>Member permissions available for basic-level acccess.</p> <p>Member permissions available for basic-level acccess.</p>

View file

@ -493,10 +493,11 @@ class NewMemberView(PortfolioInvitationCreatePermissionView):
"""Create portfolio invitation from form data.""" """Create portfolio invitation from form data."""
if self.is_ajax(): if self.is_ajax():
return JsonResponse({"is_valid": True}) return JsonResponse({"is_valid": True})
requested_email = form.cleaned_data.get("email") # TODO: #3019
messages.success(self.request, f"{requested_email} has been invited.") # requested_email = form.cleaned_data.get("email")
# self.send_portfolio_invitation_email(requested_email)
# Create instance using form's mapping method # Create instance using form's mapping method
self.object = form.map_cleaned_data_to_instance( self.object = form.map_cleaned_data_to_instance(
form.cleaned_data, form.cleaned_data,
@ -506,10 +507,13 @@ class NewMemberView(PortfolioInvitationCreatePermissionView):
) )
) )
self.object.save() self.object.save()
messages.success(self.request, f"{self.object.email} has been invited.") messages.success(self.request, f"{self.object.email} has been invited.")
return redirect(self.get_success_url()) return redirect(self.get_success_url())
# TODO: #3019
# def send_portfolio_invitation_email(self, email):
# pass
def form_invalid(self, form): def form_invalid(self, form):
if self.is_ajax(): if self.is_ajax():
return JsonResponse({"is_valid": False}) return JsonResponse({"is_valid": False})