contractorOnboarding.bpmn20.xml revision 7898f723832b789fd5308fa29a0026051b4d0cbb
<?xml version="1.0" encoding="UTF-8"?>
<definitions id="definitions"
xmlns:activiti="http://activiti.org/bpmn"
xsi:schemaLocation="
<process id="contractorOnboarding" name="Contractor onboarding process">
<startEvent id="start" activiti:initiator="startUserId" >
<extensionElements>
<activiti:formProperty id="userName"
name="Username"
required="true"
type="string" />
<activiti:formProperty id="givenName"
name="First Name"
required="true"
type="string" />
<activiti:formProperty id="sn"
name="Last Name"
required="true"
type="string" />
<activiti:formProperty id="department"
name="Department"
type="string" />
<activiti:formProperty id="jobTitle"
name="Job Title"
type="string" />
<activiti:formProperty id="telephoneNumber"
name="Phone Number"
type="string" />
<activiti:formProperty id="mail"
name="Email"
required="true"
type="string" />
<activiti:formProperty id="startDate"
name="Start Date"
required="true"
type="string" />
<activiti:formProperty id="endDate"
name="End Date"
type="string" />
<activiti:formProperty id="password"
name="Password"
required="true"
type="string" />
<activiti:formProperty id="description"
name="Description"
required="true"
type="string" />
<activiti:formProperty id="provisionToXML"
name="Create in XMLFile"
type="boolean" />
<activiti:formProperty id="_formGenerationTemplate" type="string" default="
<style>
#processDetails fieldset {
margin-top: 0;
}
#processDetails .group-field {
float: left !important;
width: 100%;
}
#processDetails .field label {
text-align: left;
}
#processDetails .field input,#processDetails .field select {
clear: both;
}
#processDetails .field .validation-message {
clear: none !important;
margin-left: 20px !important;
float: left !important;
}
</style>
<h3 class="text-center">Contractor Details</h3>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="userName">{{t "common.user.username"}}</label>
<div class="col-sm-6">
<input class="form-control" type="text" id="userName" name="userName" data-validation-dependents="password" autofocus />
<div class="validation-message"></div>
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="mail">{{t "common.user.emailAddress"}}</label>
<div class="col-sm-6">
<input class="form-control" type="email" id="mail" name="mail" />
<div class="validation-message"></div>
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="userName">{{t "common.user.givenName"}}</label>
<div class="col-sm-6">
<input class="form-control" type="text" id="givenName" name="givenName" data-validation-dependents="password" />
<div class="validation-message"></div>
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="sn">{{t "common.user.familyName"}}</label>
<div class="col-sm-6">
<input class="form-control" type="text" id="sn" name="sn" data-validation-dependents="password" />
<div class="validation-message"></div>
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="telephoneNumber">{{t "common.user.phoneNumber"}}</label>
<div class="col-sm-6">
<input class="form-control" type="text" id="telephoneNumber" name="telephoneNumber" />
</div>
</div>
<div class="group-field-errors well validationRules col-sm-6 col-sm-offset-3" data-for-validator="password passwordConfirm">
<div class="field-rule">
<span class="error"><i class="fa validation-icon"></i></span><span data-for-validator="passwordConfirm">{{t "common.form.validation.confirmationMatchesPassword"}}</span>
</div>
</div>
<div style="clear:both;"></div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="password">{{t "common.user.password"}}</label>
<div class="col-sm-6">
<input class="form-control" type="password" id="password" name="password" data-validation-dependents="passwordConfirm" />
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="passwordConfirm">{{t "common.user.confirmPassword"}}</label>
<div class="col-sm-6">
<input class="form-control" type="password" id="passwordConfirm" name="passwordConfirm" data-validator="passwordConfirm" data-validator-event="keyup change" required/>
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="provisionToXMLprovisionToXML">Provision to XML</label>
<div class="col-sm-6">
<select class="form-control" name="provisionToXML">
<option value="1">Yes</option>
<option value="0">No</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="department">Department</label>
<div class="col-sm-6">
<input class="form-control" type="text" id="department" name="department"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="jobTitle">Job Title</label>
<div class="col-sm-6">
<input class="form-control" type="text" id="jobTitle" name="jobTitle"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="description">Description</label>
<div class="col-sm-6">
<input class="form-control" type="text" id="description" name="description"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="startDate">Start Date</label>
<div class="col-sm-6">
<input class="form-control" type="text" id="startDate" name="startDate"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="endDate">End Date</label>
<div class="col-sm-6">
<input class="form-control" type="text" id="endDate" name="endDate"/>
</div>
</div>
<div style="clear:both;"></div>
<script>
</script>
" />
</extensionElements>
</startEvent>
<sequenceFlow sourceRef="start" targetRef="requestMadeGateway"/>
<exclusiveGateway id="requestMadeGateway" name="Request Made"></exclusiveGateway>
<scriptTask id="decisionPrep" name="Prepare Task" scriptFormat="groovy">
<script><![CDATA[
decisionOptions = [ 'accept' : 'common.form.accept' , 'reject' : 'common.form.reject', '__null' : ' ']
readStartUserFromRepoParams = [_queryId:'for-userName',uid:startUserId]
startUserFromRepo = openidm.query('managed/user', readStartUserFromRepoParams)
execution.setVariable("startUserFromRepo", startUserFromRepo)
execution.setVariable("decisionOptions", decisionOptions)
]]></script>
</scriptTask>
<userTask id="decideApprovalTask" name="Contractor Approval" activiti:candidateGroups="manager">
<extensionElements>
<activiti:formProperty id="decision" name="Decision" type="enum" required="true">
<activiti:value id="accept" name="Accept"></activiti:value>
<activiti:value id="reject" name="Reject"></activiti:value>
</activiti:formProperty>
<activiti:formProperty id="_formGenerationTemplate" type="string" default="
<style>
#taskDetails fieldset {
margin-top: 0;
}
#taskDetails .group-field {
float: left !important;
width: 100%;
}
#taskDetails .field label {
text-align: left;
}
#taskDetails .field input,#taskDetails .field select {
clear: both;
}
#taskDetails .field .validation-message {
clear: none !important;
margin-left: 20px !important;
float: left !important;
}
</style>
<h3 class="text-center">Contractor Details</h3>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="userName">{{t "common.user.username"}}</label>
<div class="col-sm-6">
<input class="form-control" value="{{variables.userName}}" type="text" id="userName" name="userName" data-validation-dependents="password" autofocus />
<div class="validation-message"></div>
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="mail">{{t "common.user.emailAddress"}}</label>
<div class="col-sm-6">
<input value="{{variables.mail}}" class="form-control" type="email" id="mail" name="mail" />
<div class="validation-message"></div>
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="userName">{{t "common.user.givenName"}}</label>
<div class="col-sm-6">
<input class="form-control" value="{{variables.givenName}}" type="text" id="givenName" name="givenName" data-validation-dependents="password" />
<div class="validation-message"></div>
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="sn">{{t "common.user.familyName"}}</label>
<div class="col-sm-6">
<input class="form-control" value="{{variables.sn}}" type="text" id="sn" name="sn" data-validation-dependents="password" />
<div class="validation-message"></div>
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="telephoneNumber">{{t "common.user.phoneNumber"}}</label>
<div class="col-sm-6">
<input class="form-control" value="{{variables.telephoneNumber}}" type="text" id="telephoneNumber" name="telephoneNumber" />
</div>
</div>
{{#if assignee}}
<div class="group-field-errors validationRules well col-sm-6 col-sm-offset-3" data-for-validator="password passwordConfirm">
<div class="field-rule">
<span class="error"><i class="fa validation-icon"></i></span><span data-for-validator="passwordConfirm">{{t "common.form.validation.confirmationMatchesPassword"}}</span>
</div>
</div>
<div style="clear:both;"></div>
{{/if}}
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="password">{{t "common.user.password"}}</label>
<div class="col-sm-6">
<input class="form-control" value="{{variables.password}}" type="password" id="password" name="password" data-validation-dependents="passwordConfirm" />
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="passwordConfirm">{{t "common.user.confirmPassword"}}</label>
<div class="col-sm-6">
<input class="form-control" value="{{variables.password}}" type="password" id="passwordConfirm" name="passwordConfirm" data-validator="passwordConfirm" data-validator-event="keyup change" required/>
<span class="error form-control-feedback"><i class="fa validation-icon"></i></span>
</div>
</div>
<div class="form-group has-feedback">
<label class="col-sm-3 control-label" for="provisionToXMLprovisionToXML">Provision to XML</label>
<div class="col-sm-6">
<select class="form-control" name="provisionToXML">
<option value="1">Yes</option>
<option value="0">No</option>
</select>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="department">Department</label>
<div class="col-sm-6">
<input class="form-control" value="{{variables.department}}" type="text" id="department" name="department"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="jobTitle">Job Title</label>
<div class="col-sm-6">
<input class="form-control" value="{{variables.jobTitle}}" type="text" id="jobTitle" name="jobTitle"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="description">Description</label>
<div class="col-sm-6">
<input class="form-control" type="text" value="{{variables.description}}" id="description" name="description"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="startDate">Start Date</label>
<div class="col-sm-6">
<input class="form-control" type="text" value="{{variables.startDate}}" id="startDate" name="startDate"/>
</div>
</div>
<div class="form-group">
<label class="col-sm-3 control-label" for="endDate">End Date</label>
<div class="col-sm-6">
<input class="form-control" type="text" value="{{variables.endDate}}" id="endDate" name="endDate"/>
</div>
</div>
<div class="field">
<label class="light">{{t "common.form.decision"}}</label>
{{select variables.decisionOptions "decision" "0" "" " data-validator='required' "}}
<span class="ok" style="">✔</span>
<div class="validation-message"></div>
</div>
<div style="clear:both;"></div>
<script>
$('#taskDetails form select[name=provisionToXML]').val("{{variables.provisionToXML}}");
{{#if assignee}}
(function () {
v.bindValidators($('#taskDetails form' ), "managed/user/*", function () {
v.validateAllFields($('#taskDetails form'));
});
}());
{{/if}}
</script>
"></activiti:formProperty>
</extensionElements>
</userTask>
<sequenceFlow sourceRef="requestMadeGateway" targetRef="decisionPrep"/>
<sequenceFlow sourceRef="decisionPrep" targetRef="decideApprovalTask"/>
<scriptTask id="createManagedUser" scriptFormat="groovy">
<script>
user = [userName:userName, givenName:givenName, sn:sn,
manager:startUserId, department:department, jobTitle:jobTitle, telephoneNumber:telephoneNumber,
mail:mail, startDate:startDate, endDate:endDate, password:password, description:description,
provisionToXML:provisionToXML]
readNewUserFromRepoParams = [_queryId:'for-userName',uid:userName]
execution.setVariable("readNewUserFromRepoParams", readNewUserFromRepoParams)
</script>
</scriptTask>
<exclusiveGateway id="decisionMadeGateway" name="Decision Made"></exclusiveGateway>
<sequenceFlow sourceRef="decideApprovalTask" targetRef="decisionMadeGateway"></sequenceFlow>
<sequenceFlow sourceRef="decisionMadeGateway" targetRef="createManagedUser">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[ ${decision=='accept'} ]]></conditionExpression>
</sequenceFlow>
<sequenceFlow sourceRef="decisionMadeGateway" targetRef="sendDenyNotification">
<conditionExpression xsi:type="tFormalExpression"><![CDATA[ ${decision=='reject'} ]]></conditionExpression>
</sequenceFlow>
<sequenceFlow sourceRef="createManagedUser" targetRef="serviceTask"/>
<serviceTask id="serviceTask" activiti:expression="${openidm.query('managed/user', readNewUserFromRepoParams)}"
activiti:resultVariableName="newUserFromRepo"/>
<sequenceFlow sourceRef="serviceTask" targetRef="sendAcceptNotification"/>
<scriptTask id="sendAcceptNotification" scriptFormat="groovy">
<script>
java.text.SimpleDateFormat formatUTC = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z'");
requestDate = formatUTC.format(new Date());
def newRequesterNotification = [
"receiverId": startUserFromRepo.result[0]._id,
"requesterId" : "",
"requester" : "",
"createDate" : requestDate,
"notificationType" : "info",
"notificationSubtype" : "",
"message" : "OpenIDM created user " +userName
];
def newContractorNotification = [
"receiverId": newUserFromRepo.result[0]._id,
"requesterId" : "",
"requester" : "",
"createDate" : requestDate,
"notificationType" : "info",
"notificationSubtype" : "",
"message" : "Welcome! Your work days are from " + startDate + " to " + endDate
];
</script>
</scriptTask>
<sequenceFlow sourceRef="sendAcceptNotification" targetRef="end"/>
<scriptTask id="sendDenyNotification" scriptFormat="groovy">
<script>
java.text.SimpleDateFormat formatUTC = new java.text.SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.S'Z'");
requestDate = formatUTC.format(new Date());
def newRequesterNotification = [
"receiverId": startUserFromRepo.result[0]._id,
"requesterId" : "",
"requester" : "",
"createDate" : requestDate,
"notificationType" : "warning",
"notificationSubtype" : "",
"message" : "Your request to create user " + userName + " was denied."
];
</script>
</scriptTask>
<sequenceFlow sourceRef="sendDenyNotification" targetRef="end"/>
<endEvent id="end"/>
</process>
</definitions>