DECLARE @OrganizationID int = @GroupObjectID, @ContactID int
IF @OrganizationID IS NULL BEGIN
SELECT TOP 1 @OrganizationID = GroupObjectID
FROM
PersonAccess
WHERE
GroupObject = 'Organization'
AND
PersonID = @PersonID
END
IF @OrganizationID IS NULL BEGIN
INSERT INTO Contact (Contact, CreatedDate, CreatedPersonID) VALUES (@Organization, GETDATE(), @PersonID)
SELECT @ContactID = SCOPE_IDENTITY()
INSERT INTO Organization (Organization, ContactID) VALUES (@Organization, @ContactID)
SELECT @OrganizationID = SCOPE_IDENTITY()
END
-- Grant access to the Organization
INSERT INTO PersonAccess (PersonID, GroupObject, GroupObjectID, SourceObject, SourceObjectID)
SELECT @PersonID, 'Organization', @OrganizationID, 'Person', @PersonID WHERE NOT EXISTS (SELECT 1 FROM PersonAccess WHERE PersonID = @PersonID AND GroupObject = 'Organization' AND GroupObjectID = @OrganizationID)
IF @SystemRoleID = '0'
BEGIN
-- Add to the Processor role
INSERT INTO SystemMember (PersonID, SystemRoleID, IsDefault, CreatedDate, UpdatedDate)
SELECT @PersonID, SystemRoleID, 1, GETDATE(), GETDATE() FROM SystemRole WHERE SystemRole = 'Processor' AND NOT EXISTS (SELECT 1 FROM SystemMember WHERE SystemMember.PersonID = @PersonID AND SystemMember.SystemRoleID = SystemRole.SystemRoleID)
-- Add to the Security Administrator role, if needed
INSERT INTO SystemMember (PersonID, SystemRoleID, IsDefault, CreatedDate, UpdatedDate)
SELECT @PersonID, SystemRoleID, 0, GETDATE(), GETDATE()
FROM
SystemRole
WHERE SystemRole = 'Security Administrator'
AND NOT EXISTS (
SELECT 1
FROM PersonAccess
INNER JOIN SystemRole
ON
SystemRole.SystemRole = 'Security Administrator'
INNER JOIN SystemMember
ON
SystemMember.SystemRoleID = SystemRole.SystemRoleID
AND
SystemMember.PersonID = PersonAccess.PersonID
WHERE
PersonAccess.GroupObjectID = @OrganizationID
AND
PersonAccess.GroupObject = 'Organization'
)
-- Add to the Manager role, if needed
INSERT INTO SystemMember (PersonID, SystemRoleID, IsDefault, CreatedDate, UpdatedDate)
SELECT @PersonID, SystemRoleID, 0, GETDATE(), GETDATE()
FROM
SystemRole
WHERE SystemRole = 'Manager'
AND NOT EXISTS (
SELECT 1
FROM PersonAccess
INNER JOIN SystemRole
ON
SystemRole.SystemRole = 'Manager'
INNER JOIN SystemMember
ON
SystemMember.SystemRoleID = SystemRole.SystemRoleID
AND
SystemMember.PersonID = PersonAccess.PersonID
WHERE
PersonAccess.GroupObjectID = @OrganizationID
AND
PersonAccess.GroupObject = 'Organization'
)
END
ELSE
BEGIN
-- Add to the specified role(s)
INSERT INTO SystemMember (PersonID, SystemRoleID, IsDefault, CreatedDate, UpdatedDate)
SELECT @PersonID, SystemRoleID, 1, GETDATE(), GETDATE() FROM SystemRole WHERE SystemRoleID IN ({Param.SystemRoleID}) AND NOT EXISTS (SELECT 1 FROM SystemMember WHERE SystemMember.PersonID = @PersonID AND SystemMember.SystemRoleID = SystemRole.SystemRoleID)
END