org.kuali.kpme.core.service.permission.HRPermissionServiceImpl.java Source code

Java tutorial

Introduction

Here is the source code for org.kuali.kpme.core.service.permission.HRPermissionServiceImpl.java

Source

/**
 * Copyright 2004-2013 The Kuali Foundation
 *
 * Licensed under the Educational Community 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.opensource.org/licenses/ecl2.php
 *
 * 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.
 */
package org.kuali.kpme.core.service.permission;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.joda.time.DateTime;
import org.joda.time.LocalDate;
import org.kuali.kpme.core.KPMENamespace;
import org.kuali.kpme.core.assignment.Assignment;
import org.kuali.kpme.core.document.calendar.CalendarDocument;
import org.kuali.kpme.core.principal.PrincipalHRAttributes;
import org.kuali.kpme.core.service.HrServiceLocator;
import org.kuali.kpme.core.util.HrConstants;
import org.kuali.kpme.core.util.HrContext;
import org.kuali.rice.kew.api.KewApiServiceLocator;
import org.kuali.rice.kew.api.action.ActionType;
import org.kuali.rice.kew.api.action.ValidActions;
import org.kuali.rice.kew.api.document.DocumentStatus;
import org.kuali.rice.kim.api.KimConstants;
import org.kuali.rice.kim.api.permission.PermissionService;
import org.kuali.rice.krad.util.KRADConstants;

public class HRPermissionServiceImpl extends HrPermissionServiceBase implements HRPermissionService {

    private PermissionService permissionService;

    @Override
    public boolean isAuthorized(String principalId, String permissionName, DateTime asOfDate) {
        Map<String, String> qualification = new HashMap<String, String>();

        return isAuthorized(principalId, permissionName, qualification, asOfDate);
    }

    @Override
    public boolean isAuthorized(String principalId, String permissionName, Map<String, String> qualification,
            DateTime asOfDate) {
        return getPermissionService().isAuthorized(principalId, KPMENamespace.KPME_HR.getNamespaceCode(),
                permissionName, qualification);
    }

    @Override
    public boolean isAuthorizedByTemplate(String principalId, String namespaceCode, String permissionTemplateName,
            Map<String, String> permissionDetails, DateTime asOfDate) {
        Map<String, String> qualification = new HashMap<String, String>();

        return isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName, permissionDetails,
                qualification, asOfDate);
    }

    @Override
    public boolean isAuthorizedByTemplate(String principalId, String namespaceCode, String permissionTemplateName,
            Map<String, String> permissionDetails, Map<String, String> qualification, DateTime asOfDate) {
        return getPermissionService().isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName,
                permissionDetails, qualification);
    }

    @Override
    public boolean canApproveCalendarDocument(String principalId, CalendarDocument calendarDocument) {
        boolean canApproveLeaveCalendar = false;

        ValidActions validActions = KewApiServiceLocator.getWorkflowDocumentActionsService()
                .determineValidActions(calendarDocument.getDocumentId(), principalId);

        if (validActions.getValidActions() != null) {
            canApproveLeaveCalendar = validActions.getValidActions().contains(ActionType.APPROVE);
        }

        return canApproveLeaveCalendar;
    }

    @Override
    public boolean canViewCalendarDocument(String principalId, CalendarDocument calendarDocument) {
        return canSuperUserAdministerCalendarDocument(principalId, calendarDocument)
                || isAuthorizedByTemplate(principalId, KRADConstants.KNS_NAMESPACE,
                        KimConstants.PermissionTemplateNames.OPEN_DOCUMENT, calendarDocument);
    }

    @Override
    public boolean canViewCalendarDocumentAssignment(String principalId, CalendarDocument calendarDocument,
            Assignment assignment) {
        return canSuperUserAdministerCalendarDocument(principalId, calendarDocument)
                || isAuthorizedByTemplate(principalId, KRADConstants.KNS_NAMESPACE,
                        KimConstants.PermissionTemplateNames.OPEN_DOCUMENT, calendarDocument, assignment);
    }

    @Override
    public boolean canEditCalendarDocument(String principalId, CalendarDocument calendarDocument) {
        return canSuperUserAdministerCalendarDocument(principalId, calendarDocument)
                || isAuthorizedByTemplate(principalId, KRADConstants.KNS_NAMESPACE,
                        KimConstants.PermissionTemplateNames.EDIT_DOCUMENT, calendarDocument);
    }

    @Override
    public boolean canEditCalendarDocumentAssignment(String principalId, CalendarDocument calendarDocument,
            Assignment assignment) {
        return canSuperUserAdministerCalendarDocument(principalId, calendarDocument)
                || isAuthorizedByTemplate(principalId, KRADConstants.KNS_NAMESPACE,
                        KimConstants.PermissionTemplateNames.EDIT_DOCUMENT, calendarDocument, assignment);
    }

    @Override
    public boolean canSubmitCalendarDocument(String principalId, CalendarDocument calendarDocument) {
        return canSuperUserAdministerCalendarDocument(principalId, calendarDocument)
                || isAuthorizedByTemplate(principalId, KRADConstants.KUALI_RICE_WORKFLOW_NAMESPACE,
                        KimConstants.PermissionTemplateNames.ROUTE_DOCUMENT, calendarDocument);
    }

    @Override
    public boolean canSuperUserAdministerCalendarDocument(String principalId, CalendarDocument calendarDocument) {
        return isAuthorizedByTemplate(principalId, KRADConstants.KUALI_RICE_WORKFLOW_NAMESPACE,
                "Administer Routing for Document", calendarDocument);
    }

    private boolean isAuthorizedByTemplate(String principalId, String namespaceCode, String permissionTemplateName,
            CalendarDocument calendarDocument) {
        boolean isAuthorizedByTemplate = false;

        if (calendarDocument != null) {
            String documentTypeName = calendarDocument.getCalendarType();
            DocumentStatus documentStatus = DocumentStatus
                    .fromCode(calendarDocument.getDocumentHeader().getDocumentStatus());
            List<Assignment> assignments = calendarDocument.getAssignments();

            isAuthorizedByTemplate = isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName,
                    documentTypeName, calendarDocument.getDocumentId(), documentStatus, assignments);
        }

        return isAuthorizedByTemplate;
    }

    private boolean isAuthorizedByTemplate(String principalId, String namespaceCode, String permissionTemplateName,
            CalendarDocument calendarDocument, Assignment assignment) {
        boolean isAuthorizedByTemplate = false;

        if (calendarDocument != null) {
            String documentTypeName = calendarDocument.getCalendarType();
            DocumentStatus documentStatus = DocumentStatus
                    .fromCode(calendarDocument.getDocumentHeader().getDocumentStatus());

            isAuthorizedByTemplate = isAuthorizedByTemplate(principalId, namespaceCode, permissionTemplateName,
                    documentTypeName, calendarDocument.getDocumentId(), documentStatus, assignment);
        }

        return isAuthorizedByTemplate;
    }

    public PermissionService getPermissionService() {
        return permissionService;
    }

    public void setPermissionService(PermissionService permissionService) {
        this.permissionService = permissionService;
    }

    @Override
    public boolean canViewTimeTabs() {
        boolean canViewTimeTabs = false;
        LocalDate asOfDate = LocalDate.now();
        String flsaStatus = HrConstants.FLSA_STATUS_NON_EXEMPT;
        // find active assignments as of currentDate
        String principalId = HrContext.getTargetPrincipalId();
        if (isActiveAssignmentFoundOnJobFlsaStatus(principalId, flsaStatus, false)) {
            //find timecalendar defined
            canViewTimeTabs = isCalendarDefined("payCalendar", principalId, asOfDate, false);
        }
        return canViewTimeTabs;
    }

    private boolean isActiveAssignmentFoundOnJobFlsaStatus(String principalId, String flsaStatus,
            boolean chkForLeaveEligible) {
        boolean isActiveAssFound = false;
        LocalDate asOfDate = LocalDate.now();
        List<Assignment> activeAssignments = HrServiceLocator.getAssignmentService().getAssignments(principalId,
                asOfDate);
        if (activeAssignments != null && !activeAssignments.isEmpty()) {
            for (Assignment assignment : activeAssignments) {
                if (assignment != null && assignment.getJob() != null && assignment.getJob().getFlsaStatus() != null
                        && assignment.getJob().getFlsaStatus().equalsIgnoreCase(flsaStatus)) {
                    if (chkForLeaveEligible) {
                        isActiveAssFound = assignment.getJob().isEligibleForLeave();
                        if (!isActiveAssFound) {
                            continue;
                        }
                    }
                    isActiveAssFound = true;
                    break;
                }
            }
        }
        return isActiveAssFound;
    }

    private boolean isCalendarDefined(String calendarType, String principalId, LocalDate asOfDate,
            boolean chkForLeavePlan) {
        boolean calDefined = false;
        PrincipalHRAttributes principalHRAttributes = HrServiceLocator.getPrincipalHRAttributeService()
                .getPrincipalCalendar(principalId, asOfDate);
        if (principalHRAttributes != null) {
            if (calendarType.equalsIgnoreCase("payCalendar")) {
                calDefined = principalHRAttributes.getPayCalendar() != null ? true : false;
            } else if (calendarType.equalsIgnoreCase("leaveCalendar")) {
                calDefined = principalHRAttributes.getLeaveCalendar() != null ? true : false;
                if (calDefined && chkForLeavePlan) {
                    calDefined = principalHRAttributes.getLeavePlan() != null ? true : false;
                }
            }
        }
        return calDefined;
    }

    @Override
    public boolean canViewLeaveTabsWithEStatus() {
        boolean canViewLeaveTabs = false;
        String principalId = HrContext.getTargetPrincipalId();
        LocalDate asOfDate = LocalDate.now();
        boolean leaveCalNPlanDefined = isCalendarDefined("leaveCalendar", principalId, asOfDate, true);
        String flsaStatus = HrConstants.FLSA_STATUS_EXEMPT;
        boolean activeAss = isActiveAssignmentFoundOnJobFlsaStatus(principalId, flsaStatus, true);
        canViewLeaveTabs = activeAss && leaveCalNPlanDefined;
        return canViewLeaveTabs;
    }

    @Override
    public boolean canViewLeaveTabsWithNEStatus() {
        boolean canViewLeaveTabs = false;
        LocalDate asOfDate = LocalDate.now();
        String flsaStatus = HrConstants.FLSA_STATUS_NON_EXEMPT;
        // find active assignments as of currentDate
        String principalId = HrContext.getTargetPrincipalId();
        boolean activeAss = isActiveAssignmentFoundOnJobFlsaStatus(principalId, flsaStatus, true);
        // chk leave plan defined
        boolean leaveCalNPlanDefined = isCalendarDefined("leaveCalendar", principalId, asOfDate, true);
        boolean timeCalDefined = isCalendarDefined("payCalendar", principalId, asOfDate, false);
        canViewLeaveTabs = activeAss && leaveCalNPlanDefined && timeCalDefined;
        return canViewLeaveTabs;
    }

}