org.kuali.kpme.tklm.time.timehourdetail.TimeHourDetailRenderer.java Source code

Java tutorial

Introduction

Here is the source code for org.kuali.kpme.tklm.time.timehourdetail.TimeHourDetailRenderer.java

Source

/**
 * Copyright 2004-2014 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.tklm.time.timehourdetail;

import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.lang.StringUtils;
import org.joda.time.LocalDate;
import org.kuali.kpme.core.api.earncode.EarnCodeContract;
import org.kuali.kpme.core.api.earncode.security.EarnCodeSecurityContract;
import org.kuali.kpme.core.api.job.JobContract;
import org.kuali.kpme.core.api.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.kpme.tklm.api.time.timeblock.TimeBlock;
import org.kuali.kpme.tklm.api.time.timehourdetail.TimeHourDetail;
import org.kuali.kpme.tklm.api.time.timehourdetail.TimeHourDetailRendererContract;
import org.kuali.kpme.tklm.leave.service.LmServiceLocator;
import org.kuali.kpme.tklm.time.service.TkServiceLocator;
import org.kuali.kpme.tklm.time.workflow.TimesheetDocumentHeader;

import java.util.ArrayList;
import java.util.List;

public class TimeHourDetailRenderer implements TimeHourDetailRendererContract {
    private TimeHourDetail timeHourDetail;
    private boolean overtimeEarnCode;

    public TimeHourDetailRenderer(TimeHourDetail d) {
        this.timeHourDetail = d;

        TimeBlock tb = TkServiceLocator.getTimeBlockService().getTimeBlock(timeHourDetail.getTkTimeBlockId());
        if (tb != null) {
            List<? extends EarnCodeContract> overtimeEarnCodeObjs = HrServiceLocator.getEarnCodeService()
                    .getOvertimeEarnCodes(LocalDate.now());
            List<String> overtimeEarnCodeStrings = HrServiceLocator.getEarnCodeService()
                    .getOvertimeEarnCodesStrs(tb.getBeginDateTime().toLocalDate());
            List<String> eligibleOvertimeEarnCodeListStrings = new ArrayList<String>();

            JobContract job = HrServiceLocator.getJobService().getJob(HrContext.getTargetPrincipalId(),
                    tb.getJobNumber(), tb.getEndDateTime().toLocalDate());
            if (job != null) {
                for (EarnCodeContract earnCode : overtimeEarnCodeObjs) {
                    String employee = HrContext.isActiveEmployee() ? "Y" : null;
                    String approver = HrContext.isApprover() ? "Y" : null;
                    String payrollProcessor = HrContext.isPayrollProcessor() ? "Y" : null;

                    List<? extends EarnCodeSecurityContract> securityList = HrServiceLocator
                            .getEarnCodeSecurityService()
                            .getEarnCodeSecurityList(job.getDept(), job.getHrSalGroup(), earnCode.getEarnCode(),
                                    employee, approver, payrollProcessor, "Y", tb.getEndDateTime().toLocalDate(),
                                    job.getGroupKey().getGroupKeyCode());
                    if (CollectionUtils.isNotEmpty(securityList)) {
                        eligibleOvertimeEarnCodeListStrings.add(earnCode.getEarnCode());
                    }
                }
            }

            /*
            KPME-3029 checks to see if user can make a change to the overtime earncode before flagging it as overtime,
            by either having > 1 earncode opt or having an opt that is different than the timeHourDetail earncode
            */
            if ((CollectionUtils.isNotEmpty(eligibleOvertimeEarnCodeListStrings)
                    && CollectionUtils.isNotEmpty(overtimeEarnCodeStrings))
                    && overtimeEarnCodeStrings.contains(d.getEarnCode())
                    && (eligibleOvertimeEarnCodeListStrings.size() > 1
                            || !eligibleOvertimeEarnCodeListStrings.contains(d.getEarnCode()))) {
                setOvertimeEarnCode(true);
            }
        }
    }

    public TimeHourDetail getTimeHourDetail() {
        return timeHourDetail;
    }

    public String getTkTimeHourDetailId() {
        return timeHourDetail.getTkTimeHourDetailId();
    }

    public String getTitle() {
        return timeHourDetail.getEarnCode();
    }

    public String getHours() {
        return timeHourDetail.getHours().toString();
    }

    public String getAmount() {
        return timeHourDetail.getAmount().toString();
    }

    public String getHolidayName() {
        String holidayDesc = "";
        TimeBlock timeBlock = TkServiceLocator.getTimeBlockService()
                .getTimeBlock(timeHourDetail.getTkTimeBlockId());

        if (timeBlock != null) {
            if (timeBlock.getEarnCode().equals(HrConstants.HOLIDAY_EARN_CODE)) {
                String documentId = timeBlock.getDocumentId();
                TimesheetDocumentHeader docHeader = TkServiceLocator.getTimesheetDocumentHeaderService()
                        .getDocumentHeader(documentId);
                PrincipalHRAttributes principalCalendar = HrServiceLocator.getPrincipalHRAttributeService()
                        .getPrincipalCalendar(docHeader.getPrincipalId(),
                                timeBlock.getBeginDateTime().toLocalDate());

                if (principalCalendar != null && StringUtils.isNotEmpty(principalCalendar.getLeavePlan())) {
                    holidayDesc = LmServiceLocator.getSysSchTimeOffService().getSSTODescriptionForDate(
                            principalCalendar.getLeavePlan(), timeBlock.getBeginDateTime().toLocalDate());
                }
            }
        }

        return holidayDesc;
    }

    public boolean isOvertimeEarnCode() {
        return overtimeEarnCode;
    }

    public void setOvertimeEarnCode(boolean overtimeEarnCode) {
        this.overtimeEarnCode = overtimeEarnCode;
    }

}