| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| Licensed to the Apache Software Foundation (ASF) under one |
| or more contributor license agreements. See the NOTICE file |
| distributed with this work for additional information |
| regarding copyright ownership. The ASF licenses this file |
| to you under the Apache License, Version 2.0 (the |
| "License"); you may not use this file except in compliance |
| with the License. You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, |
| software distributed under the License is distributed on an |
| "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| KIND, either express or implied. See the License for the |
| specific language governing permissions and limitations |
| under the License. |
| --> |
| |
| <simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" |
| xmlns="http://ofbiz.apache.org/Simple-Method" xsi:schemaLocation="http://ofbiz.apache.org/Simple-Method http://ofbiz.apache.org/dtds/simple-methods.xsd"> |
| |
| <simple-method method-name="createSprint" short-description="Create Sprint"> |
| <!-- Permission Check --> |
| <call-simple-method method-name="getWebSiteId"/> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_SPRINT" action="_CREATE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <!-- Error Filtering --> |
| <if-compare operator="less-equals" value="0" field="parameters.maxNum"> |
| <add-error error-list-name="_error_message_list_"> |
| <fail-message message="There is no product backlogs in the system. Please create the product backlogs before perform this action."/> |
| </add-error> |
| </if-compare> |
| <if-compare-field field="parameters.sprintBacklogs" operator="greater" to-field="parameters.maxNum" type="Integer"> |
| <add-error error-list-name="_error_message_list_"> |
| <fail-message message="Number of sprint backlogs are too much. Please enter the number equal or less than ${parameters.maxNum}."/> |
| </add-error> |
| </if-compare-field> |
| <if-compare operator="less-equals" value="0" field="parameters.sprintBacklogs" type="Integer"> |
| <add-error error-list-name="_error_message_list_"> |
| <fail-message message="Number of sprint backlogs must greater than 0 (zero)"/> |
| </add-error> |
| </if-compare> |
| <if-empty field="parameters.sprintEstimatedStart"> |
| <add-error error-list-name="_error_message_list_"> |
| <fail-message message="Start Date is missing"/> |
| </add-error> |
| </if-empty> |
| |
| <if-not-empty field="_error_message_list_"> |
| <return response-code="error"/> |
| </if-not-empty> |
| <!-- calculate estimatedMilliSeconds --> |
| <set field="sprintDuration" from-field="parameters.sprintDuration" type="Integer"/> |
| <set field="actualStartDate" from-field="parameters.sprintEstimatedStart" type="Date"/> |
| <set field="actualCompletionDate"/> |
| <set field="groovy" value="${groovy: import groovy.time.*; |
| context.actualCompletionDate = (context.actualStartDate-1) + (context.sprintDuration*7); |
| }"/> |
| <set field="actualStartDateT" from-field="actualStartDate" type="Timestamp"/> |
| <set field="actualCompletionDateT" from-field="actualCompletionDate" type="Timestamp"/> |
| <set field="input.estimatedMilliSeconds" type="Long" value="${groovy: import groovy.time.*; |
| def estimatedMilliSeconds = context.sprintDuration*5*8*60*60*1000; |
| return (estimatedMilliSeconds); |
| }"/> |
| |
| <set field="input.workEffortName" from-field="parameters.sprintName"/> |
| <set field="input.description" from-field="parameters.sprintDescription"/> |
| <set field="input.actualStartDate" from-field="actualStartDate"/> |
| <set field="input.actualCompletionDate" from-field="actualCompletionDate"/> |
| <set field="input.workEffortTypeId" value="SCRUM_SPRINT"/> |
| <set field="input.currentStatusId" value="SPRINT_ACTIVE"/> |
| <set field="input.workEffortParentId" from-field="parameters.projectId"/> |
| <set field="input.webSiteId" from-field="parameters.webSiteId"/> |
| <set field="input.userLogin" from-field="sysUserLogin"/> |
| <!-- Create Sprint --> |
| <call-service service-name="createWorkEffort" in-map-name="input"> |
| <result-to-field result-name="workEffortId" field="parameters.sprintId"/> |
| </call-service> |
| <!-- Add sprint backlog to sprint --> |
| <call-simple-method method-name="createSprintBacklog"></call-simple-method> |
| |
| <!-- Add default backlog and task to sprint --> |
| <call-simple-method method-name="createBacklogMeeting"/> |
| |
| <entity-one entity-name="WorkEffort" value-field="workEffort"> |
| <field-map field-name="workEffortId" from-field="parameters.projectId"/> |
| </entity-one> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="createBacklogMeeting" short-description="Create Backlog for meeting to sprint"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_SPRINT" action="_CREATE"/> |
| </or> |
| </condition> |
| <then> |
| <entity-and entity-name="WorkEffortAndProduct" list="workEffortList"> |
| <field-map field-name="workEffortId" from-field="parameters.projectId"/> |
| </entity-and> |
| <first-from-list list="workEffortList" entry="workEffortMap"/> |
| <make-value value-field="backlogMeeting" entity-name="CustRequest"/> |
| <sequenced-id sequence-name="CustRequest" field="custRequestId"/> |
| <set field="backlogMeeting.custRequestId" from-field="custRequestId"/> |
| <set field="backlogMeeting.custRequestTypeId" value="RF_SCRUM_MEETINGS"/> |
| <set field="backlogMeeting.statusId" value="CRQ_REVIEWED"/> |
| <set field="backlogMeeting.custRequestName" value="Scrum Meeting"/> |
| <set field="backlogMeeting.description" value="Scrum Meeting"/> |
| <set field="backlogMeeting.fromPartyId" from-field="userLogin.partyId"/> |
| <create-value value-field="backlogMeeting"/> |
| <set-service-fields service-name="createCustRequestItem" map="parameters" to-map="createItem"/> |
| <set field="createItem.custRequestId" from-field="custRequestId"/> |
| <set field="createItem.productId" from-field="workEffortMap.productId"/> |
| <call-service service-name="createCustRequestItem" in-map-name="createItem"/> |
| |
| <!-- add default backlog to sprint --> |
| <set field="createBL.custRequestId" from-field="custRequestId"/> |
| <set field="createBL.workEffortId" from-field="parameters.sprintId"/> |
| <set field="createBL.userLogin" from-field="userLogin"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="createBL"/> |
| |
| <!-- add default task to backlog --> |
| <set field="newDefaultTask.workEffortName" value="Scrum Planning"/> |
| <set field="newDefaultTask.currentStatusId" value="STS_CREATED"/> |
| <set field="newDefaultTask.workEffortTypeId" value="SCRUM_TASK_IMPL"/> |
| <set field="newDefaultTask.workEffortPurposeTypeId" value="SCRUM_DEFAULT_TASK"/> |
| <set field="newDefaultTask.workEffortParentId" from-field="parameters.sprintId"/> |
| <call-service service-name="createWorkEffort" in-map-name="newDefaultTask"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| <set field="parameters.custRequestId" from-field="custRequestId"/> |
| <set field="parameters.workEffortId" from-field="workEffortId"/> |
| <set-service-fields service-name="createWorkEffortRequest" map="parameters" to-map="createWorkEffortRequest"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="createWorkEffortRequest"> |
| <result-to-field result-name="workEffortId" field="workEffort"/> |
| </call-service> |
| |
| <set field="newDefaultTask.workEffortName" value="Sprint Evaluation and Sprint Retrospective"/> |
| <set field="newDefaultTask.currentStatusId" value="STS_CREATED"/> |
| <set field="newDefaultTask.workEffortTypeId" value="SCRUM_TASK_IMPL"/> |
| <set field="newDefaultTask.workEffortPurposeTypeId" value="SCRUM_DEFAULT_TASK"/> |
| <set field="newDefaultTask.workEffortParentId" from-field="parameters.sprintId"/> |
| <call-service service-name="createWorkEffort" in-map-name="newDefaultTask"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| <set field="parameters.custRequestId" from-field="custRequestId"/> |
| <set field="parameters.workEffortId" from-field="workEffortId"/> |
| <set-service-fields service-name="createWorkEffortRequest" map="parameters" to-map="createWorkEffortRequest"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="createWorkEffortRequest"> |
| <result-to-field result-name="workEffortId" field="workEffortId"/> |
| </call-service> |
| |
| <set field="newDefaultTask.workEffortName" value="Daily Scrum"/> |
| <set field="newDefaultTask.currentStatusId" value="STS_CREATED"/> |
| <set field="newDefaultTask.workEffortTypeId" value="SCRUM_TASK_IMPL"/> |
| <set field="newDefaultTask.workEffortPurposeTypeId" value="SCRUM_DEFAULT_TASK"/> |
| <set field="newDefaultTask.workEffortParentId" from-field="parameters.sprintId"/> |
| <call-service service-name="createWorkEffort" in-map-name="newDefaultTask"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| <set field="parameters.custRequestId" from-field="custRequestId"/> |
| <set field="parameters.workEffortId" from-field="workEffortId"/> |
| <set-service-fields service-name="createWorkEffortRequest" map="parameters" to-map="createWorkEffortRequest"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="createWorkEffortRequest"> |
| <result-to-field result-name="workEffortId" field="workEffortId"/> |
| </call-service> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="updateSprintInfo" short-description="Update Sprint Infomation"> |
| <!-- Permission Check --> |
| <call-simple-method method-name="getWebSiteId"/> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_SPRINT" action="_UPDATE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <if> |
| <condition> |
| <if-compare field="parameters.statusId" value="SPRINT_CLOSED" operator="equals"/> |
| </condition> |
| <then> |
| <!-- close sprint and take out incomplete backlog(s) --> |
| <call-simple-method method-name="closeSprint"/> |
| </then> |
| <else> |
| <!-- Error Filltering --> |
| <if-empty field="parameters.workEffortName"> |
| <add-error error-list-name="_error_message_list_"> |
| <fail-message message="Sprint Name is missing."/> |
| </add-error> |
| </if-empty> |
| <if-empty field="parameters.actualStartDate"> |
| <add-error error-list-name="_error_message_list_"> |
| <fail-message message="Start Date is missing."/> |
| </add-error> |
| </if-empty> |
| <if-not-empty field="_error_message_list_"> |
| <return response-code="error"/> |
| </if-not-empty> |
| <!-- calculate estimatedMilliSeconds --> |
| <set field="sprintDuration" from-field="parameters.sprintDuration" type="Integer"/> |
| <set field="actualStartDate" from-field="parameters.actualStartDate" type="Date"/> |
| <set field="actualCompletionDate"/> |
| <set field="groovy" value="${groovy: import groovy.time.*; |
| context.actualCompletionDate = (context.actualStartDate-1) +(context.sprintDuration*7);}"/> |
| |
| <set field="actualStartDateT" from-field="actualStartDate" type="Timestamp"/> |
| <set field="actualCompletionDateT" from-field="actualCompletionDate" type="Timestamp"/> |
| <set field="parameters.estimatedMilliSeconds" type="Long" value="${groovy: import groovy.time.*; |
| def estimatedMilliSeconds = context.sprintDuration*5*8*60*60*1000; |
| return (estimatedMilliSeconds);}"/> |
| |
| <set field="parameters.actualStartDate" from-field="actualStartDateT"/> |
| <set field="parameters.actualCompletionDate" from-field="actualCompletionDateT"/> |
| <set field="parameters.currentStatusId" from-field="parameters.statusId"/> |
| <set field="parameters.webSiteId" from-field="parameters.webSiteId"/> |
| |
| <call-service service-name="updateWorkEffort" in-map-name="parameters"> |
| </call-service> |
| </else> |
| </if> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="deleteSprintBacklog" short-description="Delete relation of sprint and customer request"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_SPRINT" action="_UPDATE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <call-simple-method method-name="getWebSiteId"/> |
| <entity-condition entity-name="CustRequestAndWorkEffort" list="taskInSprintBacklogs"> |
| <condition-list combine="and"> |
| <condition-expr field-name="custRequestId" from-field="parameters.custRequestId"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_SPRINT" operator="not-equals"/> |
| </condition-list> |
| </entity-condition> |
| <!-- Grouping Sprint and Customer Request --> |
| <set field="input.custRequestId" from-field="parameters.custRequestId"/> |
| <set field="input.workEffortId" from-field="parameters.sprintId"/> |
| <if-not-empty field="input.workEffortId"> |
| <call-service service-name="deleteWorkEffortRequest" in-map-name="input"/> |
| </if-not-empty> |
| <!-- Change CustRequest status back to Accepted an d reorder backlog Item--> |
| <entity-one entity-name="WorkEffort" value-field="sprintMap"> |
| <field-map field-name="workEffortId" from-field="parameters.sprintId"/> |
| </entity-one> |
| <entity-and entity-name="WorkEffortAndProduct" list="projectList"> |
| <field-map field-name="workEffortId" from-field="sprintMap.workEffortParentId"/> |
| </entity-and> |
| <set field="productId" from-field="projectList[0].productId"/> |
| <if-empty field="productId"> |
| <set field="productId" from-field="parameters.productId"/> |
| </if-empty> |
| <entity-one entity-name="CustRequest" value-field="custRequest"/> |
| <if-compare field="custRequest.custRequestTypeId" operator="equals" value="RF_UNPLAN_BACKLOG"> |
| <entity-count count-field="getNum" entity-name="CustRequestAndCustRequestItem"> |
| <condition-list combine="and"> |
| <condition-expr field-name="productId" from-field="productId"/> |
| <condition-expr field-name="custRequestTypeId" operator="equals" value="RF_UNPLAN_BACKLOG"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_ACCEPTED"/> |
| </condition-list> |
| </entity-count> |
| <else> |
| <entity-count count-field="getNum" entity-name="CustRequestAndCustRequestItem"> |
| <condition-list combine="and"> |
| <condition-expr field-name="productId" from-field="productId"/> |
| <condition-expr field-name="custRequestTypeId" operator="not-equals" value="RF_UNPLAN_BACKLOG"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_ACCEPTED"/> |
| </condition-list> |
| </entity-count> |
| </else> |
| </if-compare> |
| <set field="sequenceNumIn" value="1" type="Long"/> |
| <set field="custRequestResultMap.custRequestId" from-field="parameters.custRequestId"/> |
| <!-- the first sequence number --> |
| <if-compare field="getNum" operator="equals" value="0"> |
| <set field="custRequestResultMap.custSequenceNum" from-field="sequenceNumIn"/> |
| <else> |
| <if-compare field="custRequest.custRequestTypeId" operator="equals" value="RF_UNPLAN_BACKLOG"> |
| <entity-condition entity-name="CustRequestAndCustRequestItem" list="custRequestList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="productId" from-field="productId"/> |
| <condition-expr field-name="custRequestTypeId" operator="equals" value="RF_UNPLAN_BACKLOG"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_ACCEPTED"/> |
| </condition-list> |
| <order-by field-name="custSequenceNum"/> |
| </entity-condition> |
| <else> |
| <entity-condition entity-name="CustRequestAndCustRequestItem" list="custRequestList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="productId" from-field="productId"/> |
| <condition-expr field-name="custRequestTypeId" operator="not-equals" value="RF_UNPLAN_BACKLOG"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_ACCEPTED"/> |
| </condition-list> |
| <order-by field-name="custSequenceNum"/> |
| </entity-condition> |
| </else> |
| </if-compare> |
| <set field="sequenceNumkey" from-field="sequenceNumIn" type="Integer"/> |
| <set field="productMap" from-field="custRequestList[sequenceNumkey-1]"/> |
| <set field="externalSeq" from-field="productMap.custSequenceNum" type="Long"/> |
| <!-- Insert new transaction to CustRequest --> |
| <loop count="${getNum}" field="i"> |
| <set field="internalSeq" from-field="custRequestList[i].custSequenceNum" type="Long" /> |
| <set field="ready" value="${groovy:internalSeq>=externalSeq}" type="Boolean"/> |
| <if-compare field="ready" operator="equals" value="true" type="Boolean"> |
| <set field="custRequestIdIn" from-field="custRequestList[i].custRequestId"/> |
| <entity-one entity-name="CustRequest" value-field="custRequestMap"> |
| <field-map field-name="custRequestId" from-field="custRequestIdIn"/> |
| </entity-one> |
| <set field="custSequenceNum" from-field="custRequestMap.custSequenceNum"/> |
| <set field="nextSeqNum" value="${custSequenceNum+1}" type="Long"/> |
| <set field="custRequestMap.custSequenceNum" from-field="nextSeqNum"/> |
| <store-value value-field="custRequestMap"/> |
| </if-compare> |
| </loop> |
| <set field="custRequestResultMap.custSequenceNum" from-field="externalSeq"/> |
| </else> |
| </if-compare> |
| <!-- update Cust Request --> |
| <set field="oldStatusId" from-field="custRequest.statusId"/><!-- use in confirmation email (current status is CRQ_REVIEWED) --> |
| <set field="custRequestResultMap.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="updateCustRequest" in-map-name="custRequestResultMap"/> |
| |
| <set field="setCustRequestStatusCtx.custRequestId" from-field="parameters.custRequestId"/> |
| <set field="setCustRequestStatusCtx.statusId" value="CRQ_ACCEPTED"/> |
| <set field="setCustRequestStatusCtx.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="setCustRequestStatus" in-map-name="setCustRequestStatusCtx"/> |
| |
| <entity-condition entity-name="ProductBacklog" list="listTaskInBacklog"> |
| <condition-list combine="and"> |
| <condition-expr field-name="custRequestId" from-field="parameters.custRequestId"/> |
| <condition-list combine="or"> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_IMPL"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_ERROR"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_INST"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_TEST"/> |
| </condition-list> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="listTaskInBacklog"> |
| <loop count="${groovy: listTaskInBacklog.size()}" field="i"> |
| <set field="updateProject.workEffortId" from-field="listTaskInBacklog[i].workEffortId"/> |
| <clear-field field="updateProject.workEffortParentId"/> |
| <call-service service-name="updateWorkEffort" in-map-name="updateProject"/> |
| </loop> |
| </if-not-empty> |
| <set field="_event_message_" value="The Sprint backlog has been deleted."/> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="DeleteSprint" short-description="Delete Sprint"> |
| <!-- Permission Check --> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_SPRINT" action="_DELETE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <set field="parameters.sprintId" from-field="parameters.workEffortId"/> |
| <entity-and entity-name="CustRequestWorkEffort" list="custRequestWorkEfforts"> |
| <field-map field-name="workEffortId" from-field="parameters.sprintId"/> |
| </entity-and> |
| |
| <if-not-empty field="custRequestWorkEfforts"> |
| <!-- Delete Bound Sprint and Customer Request --> |
| <remove-list list="custRequestWorkEfforts"/> |
| </if-not-empty> |
| |
| <!-- Delete Sprint --> |
| <set field="delSprintInput.workEffortId" from-field="parameters.sprintId"/> |
| <call-service service-name="deleteWorkEffort" in-map-name="delSprintInput"> |
| </call-service> |
| |
| <!-- Delete Sprint Member --> |
| <entity-and entity-name="WorkEffortPartyAssignView" list="membersPartyId"> |
| <field-map field-name="workEffortId" from-field="parameters.sprintId"/> |
| </entity-and> |
| |
| <if-not-empty field="membersPartyId"> |
| <iterate list="membersPartyId" entry="memberPartyId"> |
| <call-service service-name="unassignPartyFromWorkEffort" in-map-name="memberPartyId"></call-service> |
| </iterate> |
| </if-not-empty> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="createScrumProject" short-description="Create Scrum Project and Product Owner"> |
| <!-- Permission Check --> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_PROJECT" action="_CREATE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PROJECT_ROLE" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PROJECT" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PROJECT" action="_UPDATE"/> |
| </or> |
| </condition> |
| <then> |
| <now-timestamp field="now"/> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <set-service-fields service-name="createWorkEffort" map="parameters" to-map="createProject"/> |
| <set field="createProject.workEffortTypeId" value="SCRUM_PROJECT"/> |
| <set field="createProject.currentStatusId" value="SPJ_ACTIVE"/> |
| <set field="createProject.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="createWorkEffort" in-map-name="createProject" > |
| <result-to-field result-name="workEffortId" field="workEffortId"/> |
| </call-service> |
| <field-to-request field="workEffortId" request-name="projectId"/> |
| <log level="info" message="Creating new project, projectId=${workEffortId}"/> |
| <!-- Create workeffort associate with product --> |
| <make-value value-field="goodStandardMap" entity-name="WorkEffortGoodStandard"/> |
| <set field="goodStandardMap.workEffortId" from-field="workEffortId"/> |
| <set field="goodStandardMap.productId" from-field="parameters.productId"/> |
| <set field="goodStandardMap.workEffortGoodStdTypeId" value="SCRUM_PRO_WORKEFF"/> |
| <set field="goodStandardMap.fromDate" from-field="now"/> |
| <set field="goodStandardMap.statusId" value="WEGS_CREATED"/> |
| <create-value value-field="goodStandardMap"/> |
| <!-- Create project billed options --> |
| <if-not-empty field="parameters.billed"> |
| <make-value value-field="workEffortAttMap" entity-name="WorkEffortAttribute"/> |
| <set field="workEffortAttMap.workEffortId" from-field="workEffortId"/> |
| <set field="workEffortAttMap.attrName" value="PROJECT_BILLED"/> |
| <set field="workEffortAttMap.attrValue" from-field="parameters.billed"/> |
| <create-value value-field="workEffortAttMap"/> |
| </if-not-empty> |
| |
| <set-service-fields service-name="assignPartyToWorkEffort" map="parameters" to-map="assign"/> |
| <set field="assign.workEffortId" from-field="workEffortId"/> |
| <set field="assign.partyId" from-field="productRole[0].partyId"/> |
| <set field="assign.roleTypeId" value="PRODUCT_OWNER"/> |
| <set field="assign.statusId" value="PRTYASGN_ASSIGNED"/> |
| <set field="assign.userLogin" from-field="sysUserLogin"/> |
| <log level="info" message="Assign partyId ${assign.partyId} to projectId=${workEffortId}"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="assign"/> |
| |
| <entity-and entity-name="PartyRole" list="listPartyRoleScrumMaster"> |
| <field-map field-name="partyId" from-field="userLogin.partyId"/> |
| <field-map field-name="roleTypeId" value="SCRUM_MASTER"/> |
| </entity-and> |
| <if-not-empty field="listPartyRoleScrumMaster"> |
| <set-service-fields service-name="assignPartyToWorkEffort" map="parameters" to-map="assignScrumMaster"/> |
| <set field="assignScrumMaster.workEffortId" from-field="workEffortId"/> |
| <set field="assignScrumMaster.partyId" from-field="userLogin.partyId"/> |
| <set field="assignScrumMaster.roleTypeId" value="SCRUM_MASTER"/> |
| <set field="assignScrumMaster.statusId" value="PRTYASGN_ASSIGNED"/> |
| <set field="assignScrumMaster.userLogin" from-field="sysUserLogin"/> |
| <log level="info" message="Assign partyId ${assignScrumMaster.partyId} to projectId=${workEffortId}"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="assignScrumMaster"/> |
| </if-not-empty> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <log level="error" message="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="updateScrumProject" short-description="Update Scrum Project and Product Owner"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_PROJECT" action="_UPDATE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PROJECT_ROLE" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <now-timestamp field="now"/> |
| <set-service-fields service-name="updateWorkEffort" map="parameters" to-map="updateProject"/> |
| <call-service service-name="updateWorkEffort" in-map-name="updateProject"/> |
| <!-- remove old workeffort associate with product --> |
| <entity-and entity-name="WorkEffortGoodStandard" list="workEffGSDList"> |
| <field-map field-name="workEffortId" from-field="parameters.workEffortId"/> |
| <field-map field-name="workEffortGoodStdTypeId" value="SCRUM_PRO_WORKEFF"/> |
| </entity-and> |
| <if-not-empty field="workEffGSDList"> |
| <remove-list list="workEffGSDList"/> |
| </if-not-empty> |
| <!-- create old workeffort associate with product --> |
| <make-value value-field="goodStandardMap" entity-name="WorkEffortGoodStandard"/> |
| <set field="goodStandardMap.workEffortId" from-field="parameters.workEffortId"/> |
| <set field="goodStandardMap.productId" from-field="parameters.productId"/> |
| <set field="goodStandardMap.workEffortGoodStdTypeId" value="SCRUM_PRO_WORKEFF"/> |
| <set field="goodStandardMap.fromDate" from-field="now"/> |
| <set field="goodStandardMap.statusId" value="WEGS_CREATED"/> |
| <create-value value-field="goodStandardMap"/> |
| <!-- update project billed options --> |
| <entity-one entity-name="WorkEffortAttribute" value-field="workEffortAttMap"> |
| <field-map field-name="workEffortId" from-field="parameters.workEffortId"/> |
| <field-map field-name="attrName" value="PROJECT_BILLED"/> |
| </entity-one> |
| <if-not-empty field="workEffortAttMap"> |
| <set field="workEffortAttMap.attrValue" from-field="parameters.billed"/> |
| <store-value value-field="workEffortAttMap"/> |
| <else> |
| <make-value value-field="workEffortAttMap" entity-name="WorkEffortAttribute"/> |
| <set field="workEffortAttMap.workEffortId" from-field="parameters.workEffortId"/> |
| <set field="workEffortAttMap.attrName" value="PROJECT_BILLED"/> |
| <set field="workEffortAttMap.attrValue" from-field="parameters.billed"/> |
| <create-value value-field="workEffortAttMap"/> |
| </else> |
| </if-not-empty> |
| <!-- update project current status to closed --> |
| <if-compare field="parameters.currentStatusId" operator="equals" value="SPJ_CLOSED"> |
| <!-- <entity-and entity-name="ProjectSprintBacklogAndTask" list="sprintList">--> |
| <!-- <field-map field-name="projectId" from-field="parameters.projectId"/>--> |
| <!-- <field-map field-name="sprintTypeId" value="SCRUM_SPRINT"/>--> |
| <!-- </entity-and>--> |
| <entity-and entity-name="ProjectSprint" list="sprintList"> |
| <field-map field-name="projectId" from-field="parameters.projectId"/> |
| <field-map field-name="projectTypeId" value="SCRUM_PROJECT"/> |
| </entity-and> |
| <if-not-empty field="sprintList"></if-not-empty> |
| <iterate list="sprintList" entry="sprint"> |
| <!-- Check current status --> |
| <entity-one entity-name="WorkEffort" value-field="sprintEntry"> |
| <field-map field-name="workEffortId" from-field="sprint.sprintId"/> |
| </entity-one> |
| <if-not-empty field="sprintEntry"> |
| <if-compare operator="not-equals" value="SPRINT_CLOSED" field="sprintEntry.currentStatusId"> |
| <set field="updateStatus.currentStatusId" value="SPRINT_CLOSED"/> |
| <set field="updateStatus.workEffortId" from-field="sprint.sprintId"/> |
| <call-service service-name="updateWorkEffort" in-map-name="updateStatus"/> |
| <!-- clear unneccessay parameters --> |
| <clear-field field="parameters.currentStatusId"/> |
| <set field="parameters.projectId" from-field="parameters.projectId"/> |
| <set field="parameters.sprintId" from-field="sprint.sprintId"/> |
| <call-simple-method method-name="closeSprint"/> |
| </if-compare> |
| </if-not-empty> |
| </iterate> |
| </if-compare> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="deleteCustRequestItem" short-description="Delete Cust Request Item" login-required="false"> |
| <set field="custRequestItemCtx.custRequestItemSeqId" from-field="parameters.custRequestItemSeqId"/> |
| <remove-by-and entity-name="CustRequestItemNote" map="custRequestItemCtx"/> |
| <remove-by-and entity-name="CustRequestItemWorkEffort" map="custRequestItemCtx"/> |
| |
| <make-value value-field="deleteCustRequestItem" entity-name="CustRequestItem"/> |
| <set-pk-fields value-field="deleteCustRequestItem" map="parameters"/> |
| <set-nonpk-fields map="parameters" value-field="deleteCustRequestItem"/> |
| <remove-value value-field="deleteCustRequestItem"/> |
| </simple-method> |
| |
| <simple-method method-name="deleteCustRequest" short-description="Delete a draft Customer Request with no relations yet"> |
| <call-simple-method method-name="getWebSiteId"/> |
| <!-- Permission Check --> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_PRODUCT_BACKLOG" action="_DELETE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <entity-one entity-name="CustRequest" value-field="custRequest"/> |
| <!-- set default custRequestName --> |
| <if-empty field="custRequest.custRequestName"> |
| <set field="custRequest.custRequestName" value="product backlog[${custRequest.custRequestId}]"/> |
| <store-value value-field="custRequest"/> |
| </if-empty> |
| <set field="custRequest.reason" from-field="parameters.reason"/> |
| <if-not-empty field="custRequest"> |
| <set field="input.custRequestId" from-field="custRequest.custRequestId"/> |
| <set field="input.reason" from-field="custRequest.reason"/> |
| <set field="input.statusId" value="CRQ_CANCELLED"/> |
| <set field="input.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="setCustRequestStatus" in-map-name="input"/> |
| </if-not-empty> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| <simple-method method-name="updateProductBacklogItemRows" short-description="Update product backlog item rows in multi form"> |
| <!-- Permission Check --> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_PRODUCT_BACKLOG" action="_DELETE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <call-class-method method-name="getParameterMap" class-name="org.apache.ofbiz.base.util.UtilHttp" ret-field="paramMap"> |
| <field field="request" type="javax.servlet.http.HttpServletRequest"/> |
| </call-class-method> |
| <call-class-method method-name="getMultiFormRowCount" class-name="org.apache.ofbiz.base.util.UtilHttp" ret-field="rowCount"> |
| <field field="paramMap" type="java.util.Map"/> |
| </call-class-method> |
| |
| <!-- get all data to list --> |
| <set field="custRequestIndexList" type="List"/> |
| <set field="custRequestList" type="List"/> |
| <loop count="${rowCount}" field="j"> |
| <set field="custRequestMap" type="NewMap"/> |
| <set field="custRequestMap.custRequestId" from-field="paramMap["custRequestId_o_${j}"]"/> |
| <set field="custRequestMap.custSequenceNum" from-field="paramMap["realSequenceNum_o_${j}"]"/> |
| <field-to-list list="custRequestList" field="custRequestMap"/> |
| <field-to-list list="custRequestIndexList" field="paramMap["realSequenceNum_o_${j}"]"/> |
| </loop> |
| <set field="newCustRequestList" type="List"/> |
| <set field="custRequestListWithNewSeq" type="List"/> |
| <loop count="${rowCount}" field="k"> |
| <set field="custRequestMap" type="NewMap"/> |
| <set field="custRequestMap.custRequestId" from-field="paramMap["custRequestId_o_${k}"]"/> |
| <set field="oldSequenceNum" from-field="paramMap["realSequenceNum_o_${k}"]"/> |
| <set field="newSequenceNum" from-field="paramMap["newSequenceNum_o_${k}"]"/> |
| <if-not-empty field="newSequenceNum"> |
| <set field="custRequestMap.custSequenceNum" from-field="newSequenceNum"/> |
| <field-to-list list="custRequestListWithNewSeq" field="custRequestMap"/> |
| <else> |
| <set field="custRequestMap.custSequenceNum" from-field="oldSequenceNum"/> |
| <field-to-list list="newCustRequestList" field="custRequestMap"/> |
| </else> |
| </if-not-empty> |
| </loop> |
| |
| <!-- get size --> |
| <set field="custRequestListSize" value="${groovy: custRequestList.size();}" type="Double"/> |
| |
| <!-- Check if there are duplicate value will reorder and change it --> |
| <set field="custRequestIndex" type="List"/> |
| <set field="custRequestIndexToSet" value="${groovy: import java.util.Set; new HashSet(custRequestIndexList);}"/> |
| <iterate list="custRequestIndexToSet" entry="custRequestIndexMap"> |
| <set field="count" value="0" type="Integer"/> |
| <loop count="${custRequestListSize}" field="l"> |
| <if-compare-field field="custRequestList[l].custSequenceNum" operator="equals" to-field="custRequestIndexMap" type="Integer"> |
| <set field="count" value="${count + 1}"/> |
| </if-compare-field> |
| </loop> |
| <if-compare field="count" operator="greater" value="1" type="Integer"> |
| <set field="custRequestIndexMap" from-field="custRequestIndexMap" type="Integer"/> |
| <field-to-list list="custRequestIndex" field="custRequestIndexMap"/> |
| </if-compare> |
| </iterate> |
| <if-not-empty field="custRequestIndex"> |
| <script>groovy: |
| List indexList = custRequestIndex; |
| Collections.sort(indexList); |
| Collections.reverse(indexList); |
| List uniqueCustRequestIndexList = indexList; |
| return org.apache.ofbiz.base.util.UtilMisc.toMap("uniqueCustRequestIndexList", uniqueCustRequestIndexList); |
| </script> |
| </if-not-empty> |
| <if-not-empty field="uniqueCustRequestIndexList"> |
| <iterate list="uniqueCustRequestIndexList" entry="custRequestIndexMap"> |
| <set field="count" value="0" type="Integer"/> |
| <loop count="${custRequestListSize}" field="m"> |
| <if> |
| <condition> |
| <if-compare-field field="custRequestList[m].custSequenceNum" operator="equals" to-field="custRequestIndexMap" type="Integer"/> |
| </condition> |
| <then> |
| <set field="sequenceNumIndex" value="${custRequestList[m].custSequenceNum + count}" type="Integer"/> |
| <set field="custRequestList[m].custSequenceNum" from-field="sequenceNumIndex" type="String"/> |
| <entity-one entity-name="CustRequest" value-field="newCustRequestMap"> |
| <field-map field-name="custRequestId" from-field="custRequestList[m].custRequestId"/> |
| </entity-one> |
| <set field="nextSeqNum" value="${custRequestList[m].custSequenceNum}" type="Long"/> |
| <set field="newCustRequestMap.custSequenceNum" from-field="nextSeqNum"/> |
| <store-value value-field="newCustRequestMap"/> |
| <set field="count" value="${count + 1}"/> |
| </then> |
| <else> |
| <if-compare-field field="custRequestList[m].custSequenceNum" operator="greater" to-field="custRequestIndexMap" type="Integer"> |
| <set field="sequenceNumIndex" value="${custRequestIndexMap + count}" type="Integer"/> |
| <set field="custRequestList[m].custSequenceNum" from-field="sequenceNumIndex" type="String"/> |
| <entity-one entity-name="CustRequest" value-field="newCustRequestMaps"> |
| <field-map field-name="custRequestId" from-field="custRequestList[m].custRequestId"/> |
| </entity-one> |
| <set field="nextSeqNum" value="${custRequestList[m].custSequenceNum}" type="Long"/> |
| <set field="newCustRequestMaps.custSequenceNum" from-field="nextSeqNum"/> |
| <store-value value-field="newCustRequestMaps"/> |
| <set field="count" value="${count + 1}"/> |
| </if-compare-field> |
| </else> |
| </if> |
| </loop> |
| </iterate> |
| </if-not-empty> |
| |
| <!-- if new sequence not empty --> |
| <if-not-empty field="custRequestListWithNewSeq"> |
| <if-empty field="newCustRequestList"> |
| <!-- use when all field in new sequence not empty --> |
| <loop count="${rowCount}" field="l"> |
| <set field="newSeq" from-field="custRequestListWithNewSeq[l].custSequenceNum" type="Integer"/> |
| <set field="oldSeq" from-field="custRequestList[newSeq-1].custSequenceNum" type="Long"/> |
| <set field="custRequestId" from-field="custRequestListWithNewSeq[l].custRequestId"/> |
| <entity-one entity-name="CustRequest" value-field="newCustRequestMap"> |
| <field-map field-name="custRequestId" from-field="custRequestId"/> |
| </entity-one> |
| <set field="newCustRequestMap.custSequenceNum" from-field="oldSeq"/> |
| <store-value value-field="newCustRequestMap"/> |
| </loop> |
| <else> |
| <!-- get size --> |
| <script>groovy: |
| List custRequestSeq = custRequestListWithNewSeq; |
| List custRequestSeqList = org.apache.ofbiz.base.util.UtilMisc.sortMaps(custRequestSeq, org.apache.ofbiz.base.util.UtilMisc.toList("custSequenceNum")); |
| return org.apache.ofbiz.base.util.UtilMisc.toMap("custRequestSeqList", custRequestSeqList); |
| </script> |
| <set field="custRequestListWithNewSeq" from-field="custRequestSeqList"/> |
| <call-object-method method-name="size" obj-field="custRequestListWithNewSeq" ret-field="newCustCount"/> |
| |
| <!-- start sort transaction --> |
| <loop count="${newCustCount}" field="l"> |
| <set field="custRequestId" from-field="custRequestListWithNewSeq[l].custRequestId"/> |
| <entity-one entity-name="CustRequest" value-field="newCustRequestMap"> |
| <field-map field-name="custRequestId" from-field="custRequestId"/> |
| </entity-one> |
| <if-compare field="newCustRequestMap.custRequestTypeId" operator="equals" value="RF_PROD_BACKLOG" > |
| <entity-and entity-name="CustRequestAndCustRequestItem" list="custRequestItemList"> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| <field-map field-name="custRequestTypeId" value="RF_PROD_BACKLOG"/> |
| <field-map field-name="statusId" value="CRQ_ACCEPTED"/> |
| <select-field field-name="custRequestId"/> |
| <select-field field-name="custSequenceNum"/> |
| <order-by field-name="custSequenceNum"/> |
| </entity-and> |
| <set field="custRequestList" from-field="custRequestItemList"/> |
| <call-object-method method-name="size" obj-field="custRequestList" ret-field="custCount"/> |
| <else> |
| <entity-and entity-name="CustRequestAndCustRequestItem" list="custRequestItemList"> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| <field-map field-name="custRequestTypeId" value="RF_UNPLAN_BACKLOG"/> |
| <field-map field-name="statusId" value="CRQ_ACCEPTED"/> |
| <select-field field-name="custRequestId"/> |
| <select-field field-name="custSequenceNum"/> |
| <order-by field-name="custSequenceNum"/> |
| </entity-and> |
| <set field="custRequestList" from-field="custRequestItemList"/> |
| <call-object-method method-name="size" obj-field="custRequestList" ret-field="custCount"/> |
| </else> |
| </if-compare> |
| <set field="newOfOldSeq" from-field="newCustRequestMap.custSequenceNum" type="Long"/> |
| <set field="newSeq" from-field="custRequestListWithNewSeq[l].custSequenceNum" type="Long"/> |
| <set field="oldSeq" from-field="custRequestList[newSeq-1].custSequenceNum" type="Long" /> |
| <loop count="${custCount}" field="m"> |
| <set field="newcustRequestId" from-field="custRequestList[m].custRequestId"/> |
| <entity-one entity-name="CustRequest" value-field="custRequestMap"> |
| <field-map field-name="custRequestId" from-field="newcustRequestId"/> |
| </entity-one> |
| <set field="custSequenceNum" from-field="custRequestMap.custSequenceNum" type="Long"/> |
| <if-compare-field field="custRequestId" operator="not-equals" to-field="newcustRequestId"> |
| <if-compare-field field="newOfOldSeq" operator="not-equals" to-field="oldSeq" type="Long"> |
| <set field="readyDown" value="${groovy:(newOfOldSeq<oldSeq)&&(custSequenceNum<=oldSeq)&&(custSequenceNum>newOfOldSeq)}" type="Boolean"/> |
| <set field="readyUp" value="${groovy:(newOfOldSeq>oldSeq)&&(custSequenceNum>=oldSeq)&&(custSequenceNum<newOfOldSeq)}" type="Boolean"/> |
| <!-- use when number move down --> |
| <if> |
| <condition> |
| <if-compare field="readyDown" operator="equals" value="true" type="Boolean"/> |
| </condition> |
| <then> |
| <set field="nextSeqNum" value="${custSequenceNum-1}" type="Long"/> |
| <set field="custRequestMap.custSequenceNum" from-field="nextSeqNum"/> |
| <store-value value-field="custRequestMap"/> |
| </then> |
| </if> |
| <!-- use when number move up --> |
| <if> |
| <condition> |
| <and> |
| <if-compare field="readyUp" operator="equals" value="true" type="Boolean"/> |
| </and> |
| </condition> |
| <then> |
| <set field="nextSeqNum" value="${custSequenceNum+1}" type="Long"/> |
| <set field="custRequestMap.custSequenceNum" from-field="nextSeqNum"/> |
| <store-value value-field="custRequestMap"/> |
| </then> |
| </if> |
| </if-compare-field> |
| </if-compare-field> |
| </loop> |
| <set field="newCustRequestMap.custSequenceNum" from-field="oldSeq" type="Long"/> |
| <store-value value-field="newCustRequestMap"/> |
| </loop> |
| </else> |
| </if-empty> |
| </if-not-empty> |
| |
| <set field="beDeleted" value="false" type="Boolean"/> |
| <loop count="${rowCount}" field="i"> |
| <set field="deleteFlag" from-field="paramMap["deleteFlag_o_${i}"]" default-value="N"/> |
| <set field="custRequestId" from-field="paramMap["custRequestId_o_${i}"]"/> |
| <set field="statusId" from-field="paramMap["statusId_o_${i}"]"/> |
| <!-- check CRQ_COMPLETED status --> |
| <if-compare field="statusId" operator="not-equals" value="CRQ_COMPLETED"> |
| <if-compare field="deleteFlag" operator="equals" value="Y"> |
| <!-- delete product backlog --> |
| <call-simple-method method-name="deleteCustRequest"/> |
| <set field="beDeleted" value="true" type="Boolean"/> |
| <else> |
| <!-- update category and plan hour --> |
| <entity-condition entity-name="CustRequestAndWorkEffort" list="existTasks"> |
| <condition-list combine="and"> |
| <condition-expr field-name="custRequestId" from-field="custRequestId"/> |
| <condition-expr field-name="workEffortTypeId" operator="not-equals" value="SCRUM_SPRINT"/> |
| </condition-list> |
| </entity-condition> |
| <set field="parentCustRequestId" from-field="paramMap["parentCustRequestId_o_${i}"]"/> |
| <set field="estimatedHours" from-field="paramMap["estimatedHours_o_${i}"]" type="Double"/> |
| <set field="updateCustRequestInMap.custRequestId" from-field="custRequestId"/> |
| <set field="updateCustRequestInMap.parentCustRequestId" from-field="parentCustRequestId"/> |
| <set field="custEstimatedMilliSeconds" value="${estimatedHours*1000*60*60}" default-value="0" type="Double"/> |
| <set field="updateCustRequestInMap.custEstimatedMilliSeconds" from-field="custEstimatedMilliSeconds" type="Double"/> |
| <if-not-empty field="existTasks"> |
| <log level="info" message="warningMessage====================Cannot update plan hour of backlog item[${custRequestId}] because there is existing task for that already."></log> |
| </if-not-empty> |
| <call-service service-name="updateCustRequest" in-map-name="updateCustRequestInMap"/> |
| </else> |
| </if-compare> |
| </if-compare> |
| </loop> |
| <!-- if some backlog item be deleted then re arrange custSequenceNum field --> |
| <if-compare field="beDeleted" operator="equals" value="true" type="Boolean"> |
| <set field="reOrderProductBacklogItemSequenceNumberInMap.productId" from-field="parameters.productId"/> |
| <call-service service-name="reOrderProductBacklogItemSequenceNumber" in-map-name="reOrderProductBacklogItemSequenceNumberInMap"/> |
| </if-compare> |
| <!-- check warning message list --> |
| <if-not-empty field="warningMessageList"> |
| <set field="_event_message_" value="Warning ${warningMessageList}"/> |
| </if-not-empty> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| <field-to-request field="parameters.sequence" request-name="sequence"/> |
| <field-to-request field="parameters.UnplannedSequence" request-name="UnplannedSequence"/> |
| <field-to-request field="parameters.VIEW_SIZE_1" request-name="VIEW_SIZE_1"/> |
| <field-to-request field="parameters.VIEW_INDEX_1" request-name="VIEW_INDEX_1"/> |
| </simple-method> |
| |
| <simple-method method-name="createProductBacklog" short-description=""> |
| <!-- Permission Check --> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_PRODUCT_BACKLOG" action="_CREATE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <call-simple-method method-name="getWebSiteId"/> |
| <if-compare operator="equals" value="Y" field="parameters.unplannedFlag"> |
| <set field="custRequestTypeId" value="RF_UNPLAN_BACKLOG"/> |
| <else> |
| <set field="custRequestTypeId" value="RF_PROD_BACKLOG"/> |
| </else> |
| </if-compare> |
| <if-empty field="parameters.description"> |
| <add-error > |
| <fail-message message="There Product Backlog Item is missing, Please add."/> |
| </add-error> |
| <check-errors/> |
| </if-empty> |
| <if-empty field="parameters.custSequenceNum"> |
| <set field="sequenceNumIn" value="1" type="Long"/> |
| <entity-count count-field="getNum" entity-name="CustRequestAndCustRequestItem"> |
| <condition-list combine="and"> |
| <condition-expr field-name="productId" from-field="parameters.productId"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_ACCEPTED"/> |
| </condition-list> |
| </entity-count> |
| <if-compare operator="equals" value="0" field="getNum"> |
| <set field="createCustRequestInMap.custSequenceNum" from-field="sequenceNumIn"/> |
| <else> |
| <entity-condition entity-name="CustRequestAndCustRequestItem" list="custRequestList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="productId" from-field="parameters.productId"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_ACCEPTED"/> |
| </condition-list> |
| <order-by field-name="custSequenceNum"/> |
| </entity-condition> |
| <set field="productMap" from-field="custRequestList[getNum-1]"/> |
| <set field="nextSeq" from-field="productMap.custSequenceNum" type="Integer"/> |
| <set field="newSequenceNum" value="${nextSeq+1}" type="Long"/> |
| <set field="createCustRequestInMap.custSequenceNum" from-field="newSequenceNum" /> |
| </else> |
| </if-compare> |
| <else> |
| <!-- check duplicate data --> |
| <entity-count count-field="getNum" entity-name="CustRequestAndCustRequestItem"> |
| <condition-list combine="and"> |
| <condition-expr field-name="productId" from-field="parameters.productId"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_ACCEPTED"/> |
| </condition-list> |
| </entity-count> |
| <!-- the first sequence number --> |
| <if-compare field="getNum" operator="equals" value="0"> |
| <set field="createCustRequestInMap.custSequenceNum" from-field="parameters.custSequenceNum"/> |
| <else> |
| <entity-condition entity-name="CustRequestAndCustRequestItem" list="custRequestList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="productId" from-field="parameters.productId"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_ACCEPTED"/> |
| </condition-list> |
| <order-by field-name="custSequenceNum"/> |
| </entity-condition> |
| <set field="sequenceNumkey" from-field="parameters.custSequenceNum" type="Integer"/> |
| <set field="productMap" from-field="custRequestList[sequenceNumkey-1]"/> |
| <set field="externalSeq" from-field="productMap.custSequenceNum" type="Long"/> |
| <!-- Insert new transaction to CustRequest --> |
| <loop count="${getNum}" field="j"> |
| <set field="internalSeq" from-field="custRequestList[j].custSequenceNum" type="Long" /> |
| <set field="ready" value="${groovy:internalSeq>=externalSeq}" type="Boolean"/> |
| <if-compare field="ready" operator="equals" value="true" type="Boolean"> |
| <set field="custRequestId" from-field="custRequestList[j].custRequestId"/> |
| <entity-one entity-name="CustRequest" value-field="custRequestMap"> |
| <field-map field-name="custRequestId" from-field="custRequestId"/> |
| </entity-one> |
| <set field="custSequenceNum" from-field="custRequestMap.custSequenceNum"/> |
| <set field="nextSeqNum" value="${custSequenceNum+1}" type="Long"/> |
| <set field="custRequestMap.custSequenceNum" from-field="nextSeqNum"/> |
| <store-value value-field="custRequestMap"/> |
| </if-compare> |
| </loop> |
| <set field="createCustRequestInMap.custSequenceNum" from-field="externalSeq"/> |
| </else> |
| </if-compare> |
| </else> |
| </if-empty> |
| <if-empty field="parameters.fromPartyId"> |
| <set field="createCustRequestInMap.fromPartyId" from-field="userLogin.partyId"/> |
| </if-empty> |
| <set field="changeToMilliSec" value="${parameters.custEstimatedMilliSeconds*1000*60*60}"/> |
| <set field="createCustRequestInMap.custEstimatedMilliSeconds" from-field="changeToMilliSec" type="Double"/> |
| <set field="createCustRequestInMap.billed" from-field="parameters.billed"/> |
| <set field="createCustRequestInMap.custRequestTypeId" from-field="custRequestTypeId"/> |
| <set field="createCustRequestInMap.statusId" value="CRQ_ACCEPTED"/> |
| <set field="createCustRequestInMap.custRequestName" value="Product Backlog"/> |
| <set field="createCustRequestInMap.description" from-field="parameters.description"/> |
| <set field="createCustRequestInMap.openDateTime" from-field="parameters.openDateTime"/> |
| <set field="createCustRequestInMap.closedDateTime" from-field="parameters.closedDateTime"/> |
| <set field="createCustRequestInMap.parentCustRequestId" from-field="parameters.parentCustRequestId"/> |
| <set field="createCustRequestInMap.webSiteId" from-field="parameters.webSiteId"/> |
| |
| <sequenced-id sequence-name="CustRequestItem" field="custRequestItemSeqId"/> |
| <set field="createCustRequestInMap.custRequestItemSeqId" from-field="custRequestItemSeqId"/> |
| <set field="createCustRequestInMap.story" from-field="parameters.story"/> |
| <set field="createCustRequestInMap.productId" from-field="parameters.productId"/> |
| <call-service service-name="createCustRequest" in-map-name="createCustRequestInMap"> |
| <result-to-field result-name="custRequestId"/> |
| </call-service> |
| <!-- create CustRequestNote --> |
| <if-not-empty field="parameters.noteInfo"> |
| <set field="newNoteMap.note" from-field="parameters.noteInfo"/> |
| <set field="newNoteMap.noteName" value="How to test"/> |
| <call-service service-name="createNote" in-map-name="newNoteMap"> |
| <result-to-field result-name="noteId" field="noteId"/> |
| </call-service> |
| <make-value value-field="newEntity" entity-name="CustRequestNote"/> |
| <set from-field="custRequestId" field="newEntity.custRequestId"/> |
| <set from-field="noteId" field="newEntity.noteId"/> |
| <create-value value-field="newEntity"/> |
| </if-not-empty> |
| <request-to-field field="parameters.productId" request-name="productId"/> |
| <request-to-field field="parameters.sequence" request-name="sequence"/> |
| <request-to-field field="parameters.UnplannedSequence" request-name="UnplannedSequence"/> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| |
| </if> |
| |
| </simple-method> |
| |
| <simple-method method-name="updateSprintBacklog" short-description="Update Sprint Backlog"> |
| <call-simple-method method-name="getWebSiteId"/> |
| <set field="parameters.custEstimatedMilliSeconds" from-field="parameters.estimatedHours" type="Float"/> |
| <calculate field="parameters.custEstimatedMilliSeconds" type="Float"> |
| <calcop operator="multiply" field="parameters.custEstimatedMilliSeconds"> |
| <number value="3600000"/> |
| </calcop> |
| </calculate> |
| <set-service-fields service-name="updateCustRequest" map="parameters" to-map="inMap"/> |
| <call-service service-name="updateCustRequest" in-map-name="inMap"/> |
| </simple-method> |
| |
| <simple-method method-name="createSprintBacklog" short-description="Create Sprint Backlog"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_SPRINT" action="_UPDATE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <call-simple-method method-name="getWebSiteId"/> |
| <set field="parameters.sprintBacklogs" value="${parameters.sprintBacklogs}-1" type="Integer"/> |
| <entity-and entity-name="WorkEffortAndProduct" list="projectList"> |
| <field-map field-name="workEffortId" from-field="parameters.projectId"/> |
| </entity-and> |
| <first-from-list entry="project" list="projectList"/> |
| <entity-one entity-name="WorkEffortAttribute" value-field="workEffortAttMap"> |
| <field-map field-name="workEffortId" from-field="parameters.projectId"/> |
| <field-map field-name="attrName" value="PROJECT_BILLED"/> |
| </entity-one> |
| <entity-condition entity-name="CustRequestAndCustRequestItem" list="custRequestList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="custRequestTypeId" value="RF_PROD_BACKLOG" /> |
| <condition-expr field-name="statusId" value="CRQ_ACCEPTED" /> |
| <condition-expr field-name="productId" from-field="project.productId"/> |
| </condition-list> |
| <order-by field-name="custSequenceNum"/> |
| </entity-condition> |
| |
| <loop count="${parameters.sprintBacklogs}" field="i"> |
| <set field="sequenceNumx" value="${i+1}"/> |
| <set field="sprintBL.custRequestId" from-field="custRequestList[i].custRequestId"/> |
| <set field="sprintBL.workEffortId" from-field="parameters.sprintId"/> |
| <set field="sprintBL.userLogin" from-field="userLogin"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="sprintBL"/> |
| <set field="inMap.custRequestId" from-field="custRequestList[i].custRequestId"/> |
| <set field="inMap.statusId" value="CRQ_REVIEWED"/> |
| <set field="inMap.custRequestName" value=" "/> |
| <set field="inMap.webSiteId" from-field="parameters.webSiteId"/> |
| <!-- if the Billed field of the project was set. --> |
| <if-not-empty field="workEffortAttMap"> |
| <set field="inMap.billed" from-field="workEffortAttMap.attrValue"/> |
| </if-not-empty> |
| <set field="inMap.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="updateCustRequest" in-map-name="inMap"/> |
| <!-- Check If there are tasks already in a backlog --> |
| <entity-condition entity-name="WorkEffortCustRequestView" list="backlogItemTaskList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="custRequestId" from-field="custRequestList[i].custRequestId"/> |
| <condition-list combine="or"> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_ERROR"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_IMPL"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_INST"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_TEST"/> |
| </condition-list> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="backlogItemTaskList"> |
| <entity-and entity-name="WorkEffortAndProduct" list="defaultTaskList"> |
| <field-map field-name="workEffortPurposeTypeId" value="SCRUM_DEFAULT_TASK"/> |
| <field-map field-name="productId" from-field="project.productId"/> |
| </entity-and> |
| <if-not-empty field="defaultTaskList"> |
| <iterate list="defaultTaskList" entry="defaultTask"> |
| <set field="newDefaultTask.workEffortName" from-field="defaultTask.workEffortName"/> |
| <set field="newDefaultTask.estimatedMilliSeconds" from-field="defaultTask.estimatedMilliSeconds"/> |
| <set field="newDefaultTask.currentStatusId" from-field="defaultTask.currentStatusId"/> |
| <set field="newDefaultTask.workEffortTypeId" from-field="defaultTask.workEffortTypeId"/> |
| <set field="newDefaultTask.workEffortParentId" from-field="parameters.sprintId"/> |
| <call-service service-name="createWorkEffort" in-map-name="newDefaultTask"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| <set field="newBacklogItemTask.custRequestId" from-field="custRequestList[i].custRequestId"/> |
| <set field="newBacklogItemTask.workEffortId" from-field="workEffortId"/> |
| <set field="newBacklogItemTask.userLogin" from-field="userLogin"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="newBacklogItemTask"/> |
| <!-- Assigned party for default task--> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="defaultTask.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="assigneds"> |
| <first-from-list list="assigneds" entry="assignedMap"/> |
| <set field="newInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="newInput.workEffortId" from-field="workEffortId"></set> |
| <set field="newInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="newInput.statusId" value="SCAS_ASSIGNED"></set> |
| <set field="newInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| <!-- Assigned party for sprint --> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="sprintAssigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="partyId" from-field="assignedMap.partyId"/> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="parameters.sprintId"/> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="sprintAssigneds"> |
| <set field="sprintInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="sprintInput.workEffortId" from-field="parameters.sprintId"></set> |
| <set field="sprintInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="sprintInput.statusId" value="PRTYASGN_ASSIGNED"></set> |
| <set field="sprintInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="sprintInput"/> |
| </if-empty> |
| </if-not-empty> |
| </iterate> |
| <else> |
| <!-- If not have default task in product level --> |
| <entity-and entity-name="WorkEffort" list="defaultTaskScrum"> |
| <field-map field-name="workEffortPurposeTypeId" value="SYSTEM_DEFAULT_TASK"/> |
| </entity-and> |
| <if-not-empty field="defaultTaskScrum"> |
| <iterate list="defaultTaskScrum" entry="defaultScrum"> |
| <set field="newDefaultTaskScrum.workEffortName" from-field="defaultScrum.workEffortName"/> |
| <set field="newDefaultTaskScrum.estimatedMilliSeconds" from-field="defaultScrum.estimatedMilliSeconds"/> |
| <set field="newDefaultTaskScrum.currentStatusId" from-field="defaultScrum.currentStatusId"/> |
| <set field="newDefaultTaskScrum.workEffortTypeId" from-field="defaultScrum.workEffortTypeId"/> |
| <set field="newDefaultTaskScrum.workEffortParentId" from-field="parameters.sprintId"/> |
| <call-service service-name="createWorkEffort" in-map-name="newDefaultTaskScrum"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| <set field="newBacklogItemTaskScrum.custRequestId" from-field="custRequestList[i].custRequestId"/> |
| <set field="newBacklogItemTaskScrum.workEffortId" from-field="workEffortId"/> |
| <set field="newBacklogItemTaskScrum.userLogin" from-field="userLogin"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="newBacklogItemTaskScrum"/> |
| <!-- Assigned party for default task--> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="defaultScrum.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="assigneds"> |
| <first-from-list list="assigneds" entry="assignedMap"/> |
| <set field="newInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="newInput.workEffortId" from-field="workEffortId"></set> |
| <set field="newInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="newInput.statusId" value="SCAS_ASSIGNED"></set> |
| <set field="newInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| <!-- Assigned party for sprint --> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="sprintAssigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="partyId" from-field="assignedMap.partyId"/> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="parameters.sprintId"/> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="sprintAssigneds"> |
| <set field="sprintInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="sprintInput.workEffortId" from-field="parameters.sprintId"></set> |
| <set field="sprintInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="sprintInput.statusId" value="PRTYASGN_ASSIGNED"></set> |
| <set field="sprintInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="sprintInput"/> |
| </if-empty> |
| </if-not-empty> |
| </iterate> |
| </if-not-empty> |
| </else> |
| </if-not-empty> |
| <else> |
| <loop count="${groovy: backlogItemTaskList.size()}" field="j"> |
| <set field="updateWorkEffort.workEffortId" from-field="backlogItemTaskList[j].workEffortId"/> |
| <set field="updateWorkEffort.workEffortParentId" from-field="parameters.sprintId"/> |
| <call-service service-name="updateWorkEffort" in-map-name="updateWorkEffort"/> |
| </loop> |
| </else> |
| </if-empty> |
| </loop> |
| <if-not-empty field="parameters.sprintId"> |
| <field-to-request field="parameters.sprintId" request-name="sprintId"/> |
| </if-not-empty> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| <simple-method method-name="addScrumResource" short-description="make parties available in the Scrum."> |
| <set field="userLoginIdDesc" from-field="parameters.userLoginIdDesc"/> |
| <set field="userLoginId" value="${groovy:userLoginIdDesc.substring(userLoginIdDesc.indexOf("|")+1)}"/> |
| <entity-and entity-name="UserLogin" list="userLogins"> |
| <field-map field-name="partyId" from-field="parameters.partyId"/> |
| </entity-and> |
| <entity-one entity-name="PartyNameView" value-field="partyNameView"/> |
| <if-empty field="userLogins"> |
| <set field="_error_message_" value="${partyNameView.lastName}, ${partyNameView.firstName} [${parameters.partyId}] does not have UserLogin."/> |
| <return response-code="error"/> |
| </if-empty> |
| <if-compare operator="equals" value="SCRUM_PRODUCT_OWNER" field="parameters.groupId"> |
| <set field="parameters.roleTypeId" value="PRODUCT_OWNER"/> |
| </if-compare> |
| <if-compare operator="equals" value="SCRUM_MASTER" field="parameters.groupId"> |
| <set field="parameters.roleTypeId" value="SCRUM_MASTER"/> |
| </if-compare> |
| <if-compare operator="equals" value="SCRUM_TEAM" field="parameters.groupId"> |
| <set field="parameters.roleTypeId" value="SCRUM_TEAM"/> |
| </if-compare> |
| <!-- For special role --> |
| <if-compare operator="equals" value="SCRUM_STAKEHOLDER" field="parameters.groupId"> |
| <set field="parameters.roleTypeId" value="STAKEHOLDER"/> |
| </if-compare> |
| |
| <set-service-fields service-name="ensurePartyRole" map="parameters" to-map="ensurePartyRole"/> |
| <set field="ensurePartyRole.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="ensurePartyRole" in-map-name="ensurePartyRole"/> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| |
| <entity-and entity-name="UserLoginSecurityGroup" list="listGroupId"> |
| <field-map field-name="userLoginId" from-field="userLoginId"/> |
| <field-map field-name="groupId" from-field="parameters.groupId"/> |
| </entity-and> |
| <if-empty field="listGroupId"> |
| <set field="parameters.userLoginId" from-field="userLoginId"/> |
| <set-service-fields service-name="addUserLoginToSecurityGroup" map="parameters" to-map="inMap"/> |
| <set field="inMap.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="addUserLoginToSecurityGroup" in-map-name="inMap"/> |
| <else> |
| <entity-one entity-name="RoleType" value-field="roleTypeMap"> |
| <field-map field-name="roleTypeId" from-field="parameters.roleTypeId"/> |
| </entity-one> |
| <add-error> |
| <fail-message message="There are partyId : ${parameters.partyId} , userLoginId : ${userLoginId} and roleTypeId : ${roleTypeMap.description} already exist."/> |
| </add-error> |
| <check-errors/> |
| </else> |
| </if-empty> |
| <set field="roleData.partyId" from-field="parameters.partyId"/> |
| <set field="roleData.roleTypeId" value="SCRUM_MEMBER"/> |
| <set field="roleData.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="ensurePartyRole" in-map-name="roleData"> |
| <default-message resource="CommonUiLabels" property="CommonSuccessfullyCreated"/> |
| </call-service> |
| </simple-method> |
| |
| <simple-method method-name="createSprintBacklogTask" short-description="Create Sprint Backlog Task"> |
| <call-class-method class-name="org.apache.ofbiz.content.layout.LayoutWorker" method-name="uploadImageAndParameters" ret-field="formInput"> |
| <field field="request" type="javax.servlet.http.HttpServletRequest"/> |
| <string value="uploadedFile"/> |
| </call-class-method> |
| <entity-one entity-name="UserLogin" value-field="systemUser"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <entity-one entity-name="CustRequest" value-field="custRequestMap"> |
| <field-map field-name="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| </entity-one> |
| <if-empty field="formInput.formInput.sprintId"> |
| <entity-and entity-name="CustRequestAndWorkEffort" list="custRequestWorkEfforts"> |
| <field-map field-name="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| <field-map field-name="currentStatusId" value="SPRINT_ACTIVE"/> |
| </entity-and> |
| <if-not-empty field="custRequestWorkEfforts"> |
| <first-from-list list="custRequestWorkEfforts" entry="custRequestWorkEffort"/> |
| <set field="formInput.formInput.sprintId" from-field="custRequestWorkEffort.workEffortId"/> |
| </if-not-empty> |
| </if-empty> |
| <if> |
| <condition> |
| <not><if-empty field="formInput.formInput.actualStartDate"/></not> |
| </condition> |
| <then> |
| <entity-one entity-name="WorkEffort" value-field="sprint"> |
| <field-map field-name="workEffortId" from-field="formInput.formInput.sprintId"/> |
| </entity-one> |
| <set field="formInput.formInput.actualStartDate" from-field="sprint.actualStartDate"/> |
| <if> |
| <condition> |
| <or> |
| <if-compare-field operator="less" field="formInput.formInput.actualStartDate" to-field="sprint.actualStartDate" type="Timestamp"/> |
| <if-compare-field operator="greater" field="formInput.formInput.actualStartDate" to-field="sprint.actualCompletionDate" type="Timestamp"/> |
| </or> |
| </condition> |
| <then> |
| <add-error> |
| <fail-message message="Start Date isn't in Sprint Duration."/> |
| </add-error> |
| </then> |
| </if> |
| </then> |
| </if> |
| <check-errors/> |
| <if-empty field="formInput.formInput.workEffortName"> |
| <add-error > |
| <fail-message message="Task name is empty, please enter task name."/> |
| </add-error> |
| </if-empty> |
| <check-errors/> |
| <if-not-empty field="formInput.formInput.planHours"> |
| <set field="formInput.formInput.estimatedMilliSeconds" from-field="formInput.formInput.planHours" type="Float"/> |
| <calculate field="formInput.formInput.estimatedMilliSeconds" type="Float"> |
| <calcop operator="multiply" field="formInput.formInput.estimatedMilliSeconds"> |
| <number value="3600000"/> |
| </calcop> |
| </calculate> |
| </if-not-empty> |
| <if-compare field="custRequestMap.custRequestTypeId" operator="equals" value="RF_UNPLAN_BACKLOG"> |
| <if-empty field="formInput.formInput.actualStartDate"> |
| <now-timestamp field="nowTimesamp"/> |
| <set field="formInput.formInput.actualStartDate" from-field="nowTimesamp"/> |
| </if-empty> |
| </if-compare> |
| <set field="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| <clear-field field="formInput.formInput.custRequestId"/> |
| <if-compare field="custRequestMap.custRequestTypeId" operator="not-equals" value="RF_UNPLAN_BACKLOG"> |
| <set field="formInput.formInput.workEffortParentId" from-field="formInput.formInput.sprintId"/> |
| </if-compare> |
| <set field="formInput.formInput.currentStatusId" value="STS_CREATED"/> |
| <if-compare field="formInput.formInput.workEffortTypeId" operator="equals" value="SCRUM_TASK_ERROR"> |
| <set field="formInput.formInput.priority" value="1"/> |
| </if-compare> |
| <if-compare field="formInput.formInput.workEffortTypeId" operator="equals" value="SCRUM_TASK_TEST"> |
| <set field="formInput.formInput.priority" value="2"/> |
| </if-compare> |
| <if-compare field="formInput.formInput.workEffortTypeId" operator="equals" value="SCRUM_TASK_IMPL"> |
| <set field="formInput.formInput.priority" value="3"/> |
| </if-compare> |
| <if-compare field="formInput.formInput.workEffortTypeId" operator="equals" value="SCRUM_TASK_INST"> |
| <set field="formInput.formInput.priority" value="4"/> |
| </if-compare> |
| <set-service-fields service-name="createWorkEffort" map="formInput.formInput" to-map="createWorkEffort"/> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <if-has-permission permission="SCRUM" action="_ADMIN"> |
| <set field="createWorkEffort.userLogin" from-field="sysUserLogin"/> |
| </if-has-permission> |
| <call-service service-name="createWorkEffort" in-map-name="createWorkEffort"> |
| <result-to-field result-name="workEffortId" field="formInput.formInput.workEffortId"/> |
| </call-service> |
| <set field="formInput.formInput.custRequestId" from-field="custRequestId"/> |
| <set-service-fields service-name="createWorkEffortRequest" map="formInput.formInput" to-map="createWorkEffortRequest"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="createWorkEffortRequest"/> |
| |
| <!--if plan hours(from task) more than first plan hours --> |
| <set field="backlogPlanMap.custRequestId" from-field="formInput.formInput.custRequestId" /> |
| <set field="taskPlanMap.custRequestId" from-field="formInput.formInput.custRequestId" /> |
| <call-service service-name="getScrumPlanHour" in-map-name="backlogPlanMap"> |
| <result-to-field result-name="planHours" /> |
| </call-service> |
| <call-service service-name="getScrumPlanHour" in-map-name="taskPlanMap"> |
| <result-to-field result-name="initPlanHours"/> |
| </call-service> |
| <if-compare-field field="planHours" operator="greater" to-field="initPlanHours" type="Double"> |
| <entity-one entity-name="CustRequest" value-field="custRequestMap"> |
| <field-map field-name="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| </entity-one> |
| <set field="planHoursIn" from-field="planHours" type="Double"/> |
| <set field="custRequestMap.custEstimatedMilliSeconds" value="${groovy:planHoursIn*1000*60*60}" type="Double"/> |
| <store-value value-field="custRequestMap"/> |
| <else> |
| <if-compare-field field="initPlanHours" operator="greater" to-field="planHours" type="Double"> |
| <entity-one entity-name="CustRequest" value-field="custRequestMap"> |
| <field-map field-name="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| </entity-one> |
| <set field="planHoursIn" from-field="planHours" type="Double"/> |
| <set field="custRequestMap.custEstimatedMilliSeconds" value="${groovy:planHoursIn*1000*60*60}" type="Double"/> |
| <store-value value-field="custRequestMap"/> |
| </if-compare-field> |
| </else> |
| </if-compare-field> |
| <if-not-empty field="formInput.formInput.partyId"> |
| <!-- Assigned --> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="partyId" from-field="formInput.formInput.partyId"/> |
| <condition-expr field-name="statusId" value="SCAS_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="formInput.formInput.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="assigneds"> |
| <entity-and entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <field-map field-name="workEffortId" from-field="formInput.formInput.workEffortId"/> |
| </entity-and> |
| <entity-and entity-name="PartyRole" list="taskOwnerRoles"> |
| <field-map field-name="partyId" from-field="formInput.formInput.partyId"/> |
| <field-map field-name="roleTypeId" value="SCRUM_TEAM"/> |
| </entity-and> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <iterate list="assigneds" entry="assigned"> |
| <remove-value value-field="assigned"/> |
| </iterate> |
| <set field="newInput.partyId" from-field="formInput.formInput.partyId"></set> |
| <set field="newInput.workEffortId" from-field="formInput.formInput.workEffortId"></set> |
| <set field="newInput.roleTypeId" from-field="taskOwnerRoles[0].roleTypeId"></set> |
| <set field="newInput.statusId" value="SCAS_ASSIGNED"></set> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| </if-empty> |
| </if-not-empty> |
| <!-- for contents --> |
| <if-not-empty field="formInput.imageFileName"> |
| <add-error><fail-message message="Upload file is missing..."/></add-error> |
| <set field="parameters.imageFileName" from-field="formInput.imageFileName"/> |
| |
| <!-- Create Data Resource --> |
| <set-service-fields service-name="createContentFromUploadedFile" |
| map="formInput.formInput" to-map="data"/> |
| <set field="data.dataResourceTypeId" value="LOCAL_FILE"/> |
| <set field="data.dataTemplateTypeId" value="NONE"/> |
| <set field="data.dataCategoryId" from-field="formInput.formInput.dataCategoryId"/> |
| <set field="data.userLogin" from-field="systemUser"/> |
| <set field="data.statusId" from-field="formInput.formInput.resourceStatusId"/> |
| <set field="data.dataResourceName" from-field="formInput.imageFileName"/> |
| <set field="data.mimeTypeId" from-field="mimeType.mimeTypeId"/> |
| <set field="data.uploadedFile" from-field="formInput.imageData"/> |
| <set field="data._uploadedFile_fileName" from-field="formInput.imageFileName"/> |
| <set field="data._uploadedFile_contentType" from-field="formInput.formInput.mimeTypeId"/> |
| <call-service service-name="createDataResource" in-map-name="data"> |
| <result-to-field result-name="dataResourceId" field="parameters.dataResourceId"/> |
| </call-service> |
| <!-- Create attach upload to data resource --> |
| <set-service-fields service-name="attachUploadToDataResource" map="formInput.formInput" |
| to-map="attachMap"/> |
| <set field="attachMap.uploadedFile" from-field="formInput.imageData"/> |
| <set field="attachMap._uploadedFile_fileName" from-field="formInput.imageFileName"/> |
| <set field="attachMap._uploadedFile_contentType" from-field="formInput.formInput.mimeTypeId"/> |
| <set field="attachMap.dataResourceId" from-field="parameters.dataResourceId"/> |
| <set field="attachMap.mimeTypeId" from-field="mimeType.mimeTypeId"/> |
| <call-service service-name="attachUploadToDataResource" in-map-name="attachMap"/> |
| <!-- Create content from dataResource --> |
| <set-service-fields service-name="createContentFromDataResource" |
| map="formInput.formInput" to-map="contentMap"/> |
| <set field="contentMap.roleTypeId" from-field="formInput.formInput.roleTypeId"/> |
| <set field="contentMap.partyId" from-field="formInput.formInput.partyId"/> |
| <set field="contentMap.contentTypeId" from-field="formInput.formInput.contentTypeId"/> |
| <set field="contentMap.dataResourceId" from-field="parameters.dataResourceId"/> |
| <set field="contentMap.userLogin" from-field="systemUser"/> |
| <call-service service-name="createContentFromDataResource" in-map-name="contentMap"> |
| <result-to-field result-name="contentId" field="formInput.formInput.contentId"/> |
| </call-service> |
| <!-- Create WorkEffort Content --> |
| <set-service-fields service-name="createWorkEffortContent" map="formInput.formInput" to-map="workEffortContent"/> |
| <set field="workEffortContent.userLogin" from-field="systemUser"/> |
| <set field="workEffortContent.workEffortContentTypeId" from-field="formInput.formInput.workEffortContentTypeId"/> |
| <call-service service-name="createWorkEffortContent" in-map-name="workEffortContent"/> |
| </if-not-empty> |
| <field-to-request field="formInput.formInput.workEffortId" request-name="taskId"/> |
| </simple-method> |
| <simple-method method-name="addProjectMember" short-description="Add Project Member"> |
| <set field="groupIdDesc" from-field="parameters.groupIdDesc"/> |
| <set field="groupName" value="${groovy:groupIdDesc.substring(0, groupIdDesc.indexOf("--"))}"/> |
| <set field="fullName" value="${groovy:groupIdDesc.substring(groupIdDesc.indexOf("--")+2, groupIdDesc.indexOf("|"))}"/> |
| <set field="groupId" value="${groovy:groupIdDesc.substring(groupIdDesc.indexOf("|")+1)}"/> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="project"> |
| <condition-list> |
| <condition-expr field-name="workEffortId" from-field="parameters.projectId"/> |
| <condition-expr field-name="roleTypeId" value="PRODUCT_OWNER"/> |
| </condition-list> |
| </entity-condition> |
| <entity-and entity-name="UserLogin" list="userLogins"> |
| <field-map field-name="partyId" from-field="parameters.partyId"/> |
| </entity-and> |
| <entity-one entity-name="PartyNameView" value-field="partyNameView"/> |
| <if-not-empty field="project"> |
| <if-compare operator="equals" value="PRODUCT_OWNER" field="roleTypeId"> |
| <set field="_error_message_" value="The system can add only one product owner!"/> |
| <return response-code="error"/> |
| </if-compare> |
| </if-not-empty> |
| <if-compare operator="equals" value="SCRUM_PRODUCT_OWNER" field="groupId"> |
| <set field="parameters.roleTypeId" value="PRODUCT_OWNER"/> |
| </if-compare> |
| <if-compare operator="equals" value="SCRUM_MASTER" field="groupId"> |
| <set field="parameters.roleTypeId" value="SCRUM_MASTER"/> |
| </if-compare> |
| <if-compare operator="equals" value="SCRUM_TEAM" field="groupId"> |
| <set field="parameters.roleTypeId" value="SCRUM_TEAM"/> |
| </if-compare> |
| <if-compare operator="equals" value="SCRUM_STAKEHOLDER" field="groupId"> |
| <set field="parameters.roleTypeId" value="STAKEHOLDER"/> |
| </if-compare> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| |
| <set-service-fields service-name="ensurePartyRole" map="parameters" to-map="ensurePartyRole"/> |
| <set field="ensurePartyRole.userLogin" from-field="sysUserLogin"/> |
| <set field="ensurePartyRole.roleTypeId" from-field="parameters.roleTypeId"/> |
| <call-service service-name="ensurePartyRole" in-map-name="ensurePartyRole"/> |
| <set-service-fields service-name="assignPartyToWorkEffort" map="parameters" to-map="assignPartyToWorkEffort"/> |
| <set field="assignPartyToWorkEffort.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="assignPartyToWorkEffort"/> |
| </simple-method> |
| |
| <simple-method method-name="addMemberTask" short-description="Assign member to Tasks"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_TASK" action="_CREATE"/> |
| </or> |
| </condition> |
| <then> |
| <set field="taskId" from-field="parameters.taskId" default-value="${parameters.workEffortId}"/> |
| <!-- get backlog from task --> |
| <entity-and entity-name="ProductBacklog" list="scrumMeetingBacklogs"> |
| <field-map field-name="workEffortId" from-field="taskId"/> |
| <field-map field-name="custRequestTypeId" value="RF_SCRUM_MEETINGS"/> |
| </entity-and> |
| <if-not-empty field="scrumMeetingBacklogs"> |
| <!-- be able to assign more than one person in this task --> |
| <set field="member.partyId" from-field="parameters.partyId"/> |
| <set field="member.roleTypeId" from-field="parameters.roleTypeId"/> |
| <set field="member.statusId" value="SCAS_ASSIGNED"/> |
| <set field="member.workEffortId" from-field="taskId"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="member"/> |
| <else> |
| <!-- check if this task assign to member, and they also enter actual hour. return error --> |
| <entity-and entity-name="WorkEffortPartyAssignment" list="workEffortPartyAssignments"> |
| <field-map field-name="workEffortId" from-field="taskId"/> |
| </entity-and> |
| <if-not-empty field="workEffortPartyAssignments"> |
| <!-- remove existing party and add new party --> |
| <iterate list="workEffortPartyAssignments" entry="workEffortPartyAssignment"> |
| <remove-value value-field="workEffortPartyAssignment"/> |
| </iterate> |
| </if-not-empty> |
| <!-- assign new party to task --> |
| <set field="newInput.partyId" from-field="parameters.partyId"/> |
| <set field="newInput.workEffortId" from-field="taskId"/> |
| <set field="newInput.fromDate" from-field="parameters.fromDate"/> |
| <set field="newInput.thruDate" from-field="parameters.thruDate"/> |
| <if-empty field="taskOwnerRoles"> |
| <set field="newInput.roleTypeId" from-field="parameters.roleTypeId"/> |
| </if-empty> |
| <set field="newInput.roleTypeId" from-field="taskOwnerRoles[0].roleTypeId"/> |
| <set field="newInput.statusId" value="SCAS_ASSIGNED"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| </else> |
| </if-not-empty> |
| <field-to-request field="taskId" request-name="workEffortId"/> |
| <field-to-request field="taskId" request-name="taskId"/> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="deleteProduct" short-description=""> |
| <if> |
| <condition> |
| <or> |
| <!-- Permission Check --> |
| <if-has-permission permission="SCRUM_PRODUCT" action="_DELETE"/> |
| <if-has-permission permission="SCRUM_PRODUCT" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM" action="_DELETE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <entity-one entity-name="Product" value-field="product"/> |
| <make-value value-field="product" entity-name="Product"/> |
| <set field="product.productId" from-field="parameters.productId"/> |
| <set field="product.productTypeId" value="SCRUM_ITEM"/> |
| <!--<remove-related relation-name="CustRequestItem" value-field="product"/>--> |
| <remove-related relation-name="ProductRole" value-field="product"/> |
| <remove-related relation-name="ProductKeyword" value-field="product"/> |
| <remove-related relation-name="CustRequestItem" value-field="product"/> |
| <remove-value value-field="product"/> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| <simple-method method-name="updateProductBacklog" short-description=""> |
| <!-- Permission Check --> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_PRODUCT_BACKLOG" action="_UPDATE"/> |
| <if-has-permission permission="SCRUM_PRODUCT_BACKLOG" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <call-simple-method method-name="getWebSiteId"/> |
| <entity-one entity-name="CustRequest" value-field="custRequest"> |
| <field-map field-name="custRequestId" from-field="parameters.custRequestId"/> |
| </entity-one> |
| <set field="update.custRequestId" from-field="parameters.custRequestId"/> |
| <if-empty field="parameters.description"> |
| <add-error > |
| <fail-message message="There Product Backlog Item is missing, Please add."/> |
| </add-error> |
| <check-errors/> |
| </if-empty> |
| <set field="update.description" from-field="parameters.description"/> |
| <set field="update.parentCustRequestId" from-field="parameters.parentCustRequestId"/> |
| <set-service-fields service-name="updateCustRequest" map="parameters" to-map="update"/> |
| <set field="changeToMilliSec" value="${parameters.custEstimatedMilliSeconds *1000*60*60}"></set> |
| <set field="update.custEstimatedMilliSeconds" from-field="changeToMilliSec" type="Double"/> |
| <set field="update.fromPartyId" from-field="parameters.partyIdTo" default-value="${custRequest.fromPartyId}"/> |
| <set field="update.custRequestTypeId" from-field="parameters.custRequestTypeId"/> |
| <call-service service-name="updateCustRequest" in-map-name="update"/> |
| <!-- Update CustRequestItem --> |
| <entity-and entity-name="CustRequestItem" list="custRequestItemList"> |
| <field-map field-name="custRequestId" from-field="parameters.custRequestId"/> |
| </entity-and> |
| <first-from-list list="custRequestItemList" entry="custRequestItemMap"/> |
| <if-compare-field field="custRequestItemMap.productId" operator="not-equals" to-field="parameters.productId" type="String"> |
| <set field="nullField" type="String"/> |
| <set field="custRequest.parentCustRequestId" from-field="nullField"/> |
| <store-value value-field="custRequest"/> |
| <set field="custRequestItemMap.productId" from-field="parameters.productId"/> |
| <store-value value-field="custRequestItemMap"/> |
| </if-compare-field> |
| |
| <entity-and entity-name="CustRequestNoteView" list="custRequestNoteViews"> |
| <field-map field-name="custRequestId" from-field="parameters.custRequestId"/> |
| <field-map field-name="noteName" value="How to test"/> |
| </entity-and> |
| |
| <if-empty field="custRequestNoteViews"> |
| <!-- create CustRequestNote --> |
| <if-not-empty field="parameters.noteInfo"> |
| <make-value value-field="newEntity" entity-name="CustRequestNote"/> |
| <set from-field="parameters.custRequestId" field="newEntity.custRequestId"/> |
| <set field="newNoteMap.note" from-field="parameters.noteInfo"/> |
| <set field="newNoteMap.noteName" value="How to test"/> |
| <call-service service-name="createNote" in-map-name="newNoteMap" > |
| <result-to-field result-name="noteId" field="newEntity.noteId" /> |
| </call-service> |
| <create-value value-field="newEntity"/> |
| </if-not-empty> |
| <else> |
| <!-- update noteData --> |
| <set-service-fields service-name="updateNote" map="parameters" to-map="updateNoteCtx"/> |
| <call-service service-name="updateNote" in-map-name="updateNoteCtx"/> |
| </else> |
| </if-empty> |
| <set field="productId" from-field="custRequestItem[0].productId"/> |
| <field-to-request field="custRequestItem[0].productId" request-name="productId"/> |
| <field-to-request field="parameters.sequence" request-name="sequence"/> |
| <field-to-request field="parameters.UnplannedSequence" request-name="UnplannedSequence"/> |
| </then> |
| <else> |
| <set field="_error_message_" value="You has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| <simple-method method-name="createProductAndRole" short-description=""> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PRODUCT" action="_CREATE"/> |
| </or> |
| </condition> |
| <then> |
| <now-timestamp field="nowTimestamp"/> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <if-not-empty field="parameters.internalName"> |
| <set field="product.internalName" from-field="parameters.internalName"/> |
| <set field="product.longDescription" from-field="parameters.longDescription"/> |
| <set field="product.productTypeId" value="SCRUM_ITEM"/> |
| <set field="product.introductionDate" from-field="nowTimestamp"/> |
| <set field="product.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="createProduct" in-map-name="product"> |
| <result-to-field result-name="productId"/> |
| </call-service> |
| <!-- create ProductRole --> |
| <set field="partyId" from-field="parameters.partyId"/> |
| <set field="parameters.partyIdTo" from-field="partyId"/> |
| <set field="parameters.productId" from-field="productId"/> |
| <call-simple-method method-name="createProductRole"/> |
| <else> |
| <set field="_error_message_" value="There is no product name."/> |
| <return response-code="error"/> |
| </else> |
| </if-not-empty> |
| <field-to-request field="productId"/> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="createProductRole" |
| short-description="Create Product Role" login-required="true"> |
| <now-timestamp field="nowTimestamp" /> |
| <set field="partyCompany" from-field="parameters.partyCompany"/> |
| <set field="companyId" value="${groovy:partyCompany.substring(partyCompany.indexOf('[')+1,partyCompany.indexOf(']'))}"/> |
| <!-- Create partyPreson --> |
| <entity-one entity-name="PartyRole" value-field="partyRoles"> |
| <field-map field-name="partyId" value="${parameters.partyId}"/> |
| <field-map field-name="roleTypeId" value="PRODUCT_OWNER"/> |
| </entity-one> |
| <if-empty field="partyRoles"> |
| <make-value value-field="partyRole" entity-name="PartyRole"/> |
| <set field="partyRole.partyId" value="${parameters.partyId}"/> |
| <set field="partyRole.roleTypeId" value="PRODUCT_OWNER"/> |
| <create-value value-field="partyRole"/> |
| </if-empty> |
| <make-value value-field="productRole" entity-name="ProductRole" /> |
| <set field="productRole.productId" from-field="parameters.productId" /> |
| <set field="productRole.partyId" value="${parameters.partyId}"/> |
| <set field="productRole.roleTypeId" value="PRODUCT_OWNER"/> |
| <set field="productRole.fromDate" from-field="nowTimestamp" /> |
| <create-value value-field="productRole"/> |
| <!-- Create partyCompany --> |
| <entity-one entity-name="PartyRole" value-field="partyRoles"> |
| <field-map field-name="partyId" value="${companyId}"/> |
| <field-map field-name="roleTypeId" value="PRODUCT_OWNER_COMP"/> |
| </entity-one> |
| <if-empty field="partyRoles"> |
| <make-value value-field="partyRole" entity-name="PartyRole"/> |
| <set field="partyRole.partyId" value="${companyId}"/> |
| <set field="partyRole.roleTypeId" value="PRODUCT_OWNER_COMP"/> |
| <create-value value-field="partyRole"/> |
| </if-empty> |
| <make-value value-field="productRole" entity-name="ProductRole" /> |
| <set field="productRole.productId" from-field="parameters.productId" /> |
| <set field="productRole.partyId" value="${companyId}"/> |
| <set field="productRole.roleTypeId" value="PRODUCT_OWNER_COMP"/> |
| <set field="productRole.fromDate" from-field="nowTimestamp" /> |
| <create-value value-field="productRole"/> |
| </simple-method> |
| |
| <simple-method method-name="updateProduct" short-description=""> |
| <!-- CHECK PERMISSION --> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM" action="_UPDATE"/> |
| <if-has-permission permission="SCRUM_PRODUCT" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PRODUCT" action="_UPDATE"/> |
| </or> |
| </condition> |
| <then> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <if-empty field="parameters.partyCompany"> |
| <if-not-empty field="parameters.partyId"> |
| <set field="partyCompany" value="${parameters.partyId}"/> |
| <if-compare operator="equals" value="Y" field="parameters.isCloseBtn"> |
| <set field="companyId" from-field="parameters.companyId"/> |
| <entity-and entity-name="PartyRelationship" list="owner"> |
| <field-map field-name="partyIdFrom" from-field="companyId"/> |
| </entity-and> |
| <!--<set field="partyOwnerId" from-field="userLogin.partyId"/>--> |
| <set field="partyOwnerId" from-field="owner[0].partyIdTo"/> |
| <else> |
| <set field="companyId" value="${groovy:partyCompany.substring(partyCompany.indexOf('[')+1,partyCompany.indexOf(']'))}"/> |
| <set field="partyOwnerId" value="${groovy:partyCompany.substring(partyCompany.indexOf('(')+1,partyCompany.indexOf(')'))}"/> |
| </else> |
| </if-compare> |
| </if-not-empty> |
| <else> |
| <set field="partyCompany" from-field="parameters.partyCompany"/> |
| <set field="companyId" value="${groovy:partyCompany.substring(partyCompany.indexOf('[')+1,partyCompany.indexOf(']'))}"/> |
| <set field="partyOwnerId" from-field="parameters.partyId"/> |
| </else> |
| </if-empty> |
| <if-not-empty field="companyId" > |
| <now-timestamp field="nowTimestamp"/> |
| <entity-and entity-name="ProductRole" list="productRoleList"> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| <field-map field-name="roleTypeId" value="PRODUCT_OWNER_COMP"/> |
| </entity-and> |
| <if-empty field="productRoleList"> |
| <entity-and entity-name="PartyRole" list="partyRoleList"> |
| <field-map field-name="partyId" value="${companyId}"/> |
| <field-map field-name="roleTypeId" value="PRODUCT_OWNER_COMP"/> |
| </entity-and> |
| <if-empty field="partyRoleList"> |
| <make-value value-field="partyRole" entity-name="PartyRole"/> |
| <set field="partyRole.partyId" value="${companyId}"/> |
| <set field="partyRole.roleTypeId" value="PRODUCT_OWNER_COMP"/> |
| <create-value value-field="partyRole"/> |
| </if-empty> |
| <call-class-method class-name="org.apache.ofbiz.base.util.UtilDateTime" method-name="getDayStart" ret-field="formDate"> |
| <field field="nowTimestamp" type="java.sql.Timestamp"/> |
| </call-class-method> |
| <make-value value-field="productRole" entity-name="ProductRole" /> |
| <set field="productRole.productId" from-field="parameters.productId" /> |
| <set field="productRole.partyId" value="${companyId}"/> |
| <set field="productRole.roleTypeId" value="PRODUCT_OWNER_COMP"/> |
| <set field="productRole.fromDate" from-field="nowTimestamp" type="Timestamp"/> |
| <create-value value-field="productRole"/> |
| </if-empty> |
| <log level="info" message="${productRoleList[0].partyId}"/> |
| <if-compare operator="not-equals" value="${companyId}" field="productRoleList[0].partyId"> |
| <entity-and entity-name="ProductRole" list="ownerProductRoles" filter-by-date="true"> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| <field-map field-name="roleTypeId" value="PRODUCT_OWNER"/> |
| </entity-and> |
| <if-not-empty field="ownerProductRoles"> |
| <first-from-list list="ownerProductRoles" entry="ownerProductRole"/> |
| <set-service-fields service-name="removePartyFromProduct" to-map="removeProductOwnerRole" map="ownerProductRole"/> |
| <set field="removeProductOwnerRole.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="removePartyFromProduct" in-map-name="removeProductOwnerRole"/> |
| </if-not-empty> |
| <entity-and entity-name="ProductRole" list="companyRoles" filter-by-date="true"> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| <field-map field-name="roleTypeId" value="PRODUCT_OWNER_COMP"/> |
| <field-map field-name="partyId" from-field="productRoleList[0].partyId"/> |
| </entity-and> |
| <if-not-empty field="companyRoles"> |
| <first-from-list list="companyRoles" entry="companyRole"/> |
| <set-service-fields service-name="removePartyFromProduct" to-map="removeCompanyRole" map="companyRole"/> |
| <set field="removeCompanyRole.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="removePartyFromProduct" in-map-name="removeCompanyRole"/> |
| </if-not-empty> |
| |
| <set field="updateProdOwner.partyId" from-field="partyOwnerId"/> |
| <set field="updateProdOwner.roleTypeId" value="PRODUCT_OWNER"/> |
| <set field="updateProdOwner.productId" from-field="parameters.productId"/> |
| <set field="updateProdOwner.fromDate" from-field="productRole.fromDate"/> |
| <set field="updateProdOwner.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="addPartyToProduct" in-map-name="updateProdOwner"/> |
| <entity-and entity-name="ProductRole" list="productCompList"> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| <field-map field-name="partyId" from-field="companyId"/> |
| <field-map field-name="roleTypeId" value="PRODUCT_OWNER_COMP"/> |
| </entity-and> |
| <if-empty field="productCompList"> |
| <make-value value-field="productComp" entity-name="ProductRole" /> |
| <set field="productComp.productId" from-field="parameters.productId" /> |
| <set field="productComp.partyId" value="${companyId}"/> |
| <set field="productComp.roleTypeId" value="PRODUCT_OWNER_COMP"/> |
| <set field="productComp.fromDate" from-field="nowTimestamp"/> |
| <create-value value-field="productComp"/> |
| </if-empty> |
| </if-compare> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <set field="update.productId" from-field="parameters.productId"/> |
| <set field="update.internalName" from-field="parameters.internalName"/> |
| <if-compare field="parameters.statusId" operator="equals" value="PRODUCT_CLOSED"> |
| <set field="update.supportDiscontinuationDate" from-field="nowTimestamp"/> |
| </if-compare> |
| <set field="update.longDescription" from-field="parameters.longDescription"/> |
| <set field="update.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="updateProduct" in-map-name="update"/> |
| <if-compare operator="equals" value="PRODUCT_CLOSED" field="parameters.statusId"> |
| <!-- Commplete Default Tasks --> |
| <entity-and entity-name="WorkEffortAndProduct" list="defaultTaskList"> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| <field-map field-name="workEffortPurposeTypeId" value="SCRUM_DEFAULT_TASK"/> |
| </entity-and> |
| <if-not-empty field="defaultTaskList"> |
| <iterate list="defaultTaskList" entry="defaultTaskMap"> |
| <set field="defaultTaskMap.currentStatusId" value="STS_COMPLETED"/> |
| <store-value value-field="defaultTaskMap"/> |
| </iterate> |
| </if-not-empty> |
| <!-- Close The Project --> |
| <entity-and entity-name="WorkEffortAndProduct" list="projects"> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| <field-map field-name="workEffortTypeId" value="SCRUM_PROJECT"/> |
| </entity-and> |
| <if-not-empty field="projects"> |
| <iterate list="projects" entry="project"> |
| <set field="workEffortId" from-field="project.workEffortId"/> |
| <set field="projectId" from-field="project.workEffortId"/> |
| <set field="parameters.workEffortId" from-field="workEffortId"/> |
| <set field="parameters.projectId" from-field="projectId"/> |
| <set field="parameters.currentStatusId" value="SPJ_CLOSED"/> |
| <call-simple-method method-name="updateScrumProject"/> |
| </iterate> |
| </if-not-empty> |
| </if-compare> |
| <else> |
| <set field="_error_message_" value="Please Select the Product Owner and Company"/> |
| <return response-code="error"/> |
| </else> |
| </if-not-empty> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="createDailyNote" short-description="Create Daily Meeting Minute Note"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_DAILY" action="_CREATE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <now-timestamp field="nowTimestamp"/> |
| <call-class-method class-name="org.apache.ofbiz.base.util.UtilDateTime" method-name="getDayStart" ret-field="noteDateTime"> |
| <field field="nowTimestamp" type="java.sql.Timestamp"/> |
| </call-class-method> |
| |
| <if-not-empty field="parameters.noteInfo1"> |
| <make-value value-field="noteData" entity-name="NoteData"/> |
| <sequenced-id sequence-name="NoteData" field="noteId"/> |
| <set field="noteData.noteId" from-field="noteId"/> |
| <set field="noteData.noteName" from-field="parameters.noteName1"/> |
| <set field="noteData.noteInfo" from-field="parameters.noteInfo1"/> |
| <set field="noteData.noteParty" from-field="userLogin.partyId"/> |
| <set field="noteData.noteDateTime" from-field="noteDateTime" type="Timestamp"/> |
| <create-value value-field="noteData"/> |
| |
| <make-value value-field="newWorkEffortNote" entity-name="WorkEffortNote"/> |
| <set from-field="noteId" field="newWorkEffortNote.noteId"/> |
| <set from-field="parameters.workEffortId" field="newWorkEffortNote.workEffortId"/> |
| <create-value value-field="newWorkEffortNote"/> |
| |
| <make-value value-field="noteData" entity-name="NoteData"/> |
| </if-not-empty> |
| |
| <if-not-empty field="parameters.noteInfo2"> |
| <make-value value-field="noteData" entity-name="NoteData"/> |
| <sequenced-id sequence-name="NoteData" field="noteId"/> |
| <set field="noteData.noteId" from-field="noteId"/> |
| <set field="noteData.noteName" from-field="parameters.noteName2"/> |
| <set field="noteData.noteInfo" from-field="parameters.noteInfo2"/> |
| <set field="noteData.noteParty" from-field="userLogin.partyId"/> |
| <set field="noteData.noteDateTime" from-field="noteDateTime" type="Timestamp"/> |
| <create-value value-field="noteData"/> |
| |
| <make-value value-field="newWorkEffortNote" entity-name="WorkEffortNote"/> |
| <set from-field="noteId" field="newWorkEffortNote.noteId"/> |
| <set from-field="parameters.workEffortId" field="newWorkEffortNote.workEffortId"/> |
| <create-value value-field="newWorkEffortNote"/> |
| |
| <make-value value-field="noteData" entity-name="NoteData"/> |
| </if-not-empty> |
| |
| <if-not-empty field="parameters.noteInfo3"> |
| <make-value value-field="noteData" entity-name="NoteData"/> |
| <sequenced-id sequence-name="NoteData" field="noteId"/> |
| <set field="noteData.noteId" from-field="noteId"/> |
| <set field="noteData.noteName" from-field="parameters.noteName3"/> |
| <set field="noteData.noteInfo" from-field="parameters.noteInfo3"/> |
| <set field="noteData.noteParty" from-field="userLogin.partyId"/> |
| <set field="noteData.noteDateTime" from-field="noteDateTime" type="Timestamp"/> |
| <create-value value-field="noteData"/> |
| |
| <make-value value-field="newWorkEffortNote" entity-name="WorkEffortNote"/> |
| <set from-field="noteId" field="newWorkEffortNote.noteId"/> |
| <set from-field="parameters.workEffortId" field="newWorkEffortNote.workEffortId"/> |
| <create-value value-field="newWorkEffortNote"/> |
| |
| <make-value value-field="noteData" entity-name="NoteData"/> |
| </if-not-empty> |
| <field-to-request field="parameters.workEffortId" request-name="projectId"/> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="updateDailyNote" short-description="Update Daily Meeting Minute Note"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_DAILY" action="_UPDATE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <set field="update.workEffortId" from-field="parameters.workEffortId"/> |
| <set field="update.noteId" from-field="parameters.noteId"/> |
| <set field="update.internalNote" value="N"/> |
| <call-service service-name="updateWorkEffortNote" in-map-name="update"/> |
| <set field="_event_message_" value="Daily Meeting Minutes has been updated."/> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="updateTask" short-description="Update Task"> |
| <!-- Update planned hours --> |
| <!-- If a task have time entry, planned hours will update last time entry of task and always update in estimatedMilliSeconds field of task --> |
| <calculate field="parameters.estimatedMilliSeconds" type="Float"> |
| <calcop operator="multiply" field="parameters.planHours"> |
| <number value="3600000"/> |
| </calcop> |
| </calculate> |
| <!-- update if task has TimeEntry --> |
| <entity-condition entity-name="TimeEntry" list="lastTimeEntrys"> |
| <condition-list combine="and"> |
| <condition-expr field-name="workEffortId" from-field="parameters.workEffortId"/> |
| </condition-list> |
| <order-by field-name="-fromDate"/> |
| </entity-condition> |
| <entity-and entity-name="ProjectSprintBacklogAndTask" list="meetingTasks"> |
| <field-map field-name="taskId" from-field="parameters.taskId"/> |
| <field-map field-name="sprintTypeId" value="SCRUM_SPRINT"/> |
| <field-map field-name="custRequestTypeId" value="RF_SCRUM_MEETINGS"/> |
| </entity-and> |
| <if-empty field="meetingTasks"> |
| <first-from-list list="lastTimeEntrys" entry="lastTimeEntry"/> |
| <if-not-empty field="lastTimeEntry"> |
| <set field="lastTimeEntry.planHours" from-field="parameters.planHours" type="Double"/> |
| <set field="parameters.timeEntryId" from-field="lastTimeEntry.timeEntryId"/> |
| <set field="parameters.timesheetId" from-field="lastTimeEntry.timesheetId"/> |
| <set field="parameters.planHours" from-field="lastTimeEntry.planHours"/> |
| <call-simple-method method-name="updateScrumTimeEntry"/> |
| </if-not-empty> |
| </if-empty> |
| |
| <set-service-fields service-name="updateWorkEffort" map="parameters" to-map="inMap"/> |
| <call-service service-name="updateWorkEffort" in-map-name="inMap"/> |
| <if-not-empty field="parameters.partyId"> |
| <!-- Assigned --> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="partyId" from-field="parameters.partyId"/> |
| <condition-expr field-name="statusId" value="SCAS_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="parameters.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| |
| <if-empty field="assigneds"> |
| <!-- get roletype from sprint member --> |
| <entity-condition entity-name="ProjectSprintBacklogAndTask" list="sprintList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="sprintTypeId" value="SCRUM_SPRINT"/> |
| <condition-expr field-name="taskId" from-field="parameters.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <first-from-list list="sprintList" entry="sprint"/> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="sprintRoles"> |
| <condition-list combine="and"> |
| <condition-expr field-name="partyId" from-field="parameters.partyId"/> |
| <condition-expr field-name="workEffortId" from-field="sprint.sprintId"/> |
| <condition-expr field-name="roleTypeId" value="SCRUM_TEAM"/> |
| </condition-list> |
| </entity-condition> |
| <!-- Use when role type id still empty --> |
| <entity-and entity-name="ScrumPersonAndCompanyAndSecurityGroup" list="roleList"> |
| <field-map field-name="partyId" from-field="parameters.partyId"/> |
| <field-map field-name="groupId" value="SCRUM_TEAM"/> |
| </entity-and> |
| <entity-and entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <field-map field-name="workEffortId" from-field="parameters.workEffortId"/> |
| </entity-and> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <iterate list="assigneds" entry="assigned"> |
| <remove-value value-field="assigned"/> |
| </iterate> |
| <set field="newInput.partyId" from-field="parameters.partyId"/> |
| <set field="newInput.workEffortId" from-field="parameters.workEffortId"/> |
| <if-not-empty field="sprintRoles[0].roleTypeId"> |
| <set field="newInput.roleTypeId" from-field="sprintRoles[0].roleTypeId"/> |
| <else> |
| <set field="newInput.roleTypeId" from-field="roleList[0].groupId"/> |
| </else> |
| </if-not-empty> |
| <set field="newInput.statusId" value="SCAS_ASSIGNED"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| </if-empty> |
| </if-not-empty> |
| |
| <!--if plan hours(from task) more than first plan hours --> |
| <entity-and entity-name="CustRequestWorkEffort" list="custRequestWorkEffortList"> |
| <field-map field-name="workEffortId" from-field="parameters.workEffortId"/> |
| </entity-and> |
| <first-from-list list="custRequestWorkEffortList" entry="custRequestWorkEffortMap"/> |
| <set field="backlogPlanMap.custRequestId" from-field="custRequestWorkEffortMap.custRequestId" /> |
| <set field="taskPlanMap.custRequestId" from-field="custRequestWorkEffortMap.custRequestId" /> |
| <call-service service-name="getScrumPlanHour" in-map-name="backlogPlanMap"> |
| <result-to-field result-name="planHours" /> |
| </call-service> |
| <call-service service-name="getScrumPlanHour" in-map-name="taskPlanMap"> |
| <result-to-field result-name="initPlanHours"/> |
| </call-service> |
| <if-compare-field field="planHours" operator="greater" to-field="initPlanHours" type="Double"> |
| <entity-one entity-name="CustRequest" value-field="custRequestMap"> |
| <field-map field-name="custRequestId" from-field="custRequestWorkEffortMap.custRequestId"/> |
| </entity-one> |
| <set field="planHoursIn" from-field="planHours" type="Double"/> |
| <set field="custRequestMap.custEstimatedMilliSeconds" value="${groovy:planHoursIn*1000*60*60}" type="Double"/> |
| <store-value value-field="custRequestMap"/> |
| <else> |
| <if-compare-field field="initPlanHours" operator="greater" to-field="planHours" type="Double"> |
| <entity-one entity-name="CustRequest" value-field="custRequestMap"> |
| <field-map field-name="custRequestId" from-field="custRequestWorkEffortMap.custRequestId"/> |
| </entity-one> |
| <set field="planHoursIn" from-field="planHours" type="Double"/> |
| <set field="custRequestMap.custEstimatedMilliSeconds" value="${groovy:planHoursIn*1000*60*60}" type="Double"/> |
| <store-value value-field="custRequestMap"/> |
| </if-compare-field> |
| </else> |
| </if-compare-field> |
| </simple-method> |
| <!-- Task Note --> |
| <simple-method method-name="createTaskNote" short-description="Create Task Note"> |
| <if-empty field="parameters.noteName"> |
| <set field="newNoteMap.noteName" value="Task Note"/> |
| <else> |
| <set field="newNoteMap.noteName" from-field="parameters.noteName"/> |
| </else> |
| </if-empty> |
| <if-empty field="parameters.noteInfo"> |
| <add-error> |
| <fail-message message="Can not empty noteInfo"/> |
| </add-error> |
| <check-errors/> |
| <else> |
| <set field="newNoteMap.note" from-field="parameters.noteInfo"/> |
| </else> |
| </if-empty> |
| <if-not-empty field="parameters.workEffortId"> |
| <call-service service-name="createNote" in-map-name="newNoteMap"> |
| <result-to-field result-name="noteId" field="noteId"/> |
| </call-service> |
| <make-value value-field="newEntity" entity-name="WorkEffortNote"/> |
| <set field="newEntity.workEffortId" from-field="parameters.workEffortId" /> |
| <set field="newEntity.noteId" from-field="noteId" /> |
| <set field="newEntity.internalNote" value="Y"/> |
| <create-value value-field="newEntity"/> |
| </if-not-empty> |
| </simple-method> |
| <simple-method method-name="deleteTaskNote" short-description="Delete Task Note"> |
| <entity-one entity-name="WorkEffortNote" value-field="workNoteMap" auto-field-map="true"/> |
| <remove-value value-field="workNoteMap"/> |
| <remove-related relation-name="NoteData" value-field="workNoteMap"/> |
| </simple-method> |
| <simple-method method-name="DeleteTaskFromSprintOverview" short-description="Delete Task From Sprint Overview Screen"> |
| <entity-one entity-name="CustRequestWorkEffort" value-field="taskWorkEffort"> |
| <field-map field-name="workEffortId" from-field="parameters.workEffort"/> |
| <field-map field-name="custRequestId" from-field="parameters.custRequestId"/> |
| </entity-one> |
| <remove-value value-field="taskWorkEffort"/> |
| </simple-method> |
| |
| <simple-method method-name="deleteScrumResource" short-description="remove scrum resource"> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <if-compare operator="equals" value="SCRUM_PRODUCT_OWNER" field="parameters.groupId"> |
| <set field="parameters.roleTypeId" value="PRODUCT_OWNER"/> |
| </if-compare> |
| <if-compare operator="equals" value="SCRUM_MASTER" field="parameters.groupId"> |
| <set field="parameters.roleTypeId" value="SCRUM_MASTER"/> |
| </if-compare> |
| <if-compare operator="equals" value="SCRUM_TEAM" field="parameters.groupId"> |
| <set field="parameters.roleTypeId" value="SCRUM_TEAM"/> |
| </if-compare> |
| <!-- For special role --> |
| <if-compare operator="equals" value="SCRUM_STAKEHOLDER" field="parameters.groupId"> |
| <set field="parameters.roleTypeId" value="STAKEHOLDER"/> |
| </if-compare> |
| <entity-and entity-name="PartyRole" list="partyRoles"> |
| <field-map field-name="partyId" from-field="parameters.partyId"/> |
| <field-map field-name="roleTypeId" from-field="parameters.roleTypeId"/> |
| </entity-and> |
| <if-not-empty field="partyRoles"> |
| <set-service-fields service-name="deletePartyRole" map="parameters" to-map="deletePartyRoleMap"/> |
| <set field="deletePartyRoleMap.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="deletePartyRole" in-map-name="deletePartyRoleMap"/> |
| </if-not-empty> |
| <now-timestamp field="nowTimestamp" /> |
| <entity-and entity-name="UserLoginSecurityGroup" list="userLoginSecurityGroups"> |
| <field-map field-name="userLoginId" from-field="parameters.userLoginId"/> |
| <field-map field-name="groupId" from-field="parameters.groupId"/> |
| </entity-and> |
| <if-not-empty field="userLoginSecurityGroups"> |
| <iterate list="userLoginSecurityGroups" entry="userLoginSecurityGroup"> |
| <remove-value value-field="userLoginSecurityGroup"/> |
| </iterate> |
| </if-not-empty> |
| </simple-method> |
| |
| <simple-method method-name="assignPartyToWorkEffort" short-description="Assign Party To WorkEffort"> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <set-service-fields service-name="assignPartyToWorkEffort" map="parameters" to-map="assignPartyToWorkEffortCtx"/> |
| <set field="assignPartyToWorkEffortCtx.userLogin" from-field="sysUserLogin"/> |
| <entity-condition entity-name="PartyRole" list="partyRoleList"> |
| <condition-expr field-name="partyId" from-field="assignPartyToWorkEffortCtx.partyId"/> |
| <select-field field-name="roleTypeId"/> |
| </entity-condition> |
| <if-not-empty field="partyRoleList"> |
| <iterate list="partyRoleList" entry="partyRoleMap"> |
| <if> |
| <condition> |
| <and> |
| <or> |
| <if-compare field="partyRoleMap.roleTypeId" operator="equals" value="SCRUM_MASTER"/> |
| <if-compare field="partyRoleMap.roleTypeId" operator="equals" value="SCRUM_TEAM"/> |
| </or> |
| <if-compare field="assignPartyToWorkEffortCtx.roleTypeId" operator="equals" value="PRODUCT_OWNER" ></if-compare> |
| </and> |
| </condition> |
| <then> |
| <add-error> |
| <fail-property resource="scrumUiLabels" property="ScrumPartyAssignmentError"/> |
| </add-error> |
| <check-errors/> |
| </then> |
| </if> |
| </iterate> |
| </if-not-empty> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="assignPartyToWorkEffortCtx"/> |
| </simple-method> |
| |
| <simple-method method-name="createTestTask" short-description="Create A test task"> |
| <call-class-method class-name="org.apache.ofbiz.content.layout.LayoutWorker" method-name="uploadImageAndParameters" ret-field="formInput"> |
| <field field="request" type="javax.servlet.http.HttpServletRequest"/> |
| <string value="uploadedFile"/> |
| </call-class-method> |
| <entity-one entity-name="UserLogin" value-field="systemUser"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <!--<log level="info" message="=========================parameters:${formInput.formInput}"></log>--> |
| <if-not-empty field="formInput.formInput.workEffortName"> |
| <set-service-fields service-name="createWorkEffortAndPartyAssign" map="formInput.formInput" to-map="assignPartyToWorkEffortCtx"/> |
| <set field="assignPartyToWorkEffortCtx.userLogin" from-field="systemUser"/> |
| <call-service service-name="createWorkEffortAndPartyAssign" in-map-name="assignPartyToWorkEffortCtx" include-user-login="false" > |
| <result-to-field result-name="workEffortId" field="workEffortId"/> |
| </call-service> |
| <field-to-request field="workEffortId"/> |
| <set field="formInput.formInput.workEffortId" from-field="workEffortId"/> |
| <set-service-fields service-name="createWorkEffortRequest" map="formInput.formInput" to-map="workEffortRequestCtx"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="workEffortRequestCtx"/> |
| |
| <!-- createWorkEffortRequest not provide to add the workEffortParentId into WorkEffort entity. --> |
| <!-- So, we have to add to the entity manualy --> |
| <entity-one entity-name="WorkEffort" value-field="taskInfo"> |
| <field-map field-name="workEffortId"/> |
| </entity-one> |
| <if-not-empty field="formInput.formInput.sprintId"> |
| <set field="taskInfo.workEffortParentId" from-field="formInput.formInput.sprintId"/> |
| <store-value value-field="taskInfo"/> |
| </if-not-empty> |
| <set field="workEffortParentId" from-field="formInput.formInput.sprintId"/> |
| <set field="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| <field-to-request field="workEffortParentId"/> |
| <field-to-request field="custRequestId"/> |
| <else> |
| <set field="projectId" from-field="formInput.formInput.projectId"/> |
| <set field="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| <set field="sprintId" from-field="formInput.formInput.sprintId"/> |
| <field-to-request field="projectId"/> |
| <field-to-request field="sprintId"/> |
| <field-to-request field="custRequestId"/> |
| <add-error> |
| <fail-message message="Please insert the Task Name"/> |
| </add-error> |
| <check-errors/> |
| </else> |
| </if-not-empty> |
| <if-not-empty field="formInput.imageFileName"> |
| <add-error><fail-message message="Upload file is missing..."/></add-error> |
| <set field="parameters.imageFileName" from-field="formInput.imageFileName"/> |
| |
| <!-- Create Data Resource --> |
| <set-service-fields service-name="createContentFromUploadedFile" |
| map="formInput.formInput" to-map="data"/> |
| <set field="data.dataResourceTypeId" value="LOCAL_FILE"/> |
| <set field="data.dataTemplateTypeId" value="NONE"/> |
| <set field="data.dataCategoryId" from-field="formInput.formInput.dataCategoryId"/> |
| <set field="data.userLogin" from-field="systemUser"/> |
| <set field="data.statusId" from-field="formInput.formInput.resourceStatusId"/> |
| <set field="data.dataResourceName" from-field="formInput.imageFileName"/> |
| <set field="data.mimeTypeId" from-field="mimeType.mimeTypeId"/> |
| <set field="data.uploadedFile" from-field="formInput.imageData"/> |
| <set field="data._uploadedFile_fileName" from-field="formInput.imageFileName"/> |
| <set field="data._uploadedFile_contentType" from-field="formInput.formInput.mimeTypeId"/> |
| <call-service service-name="createDataResource" in-map-name="data"> |
| <result-to-field result-name="dataResourceId" field="parameters.dataResourceId"/> |
| </call-service> |
| <!-- Create attach upload to data resource --> |
| <set-service-fields service-name="attachUploadToDataResource" map="formInput.formInput" |
| to-map="attachMap"/> |
| <set field="attachMap.uploadedFile" from-field="formInput.imageData"/> |
| <set field="attachMap._uploadedFile_fileName" from-field="formInput.imageFileName"/> |
| <set field="attachMap._uploadedFile_contentType" from-field="formInput.formInput.mimeTypeId"/> |
| <set field="attachMap.dataResourceId" from-field="parameters.dataResourceId"/> |
| <set field="attachMap.mimeTypeId" from-field="mimeType.mimeTypeId"/> |
| <call-service service-name="attachUploadToDataResource" in-map-name="attachMap"/> |
| <!-- Create content from dataResource --> |
| <set-service-fields service-name="createContentFromDataResource" |
| map="formInput.formInput" to-map="contentMap"/> |
| <set field="contentMap.roleTypeId" from-field="formInput.formInput.roleTypeId"/> |
| <set field="contentMap.partyId" from-field="formInput.formInput.partyId"/> |
| <set field="contentMap.contentTypeId" from-field="formInput.formInput.contentTypeId"/> |
| <set field="contentMap.dataResourceId" from-field="parameters.dataResourceId"/> |
| <set field="contentMap.userLogin" from-field="systemUser"/> |
| <call-service service-name="createContentFromDataResource" in-map-name="contentMap"> |
| <result-to-field result-name="contentId" field="formInput.formInput.contentId"/> |
| </call-service> |
| <!-- Create WorkEffort Content --> |
| <set-service-fields service-name="createWorkEffortContent" map="formInput.formInput" to-map="workEffortContent"/> |
| <set field="workEffortContent.userLogin" from-field="systemUser"/> |
| <set field="workEffortContent.workEffortContentTypeId" from-field="formInput.formInput.workEffortContentTypeId"/> |
| <call-service service-name="createWorkEffortContent" in-map-name="workEffortContent"/> |
| |
| <set field="workEffortParentId" from-field="formInput.formInput.workEffortParentId"/> |
| <set field="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| <field-to-request field="workEffortParentId"/> |
| <field-to-request field="custRequestId"/> |
| </if-not-empty> |
| <!-- Re-opened the backlog for status CRQ_COMPLETED --> |
| <entity-condition entity-name="CustRequest" list="custCompletedList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_COMPLETED"/> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="custCompletedList"> |
| <first-from-list list="custCompletedList" entry="custRequestMap"/> |
| <if> |
| <condition> |
| <and> |
| <if-compare field="formInput.formInput.sprintStatusId" operator="equals" value="SPRINT_CLOSED"/> |
| <if-compare field="custRequestMap.custRequestTypeId" operator="not-equals" value="RF_UNPLAN_BACKLOG"/> |
| </and> |
| </condition> |
| <then> |
| <get-related relation-name="CustRequestWorkEffort" list="custRequestWorkEffortList" value-field="custRequestMap"/> |
| <!-- Remove the backlog from sprint --> |
| <if-not-empty field="custRequestWorkEffortList"> |
| <iterate list="custRequestWorkEffortList" entry="custRequestWorkEffortMap"> |
| <get-related-one relation-name="WorkEffort" value-field="custRequestWorkEffortMap" to-value-field="workEffortMap" /> |
| <if-compare field="workEffortMap.workEffortTypeId" operator="equals" value="SCRUM_SPRINT" > |
| <remove-value value-field="custRequestWorkEffortMap"/> |
| </if-compare> |
| </iterate> |
| </if-not-empty> |
| <make-value value-field="custRequestMap" entity-name="CustRequest"/> |
| <set field="custRequestMap.custRequestId" from-field="formInput.formInput.custRequestId"/> |
| <set field="custRequestMap.custRequestTypeId" value="RF_UNPLAN_BACKLOG"/> |
| <store-value value-field="custRequestMap"/> |
| </then> |
| </if> |
| <!-- set custRequest status --> |
| <set field="setCustStatus.custRequestId" from-field="formInput.formInput.custRequestId"/> |
| <set field="setCustStatus.statusId" value="CRQ_REOPENED"/> |
| <call-service service-name="setCustRequestStatus" in-map-name="setCustStatus"/> |
| <!-- Create default task (task installation and task test) --> |
| <entity-and entity-name="CustRequest" list="backlog"> |
| <field-map field-name="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| </entity-and> |
| <entity-and entity-name="ProjectSprintBacklogAndTask" list="projectAndTaskList"> |
| <field-map field-name="sprintTypeId" value="SCRUM_SPRINT"/> |
| <field-map field-name="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| <select-field field-name="projectId"/> |
| <select-field field-name="sprintId"/> |
| </entity-and> |
| <entity-and entity-name="UnPlannedBacklogsAndTasks" list="unPlannedTasks"> |
| <field-map field-name="custRequestId" from-field="formInput.formInput.custRequestId"/> |
| <field-map field-name="workEffortId" from-field="formInput.formInput.workEffortId"/> |
| <select-field field-name="productId"/> |
| </entity-and> |
| <if-not-empty field="projectAndTaskList"> |
| <first-from-list list="projectAndTaskList" entry="projectAndTaskMap"/> |
| <entity-and entity-name="WorkEffortAndProduct" list="productList"> |
| <field-map field-name="workEffortId" from-field="projectAndTaskMap.projectId"/> |
| <select-field field-name="productId"/> |
| </entity-and> |
| <entity-and entity-name="WorkEffortAndProduct" list="defaultTaskList"> |
| <field-map field-name="workEffortPurposeTypeId" value="SCRUM_DEFAULT_TASK"/> |
| <field-map field-name="productId" from-field="productList[0].productId"/> |
| </entity-and> |
| <else> |
| <first-from-list list="unPlannedTasks" entry="unPlannedTaskMap"/> |
| <entity-and entity-name="WorkEffortAndProduct" list="defaultTaskList"> |
| <field-map field-name="workEffortPurposeTypeId" value="SCRUM_DEFAULT_TASK"/> |
| <field-map field-name="productId" from-field="unPlannedTaskMap.productId"/> |
| </entity-and> |
| </else> |
| </if-not-empty> |
| <if-not-empty field="defaultTaskList"> |
| <iterate list="defaultTaskList" entry="defaultTask"> |
| <set field="workEffortTypeId" from-field="defaultTask.workEffortTypeId"/> |
| <if> |
| <condition> |
| <and> |
| <or> |
| <if-compare operator="equals" value="SCRUM_TASK_INST" field="workEffortTypeId"/> |
| <if-compare operator="equals" value="SCRUM_TASK_TEST" field="workEffortTypeId"/> |
| </or> |
| </and> |
| </condition> |
| <then> |
| <call-simple-method method-name="callCreateDefaultTasks"/> |
| </then> |
| </if> |
| </iterate> |
| <else> |
| <!-- If not have default task in product level --> |
| <entity-and entity-name="WorkEffort" list="defaultTaskList"> |
| <field-map field-name="workEffortPurposeTypeId" value="SYSTEM_DEFAULT_TASK"/> |
| </entity-and> |
| <if-not-empty field="defaultTaskList"> |
| <iterate list="defaultTaskList" entry="defaultTask"> |
| <set field="workEffortTypeId" from-field="defaultTask.workEffortTypeId"/> |
| <if> |
| <condition> |
| <and> |
| <or> |
| <if-compare operator="equals" value="SCRUM_TASK_INST" field="workEffortTypeId"/> |
| <if-compare operator="equals" value="SCRUM_TASK_TEST" field="workEffortTypeId"/> |
| </or> |
| </and> |
| </condition> |
| <then> |
| <call-simple-method method-name="callCreateDefaultTasks"/> |
| </then> |
| </if> |
| </iterate> |
| </if-not-empty> |
| </else> |
| </if-not-empty> |
| </if-not-empty> |
| </simple-method> |
| |
| <simple-method method-name="closeSprint" short-description=""> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_SPRINT" action="_UPDATE"/> |
| <if-has-permission permission="SCRUM_DAILY" action="_CREATE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_ROLE" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <call-simple-method method-name="getWebSiteId"/> |
| <set field="SprintId" from-field="parameters.sprintId"/> |
| <set field="ProjectId" from-field="parameters.projectId"/> |
| <entity-one entity-name="WorkEffort" value-field="sprint"> |
| <field-map field-name="workEffortId" from-field="SprintId"/> |
| </entity-one> |
| <now-timestamp field="curDate"/> |
| <set field="curDate" type="Timestamp"/> |
| <set field="status" value="SPRINT_CLOSED"/> |
| <if-not-empty field="sprint.actualCompletionDate"> |
| <entity-condition entity-name="ProjectSprintBacklogAndTask" list="listBackNotComplete" distinct="true"> |
| <condition-list combine="and"> |
| <condition-expr field-name="sprintId" operator="equals" from-field="sprint.workEffortId"/> |
| <condition-expr field-name="taskCurrentStatusId" operator="not-equals" value="STS_COMPLETED"/> |
| <condition-expr field-name="custRequestTypeId" operator="equals" value="RF_PROD_BACKLOG"/> |
| <condition-expr field-name="backlogStatusId" operator="equals" value="CRQ_REVIEWED"/> |
| </condition-list> |
| <select-field field-name="custRequestId"/> |
| <select-field field-name="description"/> |
| </entity-condition> |
| <loop count="${groovy: listBackNotComplete.size()}" field="i"> |
| <if-compare operator="equals" value="0" field="i" type="Integer"> |
| <set field="tempBacklog" value="${listBackNotComplete[i].description}[${listBackNotComplete[i].custRequestId}]"/> |
| <else> |
| <set field="tempBacklog" value=", ${listBackNotComplete[i].description}[${listBackNotComplete[i].custRequestId}]"/> |
| </else> |
| </if-compare> |
| <set field="backlog" value="${backlog} ${tempBacklog}"/> |
| <entity-condition entity-name="CustRequestAndWorkEffort" list="taskInSprintBacklogs"> |
| <condition-list combine="and"> |
| <condition-expr field-name="custRequestId" from-field="listBackNotComplete[i].custRequestId"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_SPRINT" operator="not-equals"/> |
| </condition-list> |
| </entity-condition> |
| <!-- Grouping Sprint and Customer Request --> |
| <set field="input.custRequestId" from-field="listBackNotComplete[i].custRequestId"/> |
| <set field="input.workEffortId" from-field="sprint.workEffortId"/> |
| <call-service service-name="deleteWorkEffortRequest" in-map-name="input"/> |
| |
| <!-- Change CustRequest status back to Accepted--> |
| <set field="setCustRequestStatusCtx.custRequestId" from-field="listBackNotComplete[i].custRequestId"/> |
| <set field="setCustRequestStatusCtx.statusId" value="CRQ_ACCEPTED"/> |
| <set field="setCustRequestStatusCtx.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="setCustRequestStatus" in-map-name="setCustRequestStatusCtx"/> |
| </loop> |
| |
| <!--<entity-condition entity-name="ProjectSprintBacklogAndTask" list="sprintTaskList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="sprintId" operator="equals" from-field="sprint.workEffortId"/> |
| <condition-expr field-name="taskCurrentStatusId" operator="not-equals" value="STS_COMPLETED"/> |
| <condition-list combine="or"> |
| <condition-expr field-name="taskTypeId" operator="equals" value="SCRUM_TASK_IMPL"/> |
| <condition-expr field-name="taskTypeId" operator="equals" value="SCRUM_TASK_ERROR"/> |
| <condition-expr field-name="taskTypeId" operator="equals" value="SCRUM_TASK_INST"/> |
| <condition-expr field-name="taskTypeId" operator="equals" value="SCRUM_TASK_TEST"/> |
| </condition-list> |
| </condition-list> |
| </entity-condition> |
| <loop count="${groovy: sprintTaskList.size()}" field="j"> |
| <set field="parameters.workEffortId" from-field="sprintTaskList[j].taskId"/> |
| <call-simple-method method-name="setTaskStatusToComplete"/> |
| </loop>--> |
| |
| <!-- Change Sprint status to close --> |
| <set field="updateSprint.workEffortId" from-field="sprint.workEffortId"/> |
| <set field="updateSprint.currentStatusId" value="SPRINT_CLOSED"/> |
| <set field="updateSprint.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="updateWorkEffort" in-map-name="updateSprint"/> |
| <if-empty field="parameters.isCloseBtn"> |
| <if-not-empty field="listBackNotComplete"> |
| <set field="_event_message_" value="Moved out the following Product Backlogs : ${backlog}"/> |
| </if-not-empty> |
| </if-empty> |
| |
| </if-not-empty> |
| </then> |
| <else> |
| <set field="_error_message_" value="You has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="createProductBacklogCategory" short-description="Create a product backlog's category"> |
| <if-empty field="parameters.productId"> |
| <add-error><fail-message message="You have to specify product's ID"/></add-error> |
| </if-empty> |
| <if-empty field="parameters.custRequestName"> |
| <add-error><fail-message message="You have to specify category's name"/></add-error> |
| </if-empty> |
| <check-errors/> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PRODUCT_BACKLOG" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PRODUCT" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PRODUCT" action="_VIEW"/> |
| </or> |
| </condition> |
| <then> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <set field="userlogin" from-field="sysUserLogin"/> |
| <!-- create cust request --> |
| <set field="createCustRequestInMap.custRequestName" from-field="parameters.custRequestName"/> |
| <set field="createCustRequestInMap.productId" from-field="parameters.productId"/> |
| <set field="createCustRequestInMap.custRequestTypeId" value="RF_PARENT_BACKLOG"/> |
| <set field="createCustRequestInMap.statusId" value="CRQ_DRAFT"/> |
| <set field="createCustRequestInMap.fromPartyId" value="_NA_"/> |
| <set field="createCustRequestInMap.userLogin" from-field="userlogin"/> |
| <call-service service-name="createCustRequest" in-map-name="createCustRequestInMap"> |
| <result-to-field result-name="custRequestId"/> |
| </call-service> |
| </then> |
| <else> |
| <add-error><fail-message message="You don't have permission to create category"/></add-error> |
| <check-errors/> |
| </else> |
| </if> |
| <add-error> |
| <fail-message message="Permission Error"/> |
| </add-error> |
| </simple-method> |
| |
| <simple-method method-name="updateProductBacklogCategory" short-description="Update a product backlog's category"> |
| <if-empty field="parameters.productId"> |
| <add-error><fail-message message="You have to specify product's ID"/></add-error> |
| </if-empty> |
| <if-empty field="parameters.custRequestName"> |
| <add-error><fail-message message="You have to specify category's name"/></add-error> |
| </if-empty> |
| <if-empty field="parameters.custRequestId"> |
| <add-error><fail-message message="You have to specify category's ID"/></add-error> |
| </if-empty> |
| <check-errors/> |
| <!-- update cust request --> |
| <set field="updateCustRequestInMap.custRequestId" from-field="parameters.custRequestId"/> |
| <set field="updateCustRequestInMap.custRequestName" from-field="parameters.custRequestName"/> |
| <call-service service-name="updateCustRequest" in-map-name="updateCustRequestInMap"/> |
| </simple-method> |
| <simple-method method-name="createDefaultTask" short-description="Create A default Task"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PROJECT_ROLE" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PROJECT" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <if-not-empty field="parameters.workEffortName"> |
| <now-timestamp field="now"/> |
| <!-- calculate estimatedMilliSeconds from initail planned hours --> |
| <set field="plannedHours" from-field="parameters.plannedHours" default-value="0" type="Integer"/> |
| <set-service-fields service-name="createWorkEffort" map="parameters" to-map="workEffortMap"/> |
| <set field="parameters.estimatedMilliSeconds" value="${groovy:plannedHours*60*60*1000}"/> |
| <call-service service-name="createWorkEffort" in-map-name="workEffortMap"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| <if-compare field="parameters.workEffortPurposeTypeId" operator="not-equals" value="SYSTEM_DEFAULT_TASK" > |
| <make-value value-field="goodStandardMap" entity-name="WorkEffortGoodStandard"/> |
| <set field="goodStandardMap.workEffortId" from-field="workEffortId"/> |
| <set field="goodStandardMap.productId" from-field="parameters.productId"/> |
| <set field="goodStandardMap.workEffortGoodStdTypeId" value="SCRUM_PRO_WORKEFF"/> |
| <set field="goodStandardMap.fromDate" from-field="now"/> |
| <set field="goodStandardMap.statusId" value="WEGS_CREATED"/> |
| <create-value value-field="goodStandardMap"/> |
| </if-compare> |
| <!-- Assigned party for default task --> |
| <if> |
| <condition> |
| <and> |
| <not> <if-empty field="workEffortId"/></not> |
| <not> <if-empty field="parameters.partyId"/></not> |
| </and> |
| </condition> |
| <then> |
| <set field="assign.workEffortId" from-field="workEffortId"/> |
| <set field="assign.partyId" from-field="parameters.partyId"/> |
| <set field="assign.roleTypeId" value="SCRUM_TEAM"/> |
| <set field="assign.statusId" value="PRTYASGN_ASSIGNED"/> |
| <set field="assign.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="assign"/> |
| </then> |
| </if> |
| <else> |
| <add-error> |
| <fail-message message="Task name is missing,Please add."/> |
| </add-error> |
| <check-errors/> |
| </else> |
| </if-not-empty> |
| </then> |
| <else> |
| <add-error> |
| <fail-message message="Permission Error"/> |
| </add-error> |
| <check-errors/> |
| </else> |
| </if> |
| </simple-method> |
| <simple-method method-name="updateDefaultTask" short-description="Update A default Task"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PROJECT_ROLE" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PROJECT" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <if-not-empty field="parameters.workEffortId"> |
| <!-- calculate estimatedMilliSeconds from initail planned hours --> |
| <set field="plannedHours" from-field="parameters.plannedHours" default-value="0" type="Integer"/> |
| <set field="parameters.estimatedMilliSeconds" value="${groovy:plannedHours*60*60*1000}"/> |
| <call-service service-name="updateWorkEffort" in-map-name="parameters"> |
| <default-message>The Default Task record successfully updated.</default-message> |
| </call-service> |
| <!-- Assigned party for default task --> |
| <if-not-empty field="parameters.partyId"> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="partyId" from-field="parameters.partyId"/> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="parameters.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="assigneds"> |
| <entity-and entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <field-map field-name="workEffortId" from-field="parameters.workEffortId"/> |
| </entity-and> |
| <entity-and entity-name="PartyRole" list="taskOwnerRoles"> |
| <field-map field-name="partyId" from-field="parameters.partyId"/> |
| <field-map field-name="roleTypeId" value="SCRUM_TEAM"/> |
| </entity-and> |
| <iterate list="assigneds" entry="assigned"> |
| <remove-value value-field="assigned"/> |
| </iterate> |
| <set field="newInput.partyId" from-field="parameters.partyId"></set> |
| <set field="newInput.workEffortId" from-field="parameters.workEffortId"></set> |
| <set field="newInput.roleTypeId" from-field="taskOwnerRoles[0].roleTypeId"></set> |
| <set field="newInput.statusId" value="PRTYASGN_ASSIGNED"></set> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| </if-empty> |
| </if-not-empty> |
| <else> |
| <add-error> |
| <fail-message message="Task name is missing,Please add."/> |
| </add-error> |
| <check-errors/> |
| </else> |
| </if-not-empty> |
| </then> |
| <else> |
| <add-error> |
| <fail-message message="Permission Error"/> |
| </add-error> |
| <check-errors/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="testTaskBacklog" short-description="To Create actual Hour"> |
| <call-simple-method method-name="getWebSiteId"/> |
| <now-timestamp field="fromdate"/> |
| <set field="fDate" from-field="fromdate"/> |
| <set field="hours" from-field="parameters.actaulHour" type="Double"/> |
| <set field="planHour" from-field="parameters.planHour" type="Double"/> |
| <if-not-empty field="parameters.actaulHour"> |
| <if-not-empty field="parameters.checkComplete"> |
| <set field="create.workEffortId" from-field="parameters.workEffortId"/> |
| <set field="create.planHours" from-field="planHour"/> |
| <set field="create.hours" from-field="hours"/> |
| <set field="create.partyId" from-field="parameters.partyId"/> |
| <set field="create.fromDate" from-field="parameters.fDate"/> |
| <set field="create.timesheetId" from-field="parameters.timesheetId"/> |
| <call-service service-name="createTimeEntry" in-map-name="create"></call-service> |
| <set field="update.workEffortId" from-field="parameters.workEffortId"/> |
| <set field="update.currentStatusId" value="STS_COMPLETED"/> |
| <set field="update.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="updateWorkEffort" in-map-name="update"> |
| <default-message resource="CommonUiLabels" property="CommonSuccessfullyCreated"/> |
| </call-service> |
| <else> |
| <set field="create.workEffortId" from-field="parameters.workEffortId"/> |
| <set field="create.planHours" from-field="planHour"/> |
| <set field="create.hours" from-field="hours"/> |
| <set field="create.partyId" from-field="parameters.partyId"/> |
| <set field="create.fromDate" from-field="parameters.fDate"/> |
| <set field="create.timesheetId" from-field="parameters.timesheetId"/> |
| <call-service service-name="createTimeEntry" in-map-name="create"> |
| <default-message>Insert the How To Test Task message successfully.</default-message> |
| </call-service> |
| </else> |
| </if-not-empty> |
| <else> |
| <add-error> |
| <fail-message message="Cannot insert the data."/> |
| </add-error> |
| <check-errors/> |
| </else> |
| </if-not-empty> |
| </simple-method> |
| <!-- create Scrum Project content --> |
| <simple-method method-name="createScrumProjectContent" short-description="Creates Party Associated Content" login-required="false"> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <call-class-method class-name="org.apache.ofbiz.content.layout.LayoutWorker" |
| method-name="uploadImageAndParameters" |
| ret-field="formInput"> |
| <field field="request" type="javax.servlet.http.HttpServletRequest"/> |
| <string value="dataResourceName"/> |
| </call-class-method> |
| <if-empty field="formInput.formInput.contentIdTo"> |
| <set-service-fields service-name="createContentFromUploadedFile" map="formInput.formInput" to-map="inMap"/> |
| <set field="inMap._uploadedFile_fileName" from-field="formInput.imageFileName"/> |
| <set field="inMap.uploadedFile" from-field="formInput.imageData"/> |
| <set field="inMap._uploadedFile_contentType" from-field="formInput.formInput.mimeTypeId"/> |
| <set field="inMap.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="createContentFromUploadedFile" in-map-name="inMap"> |
| <result-to-field result-name="contentId" field="context.contentId"/> |
| </call-service> |
| <else> |
| <set field="context.contentId" from-field="formInput.formInput.contentIdTo"/> |
| </else> |
| </if-empty> |
| <if-empty field="formInput.formInput.workEffortId"> |
| <if-not-empty field="formInput.formInput.projectId"> |
| <set field="context.workEffortId" from-field="formInput.formInput.projectId"/> |
| </if-not-empty> |
| <else> |
| <set field="context.workEffortId" from-field="formInput.formInput.workEffortId"/> |
| </else> |
| </if-empty> |
| <set field="context.workEffortContentTypeId" from-field="formInput.formInput.workEffortContentTypeId"/> |
| <now-timestamp field="context.fromDate"/> |
| <set field="context.userLogin" from-field="sysUserLogin"/> |
| <call-map-processor in-map-name="context" out-map-name="workEffortContext"> |
| <simple-map-processor name="newWorkEffortContent"> |
| <process field="workEffortContentTypeId"><copy to-field="workEffortContentTypeId"/></process> |
| <process field="contentId"><copy to-field="contentId"/></process> |
| <process field="workEffortId"><copy to-field="workEffortId"/></process> |
| <process field="fromDate"><copy to-field="fromDate"/></process> |
| <process field="userLogin"><copy to-field="userLogin"/></process> |
| </simple-map-processor> |
| </call-map-processor> |
| <!-- create Scrum Project Content--> |
| <call-service service-name="createWorkEffortContent" in-map-name="workEffortContext"> |
| <result-to-field result-name="contentId" field="contentId"/> |
| </call-service> |
| |
| <!-- create ContentAssoc--> |
| <set field="context.contentAssocTypeId" value="SUB_CONTENT"/> |
| <if-not-empty field="formInput.formInput.contentIdFrom"> |
| <set field="context.contentIdFrom" from-field="formInput.formInput.contentIdFrom"/> |
| <call-map-processor in-map-name="context" out-map-name="contentAssocContext"> |
| <simple-map-processor name="newContentAssoc"> |
| <process field="contentIdFrom"><copy to-field="contentId"/></process> |
| <process field="contentIdFrom"><copy to-field="contentIdFrom"/></process> |
| <process field="contentId"><copy to-field="contentIdTo"/></process> |
| <process field="contentAssocTypeId"><copy to-field="contentAssocTypeId"/></process> |
| <process field="fromDate"><copy to-field="fromDate"/></process> |
| <process field="userLogin"><copy to-field="userLogin"/></process> |
| </simple-map-processor> |
| </call-map-processor> |
| <entity-and entity-name="ContentAssoc" list="contentAssoList"> |
| <field-map field-name="contentId" from-field="contentAssocContext.contentId"/> |
| <field-map field-name="contentIdTo" from-field="contentAssocContext.contentIdTo"/> |
| </entity-and> |
| <if-empty field="contentAssonList"> |
| <call-service service-name="createContentAssoc" in-map-name="contentAssocContext"/> |
| </if-empty> |
| </if-not-empty> |
| |
| <!-- set the partyId in the request --> |
| <field-to-request field="context.workEffortId" request-name="workEffortId"/> |
| <field-to-request field="context.projectId" request-name="projectId"/> |
| <field-to-request field="contentId" request-name="contentId"/> |
| </simple-method> |
| |
| <!-- create Scrum Product content --> |
| <simple-method method-name="createScrumProductContent" short-description="Creates Party Associated Content" login-required="false"> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <call-class-method class-name="org.apache.ofbiz.content.layout.LayoutWorker" |
| method-name="uploadImageAndParameters" |
| ret-field="formInput"> |
| <field field="request" type="javax.servlet.http.HttpServletRequest"/> |
| <string value="dataResourceName"/> |
| </call-class-method> |
| <if-empty field="formInput.formInput.contentIdTo"> |
| <set-service-fields service-name="createContentFromUploadedFile" map="formInput.formInput" to-map="inMap"/> |
| <set field="inMap._uploadedFile_fileName" from-field="formInput.imageFileName"/> |
| <set field="inMap.uploadedFile" from-field="formInput.imageData"/> |
| <set field="inMap._uploadedFile_contentType" from-field="formInput.formInput.mimeTypeId"/> |
| <set field="inMap.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="createContentFromUploadedFile" in-map-name="inMap"> |
| <result-to-field result-name="contentId" field="context.contentId"/> |
| </call-service> |
| <else> |
| <set field="context.contentId" from-field="formInput.formInput.contentIdTo"/> |
| </else> |
| </if-empty> |
| <if-empty field="formInput.formInput.productId"> |
| <add-error> |
| <fail-message message="Can not empty productId"/> |
| </add-error> |
| <check-errors/> |
| <else> |
| <set field="context.productId" from-field="formInput.formInput.productId"/> |
| </else> |
| </if-empty> |
| <set field="context.productContentTypeId" from-field="formInput.formInput.productContentTypeId"/> |
| <now-timestamp field="context.fromDate"/> |
| <set field="context.userLogin" from-field="sysUserLogin"/> |
| <call-map-processor in-map-name="context" out-map-name="productContext"> |
| <simple-map-processor name="newProductContent"> |
| <process field="productId"><copy to-field="productId"/></process> |
| <process field="contentId"><copy to-field="contentId"/></process> |
| <process field="productContentTypeId"><copy to-field="productContentTypeId"/></process> |
| <process field="fromDate"><copy to-field="fromDate"/></process> |
| <process field="userLogin"><copy to-field="userLogin"/></process> |
| </simple-map-processor> |
| </call-map-processor> |
| <!-- create ProductContent--> |
| <call-service service-name="createProductContent" in-map-name="productContext"> |
| <result-to-field result-name="contentId" field="contentId"/> |
| </call-service> |
| |
| <!-- create Scrum ContentAssoc--> |
| <set field="context.contentAssocTypeId" value="SUB_CONTENT"/> |
| <if-not-empty field="formInput.formInput.contentIdFrom"> |
| <set field="context.contentIdFrom" from-field="formInput.formInput.contentIdFrom"/> |
| <call-map-processor in-map-name="context" out-map-name="contentAssocContext"> |
| <simple-map-processor name="newContentAssoc"> |
| <process field="contentIdFrom"><copy to-field="contentId"/></process> |
| <process field="contentIdFrom"><copy to-field="contentIdFrom"/></process> |
| <process field="contentId"><copy to-field="contentIdTo"/></process> |
| <process field="contentAssocTypeId"><copy to-field="contentAssocTypeId"/></process> |
| <process field="fromDate"><copy to-field="fromDate"/></process> |
| <process field="userLogin"><copy to-field="userLogin"/></process> |
| </simple-map-processor> |
| </call-map-processor> |
| <entity-and entity-name="ContentAssoc" list="contentAssoList"> |
| <field-map field-name="contentId" from-field="contentAssocContext.contentId"/> |
| <field-map field-name="contentIdTo" from-field="contentAssocContext.contentIdTo"/> |
| </entity-and> |
| <if-empty field="contentAssonList"> |
| <call-service service-name="createContentAssoc" in-map-name="contentAssocContext"/> |
| </if-empty> |
| </if-not-empty> |
| |
| <!-- set the partyId in the request --> |
| <field-to-request field="context.productId" request-name="productId"/> |
| </simple-method> |
| <simple-method method-name="createProdBacklogNote" short-description="Create Product Backlog Item Note"> |
| <if-empty field="parameters.noteName"> |
| <set field="newNoteMap.noteName" value="Backlog Item Note"/> |
| <else> |
| <set field="newNoteMap.noteName" from-field="parameters.noteName"/> |
| </else> |
| </if-empty> |
| <if-empty field="parameters.noteInfo"> |
| <add-error> |
| <fail-message message="Can not empty noteInfo"/> |
| </add-error> |
| <check-errors/> |
| <else> |
| <set field="newNoteMap.note" from-field="parameters.noteInfo"/> |
| </else> |
| </if-empty> |
| <!-- create CustRequestNote --> |
| <if-not-empty field="parameters.custRequestId"> |
| <call-service service-name="createNote" in-map-name="newNoteMap"> |
| <result-to-field result-name="noteId" field="noteId"/> |
| </call-service> |
| <make-value value-field="newEntity" entity-name="CustRequestNote"/> |
| <set field="newEntity.custRequestId" from-field="parameters.custRequestId" /> |
| <set field="newEntity.noteId" from-field="noteId" /> |
| <create-value value-field="newEntity"/> |
| </if-not-empty> |
| </simple-method> |
| <simple-method method-name="deleteProdBacklogNote" short-description="Delete Product Backlog Item Note"> |
| <entity-one entity-name="CustRequestNote" value-field="custNoteMap" auto-field-map="true"/> |
| <remove-value value-field="custNoteMap"/> |
| <remove-related relation-name="NoteData" value-field="custNoteMap"/> |
| </simple-method> |
| <simple-method method-name="createBacklogItemContent" |
| short-description="Create Customer Request Content" login-required="false"> |
| <entity-one entity-name="UserLogin" value-field="sysUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <call-class-method class-name="org.apache.ofbiz.content.layout.LayoutWorker" |
| method-name="uploadImageAndParameters" ret-field="formInput"> |
| <field field="request" type="javax.servlet.http.HttpServletRequest"/> |
| <string value="dataResourceName"/> |
| </call-class-method> |
| |
| <!-- Check input parameters --> |
| <if> |
| <condition> |
| <and> |
| <if-empty field="formInput.formInput.contentId"/> |
| <if-empty field="formInput.imageFileName"/> |
| </and> |
| </condition> |
| <then> |
| <add-error> |
| <fail-message message="Content Id or Upload file is missing."/> |
| </add-error> |
| </then> |
| </if> |
| <check-errors/> |
| <!-- Create new content form upload file / set content from Existing content --> |
| <if-empty field="formInput.formInput.contentId"> |
| <!-- Create new content from upload file --> |
| <set-service-fields service-name="createContentFromUploadedFile" |
| map="formInput.formInput" to-map="inMap"/> |
| <set field="inMap._uploadedFile_fileName" from-field="formInput.imageFileName"/> |
| <set field="inMap.uploadedFile" from-field="formInput.imageData"/> |
| <set field="inMap._uploadedFile_contentType" from-field="formInput.uploadMimeType"/> |
| <set field="inMap.userLogin" from-field="sysUserLogin"/> |
| <call-service service-name="createContentFromUploadedFile" in-map-name="inMap"> |
| <result-to-field result-name="contentId" field="context.contentId"/> |
| </call-service> |
| <else> |
| <!--set content from Existing content--> |
| <set field="context.contentId" from-field="formInput.formInput.contentId"/> |
| </else> |
| </if-empty> |
| |
| <!-- create ContentAssoc--> |
| <set-service-fields service-name="createContentAssoc" map="formInput.formInput" to-map="contentMap"/> |
| <if-not-empty field="formInput.formInput.contentIdFrom"> |
| <set field="contentMap.contentAssocTypeId" value="SUB_CONTENT"/> |
| <set field="contentMap.contentIdFrom" from-field="formInput.formInput.contentIdFrom"/> |
| <set field="contentMap.contentId" from-field="formInput.formInput.contentIdFrom"/> |
| <set field="contentMap.contentIdTo" from-field="context.contentId"/> |
| <now-timestamp field="contentMap.fromDate"/> |
| <set field="contentMap.userLogin" from-field="sysUserLogin"/> |
| <entity-and entity-name="ContentAssoc" list="contentAssoList"> |
| <field-map field-name="contentId" from-field="contentMap.contentId"/> |
| <field-map field-name="contentIdTo" from-field="contentMap.contentIdTo"/> |
| </entity-and> |
| <if-empty field="contentAssonList"> |
| <call-service service-name="createContentAssoc" in-map-name="contentMap"/> |
| </if-empty> |
| </if-not-empty> |
| |
| <set field="context.custRequestId" from-field="formInput.formInput.custRequestId"/> |
| <set field="context.userLogin" from-field="sysUserLogin"/> |
| <call-map-processor in-map-name="context" out-map-name="custRequestContext"> |
| <simple-map-processor name="newCustRequestContent"> |
| <process field="contentId"> |
| <copy to-field="contentId"/> |
| </process> |
| <process field="custRequestId"> |
| <copy to-field="custRequestId"/> |
| </process> |
| <process field="fromDate"> |
| <copy to-field="fromDate"/> |
| </process> |
| <process field="userLogin"> |
| <copy to-field="userLogin"/> |
| </process> |
| </simple-map-processor> |
| </call-map-processor> |
| |
| <!-- Create Backlog Item Content --> |
| <call-service service-name="createCustRequestContent" in-map-name="custRequestContext"> |
| <result-to-field result-name="contentId" field="contentId"/> |
| </call-service> |
| </simple-method> |
| |
| <simple-method method-name="removeProjectMember" short-description="Update Project When remove Product Owner"> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <set field="unassign.roleTypeId" from-field="parameters.roleTypeId"/> |
| <set field="unassign.partyId" from-field="parameters.partyId"/> |
| <set field="unassign.fromDate" from-field="parameters.fromDate"/> |
| <set field="unassign.workEffortId" from-field="parameters.projectId"/> |
| <set field="unassign.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="unassignPartyFromWorkEffort" in-map-name="unassign"/> |
| </simple-method> |
| |
| <simple-method method-name="setTaskStatusToComplete" short-description="Set the task status to complete, if resources assigned that status will also be set to complete"> |
| <call-simple-method method-name="getWebSiteId"/> |
| <entity-one entity-name="WorkEffort" value-field="workEffort"> |
| <field-map field-name="workEffortId" from-field="parameters.workEffortId"/> |
| </entity-one> |
| <if-empty field="workEffort"> |
| <add-error><fail-property resource="scrumUiLabels" property="ScrumErrorTaskNotFound"/></add-error> |
| </if-empty> |
| <if-compare field="workEffort.currentStatusId" value="STS_CREATED" operator="not-equals"> |
| <add-error><fail-property resource="scrumUiLabels" property="ScrumErrorTaskStatusWrong"/></add-error> |
| </if-compare> |
| <check-errors/> |
| <entity-and entity-name="WorkEffortPartyAssignment" list="assigns" filter-by-date="true"> |
| <field-map field-name="workEffortId" from-field="parameters.workEffortId"/> |
| </entity-and> |
| <loop count="${groovy: assigns.size()}" field="i"> |
| <set field="actualMap.taskId" from-field="parameters.workEffortId" /> |
| <set field="actualMap.partyId" from-field="assigns[i].partyId" /> |
| <set field="planMap.taskId" from-field="parameters.workEffortId" /> |
| <set field="planMap.partyId" from-field="assigns[i].partyId" /> |
| <call-service service-name="getScrumActualHour" in-map-name="actualMap"> |
| <result-to-field result-name="actualHours" /> |
| </call-service> |
| <call-service service-name="getScrumPlanHour" in-map-name="planMap"> |
| <result-to-field result-name="planHours"/> |
| </call-service> |
| <if-compare-field field="planHours" operator="not-equals" to-field="actualHours" type="Double"> |
| <set field="planHours" from-field="actualHours" /> |
| <entity-condition entity-name="TimeEntry" list="lastTimeEntrys"> |
| <condition-list combine="and"> |
| <condition-expr field-name="workEffortId" from-field="parameters.workEffortId" /> |
| <condition-expr field-name="partyId" from-field="assigns[i].partyId" /> |
| </condition-list> |
| <order-by field-name="-fromDate" /> |
| </entity-condition> |
| <first-from-list list="lastTimeEntrys" entry="lastTimeEntry" /> |
| <if-not-empty field="lastTimeEntry"> |
| <set field="lastTimeEntry.planHours" from-field="planHours" /> |
| <store-value value-field="lastTimeEntry" /> |
| <else> |
| <entity-and entity-name="ProjectSprintBacklogAndTask" list="meetingTasks"> |
| <field-map field-name="taskId" from-field="parameters.workEffortId"/> |
| <field-map field-name="sprintTypeId" value="SCRUM_SPRINT"/> |
| <field-map field-name="custRequestTypeId" value="RF_SCRUM_MEETINGS"/> |
| </entity-and> |
| <if-not-empty field="meetingTasks"> |
| <set field="parameters.estimatedMilliSeconds" value="0.0" type="Double"/> |
| <else> |
| <field-to-request field="parameters.workEffortId" request-name="taskId"/> |
| <add-error><fail-property resource="scrumUiLabels" property="ScrumErrorTaskNotFoundInTimeEntry"/></add-error> |
| <check-errors/> |
| </else> |
| </if-not-empty> |
| </else> |
| </if-not-empty> |
| </if-compare-field> |
| </loop> |
| <!-- if all assigns are complete the task will be set to complete --> |
| <if-not-empty field="assigns"> |
| <iterate list="assigns" entry="assign"> |
| <set field="assign.statusId" value="SCAS_COMPLETED"/> |
| <store-value value-field="assign" /> |
| </iterate> |
| <else> |
| <set field="parameters.estimatedMilliSeconds" value="0.0" type="Double"/> |
| </else> |
| </if-not-empty> |
| <if-compare operator="not-equals" value="STS_COMPLETED" field="workEffort.currentStatusId"> |
| <set field="upd.workEffortId" from-field="parameters.workEffortId"/> |
| <set field="upd.currentStatusId" value="STS_COMPLETED"/> |
| <set field="upd.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="updateWorkEffort" in-map-name="upd"/> |
| </if-compare> |
| <field-to-request field="parameters.workEffortId" request-name="taskId"/> |
| </simple-method> |
| |
| <simple-method method-name="setAccept" short-description="Set backlog statusId from CRQ_CANCELLED to CRQ_ACCEPTED"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PRODUCT_BACKLOG" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PRODUCT_BACKLOG" action="_UPDATE"/> |
| </or> |
| </condition> |
| <then> |
| <call-simple-method method-name="getWebSiteId"/> |
| <!-- Re-opened the backlog for status CRQ_CANCELLED --> |
| <entity-condition entity-name="CustRequest" list="custCancelledList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="custRequestId" from-field="parameters.custRequestId"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_CANCELLED"/> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="custCancelledList"> |
| <first-from-list list="custCancelledList" entry="custRequest"/> |
| <get-related relation-name="CustRequestWorkEffort" list="custRequestWorkEffortList" value-field="custRequest"/> |
| <!-- Remove the backlog from sprint --> |
| <if-not-empty field="custRequestWorkEffortList"> |
| <iterate list="custRequestWorkEffortList" entry="custRequestWorkEffortMap"> |
| <get-related-one relation-name="WorkEffort" value-field="custRequestWorkEffortMap" to-value-field="workEffortMap" /> |
| <if-compare field="workEffortMap.workEffortTypeId" operator="equals" value="SCRUM_SPRINT" > |
| <remove-value value-field="custRequestWorkEffortMap"/> |
| </if-compare> |
| </iterate> |
| </if-not-empty> |
| <!-- set custRequest status --> |
| <set field="setCustStatus.custRequestId" from-field="parameters.custRequestId"/> |
| <set field="setCustStatus.statusId" value="CRQ_ACCEPTED"/> |
| <set field="setCustStatus.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="setCustRequestStatus" in-map-name="setCustStatus"/> |
| </if-not-empty> |
| </then> |
| <else> |
| <add-error><fail-message message="You are has no permission to perform this action."/></add-error> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="addTaskAssignment" short-description="Update Task"> |
| <!-- Assigned --> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="assignedList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="workEffortId" from-field="parameters.workEffortId"/> |
| <condition-expr field-name="statusId" value="SCAS_ASSIGNED"/> |
| </condition-list> |
| </entity-condition> |
| <!-- for Scrum Meeting task --> |
| <if-not-empty field="assignedList"> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="partyAssignedList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="workEffortId" from-field="parameters.workEffortId"/> |
| <condition-expr field-name="partyId" from-field="userLogin.partyId"/> |
| <condition-expr field-name="statusId" value="SCAS_ASSIGNED"/> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="partyAssignedList"> |
| <!-- get roletype from sprint member --> |
| <entity-condition entity-name="ProjectSprintBacklogAndTask" list="sprintList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="sprintTypeId" value="SCRUM_SPRINT"/> |
| <condition-expr field-name="taskId" from-field="parameters.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <first-from-list list="sprintList" entry="sprint"/> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="sprintRoles"> |
| <condition-list combine="and"> |
| <condition-expr field-name="partyId" from-field="parameters.partyId"/> |
| <condition-expr field-name="workEffortId" from-field="sprint.sprintId"/> |
| <condition-expr field-name="roleTypeId" value="SCRUM_TEAM"/> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="sprintRoles"> |
| <add-error> |
| <fail-message message="Can not assign task to partyId : ${parameters.partyId} because this partyId dose not have the SCRUM_TEAM roleTypeId"/> |
| </add-error> |
| <check-errors/> |
| </if-empty> |
| <entity-one entity-name="UserLogin" value-field="userLogin"> |
| <field-map field-name="userLoginId" from-field="parameters.partyId"/> |
| </entity-one> |
| <set field="newAssign.partyId" from-field="parameters.partyId"/> |
| <set field="newAssign.workEffortId" from-field="parameters.workEffortId"/> |
| <set field="newAssign.roleTypeId" from-field="sprintRoles[0].roleTypeId"/> |
| <set field="newAssign.statusId" value="SCAS_ASSIGNED"/> |
| <set field="newAssign.assignedByUserLoginId" from-field="userLogin"/> |
| <now-timestamp field="newAssign.fromDate"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newAssign"/> |
| <else> |
| <add-error> |
| <fail-message message="Party : ${parameters.partyId} is already assigned to work effort Id : ${parameters.workEffortId} , not adding again"/> |
| </add-error> |
| <check-errors/> |
| </else> |
| </if-empty> |
| </if-not-empty> |
| |
| <if-empty field="assignedList"> |
| <!-- for other task --> |
| <entity-and entity-name="CustRequestWorkEffort" list="custRequestList"> |
| <field-map field-name="workEffortId" from-field="parameters.workEffortId"/> |
| </entity-and> |
| <entity-one entity-name="CustRequest" value-field="custRequest"> |
| <field-map field-name="custRequestId" from-field="custRequestList[0].custRequestId"/> |
| </entity-one> |
| <set field="custRequestTypeId" from-field="custRequest.custRequestTypeId"/> |
| <if-compare field="custRequestTypeId" operator="equals" value="RF_UNPLAN_BACKLOG"> |
| <entity-one entity-name="PartyRole" value-field="party"> |
| <field-map field-name="partyId" from-field="userLogin.partyId"/> |
| <field-map field-name="roleTypeId" value="SCRUM_TEAM"/> |
| </entity-one> |
| <if-not-empty field="party"> |
| <set field="roleTypeId" from-field="party.roleTypeId"/> |
| <set field="partyId" from-field="userLogin.partyId"/> |
| <set field="workEffortId" from-field="parameters.workEffortId"/> |
| <else> |
| <add-error> |
| <fail-message message="Can not assign task to partyId : ${userLogin.partyId} because this partyId dose not have the SCRUM_TEAM roleTypeId"/> |
| </add-error> |
| <check-errors/> |
| </else> |
| </if-not-empty> |
| <else> |
| <!-- get roletype from sprint member --> |
| <entity-condition entity-name="ProjectSprintBacklogAndTask" list="sprintList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="sprintTypeId" value="SCRUM_SPRINT"/> |
| <condition-expr field-name="taskId" from-field="parameters.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <first-from-list list="sprintList" entry="sprint"/> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="sprintRoles"> |
| <condition-list combine="and"> |
| <condition-expr field-name="partyId" from-field="parameters.partyId"/> |
| <condition-expr field-name="workEffortId" from-field="sprint.sprintId"/> |
| <condition-expr field-name="roleTypeId" value="SCRUM_TEAM"/> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="sprintRoles"> |
| <add-error> |
| <fail-message message="Can not assign task to partyId : ${parameters.partyId} because this partyId dose not have the SCRUM_TEAM roleTypeId"/> |
| </add-error> |
| <check-errors/> |
| </if-empty> |
| <entity-and entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <field-map field-name="workEffortId" from-field="parameters.workEffortId"/> |
| </entity-and> |
| <iterate list="assigneds" entry="assigned"> |
| <remove-value value-field="assigned"/> |
| </iterate> |
| <set field="partyId" from-field="parameters.partyId"/> |
| <set field="workEffortId" from-field="parameters.workEffortId"/> |
| <set field="roleTypeId" from-field="sprintRoles[0].roleTypeId"/> |
| </else> |
| </if-compare> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <set field="newInput.partyId" from-field="partyId"/> |
| <set field="newInput.workEffortId" from-field="workEffortId"/> |
| <set field="newInput.roleTypeId" from-field="roleTypeId"/> |
| <set field="newInput.statusId" value="SCAS_ASSIGNED"/> |
| <set field="newInput.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| </if-empty> |
| </simple-method> |
| |
| <simple-method method-name="CopyMemberLastSprint" short-description=""> |
| <entity-and entity-name="WorkEffort" list="sprintList"> |
| <field-map field-name="workEffortParentId" from-field="parameters.projectId"/> |
| <field-map field-name="workEffortTypeId" value="SCRUM_SPRINT"/> |
| <order-by field-name="createdDate DESC"/> |
| </entity-and> |
| <set field="projectId" from-field="parameters.projectId"/> |
| <set field="sprintId" from-field="parameters.sprintId"/> |
| <set field="lastestSprintId" from-field="sprintList[0].workEffortId"/> |
| <set field="size" value="${groovy:sprintList.size();}"/> |
| <loop count="${size}" field="i"> |
| <if-compare operator="equals" value="${sprintId}" field="sprintList[i].workEffortId" > |
| <set field="previousSprintId" from-field="sprintList[i+1].workEffortId"/> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="memberPrevSprint"> |
| <condition-list combine="and"> |
| <condition-expr field-name="workEffortId" from-field="previousSprintId"/> |
| <condition-list combine="or"> |
| <condition-expr field-name="roleTypeId" value="SCRUM_MASTER"/> |
| <condition-expr field-name="roleTypeId" value="SCRUM_TEAM"/> |
| </condition-list> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="memberPrevSprint"> |
| <iterate list="memberPrevSprint" entry="member"> |
| <entity-and list="sprintmember" entity-name="WorkEffortPartyAssignment"> |
| <field-map field-name="partyId" from-field="member.partyId"/> |
| <field-map field-name="roleTypeId" from-field="member.roleTypeId"/> |
| <field-map field-name="statusId" from-field="member.statusId"/> |
| <field-map field-name="workEffortId" from-field="sprintId"/> |
| </entity-and> |
| <if-empty field="sprintmember[0]"> |
| <set field="assign.partyId" from-field="member.partyId"/> |
| <set field="assign.roleTypeId" from-field="member.roleTypeId"/> |
| <set field="assign.statusId" from-field="member.statusId"/> |
| <set field="assign.workEffortId" from-field="sprintId"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="assign"/> |
| </if-empty> |
| </iterate> |
| <else> |
| <field-to-request field="projectId"/> |
| <field-to-request field="sprintId"/> |
| <add-error> |
| <fail-message message="Cannot assign member to this sprint because there is no member from last sprint"/> |
| </add-error> |
| <check-errors/> |
| |
| </else> |
| </if-not-empty> |
| </if-compare> |
| </loop> |
| <field-to-request field="projectId"/> |
| <field-to-request field="sprintId"/> |
| </simple-method> |
| <simple-method method-name="createScrumCommunicationEvent" short-description="Create Scrum Communication Event"> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <map-to-map map="parameters" to-map="communicationMap"/> |
| <set field="communicationMap.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="createCommunicationEvent" in-map-name="communicationMap" > |
| <result-to-request result-name="communicationEventId"/> |
| </call-service> |
| <field-to-request field="parameters.productIdIn" request-name="productId"/> |
| <field-to-request field="parameters.custRequestId" request-name="custRequestId"/> |
| </simple-method> |
| |
| <simple-method method-name="updateScrumCommunicationEvent" short-description="Update Scrum Communication Event"> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <map-to-map map="parameters" to-map="communicationMap"/> |
| <set field="communicationMap.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="updateCommunicationEvent" in-map-name="communicationMap" > |
| <result-to-request result-name="communicationEventId"/> |
| </call-service> |
| <field-to-request field="parameters.productIdIn" request-name="productId"/> |
| <field-to-request field="parameters.custRequestId" request-name="custRequestId"/> |
| </simple-method> |
| |
| <simple-method method-name="createScrumCommunicationEventContent" short-description="Create Scrum Communication Event Content"> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <set field="updateMap.userLogin" from-field="systemUserLogin"/> |
| <set field="data.userLogin" from-field="systemUserLogin"/> |
| <set field="attachMap.userLogin" from-field="systemUserLogin"/> |
| <set field="contentMap.userLogin" from-field="systemUserLogin"/> |
| <set field="partycontent.userLogin" from-field="systemUserLogin"/> |
| <set field="contentAssoc.userLogin" from-field="systemUserLogin"/> |
| <call-simple-method method-name="createCommunicationEventContent" xml-resource="component://party/minilang/communication/CommunicationEventEvents.xml"/> |
| </simple-method> |
| |
| <simple-method method-name="updateScrumTimeEntry" short-description="Update TimeEntry in the Scrum component"> |
| <entity-one entity-name="TimeEntry" value-field="lookedUpValue"> |
| <field-map field-name="timeEntryId" from-field="parameters.timeEntryId"/> |
| </entity-one> |
| |
| <!-- update all fields except invoiceId,invoiceItemSeqId and only those if they are not yet set --> |
| <map-to-map map="parameters" to-map="fieldsToCopy"/> |
| <clear-field field="fieldsToCopy.invoiceId"/> |
| <clear-field field="fieldsToCopy.invoiceItemSeqId"/> |
| |
| <!-- if dates are updated and no hours value is specified, calc it here --> |
| <if> |
| <condition> |
| <and> |
| <if-empty field="fieldsToCopy.hours"/> |
| <or> |
| <not><if-empty field="fieldsToCopy.fromDate"/></not> |
| <not><if-empty field="fieldsToCopy.thruDate"/></not> |
| </or> |
| <or> |
| <if-compare-field field="fieldsToCopy.fromDate" operator="not-equals" to-field="lookedUpValue.fromDate"/> |
| <if-compare-field field="fieldsToCopy.thruDate" operator="not-equals" to-field="lookedUpValue.thruDate"/> |
| </or> |
| </and> |
| </condition> |
| <then> |
| <set field="fieldsToCopy.hours" value="${groovy:org.apache.ofbiz.base.util.UtilDateTime.getInterval((fieldsToCopy.fromDate ? fieldsToCopy.fromDate : lookedUpValue.fromDate), (fieldsToCopy.thruDate ? fieldsToCopy.thruDate : lookedUpValue.thruDate))/3600000}" type="Double"/> |
| </then> |
| </if> |
| <set field="fieldsToCopy.partyId" from-field="lookedUpValue.partyId"/> |
| <set-nonpk-fields map="fieldsToCopy" value-field="lookedUpValue"/> |
| |
| <if-not-empty field="parameters.invoiceId"> |
| <if-empty field="lookedUpValue.invoiceId"> |
| <set field="lookedUpValue.invoiceId" from-field="parameters.invoiceId"/> |
| <set field="lookedUpValue.invoiceItemSeqId" from-field="parameters.invoiceItemSeqId"/> |
| </if-empty> |
| </if-not-empty> |
| <store-value value-field="lookedUpValue"/> |
| </simple-method> |
| |
| <simple-method method-name="deleteDefaultTaskScrum" short-description="Delete default Task for Scrum"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PROJECT_ROLE" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PROJECT" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <if-not-empty field="parameters.workEffortId"> |
| <entity-one entity-name="WorkEffort" value-field="workEffortMap"/> |
| <get-related relation-name="CustRequestWorkEffort" list="custWorkEffortList" value-field="workEffortMap"/> |
| <if-not-empty field="custWorkEffortList"> |
| <remove-related value-field="workEffortMap" relation-name="CustRequestWorkEffort"/> |
| </if-not-empty> |
| <entity-and entity-name="WorkEffortGoodStandard" list="workEffGSDList"> |
| <field-map field-name="workEffortId" from-field="parameters.workEffortId"/> |
| </entity-and> |
| <if-not-empty field="workEffGSDList"> |
| <remove-list list="workEffGSDList"/> |
| </if-not-empty> |
| <set-service-fields service-name="deleteWorkEffort" map="workEffortMap" to-map="serviceMap"/> |
| <call-service service-name="deleteWorkEffort" in-map-name="serviceMap"> |
| <default-message>The Default Task record successfully deleted.</default-message> |
| </call-service> |
| </if-not-empty> |
| </then> |
| <else> |
| <add-error> |
| <fail-message message="You are has no permission to perform this action."/> |
| </add-error> |
| <check-errors/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="createQuickAddBacklog" short-description="Create Quick Add Backlog"> |
| <call-simple-method method-name="getWebSiteId"/> |
| <if-empty field="parameters.description"> |
| <add-error> |
| <fail-message message="There is no Product Backlog Item."/> |
| </add-error> |
| <check-errors/> |
| </if-empty> |
| <if-empty field="parameters.unplanned"> |
| <add-error> |
| <fail-message message="Please select backlog type."/> |
| </add-error> |
| <check-errors/> |
| </if-empty> |
| <if-compare field="parameters.unplanned" operator="equals" value="N" > |
| <set field="inputValue" from-field="parameters.keyId"/> |
| <set field="parameters.productId" value="${groovy: inputValue.substring(0,inputValue.indexOf(','))}"/> |
| <set field="parameters.projectId" value="${groovy: inputValue.substring(inputValue.indexOf(',')+1,inputValue.lastIndexOf(','))}"/> |
| <set field="parameters.sprintId" value="${groovy: inputValue.substring(inputValue.lastIndexOf(',')+1,inputValue.length())}"/> |
| </if-compare> |
| <!-- Permission Check --> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM_PRODUCT_BACKLOG" action="_CREATE"/> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <!-- We should create baklog in first--> |
| <if-not-empty field="parameters.custSequenceNum"> |
| <!-- check duplicate data --> |
| <entity-count count-field="getNum" entity-name="CustRequestAndCustRequestItem"> |
| <condition-list combine="and"> |
| <condition-expr field-name="productId" from-field="parameters.productId"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_ACCEPTED"/> |
| </condition-list> |
| </entity-count> |
| <!-- the first sequence number --> |
| <if-compare field="getNum" operator="equals" value="0"> |
| <set field="createCustRequestInMap.custSequenceNum" from-field="parameters.custSequenceNum"/> |
| <else> |
| <entity-condition entity-name="CustRequestAndCustRequestItem" list="custRequestList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="productId" from-field="parameters.productId"/> |
| <condition-expr field-name="statusId" operator="equals" value="CRQ_ACCEPTED"/> |
| </condition-list> |
| <order-by field-name="custSequenceNum"/> |
| </entity-condition> |
| <set field="sequenceNumkey" from-field="parameters.custSequenceNum" type="Integer"/> |
| <set field="productMap" from-field="custRequestList[sequenceNumkey-1]"/> |
| <set field="externalSeq" from-field="productMap.custSequenceNum" type="Long"/> |
| <!-- Insert new transaction to CustRequest --> |
| <loop count="${getNum}" field="j"> |
| <set field="internalSeq" from-field="custRequestList[j].custSequenceNum" type="Long" /> |
| <set field="ready" value="${groovy:internalSeq>=externalSeq}" type="Boolean"/> |
| <if-compare field="ready" operator="equals" value="true" type="Boolean"> |
| <set field="custRequestIdIn" from-field="custRequestList[j].custRequestId"/> |
| <entity-one entity-name="CustRequest" value-field="custRequestMap"> |
| <field-map field-name="custRequestId" from-field="custRequestIdIn"/> |
| </entity-one> |
| <set field="custSequenceNum" from-field="custRequestMap.custSequenceNum"/> |
| <set field="nextSeqNum" value="${custSequenceNum+1}" type="Long"/> |
| <set field="custRequestMap.custSequenceNum" from-field="nextSeqNum"/> |
| <store-value value-field="custRequestMap"/> |
| </if-compare> |
| </loop> |
| <set field="createCustRequestInMap.custSequenceNum" from-field="externalSeq"/> |
| </else> |
| </if-compare> |
| </if-not-empty> |
| <if-empty field="parameters.fromPartyId"> |
| <set field="createCustRequestInMap.fromPartyId" from-field="userLogin.partyId"/> |
| </if-empty> |
| <set field="changeToMilliSec" value="${parameters.custEstimatedMilliSeconds*1000*60*60}"/> |
| <set field="createCustRequestInMap.custEstimatedMilliSeconds" from-field="changeToMilliSec" type="Double"/> |
| <if-compare field="parameters.unplanned" operator="equals" value="Y" > |
| <set field="createCustRequestInMap.custRequestTypeId" value="RF_UNPLAN_BACKLOG"/> |
| <else> |
| <set field="createCustRequestInMap.custRequestTypeId" value="RF_PROD_BACKLOG"/> |
| </else> |
| </if-compare> |
| <set field="createCustRequestInMap.billed" from-field="parameters.billed"/> |
| <set field="createCustRequestInMap.statusId" value="CRQ_ACCEPTED"/> |
| <set field="createCustRequestInMap.custRequestName" value="Product Backlog"/> |
| <set field="createCustRequestInMap.description" from-field="parameters.description"/> |
| <set field="createCustRequestInMap.openDateTime" from-field="parameters.openDateTime"/> |
| <set field="createCustRequestInMap.closedDateTime" from-field="parameters.closedDateTime"/> |
| <set field="createCustRequestInMap.parentCustRequestId" from-field="parameters.parentCustRequestId"/> |
| <set field="createCustRequestInMap.webSiteId" from-field="parameters.webSiteId"/> |
| |
| <sequenced-id sequence-name="CustRequestItem" field="custRequestItemSeqId"/> |
| <set field="createCustRequestInMap.custRequestItemSeqId" from-field="custRequestItemSeqId"/> |
| <set field="createCustRequestInMap.story" from-field="parameters.story"/> |
| <set field="createCustRequestInMap.productId" from-field="parameters.productId"/> |
| <call-service service-name="createCustRequest" in-map-name="createCustRequestInMap"> |
| <result-to-field result-name="custRequestId"/> |
| </call-service> |
| <!-- create CustRequestNote --> |
| <if-not-empty field="parameters.noteInfo"> |
| <set field="newNoteMap.note" from-field="parameters.noteInfo"/> |
| <set field="newNoteMap.noteName" value="How to test"/> |
| <call-service service-name="createNote" in-map-name="newNoteMap"> |
| <result-to-field result-name="noteId" field="noteId"/> |
| </call-service> |
| <make-value value-field="newEntity" entity-name="CustRequestNote"/> |
| <set from-field="custRequestId" field="newEntity.custRequestId"/> |
| <set from-field="noteId" field="newEntity.noteId"/> |
| <log level="always" message=">>>>>>>>>>>>>>>>>> newEntity : ${newEntity}"></log> |
| <create-value value-field="newEntity"/> |
| </if-not-empty> |
| <!-- add new backlog to sprint --> |
| <if-not-empty field="custRequestId"> |
| <if-compare field="parameters.unplanned" operator="equals" value="N" > |
| <set field="sprintBL.custRequestId" from-field="custRequestId"/> |
| <set field="sprintBL.workEffortId" from-field="parameters.sprintId"/> |
| <set field="sprintBL.userLogin" from-field="userLogin"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="sprintBL"/> |
| <set field="inMap.custRequestId" from-field="custRequestId"/> |
| <set field="inMap.statusId" value="CRQ_REVIEWED"/> |
| <else> |
| <set field="inMap.custRequestId" from-field="custRequestId"/> |
| <set field="inMap.statusId" value="CRQ_REVIEWED"/> |
| <set field="inMap.custRequestName" value="Unplanned Backlog"/> |
| </else> |
| </if-compare> |
| <set field="inMap.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="updateCustRequest" in-map-name="inMap"/> |
| |
| <!-- Check If there are tasks already in a backlog --> |
| <entity-condition entity-name="WorkEffortCustRequestView" list="backlogItemTaskList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="custRequestId" from-field="custRequestId"/> |
| <condition-list combine="or"> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_ERROR"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_IMPL"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_INST"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_TEST"/> |
| </condition-list> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="backlogItemTaskList"> |
| <entity-and entity-name="WorkEffortAndProduct" list="defaultTaskList"> |
| <field-map field-name="workEffortPurposeTypeId" value="SCRUM_DEFAULT_TASK"/> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| </entity-and> |
| <if-not-empty field="defaultTaskList"> |
| <iterate list="defaultTaskList" entry="defaultTask"> |
| <set field="newDefaultTask.workEffortName" from-field="defaultTask.workEffortName"/> |
| <set field="newDefaultTask.estimatedMilliSeconds" from-field="defaultTask.estimatedMilliSeconds"/> |
| <set field="newDefaultTask.currentStatusId" from-field="defaultTask.currentStatusId"/> |
| <set field="newDefaultTask.workEffortTypeId" from-field="defaultTask.workEffortTypeId"/> |
| <if-compare field="parameters.unplanned" operator="equals" value="N" > |
| <set field="newDefaultTask.workEffortParentId" from-field="parameters.sprintId"/> |
| </if-compare> |
| <call-service service-name="createWorkEffort" in-map-name="newDefaultTask"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| <set field="newBacklogItemTask.custRequestId" from-field="custRequestId"/> |
| <set field="newBacklogItemTask.workEffortId" from-field="workEffortId"/> |
| <set field="newBacklogItemTask.userLogin" from-field="userLogin"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="newBacklogItemTask"/> |
| <!-- Assigned party for default task--> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="defaultTask.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="assigneds"> |
| <first-from-list list="assigneds" entry="assignedMap"/> |
| <set field="newInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="newInput.workEffortId" from-field="workEffortId"></set> |
| <set field="newInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="newInput.statusId" value="SCAS_ASSIGNED"></set> |
| <set field="newInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| <!-- Assigned party for sprint --> |
| <if-compare field="parameters.unplanned" operator="equals" value="N" > |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="sprintAssigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="partyId" from-field="assignedMap.partyId"/> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="parameters.sprintId"/> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="sprintAssigneds"> |
| <set field="sprintInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="sprintInput.workEffortId" from-field="parameters.sprintId"></set> |
| <set field="sprintInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="sprintInput.statusId" value="PRTYASGN_ASSIGNED"></set> |
| <set field="sprintInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="sprintInput"/> |
| </if-empty> |
| </if-compare> |
| </if-not-empty> |
| </iterate> |
| <else> |
| <!-- If not have default task in product level --> |
| <entity-and entity-name="WorkEffort" list="defaultTaskScrum"> |
| <field-map field-name="workEffortPurposeTypeId" value="SYSTEM_DEFAULT_TASK"/> |
| </entity-and> |
| <if-not-empty field="defaultTaskScrum"> |
| <iterate list="defaultTaskScrum" entry="defaultScrum"> |
| <set field="newDefaultTaskScrum.workEffortName" from-field="defaultScrum.workEffortName"/> |
| <set field="newDefaultTaskScrum.estimatedMilliSeconds" from-field="defaultScrum.estimatedMilliSeconds"/> |
| <set field="newDefaultTaskScrum.currentStatusId" from-field="defaultScrum.currentStatusId"/> |
| <set field="newDefaultTaskScrum.workEffortTypeId" from-field="defaultScrum.workEffortTypeId"/> |
| <if-compare field="parameters.unplanned" operator="equals" value="N" > |
| <set field="newDefaultTaskScrum.workEffortParentId" from-field="parameters.sprintId"/> |
| </if-compare> |
| <call-service service-name="createWorkEffort" in-map-name="newDefaultTaskScrum"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| <set field="newBacklogItemTaskScrum.custRequestId" from-field="custRequestId"/> |
| <set field="newBacklogItemTaskScrum.workEffortId" from-field="workEffortId"/> |
| <set field="newBacklogItemTaskScrum.userLogin" from-field="userLogin"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="newBacklogItemTaskScrum"/> |
| <!-- Assigned party for default task--> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="defaultScrum.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="assigneds"> |
| <first-from-list list="assigneds" entry="assignedMap"/> |
| <set field="newInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="newInput.workEffortId" from-field="workEffortId"></set> |
| <set field="newInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="newInput.statusId" value="SCAS_ASSIGNED"></set> |
| <set field="newInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| <!-- Assigned party for sprint --> |
| <if-compare field="parameters.unplanned" operator="equals" value="N" > |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="sprintAssigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="partyId" from-field="assignedMap.partyId"/> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="parameters.sprintId"/> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="sprintAssigneds"> |
| <set field="sprintInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="sprintInput.workEffortId" from-field="parameters.sprintId"></set> |
| <set field="sprintInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="sprintInput.statusId" value="PRTYASGN_ASSIGNED"></set> |
| <set field="sprintInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="sprintInput"/> |
| </if-empty> |
| </if-compare> |
| </if-not-empty> |
| </iterate> |
| </if-not-empty> |
| </else> |
| </if-not-empty> |
| <else> |
| <loop count="${groovy: backlogItemTaskList.size()}" field="j"> |
| <set field="updateWorkEffort.workEffortId" from-field="backlogItemTaskList[j].workEffortId"/> |
| <set field="updateWorkEffort.workEffortParentId" from-field="parameters.sprintId"/> |
| <call-service service-name="updateWorkEffort" in-map-name="updateWorkEffort"/> |
| </loop> |
| </else> |
| </if-empty> |
| </if-not-empty> |
| <field-to-request field="parameters.sprintId" request-name="sprintId"/> |
| <field-to-request field="parameters.productId" request-name="productId"/> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="setUnplannedSprint" short-description="Change status unplanned backlog to CRQ_REVIEW"> |
| <if> |
| <condition> |
| <or> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| <if-has-permission permission="SCRUM_PRODUCT_BACKLOG" action="_ADMIN"/> |
| </or> |
| </condition> |
| <then> |
| <call-simple-method method-name="getWebSiteId"/> |
| <set field="update.custRequestId" from-field="parameters.custRequestId"/> |
| <set field="update.statusId" value="CRQ_REVIEWED"/> |
| <set field="update.custRequestName" value="Unplanned Backlog"/> |
| <set field="update.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="updateCustRequest" in-map-name="update"/> |
| <!-- Check If there are tasks already in a backlog --> |
| <entity-condition entity-name="WorkEffortCustRequestView" list="backlogItemTaskList"> |
| <condition-list combine="and"> |
| <condition-expr field-name="custRequestId" from-field="parameters.custRequestId"/> |
| <condition-list combine="or"> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_ERROR"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_IMPL"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_INST"/> |
| <condition-expr field-name="workEffortTypeId" value="SCRUM_TASK_TEST"/> |
| </condition-list> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="backlogItemTaskList"> |
| <!-- add default task in product level --> |
| <entity-and entity-name="WorkEffortAndProduct" list="defaultTaskList"> |
| <field-map field-name="workEffortPurposeTypeId" value="SCRUM_DEFAULT_TASK"/> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| </entity-and> |
| <if-not-empty field="defaultTaskList"> |
| <iterate list="defaultTaskList" entry="defaultTask"> |
| <set field="newDefaultTask.workEffortName" from-field="defaultTask.workEffortName"/> |
| <set field="newDefaultTask.estimatedMilliSeconds" from-field="defaultTask.estimatedMilliSeconds"/> |
| <set field="newDefaultTask.currentStatusId" from-field="defaultTask.currentStatusId"/> |
| <set field="newDefaultTask.workEffortTypeId" from-field="defaultTask.workEffortTypeId"/> |
| <call-service service-name="createWorkEffort" in-map-name="newDefaultTask"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| <set field="newBacklogItemTask.custRequestId" from-field="parameters.custRequestId"/> |
| <set field="newBacklogItemTask.workEffortId" from-field="workEffortId"/> |
| <set field="newBacklogItemTask.userLogin" from-field="userLogin"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="newBacklogItemTask"/> |
| <!-- Assigned party for default task--> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="defaultTask.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="assigneds"> |
| <first-from-list list="assigneds" entry="assignedMap"/> |
| <set field="newInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="newInput.workEffortId" from-field="workEffortId"></set> |
| <set field="newInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="newInput.statusId" value="SCAS_ASSIGNED"></set> |
| <set field="newInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| </if-not-empty> |
| </iterate> |
| <else> |
| <!-- If not have default task in product level --> |
| <entity-and entity-name="WorkEffort" list="defaultTaskScrum"> |
| <field-map field-name="workEffortPurposeTypeId" value="SYSTEM_DEFAULT_TASK"/> |
| </entity-and> |
| <if-not-empty field="defaultTaskScrum"> |
| <iterate list="defaultTaskScrum" entry="defaultScrum"> |
| <set field="newDefaultTaskScrum.workEffortName" from-field="defaultScrum.workEffortName"/> |
| <set field="newDefaultTaskScrum.estimatedMilliSeconds" from-field="defaultScrum.estimatedMilliSeconds"/> |
| <set field="newDefaultTaskScrum.currentStatusId" from-field="defaultScrum.currentStatusId"/> |
| <set field="newDefaultTaskScrum.workEffortTypeId" from-field="defaultScrum.workEffortTypeId"/> |
| <call-service service-name="createWorkEffort" in-map-name="newDefaultTaskScrum"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| <set field="newBacklogItemTaskScrum.custRequestId" from-field="parameters.custRequestId"/> |
| <set field="newBacklogItemTaskScrum.workEffortId" from-field="workEffortId"/> |
| <set field="newBacklogItemTaskScrum.userLogin" from-field="userLogin"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="newBacklogItemTaskScrum"/> |
| <!-- Assigned party for default task--> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="defaultScrum.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="assigneds"> |
| <first-from-list list="assigneds" entry="assignedMap"/> |
| <set field="newInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="newInput.workEffortId" from-field="workEffortId"></set> |
| <set field="newInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="newInput.statusId" value="SCAS_ASSIGNED"></set> |
| <set field="newInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| </if-not-empty> |
| </iterate> |
| </if-not-empty> |
| </else> |
| </if-not-empty> |
| </if-empty> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| |
| <simple-method method-name="setTaskStatusReOpen" short-description="Re-Open Task from STS_COMPLETE to STS_CREATED"> |
| <call-simple-method method-name="getWebSiteId"/> |
| <if> |
| <condition> |
| <if-has-permission permission="SCRUM" action="_ADMIN"/> |
| </condition> |
| <then> |
| <!-- update status task --> |
| <entity-one entity-name="WorkEffort" value-field="workEffortMap"> |
| <field-map field-name="workEffortId" from-field="parameters.taskId"/> |
| </entity-one> |
| <set field="update.workEffortId" from-field="parameters.taskId"/> |
| <set field="update.currentStatusId" value="STS_CREATED"/> |
| <call-service service-name="updateWorkEffort" in-map-name="update"/> |
| <!-- if task assign member and input timesheet --> |
| <entity-and entity-name="WorkEffortPartyAssignment" list="assign"> |
| <field-map field-name="workEffortId" from-field="parameters.taskId"/> |
| </entity-and> |
| <if-not-empty field="assign"> |
| <set field="updatePartyAssign.workEffortId" from-field="parameters.taskId"/> |
| <set field="updatePartyAssign.fromDate" from-field="assign[0].fromDate"/> |
| <set field="updatePartyAssign.partyId" from-field="assign[0].partyId"/> |
| <set field="updatePartyAssign.roleTypeId" from-field="assign[0].roleTypeId"/> |
| <set field="updatePartyAssign.statusId" value="STS_CREATED"/> |
| <call-service service-name="updatePartyToWorkEffortAssignment" in-map-name="updatePartyAssign"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| </if-not-empty> |
| <!-- if re-open task in complete backlog --> |
| <entity-and entity-name="ProjectSprintBacklogAndTask" list="backlogTask"> |
| <field-map field-name="taskId" from-field="parameters.taskId"/> |
| <field-map field-name="sprintTypeId" value="SCRUM_SPRINT"/> |
| </entity-and> |
| <if-empty field="backlogTask"> |
| <entity-and entity-name="UnPlannedBacklogsAndTasks" list="backlogTask"> |
| <field-map field-name="workEffortId" from-field="parameters.taskId"/> |
| <field-map field-name="custRequestTypeId" value="RF_UNPLAN_BACKLOG"/> |
| </entity-and> |
| </if-empty> |
| <entity-and entity-name="CustRequest" list="backlog"> |
| <field-map field-name="custRequestId" from-field="backlogTask[0].custRequestId"/> |
| </entity-and> |
| <!-- re-open completed backlog --> |
| <if-compare operator="equals" value="CRQ_COMPLETED" field="backlog[0].statusId"> |
| <set field="updateBacklog.custRequestId" from-field="backlog[0].custRequestId"/> |
| <set field="updateBacklog.statusId" value="CRQ_REVIEWED"/> |
| <set field="updateBacklog.webSiteId" from-field="parameters.webSiteId"/> |
| <call-service service-name="setCustRequestStatus" in-map-name="updateBacklog"/> |
| |
| <!-- also add a new task (the installation task and the test task) --> |
| <if-compare field="workEffortMap.workEffortTypeId" operator="not-equals" value="SCRUM_TASK_TEST"> |
| <entity-and entity-name="ProjectSprintBacklogAndTask" list="projectAndTaskList"> |
| <field-map field-name="sprintTypeId" value="SCRUM_SPRINT"/> |
| <field-map field-name="taskId" from-field="parameters.taskId"/> |
| <select-field field-name="projectId"/> |
| <select-field field-name="sprintId"/> |
| </entity-and> |
| <entity-and entity-name="UnPlannedBacklogsAndTasks" list="unPlannedTasks"> |
| <field-map field-name="custRequestId" from-field="backlog[0].custRequestId"/> |
| <field-map field-name="workEffortId" from-field="parameters.taskId"/> |
| <select-field field-name="productId"/> |
| </entity-and> |
| <if-not-empty field="projectAndTaskList"> |
| <first-from-list list="projectAndTaskList" entry="projectAndTaskMap"/> |
| <entity-and entity-name="WorkEffortAndProduct" list="productList"> |
| <field-map field-name="workEffortId" from-field="projectAndTaskMap.projectId"/> |
| <select-field field-name="productId"/> |
| </entity-and> |
| <entity-and entity-name="WorkEffortAndProduct" list="defaultTaskList"> |
| <field-map field-name="workEffortPurposeTypeId" value="SCRUM_DEFAULT_TASK"/> |
| <field-map field-name="productId" from-field="productList[0].productId"/> |
| </entity-and> |
| <else> |
| <first-from-list list="unPlannedTasks" entry="unPlannedTaskMap"/> |
| <entity-and entity-name="WorkEffortAndProduct" list="defaultTaskList"> |
| <field-map field-name="workEffortPurposeTypeId" value="SCRUM_DEFAULT_TASK"/> |
| <field-map field-name="productId" from-field="unPlannedTaskMap.productId"/> |
| </entity-and> |
| </else> |
| </if-not-empty> |
| <if-not-empty field="defaultTaskList"> |
| <iterate list="defaultTaskList" entry="defaultTask"> |
| <set field="workEffortTypeId" from-field="defaultTask.workEffortTypeId"/> |
| <if> |
| <condition> |
| <and> |
| <or> |
| <if-compare operator="equals" value="SCRUM_TASK_INST" field="workEffortTypeId"/> |
| <if-compare operator="equals" value="SCRUM_TASK_TEST" field="workEffortTypeId"/> |
| </or> |
| <or> |
| <if-compare operator="equals" value="SCRUM_TASK_ERROR" field="workEffortMap.workEffortTypeId"/> |
| <if-compare operator="equals" value="SCRUM_TASK_IMPL" field="workEffortMap.workEffortTypeId"/> |
| </or> |
| </and> |
| </condition> |
| <then> |
| <call-simple-method method-name="callCreateDefaultTasks"/> |
| </then> |
| <else> |
| <if> |
| <condition> |
| <and> |
| <if-compare operator="equals" value="SCRUM_TASK_TEST" field="workEffortTypeId"/> |
| <if-compare operator="equals" value="SCRUM_TASK_INST" field="workEffortMap.workEffortTypeId"/> |
| </and> |
| </condition> |
| <then> |
| <call-simple-method method-name="callCreateDefaultTasks"/> |
| </then> |
| </if> |
| </else> |
| </if> |
| </iterate> |
| <else> |
| <!-- If not have default task in product level --> |
| <entity-and entity-name="WorkEffort" list="defaultTaskList"> |
| <field-map field-name="workEffortPurposeTypeId" value="SYSTEM_DEFAULT_TASK"/> |
| </entity-and> |
| <if-not-empty field="defaultTaskList"> |
| <iterate list="defaultTaskList" entry="defaultTask"> |
| <set field="workEffortTypeId" from-field="defaultTask.workEffortTypeId"/> |
| <if> |
| <condition> |
| <and> |
| <or> |
| <if-compare operator="equals" value="SCRUM_TASK_INST" field="workEffortTypeId"/> |
| <if-compare operator="equals" value="SCRUM_TASK_TEST" field="workEffortTypeId"/> |
| </or> |
| <or> |
| <if-compare operator="equals" value="SCRUM_TASK_ERROR" field="workEffortMap.workEffortTypeId"/> |
| <if-compare operator="equals" value="SCRUM_TASK_IMPL" field="workEffortMap.workEffortTypeId"/> |
| </or> |
| </and> |
| </condition> |
| <then> |
| <call-simple-method method-name="callCreateDefaultTasks"/> |
| </then> |
| <else> |
| <if> |
| <condition> |
| <and> |
| <if-compare operator="equals" value="SCRUM_TASK_TEST" field="workEffortTypeId"/> |
| <if-compare operator="equals" value="SCRUM_TASK_INST" field="workEffortMap.workEffortTypeId"/> |
| </and> |
| </condition> |
| <then> |
| <call-simple-method method-name="callCreateDefaultTasks"/> |
| </then> |
| </if> |
| </else> |
| </if> |
| </iterate> |
| </if-not-empty> |
| </else> |
| </if-not-empty> |
| </if-compare> |
| </if-compare> |
| <!-- re-open completed sprint --> |
| <if-not-empty field="backlogTask[0].sprintId"> |
| <entity-one entity-name="WorkEffort" value-field="sprintMap"> |
| <field-map field-name="workEffortId" from-field="backlogTask[0].sprintId"/> |
| </entity-one> |
| <if-compare operator="equals" value="SPRINT_CLOSED" field="sprintMap.currentStatusId"> |
| <set field="sprintMap.currentStatusId" value="SPRINT_ACTIVE"/> |
| <store-value value-field="sprintMap"/> |
| </if-compare> |
| </if-not-empty> |
| </then> |
| <else> |
| <set field="_error_message_" value="You are has no permission to perform this action."/> |
| <return response-code="error"/> |
| </else> |
| </if> |
| </simple-method> |
| <simple-method method-name="callCreateDefaultTasks" short-description="Call Create Default Tasks"> |
| <set field="newDefaultTask.workEffortName" from-field="defaultTask.workEffortName"/> |
| <set field="newDefaultTask.estimatedMilliSeconds" from-field="defaultTask.estimatedMilliSeconds"/> |
| <set field="newDefaultTask.currentStatusId" from-field="defaultTask.currentStatusId"/> |
| <set field="newDefaultTask.workEffortTypeId" from-field="workEffortTypeId"/> |
| <if-not-empty field="projectAndTaskList"> |
| <set field="newDefaultTask.workEffortParentId" from-field="projectAndTaskList[0].sprintId"/> |
| </if-not-empty> |
| <call-service service-name="createWorkEffort" in-map-name="newDefaultTask"> |
| <result-to-field result-name="workEffortId"/> |
| </call-service> |
| <set field="newBacklogItemTask.custRequestId" from-field="backlog[0].custRequestId"/> |
| <set field="newBacklogItemTask.workEffortId" from-field="workEffortId"/> |
| <set field="newBacklogItemTask.userLogin" from-field="userLogin"/> |
| <call-service service-name="createWorkEffortRequest" in-map-name="newBacklogItemTask"/> |
| <!-- Assigned party for default task --> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="assigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="defaultTask.workEffortId"/> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="assigneds"> |
| <first-from-list list="assigneds" entry="assignedMap"/> |
| <set field="newInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="newInput.workEffortId" from-field="workEffortId"></set> |
| <set field="newInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="newInput.statusId" value="SCAS_ASSIGNED"></set> |
| <set field="newInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="newInput"/> |
| <!-- Assigned party for sprint --> |
| <if-not-empty field="projectAndTaskList"> |
| <entity-condition entity-name="WorkEffortPartyAssignment" list="sprintAssigneds"> |
| <condition-list combine="and"> |
| <condition-expr field-name="partyId" from-field="assignedMap.partyId"/> |
| <condition-expr field-name="statusId" value="PRTYASGN_ASSIGNED"/> |
| <condition-expr field-name="workEffortId" from-field="projectAndTaskList[0].sprintId"/> |
| </condition-list> |
| </entity-condition> |
| <if-empty field="sprintAssigneds"> |
| <set field="sprintInput.partyId" from-field="assignedMap.partyId"></set> |
| <set field="sprintInput.workEffortId" from-field="projectAndTaskList[0].sprintId"></set> |
| <set field="sprintInput.roleTypeId" from-field="assignedMap.roleTypeId"></set> |
| <set field="sprintInput.statusId" value="PRTYASGN_ASSIGNED"></set> |
| <set field="sprintInput.userLogin" from-field="userLogin"/> |
| <call-service service-name="assignPartyToWorkEffort" in-map-name="sprintInput"/> |
| </if-empty> |
| </if-not-empty> |
| </if-not-empty> |
| </simple-method> |
| |
| <simple-method method-name="scrumCreatePartyRole" short-description="Scrum Create Party Role"> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <map-to-map map="parameters" to-map="partyRoleMap"/> |
| <set field="partyRoleMap.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="createPartyRole" in-map-name="partyRoleMap"/> |
| <field-to-request field="parameters.partyId" request-name="partyId"/> |
| </simple-method> |
| |
| <simple-method method-name="scrumDeletePartyRole" short-description="Scrum Delete Party Role"> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <map-to-map map="parameters" to-map="partyRoleMap"/> |
| <set field="partyRoleMap.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="deletePartyRole" in-map-name="partyRoleMap"/> |
| <field-to-request field="parameters.partyId" request-name="partyId"/> |
| </simple-method> |
| |
| <simple-method method-name="scrumUpdatePartyRate" short-description="Scrum UpdatePartyRate"> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <set-service-fields service-name="updatePartyRate" map="parameters" to-map="partyRateMap"/> |
| <set field="partyRateMap.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="updatePartyRate" in-map-name="partyRateMap"/> |
| <field-to-request field="parameters.partyId" request-name="partyId"/> |
| </simple-method> |
| |
| <simple-method method-name="scrumDeletePartyRate" short-description="Scrum Delete Party Rate"> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <set-service-fields service-name="deletePartyRate" map="parameters" to-map="partyRateMap"/> |
| <set field="partyRateMap.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="deletePartyRate" in-map-name="partyRateMap"/> |
| <field-to-request field="parameters.partyId" request-name="partyId"/> |
| </simple-method> |
| |
| <simple-method method-name="createQuickAddPartyRelationship" short-description="create Quick Add Add Party Relationship"> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <set-service-fields service-name="createPartyRelationshipContactAccount" map="parameters" to-map="partyRelationshipMap"/> |
| <set field="partyRelationshipMap.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="createPartyRelationshipContactAccount" in-map-name="partyRelationshipMap"> |
| <default-message>Successfully created party relationship.</default-message> |
| </call-service> |
| </simple-method> |
| |
| <simple-method method-name="createQuickAddParty" short-description="create Quick Add Party" login-required="false"> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <property-to-field resource="security" property="username.lowercase" default="false" field="username_lowercase"/> |
| <property-to-field resource="security" property="password.lowercase" default="false" field="password_lowercase"/> |
| |
| <call-simple-method method-name="validateQuickAddPartyInfo"/> |
| <check-errors/> |
| |
| <call-service service-name="createPerson" in-map-name="personMap"> |
| <result-to-field result-name="partyId" field="tempMap.partyId"/> |
| </call-service> |
| |
| <set field="roleMap.roleTypeId" from-field="parameters.roleTypeId"/> |
| <set field="roleMap.partyId" from-field="tempMap.partyId"/> |
| <set field="roleMap.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="createPartyRole" in-map-name="roleMap"/> |
| |
| <!-- create the email address --> |
| <set from-field="tempMap.partyId" field="partyId"/> |
| <if-not-empty field="parameters.emailAddress"> |
| <set from-field="partyId" field="emailMap.partyId"/> |
| <set field="emailMap.contactMechPurposeTypeId" value="PRIMARY_EMAIL"/> |
| <set field="emailMap.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="createPartyEmailAddress" in-map-name="emailMap"/> |
| </if-not-empty> |
| |
| <!-- create userLogin --> |
| <if-not-empty field="userLoginContext.userLoginId"> |
| <set field="userLoginContext.passwordHint" value="No hint set"/> |
| |
| <if-compare field="username_lowercase" operator="equals" value="true"> |
| <call-object-method obj-field="userLoginContext.userLoginId" method-name="toLowerCase" ret-field="userLoginContext.userLoginId"/> |
| </if-compare> |
| <if-compare field="password_lowercase" operator="equals" value="true"> |
| <call-object-method obj-field="userLoginContext.currentPassword" method-name="toLowerCase" ret-field="userLoginContext.currentPassword"/> |
| <call-object-method obj-field="userLoginContext.currentPasswordVerify" method-name="toLowerCase" ret-field="userLoginContext.currentPasswordVerify"/> |
| </if-compare> |
| |
| <if-not-empty field="userLoginContext.userLoginId"> |
| <set field="userLoginExistsMap.userLoginId" from-field="userLoginContext.userLoginId"/> |
| <find-by-primary-key entity-name="UserLogin" map="userLoginExistsMap" value-field="existingUserLogin"/> |
| <if-not-empty field="existingUserLogin"> |
| <property-to-field field="tempErrorMessage" property="PartyUserNameInUse" resource="PartyUiLabels"/> |
| <field-to-list field="tempErrorMessage" list="error_list"/> |
| </if-not-empty> |
| </if-not-empty> |
| |
| <make-value entity-name="UserLogin" value-field="newUserLogin"/> |
| <set field="newUserLogin.userLoginId" from-field="userLoginContext.userLoginId"/> |
| <set field="newUserLogin.currentPassword" from-field="userLoginContext.currentPassword"/> |
| <set field="newUserLogin.passwordHint" from-field="userLoginContext.passwordHint"/> |
| |
| <!-- Check the password, etc for validity --> |
| <script>groovy: |
| String password = (String) userLoginContext.get("currentPassword"); |
| String confirmPassword = (String) userLoginContext.get("currentPasswordVerify"); |
| String passwordHint = (String) userLoginContext.get("passwordHint"); |
| org.apache.ofbiz.common.login.LoginServices.checkNewPassword(newUserLogin, null, password, confirmPassword, passwordHint, error_list, true, locale); |
| </script> |
| <!-- If password encryption is enabled, encrpyt it now --> |
| <script>groovy: |
| boolean useEncryption = "true".equals(org.apache.ofbiz.base.util.UtilProperties.getPropertyValue("security", "password.encrypt")); |
| if (useEncryption) { newUserLogin.set("currentPassword", org.apache.ofbiz.base.crypto.HashCrypt.getDigestHash((String) newUserLogin.get("currentPassword"))); } |
| </script> |
| |
| <!-- create the UserLogin --> |
| <set field="newUserLogin.partyId" from-field="tempMap.partyId"/> |
| <create-value value-field="newUserLogin"/> |
| </if-not-empty> |
| |
| <!-- Create Party Relation --> |
| <set field="partyRelationMap.contactPartyId" from-field="tempMap.partyId"/> |
| <set field="partyRelationMap.userLogin" from-field="systemUserLogin"/> |
| <call-service service-name="createPartyRelationshipContactAccount" in-map-name="partyRelationMap"/> |
| <!-- Creste security group --> |
| <if-not-empty field="parameters.roleTypeId"> |
| <set field="parameters.partyId" from-field="partyId"/> |
| <set field="parameters.userLoginIdDesc" value="|${userLoginContext.userLoginId}"/> |
| <if-compare operator="equals" value="PRODUCT_OWNER" field="parameters.roleTypeId"> |
| <set field="parameters.groupId" value="SCRUM_PRODUCT_OWNER"/> |
| </if-compare> |
| <if-compare operator="equals" value="PRODUCT_OWNER_COMP" field="parameters.roleTypeId"> |
| <set field="parameters.groupId" value="SCRUM_PRODUCT_OWNER"/> |
| </if-compare> |
| <if-compare operator="equals" value="SCRUM_MASTER" field="parameters.roleTypeId"> |
| <set field="parameters.groupId" value="SCRUM_MASTER"/> |
| </if-compare> |
| <if-compare operator="equals" value="SCRUM_TEAM" field="parameters.roleTypeId"> |
| <set field="parameters.groupId" value="SCRUM_TEAM"/> |
| </if-compare> |
| <if-compare operator="equals" value="STAKEHOLDER" field="parameters.roleTypeId"> |
| <set field="parameters.groupId" value="SCRUM_STAKEHOLDER"/> |
| </if-compare> |
| <call-simple-method method-name="addScrumResource"/> |
| </if-not-empty> |
| </simple-method> |
| <simple-method method-name="validateQuickAddPartyInfo" short-description="validateQuickAddPartyInfo" login-required="false"> |
| <!-- setup the party/person --> |
| <call-map-processor in-map-name="parameters" out-map-name="personMap"> |
| <simple-map-processor name="newPerson"> |
| <process field="personalTitle"><copy/></process> |
| <process field="firstName"> |
| <copy/> |
| <not-empty><fail-property resource="PartyUiLabels" property="PartyFirstNameMissing"/></not-empty> |
| </process> |
| <process field="middleName"><copy/></process> |
| <process field="lastName"> |
| <copy/> |
| <not-empty><fail-property resource="PartyUiLabels" property="PartyLastNameMissingError"/></not-empty> |
| </process> |
| </simple-map-processor> |
| </call-map-processor> |
| <!-- setup the email --> |
| <call-map-processor in-map-name="parameters" out-map-name="emailMap"> |
| <simple-map-processor name="newEmail"> |
| <process field="emailAddress"> |
| <copy/> |
| <validate-method method="isEmail"><fail-property resource="PartyUiLabels" property="PartyEmailAddressNotFormattedCorrectly"/></validate-method> |
| </process> |
| <process field="emailSol"><copy to-field="allowSolicitation"/></process> |
| </simple-map-processor> |
| </call-map-processor> |
| <!-- setup the User Login --> |
| <call-map-processor in-map-name="parameters" out-map-name="userLoginContext"> |
| <simple-map-processor name="newUserLogin"> |
| <process field="userLoginId"><copy to-field="userLoginId"/><not-empty><fail-property resource="PartyUiLabels" property="PartyUserNameMissing"/></not-empty></process> |
| <process field="password"><copy to-field="currentPassword"/><not-empty><fail-property resource="PartyUiLabels" property="PartyPasswordMissing"/></not-empty></process> |
| <process field="confirmPassword"> |
| <compare-field operator="equals" field="password"><fail-property resource="PartyUiLabels" property="PartyPasswordMatchError"/></compare-field> |
| <copy to-field="currentPasswordVerify"/> |
| </process> |
| </simple-map-processor> |
| </call-map-processor> |
| <!-- setup the PartyRelationship --> |
| <call-map-processor in-map-name="parameters" out-map-name="partyRelationMap"> |
| <simple-map-processor name="newPartyRelation"> |
| <process field="company"> |
| <copy to-field="accountPartyId"/> |
| <not-empty><fail-property resource="PartyUiLabels" property="PartyCompanyNameMissingError"/></not-empty> |
| </process> |
| </simple-map-processor> |
| </call-map-processor> |
| </simple-method> |
| <simple-method method-name="addProductMember" short-description="Add Product Member"> |
| <entity-one entity-name="UserLogin" value-field="systemUserLogin"> |
| <field-map field-name="userLoginId" value="system"/> |
| </entity-one> |
| <entity-and entity-name="ProductRole" list="productRoleList"> |
| <field-map field-name="partyId" from-field="parameters.partyId"/> |
| <field-map field-name="productId" from-field="parameters.productId"/> |
| <field-map field-name="roleTypeId" from-field="parameters.roleTypeId"/> |
| <field-map field-name="thruDate" value=""/> |
| </entity-and> |
| <if-empty field="productRoleList"> |
| <entity-and entity-name="PartyRole" list="partyRoleList"> |
| <field-map field-name="partyId" from-field="parameters.partyId"/> |
| <field-map field-name="roleTypeId" from-field="parameters.roleTypeId"/> |
| </entity-and> |
| <if-empty field="partyRoleList"> |
| <make-value value-field="partyRole" entity-name="PartyRole"/> |
| <set field="partyRole.partyId" from-field="parameters.partyId"/> |
| <set field="partyRole.roleTypeId" from-field="parameters.roleTypeId"/> |
| <create-value value-field="partyRole"/> |
| </if-empty> |
| <now-timestamp field="nowTimestamp"/> |
| <make-value value-field="productRoleMap" entity-name="ProductRole" /> |
| <set field="productRoleMap.productId" from-field="parameters.productId" /> |
| <set field="productRoleMap.partyId" from-field="parameters.partyId"/> |
| <set field="productRoleMap.roleTypeId" from-field="parameters.roleTypeId"/> |
| <set field="productRoleMap.fromDate" from-field="nowTimestamp"/> |
| <create-value value-field="productRoleMap"/> |
| <else> |
| <add-error> |
| <fail-message message="There are partyId : ${parameters.partyId} and roleTypeId : ${parameters.roleTypeId} already exist."/> |
| </add-error> |
| <check-errors/> |
| </else> |
| </if-empty> |
| </simple-method> |
| <simple-method method-name="removeProductMember" short-description="Remove Product Member"> |
| <set field="parameters.fromDate" from-field="parameters.fromDate" type="Timestamp"/> |
| <entity-one entity-name="ProductRole" value-field="productRoleMap"/> |
| <remove-value value-field="productRoleMap"/> |
| </simple-method> |
| <simple-method method-name="updateNotBilledBacklog" short-description="Update Not Billed Backlog"> |
| <call-class-method method-name="getParameterMap" class-name="org.apache.ofbiz.base.util.UtilHttp" ret-field="paramMap"> |
| <field field="request" type="javax.servlet.http.HttpServletRequest"/> |
| </call-class-method> |
| <call-class-method method-name="getMultiFormRowCount" class-name="org.apache.ofbiz.base.util.UtilHttp" ret-field="rowCount"> |
| <field field="paramMap" type="java.util.Map"/> |
| </call-class-method> |
| <loop count="${rowCount}" field="i"> |
| <set field="billed" from-field="paramMap["billed_o_${i}"]"/> |
| <set field="custRequestId" from-field="paramMap["custRequestId_o_${i}"]"/> |
| <entity-one entity-name="CustRequest" value-field="custRequestMap"/> |
| <set field="custRequestMap.billed" from-field="billed"/> |
| <store-value value-field="custRequestMap"/> |
| </loop> |
| </simple-method> |
| <simple-method method-name="getWebSiteId" short-description="Get WebSite Id"> |
| <!-- for notification --> |
| <if-not-empty field="request"> |
| <call-class-method method-name="getWebSiteId" class-name="org.apache.ofbiz.webapp.website.WebSiteWorker" ret-field="webSiteId"> |
| <field field="request" type="javax.servlet.ServletRequest"/> |
| </call-class-method> |
| </if-not-empty> |
| <if-not-empty field="webSiteId"> |
| <set field="parameters.webSiteId" from-field="webSiteId"/> |
| </if-not-empty> |
| </simple-method> |
| </simple-methods> |