blob: 56c4695f786723009f658284cd923c075bf7e4e2 [file] [log] [blame]
/*
* 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.
*/
import org.apache.ofbiz.entity.condition.*;
import org.apache.ofbiz.base.util.*;
cond = EntityCondition.makeCondition([
EntityCondition.makeCondition ("projectTypeId", EntityOperator.EQUALS, "SCRUM_PROJECT"),
EntityCondition.makeCondition ("projectStatusId", EntityOperator.NOT_EQUAL, "SPJ_CLOSED")
], EntityJoinOperator.AND);
securityGroupCond = EntityCondition.makeCondition([
EntityCondition.makeCondition ("partyId", EntityOperator.EQUALS, userLogin.partyId),
EntityCondition.makeCondition ("partyStatusId", EntityOperator.NOT_EQUAL, "PARTY_DISABLED"),
EntityCondition.makeCondition ("thruDate", EntityOperator.EQUALS, null)
], EntityJoinOperator.AND);
fields = new HashSet(["partyId", "groupId"]);
allSprints = from("ProjectSprint").where(cond).orderBy("projectName", "-sprintActualStartDate").queryList();
partyAndSecurityGroupList = select("partyId", "groupId").from("ScrumMemberUserLoginAndSecurityGroup").where(securityGroupCond).orderBy("partyId").queryList();
oldProjectId = null;
newProjectId = null;
countSprint = 0;
sprints = [];
allSprints.each { sprint ->
newProjectId = sprint.projectId;
productAndRole = from("ProductAndRole").where("roleTypeId", "PRODUCT_OWNER_COMP", "productId", sprint.productId).queryList();
companyId = "";
companyName = "";
if (productAndRole.size() > 0) {
companyName = productAndRole.get(0).groupName;
companyId = productAndRole.get(0).partyId;
}
sprint = sprint.getAllFields();
sprint.put("companyId", companyId)
sprint.put("companyName", companyName)
product = from("Product").where("productId", sprint.productId).queryOne();
productName = "";
if (product != null) productName = product.internalName;
sprint.put("productName", productName);
//sprint.add("companyName", companyName, "String")
if (oldProjectId != newProjectId) {
oldProjectId = newProjectId;
countSprint = 0;
ismember = false;
if (partyAndSecurityGroupList) {
groupId = partyAndSecurityGroupList[0].groupId;
if ("SCRUM_PRODUCT_OWNER".equals(groupId)) {
productAndRoleList = from("ProductRole").where("productId", sprint.productId, "partyId", partyAndSecurityGroupList.getAt(0).partyId, "thruDate", null).queryList();
if (productAndRoleList) {
ismember = true;
}
}else if("SCRUM_STAKEHOLDER".equals(groupId)) {
// check in company relationship.
scrumRolesCond = EntityCondition.makeCondition([
EntityCondition.makeCondition ("partyId", EntityOperator.EQUALS, userLogin.partyId),
EntityCondition.makeCondition ("roleTypeId", EntityOperator.EQUALS, "STAKEHOLDER"),
EntityCondition.makeCondition ("partyStatusId", EntityOperator.NOT_EQUAL, "PARTY_DISABLED"),
EntityCondition.makeCondition ("thruDate", EntityOperator.EQUALS, null)
], EntityJoinOperator.AND);
scrumRolesPersonAndCompanyList = from("ScrumRolesPersonAndCompany").where(scrumRolesCond).queryList();
productRoleList = from("ProductRole").where("partyId", scrumRolesPersonAndCompanyList[0].partyIdFrom, "roleTypeId", "PRODUCT_OWNER_COMP", "thruDate", null).queryList();
if (productRoleList) {
productRoleList.each { productRoleMap ->
stakeholderProduct = productRoleMap.productId;
if (stakeholderProduct.equals(sprint.productId)) {
ismember = true;
}
}
}
//check in product.
if (ismember == false) {
productAndRoleList = from("ProductAndRole")
.where("productId", sprint.productId, "partyId", userLogin.partyId, "roleTypeId", "STAKEHOLDER",
"supportDiscontinuationDate", null, "thruDate", null)
.queryList();
if (productAndRoleList) {
ismember = true;
}
}
} else if("SCRUM_MASTER".equals(groupId)) {
//check in product
productRoleList = [];
productRoleList = from("ProductAndRole")
.where("productId" : sprint.productId, "partyId" : userLogin.partyId,
"roleTypeId" : "SCRUM_MASTER", "supportDiscontinuationDate" : null, "thruDate" : null)
.queryList();
if (productRoleList) {
ismember = true;
}
//check in project.
if (ismember == false) {
projectPartyAssignment = from("WorkEffortPartyAssignment").where("workEffortId", sprint.projectId, "partyId", userLogin.partyId).queryList();
if (projectPartyAssignment) {
ismember = true;
}
}
//check in sprint.
if (ismember == false) {
allSprintList = [];
allSprintList = from("WorkEffort").where("workEffortParentId", sprint.projectId).queryList();
allSprintList.each { SprintListMap ->
sprintId = SprintListMap.workEffortId;
workEffortPartyAssignment = from("WorkEffortPartyAssignment").where("workEffortId", sprintId, "partyId", userLogin.partyId).queryList();
if (workEffortPartyAssignment) {
ismember = true;
}
}
}
} else {
allSprintList = [];
allSprintList = from("WorkEffort").where("workEffortParentId", sprint.projectId).queryList();
allSprintList.each { SprintListMap ->
sprintId = SprintListMap.workEffortId;
workEffortPartyAssignment = from("WorkEffortPartyAssignment").where("workEffortId", sprintId, "partyId", userLogin.partyId).queryList();
if (workEffortPartyAssignment) {
ismember = true;
}
}
}
}
if (security.hasEntityPermission("SCRUM", "_ADMIN", session)
|| ((security.hasEntityPermission("SCRUM", "_ROLE_ADMIN", session) || security.hasEntityPermission("SCRUM", "_ROLE_VIEW", session)
|| security.hasEntityPermission("SCRUM_PROJECT", "_ROLE_ADMIN", session) || security.hasEntityPermission("SCRUM_PROJECT", "_ROLE_VIEW", session)
|| security.hasEntityPermission("SCRUM_PROJECT", "_VIEW", session)) && ismember)) {
sprints.add(sprint);
countSprint++;
}
} else {
if (countSprint < 4) {
ismember = false;
if (partyAndSecurityGroupList) {
groupId = partyAndSecurityGroupList[0].groupId;
if ("SCRUM_PRODUCT_OWNER".equals(groupId)) {
productAndRoleList = from("ProductRole").where("productId", sprint.productId, "partyId", partyAndSecurityGroupList.getAt(0).partyId, "thruDate", null).queryList();
if (productAndRoleList) {
ismember = true;
}
}else if("SCRUM_STAKEHOLDER".equals(groupId)) {
// check in company relationship.
scrumRolesCond = EntityCondition.makeCondition([
EntityCondition.makeCondition ("partyId", EntityOperator.EQUALS, userLogin.partyId),
EntityCondition.makeCondition ("roleTypeId", EntityOperator.EQUALS, "STAKEHOLDER"),
EntityCondition.makeCondition ("partyStatusId", EntityOperator.NOT_EQUAL, "PARTY_DISABLED"),
EntityCondition.makeCondition ("thruDate", EntityOperator.EQUALS, null)
], EntityJoinOperator.AND);
scrumRolesPersonAndCompanyList = from("ScrumRolesPersonAndCompany").where(scrumRolesCond).queryList();
productRoleList = from("ProductRole").where("partyId", scrumRolesPersonAndCompanyList[0].partyIdFrom, "roleTypeId", "PRODUCT_OWNER_COMP", "thruDate", null).queryList();
if (productRoleList) {
productRoleList.each { productRoleMap ->
stakeholderProduct = productRoleMap.productId;
if (stakeholderProduct.equals(sprint.productId)) {
ismember = true;
}
}
}
//check in product.
if (ismember == false) {
productAndRoleList = from("ProductAndRole").where("productId" : sprint.productId, "partyId" : userLogin.partyId, "roleTypeId" : "STAKEHOLDER", "supportDiscontinuationDate" : null, "thruDate" : null).queryList();
if (productAndRoleList) {
ismember = true;
}
}
} else if("SCRUM_MASTER".equals(groupId)) {
//check in product
productRoleList = [];
productRoleList = from("ProductAndRole").where("productId" : sprint.productId, "partyId" : userLogin.partyId, "roleTypeId" : "SCRUM_MASTER", "supportDiscontinuationDate" : null, "thruDate" : null).queryList();
if (productRoleList) {
ismember = true;
}
//check in project.
if (ismember == false) {
projectPartyAssignment = from("WorkEffortPartyAssignment").where("workEffortId", sprint.projectId, "partyId", userLogin.partyId).queryList();
if (projectPartyAssignment) {
ismember = true;
}
}
//check in sprint.
if (ismember == false) {
allSprintList = [];
allSprintList = from("WorkEffort").where("workEffortParentId", sprint.projectId).queryList();
allSprintList.each { SprintListMap ->
sprintId = SprintListMap.workEffortId;
workEffortPartyAssignment = from("WorkEffortPartyAssignment").where("workEffortId", sprintId, "partyId", userLogin.partyId).queryList();
if (workEffortPartyAssignment) {
ismember = true;
}
}
}
} else {
allSprintList = [];
allSprintList = from("WorkEffort").where("workEffortParentId", sprint.projectId).queryList();
allSprintList.each { SprintListMap ->
sprintId = SprintListMap.workEffortId;
workEffortPartyAssignment = from("WorkEffortPartyAssignment").where("workEffortId", sprintId, "partyId", userLogin.partyId).queryList();
if (workEffortPartyAssignment) {
ismember = true;
}
}
}
}
if (security.hasEntityPermission("SCRUM", "_ADMIN", session)
|| ((security.hasEntityPermission("SCRUM", "_ROLE_ADMIN", session) || security.hasEntityPermission("SCRUM", "_ROLE_VIEW", session)
|| security.hasEntityPermission("SCRUM_PROJECT", "_ROLE_ADMIN", session) || security.hasEntityPermission("SCRUM_PROJECT", "_ROLE_VIEW", session)
|| security.hasEntityPermission("SCRUM_PROJECT", "_VIEW", session)) && ismember)) {
sprints.add(sprint);
countSprint++;
}
}
}
}
if (sprints) {
sprints = UtilMisc.sortMaps(sprints, ["companyName", "projectName", "productName"])
context.sprints = sprints;
}