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();
// Init all other portfolio member pages
initPortfolioMemberPage();
initPortfolioMemberPage();

View file

@ -57,10 +57,10 @@ export function initAddNewMemberPageListeners() {
}
// Hookup the radio elements
hookupRadioTogglerListener(
'member_access_level',
'role',
{
'admin': 'new-member-admin-permissions',
'basic': 'new-member-basic-permissions'
'organization_admin': 'new-member-admin-permissions',
'organization_basic': 'new-member-basic-permissions'
}
);
@ -115,6 +115,8 @@ export function initAddNewMemberPageListeners() {
// Get all permission sections (divs with h3 and radio inputs)
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 => {
// Find the <h3> element text
@ -122,17 +124,18 @@ export function initAddNewMemberPageListeners() {
// Find the associated radio buttons container (next fieldset)
const fieldset = section.nextElementSibling;
console.log(`what is the fieldset? ${fieldset}`)
if (fieldset && fieldset.tagName.toLowerCase() === 'fieldset') {
// Get the selected radio button within this fieldset
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
let selectedPermission = "No permission selected";
if (selectedRadio) {
const label = fieldset.querySelector(`label[for="${selectedRadio.id}"]`);
selectedPermission = label ? label.textContent : "No permission selected";
}
console.log(`what is the selectedPermission? ${selectedPermission}`)
// Create new elements for the modal content
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()
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
if UserPortfolioPermission.objects.filter(user=requested_user, portfolio=self.portfolio).exists():
raise forms.ValidationError("User is already a member of this portfolio.")
if UserPortfolioPermission.objects.filter(user__email=email_value, portfolio=self.portfolio).exists():
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)
##########################################
# Check for an existing user (if there isn't any, send an invite)

View file

@ -89,7 +89,7 @@
</fieldset>
<!-- 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>
<p>Member permissions available for admin-level acccess.</p>
@ -110,7 +110,7 @@
</div>
<!-- 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>
<p>Member permissions available for basic-level acccess.</p>

View file

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