Commit 2af2566f by chenith

Added option to send invitations to new users.

parent 1a5b49e1
package performa.form;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import oneit.business.content.Article;
import oneit.components.ParticipantInitialisationContext;
import oneit.email.ConfigurableArticleTemplateEmailer;
import oneit.email.ConfigurableEmailerException;
import oneit.logging.*;
import oneit.net.LoopbackHTTP;
import oneit.objstore.ObjectTransaction;
import oneit.objstore.StorageException;
import oneit.objstore.parser.BusinessObjectParser;
import oneit.security.SecUser;
import oneit.servlets.forms.*;
import oneit.servlets.process.*;
import oneit.servlets.utils.NotificationUtils;
import oneit.utils.*;
import performa.orm.*;
import performa.utils.Utils;
import performa.utils.WebUtils;
public class SendUserInvitationFP extends SaveFP
{
private static LoggingArea LOG = LoggingArea.createLoggingArea("SendUserInvitationFP");
private static final String DEFAULT_PASSWORD = "Talentology123";
protected ConfigurableArticleTemplateEmailer invitationEmailer;
@Override
public void validate(ORMProcessState process, SubmissionDetails submission, MultiException exceptions, Map params) throws StorageException
{
HttpServletRequest request = submission.getRequest();
Company company = (Company) process.getAttribute("Company");
BusinessObjectParser.assertFieldCondition(company.getUserEmail()!=null, company, Company.FIELD_UserEmail, "mandatory", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(!isEmailFound(process.getTransaction(), company.getUserEmail()), company, Company.FIELD_UserEmail, "emailExists", exceptions, true, request);
BusinessObjectParser.assertFieldCondition(company.getRoleType()!=null, company, Company.FIELD_RoleType, "mandatory", exceptions, true, request);
super.validate(process, submission, exceptions, params);
}
@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");
LogMgr.log(LOG, LogLevel.PROCESSING1, "Started to create new use", company);
SecUser newUser = SecUser.createSecUser(objTran);
CompanyUser newComUser = newUser.getExtensionOrCreate(CompanyUser.REFERENCE_CompanyUser);
newUser.setUserName(company.getUserEmail().toLowerCase());
newUser.setEmail(newUser.getUserName());
newUser.setAttribute("md5:" + SecUser.FIELD_Password, DEFAULT_PASSWORD);
newUser.addRole(Utils.getRole(Utils.ROLE_CLIENT, objTran));
newUser.setFirstName(company.getFirstName());
newUser.setLastName(company.getLastName());
newComUser.setCompany(company);
newComUser.setRole(company.getRoleType());
LogMgr.log(LOG, LogLevel.PROCESSING1, "New user created :: ", newUser);
sendInvitationMail(newComUser, request);
LogMgr.log(LOG, LogLevel.PROCESSING1, "End of sending invitation email.", newUser);
return super.processForm(process, submission, params);
}
@Override
public void init(ParticipantInitialisationContext context) throws InitialisationException
{
super.init(context);
invitationEmailer = (ConfigurableArticleTemplateEmailer) (context.getSingleChild("InvitationEmailer"));
}
protected void sendInvitationMail(CompanyUser companyUser, HttpServletRequest request) throws BusinessException
{
if(companyUser.getIsAccountVerified()!=Boolean.TRUE)
{
try
{
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sending invitation mail from SendUserInvitationFP to :: ", companyUser);
Article invitationArticle = WebUtils.getArticleByShortCut(companyUser.getTransaction(), WebUtils.COMPANY_ACCOUNT_VERIFICATION);
RandomStringGen random = new RandomStringGen();
//set invitation key and send mail time
companyUser.setVerificationKey(random.generateAlphaNum(6));
companyUser.setVerificationMailSendDate(new Date());
String link = LoopbackHTTP.getRemoteAccessURL(request)
+ invitationArticle.getLink(request, CollectionUtils.EMPTY_MAP, "/")
+ "?id=" + companyUser.getID()
+ "&key=" + companyUser.getVerificationKey();
Map defaultParams = CollectionUtils.mapEntry("link", link).toMap();
ObjectTransform transform = Utils.createCompoundTransform(defaultParams, companyUser);
Utils.sendMail(invitationEmailer, transform, new String[]{companyUser.getUser().getUserName()}, null, companyUser);
LogMgr.log(LOG, LogLevel.PROCESSING1, "Sent invitation mail successfully from " + SendUserInvitationFP.class + " to :: ", companyUser);
}
catch (ConfigurableEmailerException ex)
{
LogMgr.log(LOG, LogLevel.SYSTEMERROR1, ex, "Error occured while sending mail for Candidate :: " + companyUser);
throw new BusinessException("We are unable to send mail. Please try again or contact Talentology for more details.");
}
}
else
{
LogMgr.log(LOG, LogLevel.PROCESSING1, "Call from " + SendUserInvitationFP.class + ". Account is already verified for candidate :: ", companyUser);
}
}
private Boolean isEmailFound(ObjectTransaction objTran, String email)
{
if(email!=null)
{
SecUser user = SecUser.searchNAME(objTran, email.toLowerCase());
if(user!=null) //&& user.getExtension(CompanyUser.REFERENCE_CompanyUser)!=null
{
return Boolean.TRUE;
}
}
return Boolean.FALSE;
}
}
\ No newline at end of file
...@@ -62,7 +62,7 @@ public class VerifyCompanyUserFP extends ORMProcessFormProcessor ...@@ -62,7 +62,7 @@ public class VerifyCompanyUserFP extends ORMProcessFormProcessor
if(CollectionUtils.equals(companyUser.getPassword(), companyUser.getConfirmPassword())) if(CollectionUtils.equals(companyUser.getPassword(), companyUser.getConfirmPassword()))
{ {
if(company.getIsVerified()!=Boolean.TRUE) if(company.getIsVerified()!=Boolean.TRUE && CollectionUtils.equals(company.getAddedByUser(), companyUser))
{ {
process.setAttribute("Company", company); process.setAttribute("Company", company);
......
...@@ -54,6 +54,10 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -54,6 +54,10 @@ public abstract class BaseCompany extends BaseBusinessClass
public static final String FIELD_PostCode = "PostCode"; public static final String FIELD_PostCode = "PostCode";
public static final String FIELD_City = "City"; public static final String FIELD_City = "City";
public static final String FIELD_HasClientSupport = "HasClientSupport"; public static final String FIELD_HasClientSupport = "HasClientSupport";
public static final String FIELD_UserEmail = "UserEmail";
public static final String FIELD_FirstName = "FirstName";
public static final String FIELD_LastName = "LastName";
public static final String FIELD_RoleType = "RoleType";
public static final String SINGLEREFERENCE_AddedByUser = "AddedByUser"; public static final String SINGLEREFERENCE_AddedByUser = "AddedByUser";
public static final String MULTIPLEREFERENCE_Users = "Users"; public static final String MULTIPLEREFERENCE_Users = "Users";
public static final String BACKREF_Users = ""; public static final String BACKREF_Users = "";
...@@ -75,6 +79,10 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -75,6 +79,10 @@ public abstract class BaseCompany extends BaseBusinessClass
private static final DefaultAttributeHelper<Company> HELPER_PostCode = DefaultAttributeHelper.INSTANCE; private static final DefaultAttributeHelper<Company> HELPER_PostCode = DefaultAttributeHelper.INSTANCE;
private static final DefaultAttributeHelper<Company> HELPER_City = DefaultAttributeHelper.INSTANCE; private static final DefaultAttributeHelper<Company> HELPER_City = DefaultAttributeHelper.INSTANCE;
private static final DefaultAttributeHelper<Company> HELPER_HasClientSupport = DefaultAttributeHelper.INSTANCE; private static final DefaultAttributeHelper<Company> HELPER_HasClientSupport = DefaultAttributeHelper.INSTANCE;
private static final DefaultAttributeHelper<Company> HELPER_UserEmail = DefaultAttributeHelper.INSTANCE;
private static final DefaultAttributeHelper<Company> HELPER_FirstName = DefaultAttributeHelper.INSTANCE;
private static final DefaultAttributeHelper<Company> HELPER_LastName = DefaultAttributeHelper.INSTANCE;
private static final EnumeratedAttributeHelper<Company, RoleType> HELPER_RoleType = new EnumeratedAttributeHelper<Company, RoleType> (RoleType.FACTORY_RoleType);
// Private attributes corresponding to business object data // Private attributes corresponding to business object data
...@@ -88,6 +96,10 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -88,6 +96,10 @@ public abstract class BaseCompany extends BaseBusinessClass
private String _PostCode; private String _PostCode;
private String _City; private String _City;
private Boolean _HasClientSupport; private Boolean _HasClientSupport;
private String _UserEmail;
private String _FirstName;
private String _LastName;
private RoleType _RoleType;
// Private attributes corresponding to single references // Private attributes corresponding to single references
...@@ -103,6 +115,10 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -103,6 +115,10 @@ public abstract class BaseCompany extends BaseBusinessClass
private static final Map ATTRIBUTES_METADATA_Company = new HashMap (); private static final Map ATTRIBUTES_METADATA_Company = new HashMap ();
// Arrays of validators for each attribute // Arrays of validators for each attribute
private static final AttributeValidator[] FIELD_UserEmail_Validators;
private static final AttributeValidator[] FIELD_FirstName_Validators;
private static final AttributeValidator[] FIELD_LastName_Validators;
private static final AttributeValidator[] FIELD_RoleType_Validators;
private static final AttributeValidator[] FIELD_CompanyName_Validators; private static final AttributeValidator[] FIELD_CompanyName_Validators;
private static final AttributeValidator[] FIELD_HiringTeamType_Validators; private static final AttributeValidator[] FIELD_HiringTeamType_Validators;
private static final AttributeValidator[] FIELD_Industry_Validators; private static final AttributeValidator[] FIELD_Industry_Validators;
...@@ -131,6 +147,10 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -131,6 +147,10 @@ public abstract class BaseCompany extends BaseBusinessClass
setupAssocMetaData_Users(); setupAssocMetaData_Users();
setupAssocMetaData_Clients(); setupAssocMetaData_Clients();
setupAssocMetaData_AddedByUser(); setupAssocMetaData_AddedByUser();
FIELD_UserEmail_Validators = (AttributeValidator[])setupAttribMetaData_UserEmail(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_FirstName_Validators = (AttributeValidator[])setupAttribMetaData_FirstName(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_LastName_Validators = (AttributeValidator[])setupAttribMetaData_LastName(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_RoleType_Validators = (AttributeValidator[])setupAttribMetaData_RoleType(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_CompanyName_Validators = (AttributeValidator[])setupAttribMetaData_CompanyName(validatorMapping).toArray (new AttributeValidator[0]); FIELD_CompanyName_Validators = (AttributeValidator[])setupAttribMetaData_CompanyName(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_HiringTeamType_Validators = (AttributeValidator[])setupAttribMetaData_HiringTeamType(validatorMapping).toArray (new AttributeValidator[0]); FIELD_HiringTeamType_Validators = (AttributeValidator[])setupAttribMetaData_HiringTeamType(validatorMapping).toArray (new AttributeValidator[0]);
FIELD_Industry_Validators = (AttributeValidator[])setupAttribMetaData_Industry(validatorMapping).toArray (new AttributeValidator[0]); FIELD_Industry_Validators = (AttributeValidator[])setupAttribMetaData_Industry(validatorMapping).toArray (new AttributeValidator[0]);
...@@ -199,6 +219,77 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -199,6 +219,77 @@ public abstract class BaseCompany extends BaseBusinessClass
// Meta Info setup // Meta Info setup
private static List setupAttribMetaData_UserEmail(Map validatorMapping)
{
Map metaInfo = new HashMap ();
metaInfo.put ("name", "UserEmail");
metaInfo.put ("type", "String");
metaInfo.put ("validators", "Email");
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Company.UserEmail:", metaInfo);
ATTRIBUTES_METADATA_Company.put (FIELD_UserEmail, Collections.unmodifiableMap (metaInfo));
List validators = BaseBusinessClass.getAttribValidators(Company.class, "UserEmail", metaInfo, validatorMapping);
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Company.UserEmail:", validators);
return validators;
}
// Meta Info setup
private static List setupAttribMetaData_FirstName(Map validatorMapping)
{
Map metaInfo = new HashMap ();
metaInfo.put ("name", "FirstName");
metaInfo.put ("type", "String");
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Company.FirstName:", metaInfo);
ATTRIBUTES_METADATA_Company.put (FIELD_FirstName, Collections.unmodifiableMap (metaInfo));
List validators = BaseBusinessClass.getAttribValidators(Company.class, "FirstName", metaInfo, validatorMapping);
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Company.FirstName:", validators);
return validators;
}
// Meta Info setup
private static List setupAttribMetaData_LastName(Map validatorMapping)
{
Map metaInfo = new HashMap ();
metaInfo.put ("name", "LastName");
metaInfo.put ("type", "String");
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Company.LastName:", metaInfo);
ATTRIBUTES_METADATA_Company.put (FIELD_LastName, Collections.unmodifiableMap (metaInfo));
List validators = BaseBusinessClass.getAttribValidators(Company.class, "LastName", metaInfo, validatorMapping);
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Company.LastName:", validators);
return validators;
}
// Meta Info setup
private static List setupAttribMetaData_RoleType(Map validatorMapping)
{
Map metaInfo = new HashMap ();
metaInfo.put ("attribHelper", "EnumeratedAttributeHelper");
metaInfo.put ("defaultValue", "RoleType.STANDARD");
metaInfo.put ("name", "RoleType");
metaInfo.put ("type", "RoleType");
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG2, "Metadata for Company.RoleType:", metaInfo);
ATTRIBUTES_METADATA_Company.put (FIELD_RoleType, Collections.unmodifiableMap (metaInfo));
List validators = BaseBusinessClass.getAttribValidators(Company.class, "RoleType", metaInfo, validatorMapping);
LogMgr.log (BUSINESS_OBJECTS, LogLevel.DEBUG1, "Validators for Company.RoleType:", validators);
return validators;
}
// Meta Info setup
private static List setupAttribMetaData_CompanyName(Map validatorMapping) private static List setupAttribMetaData_CompanyName(Map validatorMapping)
{ {
Map metaInfo = new HashMap (); Map metaInfo = new HashMap ();
...@@ -436,6 +527,10 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -436,6 +527,10 @@ public abstract class BaseCompany extends BaseBusinessClass
_PostCode = (String)(HELPER_PostCode.initialise (_PostCode)); _PostCode = (String)(HELPER_PostCode.initialise (_PostCode));
_City = (String)(HELPER_City.initialise (_City)); _City = (String)(HELPER_City.initialise (_City));
_HasClientSupport = (Boolean)(Boolean.FALSE); _HasClientSupport = (Boolean)(Boolean.FALSE);
_UserEmail = (String)(HELPER_UserEmail.initialise (_UserEmail));
_FirstName = (String)(HELPER_FirstName.initialise (_FirstName));
_LastName = (String)(HELPER_LastName.initialise (_LastName));
_RoleType = (RoleType)(RoleType.STANDARD);
} }
...@@ -1447,6 +1542,398 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -1447,6 +1542,398 @@ public abstract class BaseCompany extends BaseBusinessClass
} }
} }
/**
* Get the attribute UserEmail
*/
public String getUserEmail ()
{
assertValid();
String valToReturn = _UserEmail;
for (CompanyBehaviourDecorator bhd : Company_BehaviourDecorators)
{
valToReturn = bhd.getUserEmail ((Company)this, valToReturn);
}
return valToReturn;
}
/**
* Called prior to the attribute changing. Subclasses need not call super. If a field exception
* is thrown, the attribute change will fail. The new value is different to the old value.
*/
protected void preUserEmailChange (String newUserEmail) throws FieldException
{
}
/**
* Called after the attribute changes.
* If a field exception is thrown, the value is still changed, however it
* may lead to the TX being rolled back
*/
protected void postUserEmailChange () throws FieldException
{
}
public FieldWriteability getWriteability_UserEmail ()
{
return getFieldWritabilityUtil (FieldWriteability.TRUE);
}
/**
* Set the attribute UserEmail. Checks to ensure a new value
* has been supplied. If so, marks the field as altered and sets the attribute.
*/
public void setUserEmail (String newUserEmail) throws FieldException
{
boolean oldAndNewIdentical = HELPER_UserEmail.compare (_UserEmail, newUserEmail);
try
{
for (CompanyBehaviourDecorator bhd : Company_BehaviourDecorators)
{
newUserEmail = bhd.setUserEmail ((Company)this, newUserEmail);
oldAndNewIdentical = HELPER_UserEmail.compare (_UserEmail, newUserEmail);
}
if (FIELD_UserEmail_Validators.length > 0)
{
Object newUserEmailObj = HELPER_UserEmail.toObject (newUserEmail);
if (newUserEmailObj != null)
{
int loopMax = FIELD_UserEmail_Validators.length;
Map metadata = (Map)ATTRIBUTES_METADATA_Company.get (FIELD_UserEmail);
for (int v = 0 ; v < loopMax ; ++v)
{
FIELD_UserEmail_Validators[v].checkAttribute (this, FIELD_UserEmail, metadata, newUserEmailObj);
}
}
}
}
catch (FieldException e)
{
if (!oldAndNewIdentical)
{
e.setWouldModify ();
}
throw e;
}
if (!oldAndNewIdentical)
{
assertValid();
Debug.assertion (getWriteability_UserEmail () != FieldWriteability.FALSE, "Field UserEmail is not writeable");
preUserEmailChange (newUserEmail);
markFieldChange (FIELD_UserEmail);
_UserEmail = newUserEmail;
postFieldChange (FIELD_UserEmail);
postUserEmailChange ();
}
}
/**
* Get the attribute FirstName
*/
public String getFirstName ()
{
assertValid();
String valToReturn = _FirstName;
for (CompanyBehaviourDecorator bhd : Company_BehaviourDecorators)
{
valToReturn = bhd.getFirstName ((Company)this, valToReturn);
}
return valToReturn;
}
/**
* Called prior to the attribute changing. Subclasses need not call super. If a field exception
* is thrown, the attribute change will fail. The new value is different to the old value.
*/
protected void preFirstNameChange (String newFirstName) throws FieldException
{
}
/**
* Called after the attribute changes.
* If a field exception is thrown, the value is still changed, however it
* may lead to the TX being rolled back
*/
protected void postFirstNameChange () throws FieldException
{
}
public FieldWriteability getWriteability_FirstName ()
{
return getFieldWritabilityUtil (FieldWriteability.TRUE);
}
/**
* Set the attribute FirstName. Checks to ensure a new value
* has been supplied. If so, marks the field as altered and sets the attribute.
*/
public void setFirstName (String newFirstName) throws FieldException
{
boolean oldAndNewIdentical = HELPER_FirstName.compare (_FirstName, newFirstName);
try
{
for (CompanyBehaviourDecorator bhd : Company_BehaviourDecorators)
{
newFirstName = bhd.setFirstName ((Company)this, newFirstName);
oldAndNewIdentical = HELPER_FirstName.compare (_FirstName, newFirstName);
}
if (FIELD_FirstName_Validators.length > 0)
{
Object newFirstNameObj = HELPER_FirstName.toObject (newFirstName);
if (newFirstNameObj != null)
{
int loopMax = FIELD_FirstName_Validators.length;
Map metadata = (Map)ATTRIBUTES_METADATA_Company.get (FIELD_FirstName);
for (int v = 0 ; v < loopMax ; ++v)
{
FIELD_FirstName_Validators[v].checkAttribute (this, FIELD_FirstName, metadata, newFirstNameObj);
}
}
}
}
catch (FieldException e)
{
if (!oldAndNewIdentical)
{
e.setWouldModify ();
}
throw e;
}
if (!oldAndNewIdentical)
{
assertValid();
Debug.assertion (getWriteability_FirstName () != FieldWriteability.FALSE, "Field FirstName is not writeable");
preFirstNameChange (newFirstName);
markFieldChange (FIELD_FirstName);
_FirstName = newFirstName;
postFieldChange (FIELD_FirstName);
postFirstNameChange ();
}
}
/**
* Get the attribute LastName
*/
public String getLastName ()
{
assertValid();
String valToReturn = _LastName;
for (CompanyBehaviourDecorator bhd : Company_BehaviourDecorators)
{
valToReturn = bhd.getLastName ((Company)this, valToReturn);
}
return valToReturn;
}
/**
* Called prior to the attribute changing. Subclasses need not call super. If a field exception
* is thrown, the attribute change will fail. The new value is different to the old value.
*/
protected void preLastNameChange (String newLastName) throws FieldException
{
}
/**
* Called after the attribute changes.
* If a field exception is thrown, the value is still changed, however it
* may lead to the TX being rolled back
*/
protected void postLastNameChange () throws FieldException
{
}
public FieldWriteability getWriteability_LastName ()
{
return getFieldWritabilityUtil (FieldWriteability.TRUE);
}
/**
* Set the attribute LastName. Checks to ensure a new value
* has been supplied. If so, marks the field as altered and sets the attribute.
*/
public void setLastName (String newLastName) throws FieldException
{
boolean oldAndNewIdentical = HELPER_LastName.compare (_LastName, newLastName);
try
{
for (CompanyBehaviourDecorator bhd : Company_BehaviourDecorators)
{
newLastName = bhd.setLastName ((Company)this, newLastName);
oldAndNewIdentical = HELPER_LastName.compare (_LastName, newLastName);
}
if (FIELD_LastName_Validators.length > 0)
{
Object newLastNameObj = HELPER_LastName.toObject (newLastName);
if (newLastNameObj != null)
{
int loopMax = FIELD_LastName_Validators.length;
Map metadata = (Map)ATTRIBUTES_METADATA_Company.get (FIELD_LastName);
for (int v = 0 ; v < loopMax ; ++v)
{
FIELD_LastName_Validators[v].checkAttribute (this, FIELD_LastName, metadata, newLastNameObj);
}
}
}
}
catch (FieldException e)
{
if (!oldAndNewIdentical)
{
e.setWouldModify ();
}
throw e;
}
if (!oldAndNewIdentical)
{
assertValid();
Debug.assertion (getWriteability_LastName () != FieldWriteability.FALSE, "Field LastName is not writeable");
preLastNameChange (newLastName);
markFieldChange (FIELD_LastName);
_LastName = newLastName;
postFieldChange (FIELD_LastName);
postLastNameChange ();
}
}
/**
* Get the attribute RoleType
*/
public RoleType getRoleType ()
{
assertValid();
RoleType valToReturn = _RoleType;
for (CompanyBehaviourDecorator bhd : Company_BehaviourDecorators)
{
valToReturn = bhd.getRoleType ((Company)this, valToReturn);
}
return valToReturn;
}
/**
* Called prior to the attribute changing. Subclasses need not call super. If a field exception
* is thrown, the attribute change will fail. The new value is different to the old value.
*/
protected void preRoleTypeChange (RoleType newRoleType) throws FieldException
{
}
/**
* Called after the attribute changes.
* If a field exception is thrown, the value is still changed, however it
* may lead to the TX being rolled back
*/
protected void postRoleTypeChange () throws FieldException
{
}
public FieldWriteability getWriteability_RoleType ()
{
return getFieldWritabilityUtil (FieldWriteability.TRUE);
}
/**
* Set the attribute RoleType. Checks to ensure a new value
* has been supplied. If so, marks the field as altered and sets the attribute.
*/
public void setRoleType (RoleType newRoleType) throws FieldException
{
boolean oldAndNewIdentical = HELPER_RoleType.compare (_RoleType, newRoleType);
try
{
for (CompanyBehaviourDecorator bhd : Company_BehaviourDecorators)
{
newRoleType = bhd.setRoleType ((Company)this, newRoleType);
oldAndNewIdentical = HELPER_RoleType.compare (_RoleType, newRoleType);
}
if (FIELD_RoleType_Validators.length > 0)
{
Object newRoleTypeObj = HELPER_RoleType.toObject (newRoleType);
if (newRoleTypeObj != null)
{
int loopMax = FIELD_RoleType_Validators.length;
Map metadata = (Map)ATTRIBUTES_METADATA_Company.get (FIELD_RoleType);
for (int v = 0 ; v < loopMax ; ++v)
{
FIELD_RoleType_Validators[v].checkAttribute (this, FIELD_RoleType, metadata, newRoleTypeObj);
}
}
}
}
catch (FieldException e)
{
if (!oldAndNewIdentical)
{
e.setWouldModify ();
}
throw e;
}
if (!oldAndNewIdentical)
{
assertValid();
Debug.assertion (getWriteability_RoleType () != FieldWriteability.FALSE, "Field RoleType is not writeable");
preRoleTypeChange (newRoleType);
markFieldChange (FIELD_RoleType);
_RoleType = newRoleType;
postFieldChange (FIELD_RoleType);
postRoleTypeChange ();
}
}
/** /**
...@@ -2230,6 +2717,10 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -2230,6 +2717,10 @@ public abstract class BaseCompany extends BaseBusinessClass
_PostCode = sourceCompany._PostCode; _PostCode = sourceCompany._PostCode;
_City = sourceCompany._City; _City = sourceCompany._City;
_HasClientSupport = sourceCompany._HasClientSupport; _HasClientSupport = sourceCompany._HasClientSupport;
_UserEmail = sourceCompany._UserEmail;
_FirstName = sourceCompany._FirstName;
_LastName = sourceCompany._LastName;
_RoleType = sourceCompany._RoleType;
} }
} }
...@@ -2297,6 +2788,10 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -2297,6 +2788,10 @@ public abstract class BaseCompany extends BaseBusinessClass
_PostCode = (String)(HELPER_PostCode.readExternal (_PostCode, vals.get(FIELD_PostCode))); // _PostCode = (String)(HELPER_PostCode.readExternal (_PostCode, vals.get(FIELD_PostCode))); //
_City = (String)(HELPER_City.readExternal (_City, vals.get(FIELD_City))); // _City = (String)(HELPER_City.readExternal (_City, vals.get(FIELD_City))); //
_HasClientSupport = (Boolean)(HELPER_HasClientSupport.readExternal (_HasClientSupport, vals.get(FIELD_HasClientSupport))); // _HasClientSupport = (Boolean)(HELPER_HasClientSupport.readExternal (_HasClientSupport, vals.get(FIELD_HasClientSupport))); //
_UserEmail = (String)(HELPER_UserEmail.readExternal (_UserEmail, vals.get(FIELD_UserEmail))); //
_FirstName = (String)(HELPER_FirstName.readExternal (_FirstName, vals.get(FIELD_FirstName))); //
_LastName = (String)(HELPER_LastName.readExternal (_LastName, vals.get(FIELD_LastName))); //
_RoleType = (RoleType)(HELPER_RoleType.readExternal (_RoleType, vals.get(FIELD_RoleType))); //
_AddedByUser.readExternalData(vals.get(SINGLEREFERENCE_AddedByUser)); _AddedByUser.readExternalData(vals.get(SINGLEREFERENCE_AddedByUser));
_Users.readExternalData(vals.get(MULTIPLEREFERENCE_Users)); _Users.readExternalData(vals.get(MULTIPLEREFERENCE_Users));
_Clients.readExternalData(vals.get(MULTIPLEREFERENCE_Clients)); _Clients.readExternalData(vals.get(MULTIPLEREFERENCE_Clients));
...@@ -2321,6 +2816,10 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -2321,6 +2816,10 @@ public abstract class BaseCompany extends BaseBusinessClass
vals.put (FIELD_PostCode, HELPER_PostCode.writeExternal (_PostCode)); vals.put (FIELD_PostCode, HELPER_PostCode.writeExternal (_PostCode));
vals.put (FIELD_City, HELPER_City.writeExternal (_City)); vals.put (FIELD_City, HELPER_City.writeExternal (_City));
vals.put (FIELD_HasClientSupport, HELPER_HasClientSupport.writeExternal (_HasClientSupport)); vals.put (FIELD_HasClientSupport, HELPER_HasClientSupport.writeExternal (_HasClientSupport));
vals.put (FIELD_UserEmail, HELPER_UserEmail.writeExternal (_UserEmail));
vals.put (FIELD_FirstName, HELPER_FirstName.writeExternal (_FirstName));
vals.put (FIELD_LastName, HELPER_LastName.writeExternal (_LastName));
vals.put (FIELD_RoleType, HELPER_RoleType.writeExternal (_RoleType));
vals.put (SINGLEREFERENCE_AddedByUser, _AddedByUser.writeExternalData()); vals.put (SINGLEREFERENCE_AddedByUser, _AddedByUser.writeExternalData());
vals.put (MULTIPLEREFERENCE_Users, _Users.writeExternalData()); vals.put (MULTIPLEREFERENCE_Users, _Users.writeExternalData());
vals.put (MULTIPLEREFERENCE_Clients, _Clients.writeExternalData()); vals.put (MULTIPLEREFERENCE_Clients, _Clients.writeExternalData());
...@@ -2394,6 +2893,10 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -2394,6 +2893,10 @@ public abstract class BaseCompany extends BaseBusinessClass
{ {
super.visitAttributes (visitor); super.visitAttributes (visitor);
visitor.visitField(this, FIELD_UserEmail, HELPER_UserEmail.toObject(getUserEmail()));
visitor.visitField(this, FIELD_FirstName, HELPER_FirstName.toObject(getFirstName()));
visitor.visitField(this, FIELD_LastName, HELPER_LastName.toObject(getLastName()));
visitor.visitField(this, FIELD_RoleType, HELPER_RoleType.toObject(getRoleType()));
} }
...@@ -2676,6 +3179,22 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -2676,6 +3179,22 @@ public abstract class BaseCompany extends BaseBusinessClass
{ {
return HELPER_HasClientSupport.toObject (getHasClientSupport ()); return HELPER_HasClientSupport.toObject (getHasClientSupport ());
} }
else if (attribName.equals (FIELD_UserEmail))
{
return HELPER_UserEmail.toObject (getUserEmail ());
}
else if (attribName.equals (FIELD_FirstName))
{
return HELPER_FirstName.toObject (getFirstName ());
}
else if (attribName.equals (FIELD_LastName))
{
return HELPER_LastName.toObject (getLastName ());
}
else if (attribName.equals (FIELD_RoleType))
{
return HELPER_RoleType.toObject (getRoleType ());
}
else else
{ {
return super.getAttribute (attribName); return super.getAttribute (attribName);
...@@ -2729,6 +3248,22 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -2729,6 +3248,22 @@ public abstract class BaseCompany extends BaseBusinessClass
{ {
return HELPER_HasClientSupport; return HELPER_HasClientSupport;
} }
else if (attribName.equals (FIELD_UserEmail))
{
return HELPER_UserEmail;
}
else if (attribName.equals (FIELD_FirstName))
{
return HELPER_FirstName;
}
else if (attribName.equals (FIELD_LastName))
{
return HELPER_LastName;
}
else if (attribName.equals (FIELD_RoleType))
{
return HELPER_RoleType;
}
else else
{ {
return super.getAttributeHelper (attribName); return super.getAttributeHelper (attribName);
...@@ -2782,6 +3317,22 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -2782,6 +3317,22 @@ public abstract class BaseCompany extends BaseBusinessClass
{ {
setHasClientSupport ((Boolean)(HELPER_HasClientSupport.fromObject (_HasClientSupport, attribValue))); setHasClientSupport ((Boolean)(HELPER_HasClientSupport.fromObject (_HasClientSupport, attribValue)));
} }
else if (attribName.equals (FIELD_UserEmail))
{
setUserEmail ((String)(HELPER_UserEmail.fromObject (_UserEmail, attribValue)));
}
else if (attribName.equals (FIELD_FirstName))
{
setFirstName ((String)(HELPER_FirstName.fromObject (_FirstName, attribValue)));
}
else if (attribName.equals (FIELD_LastName))
{
setLastName ((String)(HELPER_LastName.fromObject (_LastName, attribValue)));
}
else if (attribName.equals (FIELD_RoleType))
{
setRoleType ((RoleType)(HELPER_RoleType.fromObject (_RoleType, attribValue)));
}
else else
{ {
super.setAttribute (attribName, attribValue); super.setAttribute (attribName, attribValue);
...@@ -2854,6 +3405,22 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -2854,6 +3405,22 @@ public abstract class BaseCompany extends BaseBusinessClass
{ {
return getWriteability_AddedByUser (); return getWriteability_AddedByUser ();
} }
else if (fieldName.equals (FIELD_UserEmail))
{
return getWriteability_UserEmail ();
}
else if (fieldName.equals (FIELD_FirstName))
{
return getWriteability_FirstName ();
}
else if (fieldName.equals (FIELD_LastName))
{
return getWriteability_LastName ();
}
else if (fieldName.equals (FIELD_RoleType))
{
return getWriteability_RoleType ();
}
else else
{ {
return super.getWriteable (fieldName); return super.getWriteable (fieldName);
...@@ -2914,6 +3481,26 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -2914,6 +3481,26 @@ public abstract class BaseCompany extends BaseBusinessClass
fields.add (FIELD_HasClientSupport); fields.add (FIELD_HasClientSupport);
} }
if (getWriteability_UserEmail () != FieldWriteability.TRUE)
{
fields.add (FIELD_UserEmail);
}
if (getWriteability_FirstName () != FieldWriteability.TRUE)
{
fields.add (FIELD_FirstName);
}
if (getWriteability_LastName () != FieldWriteability.TRUE)
{
fields.add (FIELD_LastName);
}
if (getWriteability_RoleType () != FieldWriteability.TRUE)
{
fields.add (FIELD_RoleType);
}
super.putUnwriteable (fields); super.putUnwriteable (fields);
} }
...@@ -2933,6 +3520,10 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -2933,6 +3520,10 @@ public abstract class BaseCompany extends BaseBusinessClass
result.add(HELPER_PostCode.getAttribObject (getClass (), _PostCode, false, FIELD_PostCode)); result.add(HELPER_PostCode.getAttribObject (getClass (), _PostCode, false, FIELD_PostCode));
result.add(HELPER_City.getAttribObject (getClass (), _City, false, FIELD_City)); result.add(HELPER_City.getAttribObject (getClass (), _City, false, FIELD_City));
result.add(HELPER_HasClientSupport.getAttribObject (getClass (), _HasClientSupport, false, FIELD_HasClientSupport)); result.add(HELPER_HasClientSupport.getAttribObject (getClass (), _HasClientSupport, false, FIELD_HasClientSupport));
result.add(HELPER_UserEmail.getAttribObject (getClass (), _UserEmail, false, FIELD_UserEmail));
result.add(HELPER_FirstName.getAttribObject (getClass (), _FirstName, false, FIELD_FirstName));
result.add(HELPER_LastName.getAttribObject (getClass (), _LastName, false, FIELD_LastName));
result.add(HELPER_RoleType.getAttribObject (getClass (), _RoleType, false, FIELD_RoleType));
return result; return result;
} }
...@@ -3163,6 +3754,78 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -3163,6 +3754,78 @@ public abstract class BaseCompany extends BaseBusinessClass
return newHasClientSupport; return newHasClientSupport;
} }
/**
* Get the attribute UserEmail
*/
public String getUserEmail (Company obj, String original)
{
return original;
}
/**
* Change the value set for attribute UserEmail.
* May modify the field beforehand
* Occurs before validation.
*/
public String setUserEmail (Company obj, String newUserEmail) throws FieldException
{
return newUserEmail;
}
/**
* Get the attribute FirstName
*/
public String getFirstName (Company obj, String original)
{
return original;
}
/**
* Change the value set for attribute FirstName.
* May modify the field beforehand
* Occurs before validation.
*/
public String setFirstName (Company obj, String newFirstName) throws FieldException
{
return newFirstName;
}
/**
* Get the attribute LastName
*/
public String getLastName (Company obj, String original)
{
return original;
}
/**
* Change the value set for attribute LastName.
* May modify the field beforehand
* Occurs before validation.
*/
public String setLastName (Company obj, String newLastName) throws FieldException
{
return newLastName;
}
/**
* Get the attribute RoleType
*/
public RoleType getRoleType (Company obj, RoleType original)
{
return original;
}
/**
* Change the value set for attribute RoleType.
* May modify the field beforehand
* Occurs before validation.
*/
public RoleType setRoleType (Company obj, RoleType newRoleType) throws FieldException
{
return newRoleType;
}
} }
...@@ -3223,6 +3886,22 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -3223,6 +3886,22 @@ public abstract class BaseCompany extends BaseBusinessClass
{ {
return toClients (); return toClients ();
} }
if (name.equals ("UserEmail"))
{
return toUserEmail ();
}
if (name.equals ("FirstName"))
{
return toFirstName ();
}
if (name.equals ("LastName"))
{
return toLastName ();
}
if (name.equals ("RoleType"))
{
return toRoleType ();
}
if (name.equals ("CompanyName")) if (name.equals ("CompanyName"))
{ {
return toCompanyName (); return toCompanyName ();
...@@ -3273,6 +3952,14 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -3273,6 +3952,14 @@ public abstract class BaseCompany extends BaseBusinessClass
} }
public PipeLine<From, String> toUserEmail () { return pipe(new ORMAttributePipe<Me, String>(FIELD_UserEmail)); }
public PipeLine<From, String> toFirstName () { return pipe(new ORMAttributePipe<Me, String>(FIELD_FirstName)); }
public PipeLine<From, String> toLastName () { return pipe(new ORMAttributePipe<Me, String>(FIELD_LastName)); }
public PipeLine<From, RoleType> toRoleType () { return pipe(new ORMAttributePipe<Me, RoleType>(FIELD_RoleType)); }
public PipeLine<From, String> toCompanyName () { return pipe(new ORMAttributePipe<Me, String>(FIELD_CompanyName)); } public PipeLine<From, String> toCompanyName () { return pipe(new ORMAttributePipe<Me, String>(FIELD_CompanyName)); }
public PipeLine<From, HiringTeamType> toHiringTeamType () { return pipe(new ORMAttributePipe<Me, HiringTeamType>(FIELD_HiringTeamType)); } public PipeLine<From, HiringTeamType> toHiringTeamType () { return pipe(new ORMAttributePipe<Me, HiringTeamType>(FIELD_HiringTeamType)); }
...@@ -3316,6 +4003,26 @@ public abstract class BaseCompany extends BaseBusinessClass ...@@ -3316,6 +4003,26 @@ public abstract class BaseCompany extends BaseBusinessClass
public boolean isTransientAttrib(String attribName) public boolean isTransientAttrib(String attribName)
{ {
if(CollectionUtils.equals(attribName, "UserEmail"))
{
return true;
}
if(CollectionUtils.equals(attribName, "FirstName"))
{
return true;
}
if(CollectionUtils.equals(attribName, "LastName"))
{
return true;
}
if(CollectionUtils.equals(attribName, "RoleType"))
{
return true;
}
return super.isTransientAttrib(attribName); return super.isTransientAttrib(attribName);
} }
......
...@@ -11,6 +11,11 @@ ...@@ -11,6 +11,11 @@
<MULTIPLEREFERENCE name="Users" type="CompanyUser" backreferenceName="Company"/> <MULTIPLEREFERENCE name="Users" type="CompanyUser" backreferenceName="Company"/>
<MULTIPLEREFERENCE name="Clients" type="Client" backreferenceName="Company"/> <MULTIPLEREFERENCE name="Clients" type="Client" backreferenceName="Company"/>
<TRANSIENT name="UserEmail" type="String" validators="Email" />
<TRANSIENT name="FirstName" type="String"/>
<TRANSIENT name="LastName" type="String"/>
<TRANSIENT name="RoleType" type="RoleType" defaultValue="RoleType.STANDARD" attribHelper="EnumeratedAttributeHelper"/>
<TABLE name="tl_company" tablePrefix="object"> <TABLE name="tl_company" tablePrefix="object">
<ATTRIB name="CompanyName" type="String" dbcol="company_name" mandatory="true" length="100" /> <ATTRIB name="CompanyName" type="String" dbcol="company_name" mandatory="true" length="100" />
......
...@@ -185,7 +185,7 @@ public class Utils ...@@ -185,7 +185,7 @@ public class Utils
} }
public static List<CompanyUser> getUsersSorted(CompanyUser[] users, UserSortOption userSortOption) public static List<CompanyUser> getUsersSorted(Set<CompanyUser> users, UserSortOption userSortOption)
{ {
ObjectTransform transform = Client.pipesClient().toObjectCreated(); ObjectTransform transform = Client.pipesClient().toObjectCreated();
Comparator comparator = CollectionUtils.DEFAULT_COMPARATOR; Comparator comparator = CollectionUtils.DEFAULT_COMPARATOR;
...@@ -201,7 +201,7 @@ public class Utils ...@@ -201,7 +201,7 @@ public class Utils
comparator = CollectionUtils.reverse(CollectionUtils.CASE_INSENSITIVE_COMPARATOR); comparator = CollectionUtils.reverse(CollectionUtils.CASE_INSENSITIVE_COMPARATOR);
} }
return ObjstoreUtils.sort( Arrays.asList(users), return ObjstoreUtils.sort( users,
new ObjectTransform[]{transform}, new ObjectTransform[]{transform},
new Comparator[]{comparator}); new Comparator[]{comparator});
} }
......
...@@ -38,6 +38,10 @@ ...@@ -38,6 +38,10 @@
<AccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="AccountCreatedMail"/> <AccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="AccountCreatedMail"/>
<InvitationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="InvitationMail"/> <InvitationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="InvitationMail"/>
</FORM> </FORM>
<FORM name="*.sendUserInvites" factory="Participant" class="performa.form.SendUserInvitationFP">
<AccountCreatedEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="AccountCreatedMail"/>
<InvitationEmailer factory="Participant" class="oneit.email.ConfigurableArticleTemplateEmailer" templateShortcut="InvitationMail"/>
</FORM>
<FORM name="*.saveUserDetails" factory="Participant" class="performa.form.SaveUserDetailsFP"/> <FORM name="*.saveUserDetails" factory="Participant" class="performa.form.SaveUserDetailsFP"/>
</NODE> </NODE>
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
<div class="form-group text-left"> <div class="form-group text-left">
<label>Company</label> <label>Company</label>
<% <%
if(company.getIsVerified()==Boolean.TRUE) if(company.getIsVerified()==Boolean.TRUE || !CollectionUtils.equals(company.getAddedByUser(), companyUser))
{ {
%> %>
<oneit:ormInput obj="<%= company %>" type="text" attributeName="CompanyName" cssClass="form-control" readonly="true" required="true"/> <oneit:ormInput obj="<%= company %>" type="text" attributeName="CompanyName" cssClass="form-control" readonly="true" required="true"/>
......
...@@ -6,10 +6,21 @@ ...@@ -6,10 +6,21 @@
<oneit:dynIncluded> <oneit:dynIncluded>
<% <%
// String nextPage = WebUtils.getSamePageInRenderMode(request, WebUtils.EDIT_CLIENT); String currentPage = WebUtils.getArticleByShortCut(process.getTransaction(), WebUtils.MANAGE_USERS).getLink(request);
String usersPage = WebUtils.getSamePageInRenderMode(request, "Page"); String usersPage = WebUtils.getSamePageInRenderMode(request, "Page");
UserSortOption userSortOpt = (UserSortOption) process.getAttribute("UserSortOption"); ObjectTransaction objTran = process.getTransaction ();
CompanyUser[] companyUsers = (CompanyUser[]) process.getAttribute("CompanyUsers"); SecUser secUser = SecUser.getTXUser(objTran);
Company company = (Company) process.getAttribute("Company");
CompanyUser comUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
if(company==null)
{
company = comUser.getCompany();
process.setAttribute("Company", company);
}
UserSortOption userSortOpt = (UserSortOption) process.getAttribute("UserSortOption");
Set<CompanyUser> companyUsers = (Set<CompanyUser>) process.getAttribute("CompanyUsers");
if( request.getParameter("UserSortOption") != null) if( request.getParameter("UserSortOption") != null)
{ {
...@@ -23,9 +34,7 @@ ...@@ -23,9 +34,7 @@
if(companyUsers == null) if(companyUsers == null)
{ {
companyUsers = CompanyUser.SearchByAllCompanyUsers() companyUsers = company.getUsersSet();
.byReferenceExtension(CompanyUser.REFERENCE_CompanyUser)
.search(transaction);
process.setAttribute("CompanyUsers", companyUsers); process.setAttribute("CompanyUsers", companyUsers);
} }
...@@ -136,25 +145,26 @@ ...@@ -136,25 +145,26 @@
</div> </div>
<div class="form-group"> <div class="form-group">
<label><oneit:label GUIName="Email Address" /></label> <label><oneit:label GUIName="Email Address" /></label>
<input type="text" name="" class="form-control" /> <oneit:ormInput obj="<%= company %>" type="text" attributeName="UserEmail" cssClass="form-control" style="text-transform: lowercase"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label><oneit:label GUIName="First Name" /></label> <label><oneit:label GUIName="First Name" /></label>
<input type="text" name="" class="form-control" /> <oneit:ormInput obj="<%= company %>" type="text" attributeName="FirstName" cssClass="form-control"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label><oneit:label GUIName="Last Name" /></label> <label><oneit:label GUIName="Last Name" /></label>
<input type="text" name="" class="form-control" /> <oneit:ormInput obj="<%= company %>" type="text" attributeName="FirstName" cssClass="form-control"/>
</div> </div>
<div class="form-group"> <div class="form-group">
<label><oneit:label GUIName="Role" /></label> <label><oneit:label GUIName="Role" /></label>
<select class="form-control"> <oneit:ormEnum obj="<%= company %>" attributeName="RoleType" cssClass="form-control"/>
<option>Admin</option>
<option>Standard</option>
</select>
</div> </div>
<div class="invite-btn"> <div class="invite-btn">
<input type="button" name="" class="btn btn-invite" value="Invite" /> <oneit:button value="Invite" name="sendUserInvites" cssClass="btn btn-invite"
requestAttribs="<%= CollectionUtils.mapEntry("nextPage", currentPage)
.mapEntry ("restartProcess", Boolean.TRUE)
.mapEntry(NotificationUtils.NOTIFICATION_MSG_PARAM, "invitationSent")
.toMap() %>" />
</div> </div>
</div> </div>
</div> </div>
......
...@@ -25,5 +25,9 @@ Client.ContactSurname = Contact Last Name ...@@ -25,5 +25,9 @@ Client.ContactSurname = Contact Last Name
Client.ClientLogo = Client Logo Client.ClientLogo = Client Logo
Client.State = State or Province Client.State = State or Province
Company.TimeZone = Company.TimeZone = Time zone
Company.HasClientSupport = We help clients with hiring Company.HasClientSupport = We help clients with hiring
\ No newline at end of file Company.UserEmail = Email Address
Company.FirstName = First Name
Company.LastName = Last Name
Company.RoleType = Role
...@@ -2,4 +2,5 @@ ...@@ -2,4 +2,5 @@
#exceedMaxShortlisted = Selected number of applications exceed maximum shortlist application count #exceedMaxShortlisted = Selected number of applications exceed maximum shortlist application count
#saveTemplateFirst = Please save template first, before proceeding to the next step #saveTemplateFirst = Please save template first, before proceeding to the next step
#passwordNotMatch = The password does not match. Please try again. #passwordNotMatch = The password does not match. Please try again.
#resetPasswordEmailSent = A password rest email has been sent to you. Please check your email. #resetPasswordEmailSent = A password rest email has been sent to you. Please check your email.
\ No newline at end of file #invitationSent = Your invitation has been successfully sent.
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