Commit 0088b858 by Nilu

intercom custom attribute update

parent ed6e3844
......@@ -23,6 +23,7 @@
<column name="city" type="String" nullable="true" length="100"/>
<column name="state" type="String" nullable="true" length="200"/>
<column name="country" type="String" nullable="true" length="200"/>
<column name="manually_closed" type="Boolean" nullable="true"/>
<column name="level_id" type="Long" length="11" nullable="true"/>
<column name="client_id" type="Long" length="11" nullable="true"/>
<column name="company_user_id" type="Long" length="11" nullable="true"/>
......
......@@ -23,6 +23,7 @@ CREATE TABLE tl_job (
city varchar(100) NULL,
state varchar(200) NULL,
country varchar(200) NULL,
manually_closed char(1) NULL,
level_id numeric(12) NULL,
client_id numeric(12) NULL,
company_user_id numeric(12) NULL,
......
......@@ -24,6 +24,7 @@ CREATE TABLE tl_job (
city varchar2(100) NULL,
state varchar2(200) NULL,
country varchar2(200) NULL,
manually_closed char(1) NULL,
level_id number(12) NULL,
client_id number(12) NULL,
company_user_id number(12) NULL,
......
......@@ -24,6 +24,7 @@ CREATE TABLE tl_job (
city varchar(100) NULL,
state varchar(200) NULL,
country varchar(200) NULL,
manually_closed char(1) NULL,
level_id numeric(12) NULL,
client_id numeric(12) NULL,
company_user_id numeric(12) NULL,
......
package performa.batch;
import java.util.Set;
import oneit.appservices.batch.ORMBatch;
import oneit.logging.*;
import oneit.objstore.ObjectTransaction;
......@@ -7,7 +8,9 @@ import oneit.objstore.StorageException;
import oneit.objstore.rdbms.filters.LessThanFilter;
import oneit.utils.DateDiff;
import oneit.utils.parsers.FieldException;
import performa.intercom.utils.IntercomUtils;
import performa.orm.Job;
import performa.orm.Company;
import performa.orm.types.JobStatus;
......@@ -27,8 +30,17 @@ public class CloseJobBatch extends ORMBatch
for (Job job : expiringJobs)
{
job.setJobStatus(JobStatus.COMPLETE);
job.setIsManuallyClosed(Boolean.FALSE);
LogMgr.log(CLOSE_JOB_BATCH, LogLevel.DEBUG2, "Setting Job Status to Closed in job : ", job);
}
// Update closed job details to intercom
Set<Company> companies = Job.pipesJob(expiringJobs).toCompanyUser().toCompany().uniqueVals();
for (Company company : companies)
{
IntercomUtils.updateCompany(company);
}
}
}
\ No newline at end of file
......@@ -10,6 +10,7 @@ import oneit.objstore.StorageException;
import oneit.objstore.parser.BusinessObjectParser;
import oneit.objstore.rdbms.filters.EqualsFilter;
import oneit.objstore.utils.ObjstoreUtils;
import oneit.security.SecUser;
import oneit.servlets.forms.SubmissionDetails;
import oneit.servlets.forms.SuccessfulResult;
import oneit.servlets.process.ORMProcessState;
......@@ -17,6 +18,8 @@ import oneit.servlets.process.SaveFP;
import oneit.utils.BusinessException;
import oneit.utils.filter.CollectionFilter;
import oneit.utils.filter.Filter;
import performa.intercom.utils.IntercomUtils;
import performa.orm.CompanyUser;
import performa.orm.Job;
import performa.orm.JobApplication;
import performa.orm.types.AppProcessOption;
......@@ -62,6 +65,18 @@ public class BulkUpdateFP extends SaveFP
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In BulkUpdateFP Job Application Status successfully changed : ", application );
}
// restarting process as custom attributes needs to be updated to intercom
completeProcessRestartAndRestoreAttribs(process, request);
SecUser secUser = SecUser.getTXUser(process.getTransaction());
CompanyUser companyUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
// Update company in intercom
if(companyUser.getCompany() != null)
{
IntercomUtils.updateCompany(companyUser.getCompany());
}
return super.processForm(process, submission, params);
}
}
......@@ -5,11 +5,14 @@ import javax.servlet.http.HttpServletRequest;
import oneit.logging.LogLevel;
import oneit.logging.LogMgr;
import oneit.objstore.StorageException;
import oneit.security.SecUser;
import oneit.servlets.forms.SubmissionDetails;
import oneit.servlets.forms.SuccessfulResult;
import oneit.servlets.process.ORMProcessState;
import oneit.servlets.process.SaveFP;
import oneit.utils.BusinessException;
import performa.intercom.utils.IntercomUtils;
import performa.orm.CompanyUser;
import performa.orm.JobApplication;
import performa.orm.types.AppProcessOption;
import performa.orm.types.ApplicationStatus;
......@@ -35,6 +38,18 @@ public class ChangeApplicationStatusFP extends SaveFP
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING1,"In ChangeApplicationStatusFP Job Application Status successfully changed : ", jobApplication );
// restarting process as custom attributes needs to be updated to intercom
completeProcessRestartAndRestoreAttribs(process, request);
SecUser secUser = SecUser.getTXUser(process.getTransaction());
CompanyUser companyUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
// Update company in intercom
if(companyUser.getCompany() != null)
{
IntercomUtils.updateCompany(companyUser.getCompany());
}
return super.processForm(process, submission, params);
}
}
\ No newline at end of file
......@@ -6,9 +6,12 @@ import javax.servlet.http.HttpServletRequest;
import oneit.logging.*;
import oneit.objstore.StorageException;
import oneit.objstore.parser.BusinessObjectParser;
import oneit.security.SecUser;
import oneit.servlets.forms.*;
import oneit.servlets.process.*;
import static oneit.servlets.process.SaveFP.completeProcessRestartAndRestoreAttribs;
import oneit.utils.*;
import performa.intercom.utils.IntercomUtils;
import performa.orm.*;
import performa.orm.types.ApplicationStatus;
import performa.utils.AnalysisEngine;
......@@ -19,6 +22,7 @@ public class CompleteApplicationFP extends SaveFP
@Override
public SuccessfulResult processForm(ORMProcessState process, SubmissionDetails submission, Map params) throws BusinessException, StorageException
{
HttpServletRequest request = submission.getRequest();
JobApplication jobApplication = (JobApplication) process.getAttribute("JobApplication");
jobApplication.setApplicationStatus(ApplicationStatus.SUBMITTED);
......@@ -26,7 +30,6 @@ public class CompleteApplicationFP extends SaveFP
AnalysisEngine.analyseAnswers(jobApplication.getCandidate(), jobApplication.getJob().getLevel(), jobApplication.getCompletedAnswers());
//TODO: set application status as UNSUITABLE if not scored
if(false)
{
......@@ -35,6 +38,18 @@ public class CompleteApplicationFP extends SaveFP
LogMgr.log(JobApplication.LOG, LogLevel.PROCESSING2, "Job Application Completed", jobApplication);
// restarting process as custom attributes needs to be updated to intercom
completeProcessRestartAndRestoreAttribs(process, request);
SecUser secUser = SecUser.getTXUser(process.getTransaction());
CompanyUser companyUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
// Update company in intercom
if(companyUser.getCompany() != null)
{
IntercomUtils.updateCompany(companyUser.getCompany());
}
return super.processForm(process, submission, params);
}
......
......@@ -33,7 +33,7 @@ public class SaveCompanyFP extends SaveFP
}
// Update company in intercom
IntercomUtils.updateCompany(company, process.getTransaction());
IntercomUtils.updateCompany(company);
return super.processForm(process, submission, params);
}
......
......@@ -53,16 +53,21 @@ public class SaveJobFP extends SaveFP
job.createShortenedURL();
}
// restarting process as job count needs to be updated to intercom
process.completeAndRestart();
if(job.getJobStatus() == JobStatus.COMPLETE)
{
job.setIsManuallyClosed(Boolean.TRUE);
}
// restarting process as custom attributes needs to be updated to intercom
completeProcessRestartAndRestoreAttribs(process, request);
SecUser secUser = SecUser.getTXUser(process.getTransaction());
CompanyUser companyUser = secUser.getExtension(CompanyUser.REFERENCE_CompanyUser);
// Update company in intercom job count details
// Update company in intercom
if(companyUser.getCompany() != null)
{
IntercomUtils.updateCompany(companyUser.getCompany(), process.getTransaction());
IntercomUtils.updateCompany(companyUser.getCompany());
}
return super.processForm(process, submission, params);
......
......@@ -87,7 +87,7 @@ public class SaveUserDetailsFP extends SaveFP
if(intercomUser == null)
{
performa.intercom.resources.Company intercomCompany = IntercomUtils.findOrCreateCompany(companyUser.getCompany(), process.getTransaction());
performa.intercom.resources.Company intercomCompany = IntercomUtils.findOrCreateCompany(companyUser.getCompany());
IntercomUtils.createIntercomUser(secUser, "Hiring Team", intercomCompany, companyUser.getPhone());
}
......
......@@ -136,7 +136,7 @@ public class SendCompanyUserInvitesFP extends SaveFP
// Create company and the first user of it in intercom
performa.intercom.resources.Company intercomCompany = IntercomUtils.findOrCreateCompany(company, objTran);
performa.intercom.resources.Company intercomCompany = IntercomUtils.findOrCreateCompany(company);
IntercomUtils.createIntercomUser(secUser, "Hiring Team", intercomCompany, companyUser.getPhone());
......
package performa.intercom.utils;
import static java.lang.System.currentTimeMillis;
import java.util.Arrays;
import java.util.Collection;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import oneit.logging.LogLevel;
import oneit.logging.LogMgr;
import oneit.logging.LoggingArea;
import oneit.objstore.ObjectTransaction;
import oneit.objstore.StorageException;
import oneit.objstore.rdbms.filters.EqualsFilter;
import oneit.objstore.rdbms.filters.InFilter;
import oneit.objstore.utils.ObjstoreUtils;
import oneit.security.SecUser;
import oneit.utils.CollectionUtils;
import oneit.utils.ObjectTransform;
import oneit.utils.filter.CollectionFilter;
import oneit.utils.filter.Filter;
import performa.intercom.resources.Company;
import performa.intercom.resources.CustomAttribute;
import performa.intercom.resources.Event;
import performa.intercom.resources.Intercom;
import performa.intercom.resources.User;
import performa.orm.Job;
import performa.orm.JobApplication;
import performa.orm.types.ApplicationStatus;
import performa.orm.types.JobStatus;
import performa.utils.Utils;
......@@ -103,21 +110,13 @@ public class IntercomUtils
}
public static Company createIntercomCompany(performa.orm.Company company, ObjectTransaction transaction)
public static Company createIntercomCompany(performa.orm.Company company)
{
try
{
Company intercomCompany = new Company();
intercomCompany.setName(company.getCompanyName());
intercomCompany.setCompanyID(company.getID().toString());
Job[] jobs = Job.searchCompany(transaction, company);
Filter filter = Job.SearchByAll().andJobStatus(new EqualsFilter<>(JobStatus.DRAFT));
Collection draftJobs = CollectionFilter.filter(Arrays.asList(jobs), filter);
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("job-count", jobs != null ? jobs.length : 0));
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("draft-job-count", draftJobs.size()));
setCompanyDetails(intercomCompany, company);
return Company.create(intercomCompany);
}
......@@ -130,6 +129,55 @@ public class IntercomUtils
}
private static void setCompanyDetails(Company intercomCompany, performa.orm.Company company) throws StorageException
{
intercomCompany.setName(company.getCompanyName());
intercomCompany.setCompanyID(company.getID().toString());
// job related custom attributes
Job[] jobs = Job.searchCompany(company.getTransaction(), company);
Filter draftFilter = Job.SearchByAll().andJobStatus(new EqualsFilter<>(JobStatus.DRAFT));
Collection draftJobs = CollectionFilter.filter(Arrays.asList(jobs), draftFilter);
Filter filledFilter = Job.SearchByAll().andJobStatus(new EqualsFilter<>(JobStatus.FILLED));
Collection filledJobs = CollectionFilter.filter(Arrays.asList(jobs), filledFilter);
Filter openFilter = Job.SearchByAll().andJobStatus(new EqualsFilter<>(JobStatus.OPEN));
Collection openJobs = CollectionFilter.filter(Arrays.asList(jobs), openFilter);
Filter closedFilter = Job.SearchByAll().andJobStatus(new EqualsFilter<>(JobStatus.COMPLETE));
Collection closedJobs = CollectionFilter.filter(Arrays.asList(jobs), closedFilter);
Filter manuallyFilter = Job.SearchByAll().andIsManuallyClosed(new EqualsFilter<>(Boolean.TRUE));
Collection manuallyClosed = CollectionFilter.filter(closedJobs, manuallyFilter);
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("job-count", jobs != null ? jobs.length : 0));
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("draft-job-count", draftJobs.size()));
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("filled_job_count", filledJobs.size()));
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("open_job_count", openJobs.size()));
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("manually_closed_job_count", manuallyClosed.size()));
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("expired_job_count", closedJobs.size() - manuallyClosed.size()));
// applicant related custom attributes
Filter allApplicantFilter = JobApplication.SearchByAll().andApplicationStatus(new InFilter<>(ApplicationStatus.SUBMITTED, ApplicationStatus.SHORTLISTED, ApplicationStatus.UNSUITABLE));
Collection applicants = Job.pipesJob(jobs).toJobApplications(allApplicantFilter).uniqueVals();
Filter shortlistedFilter = JobApplication.SearchByAll().andApplicationStatus(new EqualsFilter<>(ApplicationStatus.SHORTLISTED));
Collection shortlistedApplicants = CollectionFilter.filter(applicants, shortlistedFilter);
Filter unsuitableFilter = JobApplication.SearchByAll().andApplicationStatus(new EqualsFilter<>(ApplicationStatus.UNSUITABLE));
Collection unsuitableApplicants = CollectionFilter.filter(applicants, unsuitableFilter);
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("total_applicants", applicants.size()));
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("total_shortlisted", shortlistedApplicants.size()));
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("total_unsuitable", unsuitableApplicants.size()));
List<Job> sortedJobs = ObjstoreUtils.sort(Arrays.asList(jobs),
new ObjectTransform[]{Job.pipesJob().toObjectCreated()},
new Comparator[]{CollectionUtils.reverse(CollectionUtils.DEFAULT_COMPARATOR)});
if(sortedJobs.size() > 0)
{
intercomCompany.addCustomAttribute(CustomAttribute.newLongAttribute("recent_job_created_at", sortedJobs.get(0).getObjectCreated().getTime() / 1000));
}
}
public static Company findCompanyByID(performa.orm.Company company)
{
try
......@@ -149,7 +197,7 @@ public class IntercomUtils
}
public static void updateCompany(performa.orm.Company company, ObjectTransaction transaction)
public static void updateCompany(performa.orm.Company company)
{
try
{
......@@ -157,18 +205,11 @@ public class IntercomUtils
if(intercomCompany == null)
{
createIntercomCompany(company, transaction);
createIntercomCompany(company);
}
else
{
intercomCompany.setName(company.getCompanyName());
Job[] jobs = Job.searchCompany(transaction, company);
Filter filter = Job.SearchByAll().andJobStatus(new EqualsFilter<>(JobStatus.DRAFT));
Collection draftJobs = CollectionFilter.filter(Arrays.asList(jobs), filter);
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("job-count", jobs != null ? jobs.length : 0));
intercomCompany.addCustomAttribute(CustomAttribute.newIntegerAttribute("draft-job-count", draftJobs.size()));
setCompanyDetails(intercomCompany, company);
Company.update(intercomCompany);
}
......@@ -181,13 +222,13 @@ public class IntercomUtils
}
public static Company findOrCreateCompany(performa.orm.Company company, ObjectTransaction transaction)
public static Company findOrCreateCompany(performa.orm.Company company)
{
Company intercomCompany = findCompanyByID(company);
if(intercomCompany == null)
{
intercomCompany = createIntercomCompany(company, transaction);
intercomCompany = createIntercomCompany(company);
}
return intercomCompany;
......
......@@ -46,6 +46,7 @@
<ATTRIB name="City" type="String" dbcol="city" length="100"/>
<ATTRIB name="State" type="State" dbcol="state" defaultValue="State.WA" attribHelper="EnumeratedAttributeHelper"/>
<ATTRIB name="Country" type="Countries" dbcol="country" defaultValue="Countries.AU" attribHelper="EnumeratedAttributeHelper"/>
<ATTRIB name="IsManuallyClosed" type="Boolean" dbcol="manually_closed" defaultValue="Boolean.FALSE"/>
<SINGLEREFERENCE name="Level" type="Level" dbcol="level_id" mandatory="false"/>
<SINGLEREFERENCE name="Client" type="Client" dbcol="client_id" backreferenceName="Jobs"/>
......
<?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.RedefineTableOperation">
<tableName factory="String">tl_job</tableName>
<column name="manually_closed" type="Boolean" nullable="true"/>
</NODE>
</NODE>
</OBJECTS>
\ No newline at end of file
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