Commit e607fb3a by Nilu

fix multiple hiring team invitation

parent ff4ed2c1
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS name="" xmlns:oneit="http://www.1iT.com.au"><NODE name="Script" factory="Vector">
<NODE name="DDL" factory="Participant" class="oneit.sql.transfer.DefineTableOperation">
<tableName factory="String">it_does_not_matter</tableName>
<column name="object_id" type="Long" nullable="false" length="11"/>
<column name="object_last_updated_date" type="Date" nullable="false" length="22"/>
<column name="object_created_date" type="Date" nullable="false" length="22"/>
<column name="" type="Long" length="11" nullable="true"/>
<column name="" type="Long" length="11" nullable="true"/>
</NODE>
<NODE name="INDEX" factory="Participant" class="oneit.sql.transfer.DefineIndexOperation" tableName="it_does_not_matter" indexName="idx_it_does_not_matter_" isUnique="false"><column name=""/></NODE>
</NODE></OBJECTS>
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<!-- @AutoRun -->
<OBJECTS name="" xmlns:oneit="http://www.1iT.com.au"><NODE name="Script" factory="Vector">
<NODE name="DDL" factory="Participant" class="oneit.sql.transfer.DefineTableOperation">
<tableName factory="String">it_does_not_matter</tableName>
<column name="object_id" type="Long" nullable="false" length="11"/>
<column name="object_last_updated_date" type="Date" nullable="false" length="22"/>
<column name="object_created_date" type="Date" nullable="false" length="22"/>
<column name="" type="CLOB" nullable="true"/>
<column name="" type="CLOB" nullable="true"/>
<column name="" type="CLOB" nullable="true"/>
<column name="" type="String" nullable="true" length="200"/>
</NODE>
</NODE></OBJECTS>
\ No newline at end of file
-- DROP TABLE it_does_not_matter;
CREATE TABLE it_does_not_matter (
object_id int NOT NULL ,
object_last_updated_date datetime DEFAULT getdate() NOT NULL ,
object_created_date datetime DEFAULT getdate() NOT NULL
,
numeric(12) NULL,
numeric(12) NULL
);
ALTER TABLE it_does_not_matter ADD
CONSTRAINT PK_it_does_not_matter PRIMARY KEY
(
object_id
) ;
CREATE INDEX idx_it_does_not_matter_
ON it_does_not_matter ();
-- DROP TABLE it_does_not_matter;
CREATE TABLE it_does_not_matter (
object_id int NOT NULL ,
object_last_updated_date datetime DEFAULT getdate() NOT NULL ,
object_created_date datetime DEFAULT getdate() NOT NULL
,
text NULL,
text NULL,
text NULL,
varchar(200) NULL
);
ALTER TABLE it_does_not_matter ADD
CONSTRAINT PK_it_does_not_matter PRIMARY KEY
(
object_id
) ;
\ No newline at end of file
-- DROP TABLE it_does_not_matter;
CREATE TABLE it_does_not_matter (
object_id number(12) NOT NULL ,
object_last_updated_date date DEFAULT SYSDATE NOT NULL ,
object_created_date date DEFAULT SYSDATE NOT NULL
,
number(12) NULL,
number(12) NULL
);
ALTER TABLE it_does_not_matter ADD
CONSTRAINT PK_it_does_not_matter PRIMARY KEY
(
object_id
) ;
CREATE INDEX idx_it_does_not_matter_
ON it_does_not_matter ();
-- DROP TABLE it_does_not_matter;
CREATE TABLE it_does_not_matter (
object_id number(12) NOT NULL ,
object_last_updated_date date DEFAULT SYSDATE NOT NULL ,
object_created_date date DEFAULT SYSDATE NOT NULL
,
clob NULL,
clob NULL,
clob NULL,
varchar2(200) NULL
);
ALTER TABLE it_does_not_matter ADD
CONSTRAINT PK_it_does_not_matter PRIMARY KEY
(
object_id
) ;
\ No newline at end of file
-- @AutoRun
-- drop table it_does_not_matter;
CREATE TABLE it_does_not_matter (
object_id numeric(12) NOT NULL ,
object_last_updated_date timestamp DEFAULT NOW() NOT NULL ,
object_created_date timestamp DEFAULT NOW() NOT NULL
,
numeric(12) NULL,
numeric(12) NULL
);
ALTER TABLE it_does_not_matter ADD
CONSTRAINT pk_it_does_not_matter PRIMARY KEY
(
object_id
) ;
CREATE INDEX idx_it_does_not_matter_
ON it_does_not_matter ();
-- @AutoRun
-- drop table it_does_not_matter;
CREATE TABLE it_does_not_matter (
object_id numeric(12) NOT NULL ,
object_last_updated_date timestamp DEFAULT NOW() NOT NULL ,
object_created_date timestamp DEFAULT NOW() NOT NULL
,
text NULL,
text NULL,
text NULL,
varchar(200) NULL
);
ALTER TABLE it_does_not_matter ADD
CONSTRAINT pk_it_does_not_matter PRIMARY KEY
(
object_id
) ;
\ No newline at end of file
package performa.form;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import oneit.logging.*;
import oneit.objstore.StorageException;
import oneit.servlets.forms.*;
import oneit.servlets.process.*;
import oneit.utils.BusinessException;
import performa.orm.*;
public class AddAdditionalHiringTeamFP extends ORMProcessFormProcessor
{
@Override
public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException
{
HttpServletRequest request = submission.getRequest();
InviteTeammateNPO inviteTeammate = (InviteTeammateNPO) process.getAttribute("InviteTeammate");
LogMgr.log(HiringTeam.LOG, LogLevel.PROCESSING1, "Inside AddAdditionalHiringTeamFP for ", inviteTeammate);
inviteTeammate.addToHiringTeams(HiringTeamLinkNPO.createHiringTeamLinkNPO(process.getTransaction()));
return RedisplayResult.getInstance();
}
}
\ No newline at end of file
......@@ -29,9 +29,10 @@ public class SendUserInvitationFP extends SaveFP
@Override
public void validate(ORMProcessState process, SubmissionDetails submission, MultiException exceptions, Map params) throws StorageException
{
HttpServletRequest request = submission.getRequest();
Company company = (Company) process.getAttribute("Company");
CompanyUser resendUser = (CompanyUser) request.getAttribute("ResendUser");
HttpServletRequest request = submission.getRequest();
Company company = (Company) process.getAttribute("Company");
InviteTeammateNPO inviteTeammate = (InviteTeammateNPO) process.getAttribute("InviteTeammate");
CompanyUser resendUser = (CompanyUser) request.getAttribute("ResendUser");
if(resendUser!=null)
{
......@@ -39,9 +40,10 @@ public class SendUserInvitationFP extends SaveFP
}
else
{
BusinessObjectParser.assertFieldCondition(company.getUserEmail()!=null, company, Company.FIELD_UserEmail, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(StringUtils.isEmailAddress(company.getUserEmail()), company, Company.FIELD_UserEmail, "invalidEmail", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(company.getRoleType()!=null, company, Company.FIELD_RoleType, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(inviteTeammate.getUserEmail() != null, inviteTeammate, InviteTeammateNPO.FIELD_UserEmail, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(StringUtils.isEmailAddress(inviteTeammate.getUserEmail()), inviteTeammate, InviteTeammateNPO.FIELD_UserEmail, "invalidEmail", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(!Utils.userFoundInAnotherCompany(process.getTransaction(), inviteTeammate.getUserEmail() , company), inviteTeammate, InviteTeammateNPO.FIELD_UserEmail, "existsInOtherCompany", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(inviteTeammate.getRoleType() != null, inviteTeammate, InviteTeammateNPO.FIELD_RoleType, "mandatory", exceptions, true, request);
}
super.validate(process, submission, exceptions, params);
......@@ -51,11 +53,12 @@ public class SendUserInvitationFP extends SaveFP
@Override
public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException
{
HttpServletRequest request = submission.getRequest();
ObjectTransaction objTran = process.getTransaction();
Company company = (Company) process.getAttribute("Company");
CompanyUser resendUser = (CompanyUser) request.getAttribute("ResendUser");
HiringTeam hiringTeam = (HiringTeam) request.getAttribute("HiringTeam");
HttpServletRequest request = submission.getRequest();
ObjectTransaction objTran = process.getTransaction();
Company company = (Company) process.getAttribute("Company");
InviteTeammateNPO inviteTeammate = (InviteTeammateNPO) process.getAttribute("InviteTeammate");
CompanyUser resendUser = (CompanyUser) request.getAttribute("ResendUser");
HiringTeam hiringTeam = (HiringTeam) request.getAttribute("HiringTeam");
if(resendUser!=null)
{
......@@ -69,13 +72,13 @@ public class SendUserInvitationFP extends SaveFP
{
LogMgr.log(LOG, LogLevel.PROCESSING1, "Started to create new use", company);
SecUser secUser = SecUser.searchNAME(objTran, company.getUserEmail());
SecUser secUser = SecUser.searchNAME(objTran, inviteTeammate.getUserEmail());
if(secUser == null)
{
secUser = SecUser.createSecUser(objTran);
secUser.setUserName(company.getUserEmail().toLowerCase());
secUser.setUserName(inviteTeammate.getUserEmail().toLowerCase());
}
CompanyUser comUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
......@@ -87,18 +90,29 @@ public class SendUserInvitationFP extends SaveFP
secUser.setEmail(secUser.getUserName());
secUser.setAttribute("md5:" + SecUser.FIELD_Password, CompanyUser.DEFAULT_PASSWORD);
secUser.addRole(Utils.getRole(Utils.ROLE_CLIENT, objTran));
secUser.setFirstName(company.getFirstName());
secUser.setLastName(company.getLastName());
secUser.setFirstName(inviteTeammate.getFirstName());
secUser.setLastName(inviteTeammate.getLastName());
comUser.setDefaultHiringTeam(hiringTeam);
comUser.setCompany(company);
}
// setting the default hiring team selected above the screen
CompanyUserHiringTeamLink link = CompanyUserHiringTeamLink.createCompanyUserHiringTeamLink(objTran);
link.setCompanyUser(comUser);
link.setHiringTeam(hiringTeam);
comUser.setRole(company.getRoleType());
// setting additional hiring teams added when inviting
for (HiringTeamLinkNPO teamLinkNPO : inviteTeammate.getHiringTeamsSet())
{
CompanyUserHiringTeamLink teamLink = CompanyUserHiringTeamLink.createCompanyUserHiringTeamLink(objTran);
teamLink.setCompanyUser(comUser);
teamLink.setHiringTeam(teamLinkNPO.getHiringTeam());
}
comUser.setRole(inviteTeammate.getRoleType());
LogMgr.log(LOG, LogLevel.PROCESSING1, "New user created :: ", secUser);
......
......@@ -68,12 +68,6 @@ public class Company extends BaseCompany
}
return addUser;
}
public Boolean isEmailCorrect()
{
return StringUtils.isEmailAddress(StringUtils.subBlanks(getUserEmail()));
}
@Override
......
......@@ -14,10 +14,6 @@
<TRANSIENT name="HiringTeamName" type="String" />
<TRANSIENT name="ManageOwnBilling" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="UserEmail" type="String" />
<TRANSIENT name="FirstName" type="String" />
<TRANSIENT name="LastName" type="String" />
<TRANSIENT name="RoleType" type="RoleType" defaultValue="RoleType.STANDARD" attribHelper="EnumeratedAttributeHelper"/>
<TRANSIENT name="IsLogoDeleted" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="CompletedProfile" type="Boolean" defaultValue="Boolean.FALSE"/>
<TRANSIENT name="PaymentJobCount" type="Integer" />
......
package performa.orm;
import oneit.logging.LoggingArea;
import oneit.objstore.ValidationContext;
import oneit.utils.StringUtils;
......@@ -8,6 +9,8 @@ public class HiringTeam extends BaseHiringTeam
{
private static final long serialVersionUID = 0L;
public static LoggingArea LOG = LoggingArea.createLoggingArea("HiringTeam");
// This constructor should not be called
public HiringTeam ()
{
......
package performa.orm;
import java.io.*;
import java.util.*;
import oneit.appservices.config.*;
import oneit.logging.*;
import oneit.objstore.*;
import oneit.utils.*;
import oneit.servlets.orm.*;
public class HiringTeamLinkNPO extends BaseHiringTeamLinkNPO
{
private static final long serialVersionUID = 0L;
// This constructor should not be called
public HiringTeamLinkNPO ()
{
// Do not add any code to this, always put it in initialiseNewObject
}
}
<?xml version="1.0" encoding="UTF-8"?>
<ROOT xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='http://www.oneit.com.au/schemas/5.2/BusinessObject.xsd'>
<BUSINESSCLASS name="HiringTeamLinkNPO" package="performa.orm" superclass="NonPersistentBO">
<IMPORT value="oneit.servlets.orm.*"/>
<TABLE name="it_does_not_matter" tablePrefix="object" polymorphic="FALSE">
<SINGLEREFERENCE name="HiringTeam" type="HiringTeam" />
<SINGLEREFERENCE name="InviteTeammate" type="InviteTeammateNPO" backreferenceName="HiringTeams" />
</TABLE>
</BUSINESSCLASS>
</ROOT>
\ No newline at end of file
package performa.orm;
import oneit.utils.StringUtils;
public class InviteTeammateNPO extends BaseInviteTeammateNPO
{
private static final long serialVersionUID = 0L;
// This constructor should not be called
public InviteTeammateNPO ()
{
// Do not add any code to this, always put it in initialiseNewObject
}
public Boolean isEmailCorrect()
{
return StringUtils.isEmailAddress(StringUtils.subBlanks(getUserEmail()));
}
}
\ No newline at end of file
<?xml version="1.0" encoding="UTF-8"?>
<ROOT xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:noNamespaceSchemaLocation='http://www.oneit.com.au/schemas/5.2/BusinessObject.xsd'>
<BUSINESSCLASS name="InviteTeammateNPO" package="performa.orm" superclass="NonPersistentBO">
<IMPORT value="oneit.servlets.orm.*"/>
<IMPORT value="performa.orm.types.*"/>
<MULTIPLEREFERENCE name="HiringTeams" type="HiringTeamLinkNPO" backreferenceName="InviteTeammate" />
<TABLE name="it_does_not_matter" tablePrefix="object" polymorphic="FALSE">
<ATTRIB name="UserEmail" type="String" validators="Email" />
<ATTRIB name="FirstName" type="String" />
<ATTRIB name="LastName" type="String" />
<ATTRIB name="RoleType" type="RoleType" attribHelper="EnumeratedAttributeHelper" />
</TABLE>
</BUSINESSCLASS>
</ROOT>
\ No newline at end of file
......@@ -359,6 +359,23 @@ public class Utils
return Boolean.FALSE;
}
public static Boolean userFoundInAnotherCompany(ObjectTransaction objTran, String email, Company company)
{
if(email != null)
{
SecUser user = SecUser.searchNAME(objTran, email.toLowerCase());
if(user != null && user.getExtension(CompanyUser.REFERENCE_CompanyUser) != null)
{
CompanyUser companyUser = user.getExtension(CompanyUser.REFERENCE_CompanyUser);
return !CollectionUtils.equals(companyUser.getCompany(), company);
}
}
return Boolean.FALSE;
}
public static Boolean isCompanyUserEmailFound(ObjectTransaction objTran, String email, CompanyUser currentUser)
{
if(email!=null)
......
......@@ -60,6 +60,7 @@
<FORM name="*.addHiringTeam" factory="Participant" class="performa.form.AddHiringTeamFP"/>
<FORM name="*.saveCompanyUser" factory="Participant" class="performa.form.SaveCompanyUserFP"/>
<FORM name="*.selectHiringTeam" factory="Participant" class="performa.form.SelectHiringTeamFP"/>
<FORM name="*.additionalTeam" factory="Participant" class="performa.form.AddAdditionalHiringTeamFP"/>
</NODE>
<NODE name="job_assessment_criteria_add_jsp" factory="Participant">
......
......@@ -20,9 +20,18 @@
Collection companyUsers = CollectionFilter.filter(allUsers, CompanyUser.SearchByAll().andIsAccountVerified(new EqualsFilter<>(Boolean.TRUE)).andIsDisabled(new EqualsFilter<>(Boolean.FALSE)));
Collection pendingUsers = CollectionFilter.filter(allUsers, CompanyUser.SearchByAll().andIsAccountVerified(new NotEqualsFilter<>(Boolean.TRUE)));
Collection disabledUsers = CollectionFilter.filter(allUsers, CompanyUser.SearchByAll().andIsAccountVerified(new EqualsFilter<>(Boolean.TRUE)).andIsDisabled(new EqualsFilter<>(Boolean.TRUE)));
InviteTeammateNPO inviteTeammate = (InviteTeammateNPO) process.getAttribute("InviteTeammate");
Debug.assertion(hiringTeam != null, "Hiring Team is null in admin portal Manage Teammates");
if(inviteTeammate == null)
{
inviteTeammate = InviteTeammateNPO.createInviteTeammateNPO(objTran);
inviteTeammate.addToHiringTeams(HiringTeamLinkNPO.createHiringTeamLinkNPO(objTran));
process.setAttribute("InviteTeammate", inviteTeammate);
}
if(company == null)
{
company = comUser.getCompany();
......@@ -45,7 +54,7 @@
Collection<CompanyUser> sortedPendingUsers = Utils.getUsersSorted(pendingUsers, userSortOpt);
Collection<CompanyUser> sortedDisabledUsers = Utils.getUsersSorted(disabledUsers, userSortOpt);
company.setRoleType(RoleType.STANDARD);
inviteTeammate.setRoleType(RoleType.STANDARD);
%>
<script type="text/javascript">
......@@ -222,14 +231,14 @@
</div>
</div>
<div class="resend-link">
<oneit:button value="<%= resendTxt %>" name="sendUserInvites" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage)
.mapEntry ("ResendUser", pendingUser)
.mapEntry ("HiringTeam", hiringTeam)
.mapEntry(NotificationUtils.NOTIFICATION_MSG_PARAM, "invitationSent")
.toMap() %>" />
</div>
<div class="resend-link">
<oneit:button value="<%= resendTxt %>" name="sendUserInvites" skin="link"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage)
.mapEntry ("ResendUser", pendingUser)
.mapEntry ("HiringTeam", hiringTeam)
.mapEntry(NotificationUtils.NOTIFICATION_MSG_PARAM, "invitationSent")
.toMap() %>" />
</div>
<%
}
......@@ -280,24 +289,42 @@
</div>
<div class="form-group">
<label><oneit:label GUIName="Email Address" /></label>
<oneit:ormInput obj="<%= company %>" type="text" attributeName="UserEmail" cssClass="form-control" style="text-transform: lowercase"/>
<oneit:ormInput obj="<%= inviteTeammate %>" type="text" attributeName="UserEmail" cssClass="form-control" style="text-transform: lowercase"/>
</div>
<div class="form-group">
<label><oneit:label GUIName="First Name" /></label>
<oneit:ormInput obj="<%= company %>" type="text" attributeName="FirstName" cssClass="form-control"/>
<oneit:ormInput obj="<%= inviteTeammate %>" type="text" attributeName="FirstName" cssClass="form-control"/>
</div>
<div class="form-group">
<label><oneit:label GUIName="Last Name" /></label>
<oneit:ormInput obj="<%= company %>" type="text" attributeName="LastName" cssClass="form-control"/>
<oneit:ormInput obj="<%= inviteTeammate %>" type="text" attributeName="LastName" cssClass="form-control"/>
</div>
<div class="form-group">
<label><oneit:label GUIName="Role" /></label>
<oneit:ormEnum obj="<%= company %>" attributeName="RoleType" cssClass="form-control"/>
<oneit:ormEnum obj="<%= inviteTeammate %>" attributeName="RoleType" cssClass="form-control"/>
</div>
<div class="form-group">
<label><oneit:label GUIName="Add to multiple Hiring Teams" /></label>
</div>
<%
for(HiringTeamLinkNPO inviteTeammateLink : inviteTeammate.getHiringTeamsSet())
{
%>
<div class="form-group">
<div class="wider-select">
<tagfile:ormsingleasso_select obj="<%= inviteTeammateLink %>" assocName="HiringTeam" options="<%= Utils.getOtherHiringTeams(hiringTeam) %>"/>
</div>
</div>
<%
}
%>
<oneit:button value=" " name="additionalTeam" skin="link" requestAttribs="<%= CollectionUtils.EMPTY_MAP %>">
<label><oneit:label GUIName="Add another hiring team" /></label>
</oneit:button>
<div class="correctEmail" >
<oneit:recalc mode="Boolean" script="company.isEmailCorrect()" company="<%= company %>" />
</div>
<oneit:recalcClass htmlTag="div" classScript="company.isEmailCorrect() ? 'invite-btn enabled': 'invite-btn disabled'" company="<%= company %>">
<oneit:recalcClass htmlTag="div" classScript="inviteTeammate.isEmailCorrect() ? 'invite-btn enabled': 'invite-btn disabled'" inviteTeammate="<%= inviteTeammate %>">
<oneit:button value="Invite" name="sendUserInvites" cssClass="btn btn-invite"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage)
.mapEntry ("restartProcess", Boolean.TRUE)
......
#completeCulture = Please complete workplace preferences.
#completeAssessment = Please complete your experience.
#emailExists = An account already exists with this email address.
#emailSent = A verification email has been sent to you. Please check your email :).
#alreadyApplied = You have already applied for this job.
#completeCulture = Please complete workplace preferences.
#completeAssessment = Please complete your experience.
#emailExists = An account already exists with this email address.
#existsInOtherCompany = An account with this email address is already associated with another company.
#emailSent = A verification email has been sent to you. Please check your email :).
#alreadyApplied = You have already applied for this job.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment