Search in sources :

Example 16 with Person

use of org.kuali.rice.kim.api.identity.Person in project cu-kfs by CU-CommunityApps.

the class CuDisbursementVoucherAction method setupPayeeAsEmployee.

protected void setupPayeeAsEmployee(CuDisbursementVoucherForm dvForm, String payeeIdNumber) {
    Person person = (Person) SpringContext.getBean(PersonService.class).getPersonByEmployeeId(payeeIdNumber);
    if (person == null) {
        person = (Person) SpringContext.getBean(PersonService.class).getPerson(payeeIdNumber);
    }
    if (person != null) {
        ((CuDisbursementVoucherDocument) dvForm.getDocument()).templateEmployee(person);
        dvForm.setTempPayeeIdNumber(payeeIdNumber);
        dvForm.setOldPayeeType(CuDisbursementVoucherConstants.DV_PAYEE_TYPE_EMPLOYEE);
    } else {
        LOG.error("Exception while attempting to retrieve universal user by universal user id " + payeeIdNumber);
    }
}
Also used : CuDisbursementVoucherDocument(edu.cornell.kfs.fp.document.CuDisbursementVoucherDocument) PersonService(org.kuali.rice.kim.api.identity.PersonService) Person(org.kuali.rice.kim.api.identity.Person)

Example 17 with Person

use of org.kuali.rice.kim.api.identity.Person in project cu-kfs by CU-CommunityApps.

the class CuDisbursementVoucherAction method setupPayeeAsAlumni.

/**
 * setup the payee as an alumni with the given id number
 */
protected void setupPayeeAsAlumni(CuDisbursementVoucherForm dvForm, String payeeIdNumber) {
    Person person = (Person) SpringContext.getBean(PersonService.class).getPerson(payeeIdNumber);
    if (person != null) {
        ((CuDisbursementVoucherDocument) dvForm.getDocument()).templateAlumni(person);
        dvForm.setTempPayeeIdNumber(payeeIdNumber);
        dvForm.setOldPayeeType(CuDisbursementVoucherConstants.DV_PAYEE_TYPE_ALUMNI);
    } else {
        LOG.error("Exception while attempting to retrieve universal user by universal user id " + payeeIdNumber);
    }
}
Also used : CuDisbursementVoucherDocument(edu.cornell.kfs.fp.document.CuDisbursementVoucherDocument) Person(org.kuali.rice.kim.api.identity.Person)

Example 18 with Person

use of org.kuali.rice.kim.api.identity.Person in project cu-kfs by CU-CommunityApps.

the class CuAdvanceDepositAccountingLineAuthorizer method isOrgReviewEditable.

/**
 * Determines if accounting line is org review editable
 *
 * @param accountingLine
 * @return true if editable, false otherwise
 */
private boolean isOrgReviewEditable(AccountingLine accountingLine) {
    boolean orgReviewEditable = false;
    OrganizationService organizationService = SpringContext.getBean(OrganizationService.class);
    Person currentUser = GlobalVariables.getUserSession().getPerson();
    String roleId = getRoleService().getRoleIdByNamespaceCodeAndName(KFSConstants.ParameterNamespaces.FINANCIAL, CUKFSConstants.SysKimApiConstants.ADVANCE_DEPOSIT_ORGANIZATION_REVIEWER_ROLE_NAME);
    List<String> roleIds = new ArrayList<String>();
    roleIds.add(roleId);
    List<Map<String, String>> qualifiers = new ArrayList<Map<String, String>>();
    qualifiers.addAll(getRoleService().getRoleQualifersForPrincipalByRoleIds(currentUser.getPrincipalId(), roleIds, new HashMap<String, String>()));
    if (qualifiers == null || qualifiers.isEmpty()) {
        qualifiers.addAll(getRoleService().getNestedRoleQualifiersForPrincipalByRoleIds(currentUser.getPrincipalId(), roleIds, new HashMap<String, String>()));
    }
    // RoleMembershipInfo for principals
    if (qualifiers == null || qualifiers.isEmpty()) {
        List<RoleMembership> roleMemberships = getRoleService().getRoleMembers(roleIds, null);
        if (roleMemberships != null && roleMemberships.size() > 0) {
            for (RoleMembership roleMembershipInfo : roleMemberships) {
                if (currentUser.getPrincipalId().equalsIgnoreCase(roleMembershipInfo.getMemberId())) {
                    qualifiers.add(roleMembershipInfo.getQualifier());
                }
            }
        }
    }
    boolean chartMatch = false;
    boolean orgMatch = false;
    boolean docTypeMatch = false;
    String org = StringUtils.EMPTY;
    String chart = StringUtils.EMPTY;
    if (qualifiers != null && qualifiers.size() > 0) {
        for (Map<String, String> qualifier : qualifiers) {
            {
                for (String key : qualifier.keySet()) {
                    if (KfsKimAttributes.CHART_OF_ACCOUNTS_CODE.equalsIgnoreCase(key)) {
                        if (qualifier.get(key) != null && qualifier.get(key).equalsIgnoreCase(accountingLine.getChartOfAccountsCode())) {
                            chartMatch = true;
                            chart = qualifier.get(key);
                        }
                    }
                    if (KfsKimAttributes.ORGANIZATION_CODE.equalsIgnoreCase(key)) {
                        if (qualifier.get(key) != null) {
                            org = qualifier.get(key);
                        }
                    }
                    if (KimConstants.AttributeConstants.DOCUMENT_TYPE_NAME.equalsIgnoreCase(key)) {
                        if (qualifier.get(key) != null && qualifier.get(key).equalsIgnoreCase("AD")) {
                            docTypeMatch = true;
                        }
                    }
                }
                String acctLineOrgCode = KFSConstants.EMPTY_STRING;
                accountingLine.refreshReferenceObject(KFSPropertyConstants.ACCOUNT);
                if (accountingLine.getAccount() != null) {
                    acctLineOrgCode = accountingLine.getAccount().getOrganizationCode();
                }
                if ((chart.equalsIgnoreCase(accountingLine.getChartOfAccountsCode()) && org.equalsIgnoreCase(acctLineOrgCode)) || organizationService.isParentOrganization(accountingLine.getChartOfAccountsCode(), acctLineOrgCode, chart, org)) {
                    orgMatch = true;
                }
                if ((chart.equalsIgnoreCase(accountingLine.getChartOfAccountsCode()) && org.equalsIgnoreCase(accountingLine.getAccount().getOrganizationCode())) || organizationService.isParentOrganization(accountingLine.getChartOfAccountsCode(), accountingLine.getAccount().getOrganizationCode(), chart, org)) {
                    orgMatch = true;
                }
                if (chartMatch && orgMatch && docTypeMatch) {
                    orgReviewEditable = true;
                }
                if (orgReviewEditable) {
                    break;
                }
            }
        }
    }
    return orgReviewEditable;
}
Also used : OrganizationService(org.kuali.kfs.coa.service.OrganizationService) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) RoleMembership(org.kuali.rice.kim.api.role.RoleMembership) Person(org.kuali.rice.kim.api.identity.Person) HashMap(java.util.HashMap) Map(java.util.Map)

Example 19 with Person

use of org.kuali.rice.kim.api.identity.Person in project cu-kfs by CU-CommunityApps.

the class CuDisbursementVoucherAccountingLineTotalsValidation method validate.

@Override
public boolean validate(AttributedDocumentEvent event) {
    if (LOG.isDebugEnabled()) {
        LOG.debug("validate start");
    }
    DisbursementVoucherDocument dvDocument = (DisbursementVoucherDocument) event.getDocument();
    Person financialSystemUser = GlobalVariables.getUserSession().getPerson();
    final Set<String> currentEditModes = getEditModesFromDocument(dvDocument, financialSystemUser);
    // amounts can only decrease
    List<String> candidateEditModes = this.getCandidateEditModes();
    if (this.hasRequiredEditMode(currentEditModes, candidateEditModes)) {
        // users in foreign or wire workgroup can increase or decrease amounts because of currency conversion
        List<String> foreignDraftAndWireTransferEditModes = this.getForeignDraftAndWireTransferEditModes(dvDocument);
        if (!this.hasRequiredEditMode(currentEditModes, foreignDraftAndWireTransferEditModes)) {
            DisbursementVoucherDocument persistedDocument = (DisbursementVoucherDocument) retrievePersistedDocument(dvDocument);
            if (persistedDocument == null) {
                handleNonExistentDocumentWhenApproving(dvDocument);
                return true;
            }
            // KFSMI- 5183
            if (persistedDocument.getDocumentHeader().getWorkflowDocument().isSaved() && persistedDocument.getDisbVchrCheckTotalAmount().isZero()) {
                return true;
            }
            // check total cannot decrease
            if (!persistedDocument.getDocumentHeader().getWorkflowDocument().isCompletionRequested() && (!persistedDocument.getDisbVchrCheckTotalAmount().equals(dvDocument.getDisbVchrCheckTotalAmount()))) {
                GlobalVariables.getMessageMap().putError(KFSPropertyConstants.DOCUMENT + "." + KFSPropertyConstants.DISB_VCHR_CHECK_TOTAL_AMOUNT, CUKFSKeyConstants.ERROR_DV_CHECK_TOTAL_NO_CHANGE);
                return false;
            }
        }
        return true;
    }
    // KFSUPGRADE-848 : skip total check here for FO
    final WorkflowDocument workflowDocument = dvDocument.getDocumentHeader().getWorkflowDocument();
    final Set<String> currentRouteLevels = workflowDocument.getCurrentNodeNames();
    if (CollectionUtils.isNotEmpty(currentRouteLevels)) {
        if (currentRouteLevels.contains(DisbursementVoucherConstants.RouteLevelNames.ACCOUNT)) {
            return true;
        }
    }
    if (dvDocument instanceof RecurringDisbursementVoucherDocument) {
        RecurringDisbursementVoucherDocument recurringDV = (RecurringDisbursementVoucherDocument) dvDocument;
        if (!doesAccountingLineTotalEqualDVTotalDollarAmount(recurringDV)) {
            String propertyName = KFSPropertyConstants.DOCUMENT + "." + KFSPropertyConstants.DISB_VCHR_CHECK_TOTAL_AMOUNT;
            GlobalVariables.getMessageMap().putError(propertyName, CUKFSKeyConstants.ERROR_DV_CHECK_TOTAL_MUST_EQUAL_ACCOUNTING_LINE_TOTAL);
            return false;
        }
        if (StringUtils.isEmpty(recurringDV.getDisbVchrCheckStubText()) && !recurringDV.getSourceAccountingLines().isEmpty()) {
            String propertyName = KFSPropertyConstants.DOCUMENT + "." + KFSPropertyConstants.DISB_VCHR_CHECK_STUB_TEXT;
            GlobalVariables.getMessageMap().putError(propertyName, CUKFSKeyConstants.ERROR_DV_CHECK_STUB_REQUIRED);
            return false;
        }
        if (!isAccountingLineEndDateValid(recurringDV)) {
            return false;
        }
    }
    return super.validate(event);
}
Also used : WorkflowDocument(org.kuali.rice.kew.api.WorkflowDocument) RecurringDisbursementVoucherDocument(edu.cornell.kfs.fp.document.RecurringDisbursementVoucherDocument) Person(org.kuali.rice.kim.api.identity.Person) RecurringDisbursementVoucherDocument(edu.cornell.kfs.fp.document.RecurringDisbursementVoucherDocument) DisbursementVoucherDocument(org.kuali.kfs.fp.document.DisbursementVoucherDocument)

Example 20 with Person

use of org.kuali.rice.kim.api.identity.Person in project cu-kfs by CU-CommunityApps.

the class CuDisbursementVoucherNonResidentAlienInformationValidation method validate.

@Override
public boolean validate(AttributedDocumentEvent event) {
    LOG.debug("validate start");
    boolean isValid = true;
    DisbursementVoucherDocument document = (DisbursementVoucherDocument) accountingDocumentForValidation;
    DisbursementVoucherNonResidentAlienTax nonResidentAlienTax = document.getDvNonResidentAlienTax();
    DisbursementVoucherPayeeDetail payeeDetail = document.getDvPayeeDetail();
    Person financialSystemUser = GlobalVariables.getUserSession().getPerson();
    List<String> taxEditMode = this.getTaxEditMode();
    if (!payeeDetail.isDisbVchrAlienPaymentCode() || !this.hasRequiredEditMode(document, financialSystemUser, taxEditMode)) {
        return true;
    }
    MessageMap errors = GlobalVariables.getMessageMap();
    errors.addToErrorPath(KFSPropertyConstants.DOCUMENT);
    errors.addToErrorPath(KFSPropertyConstants.DV_NON_RESIDENT_ALIEN_TAX);
    /* income class code required */
    if (StringUtils.isBlank(nonResidentAlienTax.getIncomeClassCode())) {
        errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_REQUIRED, "Income class code");
        return false;
    }
    /* country code required, unless income type is nonreportable */
    if (StringUtils.isBlank(nonResidentAlienTax.getPostalCountryCode()) && !NRA_TAX_INCOME_CLASS_NON_REPORTABLE.equals(nonResidentAlienTax.getIncomeClassCode())) {
        errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_REQUIRED, "Country code");
        return false;
    }
    // income class is FELLOWSHIP
    if (nonResidentAlienTax.getIncomeClassCode().equals(NRA_TAX_INCOME_CLASS_FELLOWSHIP)) {
    // Place holder for logic related to the ICC
    }
    // income class is INDEPENDENT CONTRACTOR
    if (nonResidentAlienTax.getIncomeClassCode().equals(NRA_TAX_INCOME_CLASS_INDEPENDENT_CONTRACTOR)) {
    // Place holder for logic related to the ICC
    }
    // income class is ROYALTIES
    if (nonResidentAlienTax.getIncomeClassCode().equals(NRA_TAX_INCOME_CLASS_ROYALTIES)) {
    // Place holder for logic related to the ICC
    }
    // income class is NON_REPORTABLE
    if (nonResidentAlienTax.getIncomeClassCode().equals(NRA_TAX_INCOME_CLASS_NON_REPORTABLE)) {
        if ((nonResidentAlienTax.isForeignSourceIncomeCode()) || (nonResidentAlienTax.isIncomeTaxTreatyExemptCode()) || (nonResidentAlienTax.isTaxOtherExemptIndicator()) || (nonResidentAlienTax.isIncomeTaxGrossUpCode()) || (nonResidentAlienTax.isTaxUSAIDPerDiemIndicator()) || (nonResidentAlienTax.getTaxSpecialW4Amount() != null) || (nonResidentAlienTax.getReferenceFinancialDocumentNumber() != null) || (nonResidentAlienTax.getTaxNQIId() != null) || (nonResidentAlienTax.getPostalCountryCode() != null)) {
            String boxCode = "";
            if (nonResidentAlienTax.isForeignSourceIncomeCode()) {
                boxCode = "Foreign Source";
            }
            if (nonResidentAlienTax.isIncomeTaxTreatyExemptCode()) {
                boxCode = "Treaty Exempt";
            }
            if (nonResidentAlienTax.isTaxOtherExemptIndicator()) {
                boxCode = "Exempt Under Other Code";
            }
            if (nonResidentAlienTax.isIncomeTaxGrossUpCode()) {
                boxCode = "Gross Up Payment";
            }
            if (nonResidentAlienTax.isTaxUSAIDPerDiemIndicator()) {
                boxCode = "USAID Per Diem";
            }
            if (nonResidentAlienTax.getTaxSpecialW4Amount() != null) {
                boxCode = "Special W-4 Amount";
            }
            if (nonResidentAlienTax.getReferenceFinancialDocumentNumber() != null) {
                boxCode = "Reference Doc";
            }
            if (nonResidentAlienTax.getTaxNQIId() != null) {
                boxCode = "NQI Id";
            }
            if (nonResidentAlienTax.getPostalCountryCode() != null) {
                boxCode = "Country Code";
            }
            errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NON_REPORTABLE_ONLY, boxCode);
            return false;
        }
    }
    /* check tax rates */
    if (((nonResidentAlienTax.getFederalIncomeTaxPercent() == null) || (nonResidentAlienTax.getFederalIncomeTaxPercent().equals(KualiDecimal.ZERO))) && (nonResidentAlienTax.getIncomeClassCode().equals(NRA_TAX_INCOME_CLASS_NON_REPORTABLE))) {
        nonResidentAlienTax.setFederalIncomeTaxPercent(KualiDecimal.ZERO);
    } else {
        if (nonResidentAlienTax.getFederalIncomeTaxPercent() == null) {
            errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_REQUIRED, "Federal tax percent");
            return false;
        } else {
            // check Federal tax percent is in non-resident alien tax percent table for income class code
            NonResidentAlienTaxPercent taxPercent = new NonResidentAlienTaxPercent();
            taxPercent.setIncomeClassCode(nonResidentAlienTax.getIncomeClassCode());
            taxPercent.setIncomeTaxTypeCode(FEDERAL_TAX_TYPE_CODE);
            taxPercent.setIncomeTaxPercent(nonResidentAlienTax.getFederalIncomeTaxPercent());
            NonResidentAlienTaxPercent retrievedPercent = (NonResidentAlienTaxPercent) SpringContext.getBean(BusinessObjectService.class).retrieve(taxPercent);
            if (retrievedPercent == null) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_INVALID_FED_TAX_PERCENT, new String[] { nonResidentAlienTax.getFederalIncomeTaxPercent().toString(), nonResidentAlienTax.getIncomeClassCode() });
                return false;
            }
        }
    }
    if (((nonResidentAlienTax.getStateIncomeTaxPercent() == null) || (nonResidentAlienTax.getStateIncomeTaxPercent().equals(KualiDecimal.ZERO))) && (nonResidentAlienTax.getIncomeClassCode().equals(NRA_TAX_INCOME_CLASS_NON_REPORTABLE))) {
        nonResidentAlienTax.setStateIncomeTaxPercent(KualiDecimal.ZERO);
    } else {
        if (nonResidentAlienTax.getStateIncomeTaxPercent() == null) {
            errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_REQUIRED, "State tax percent");
            return false;
        } else {
            // check State tax percent is in non-resident alien tax percent table for income class code
            NonResidentAlienTaxPercent taxPercent = new NonResidentAlienTaxPercent();
            taxPercent.setIncomeClassCode(nonResidentAlienTax.getIncomeClassCode());
            taxPercent.setIncomeTaxTypeCode(STATE_TAX_TYPE_CODE);
            taxPercent.setIncomeTaxPercent(nonResidentAlienTax.getStateIncomeTaxPercent());
            PersistableBusinessObject retrievedPercent = SpringContext.getBean(BusinessObjectService.class).retrieve(taxPercent);
            if (retrievedPercent == null) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_INVALID_STATE_TAX_PERCENT, nonResidentAlienTax.getStateIncomeTaxPercent().toString(), nonResidentAlienTax.getIncomeClassCode());
                return false;
            } else {
                if ((!document.getDvNonResidentAlienTax().getIncomeClassCode().equals(NRA_TAX_INCOME_CLASS_ROYALTIES)) && (!document.getDvNonResidentAlienTax().getIncomeClassCode().equals(NRA_TAX_INCOME_CLASS_INDEPENDENT_CONTRACTOR))) {
                    // If fed tax rate is zero, the state tax rate should be zero.
                    if ((document.getDvNonResidentAlienTax().getFederalIncomeTaxPercent().equals(KualiDecimal.ZERO)) && (!document.getDvNonResidentAlienTax().getStateIncomeTaxPercent().isZero())) {
                        errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_STATE_TAX_SHOULD_BE_ZERO);
                        return false;
                    }
                }
            }
        }
    }
    // the 4 check boxes (Foreign Source, Treaty Exempt, Gross Up Payment, Exempt Under Other Code) shall be mutual exclusive
    if (OneOrLessBoxesChecked(document)) {
        // if Foreign Source is checked
        if (nonResidentAlienTax.isForeignSourceIncomeCode()) {
            // Federal and State tax rate should be zero.
            if ((!nonResidentAlienTax.getFederalIncomeTaxPercent().equals(KualiDecimal.ZERO)) || (!nonResidentAlienTax.getStateIncomeTaxPercent().equals(KualiDecimal.ZERO))) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_FEDERAL_AND_STATE_TAXES_SHOULD_BE_ZERO, "Foreign Source");
                return false;
            }
            // No other items (mutual exclusiveness checking on USAID Per Diem and Special W-4 Amount are optional here since these are also ensured by their validation later)
            if ((nonResidentAlienTax.isTaxUSAIDPerDiemIndicator()) || (nonResidentAlienTax.getTaxSpecialW4Amount() != null) || (nonResidentAlienTax.getReferenceFinancialDocumentNumber() != null) || (nonResidentAlienTax.getTaxNQIId() != null)) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_CANNOT_HAVE_VALUE, "Foreign Source", "NQI Id, Reference Doc, USAID Per Diem, or Special W-4 Amount");
                return false;
            }
        }
        // if Treaty Exempt is checked
        if (nonResidentAlienTax.isIncomeTaxTreatyExemptCode()) {
            // No other items (mutual exclusiveness checking on USAID Per Diem and Special W-4 Amount are optional here since these are also ensured by their validation later)
            if ((nonResidentAlienTax.isTaxUSAIDPerDiemIndicator()) || (nonResidentAlienTax.getTaxSpecialW4Amount() != null) || (nonResidentAlienTax.getReferenceFinancialDocumentNumber() != null) || (nonResidentAlienTax.getTaxNQIId() != null)) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_CANNOT_HAVE_VALUE, "Treaty Exempt", "NQI Id, Reference Doc, USAID Per Diem, or Special W-4 Amount");
                return false;
            }
        }
        // if Gross Up Payment is checked
        if (nonResidentAlienTax.isIncomeTaxGrossUpCode()) {
            // NOTE: Also, state tax not allowed to be zero for income classes "R" and "I", however, this rule is already checked in the tax rate section, so no need to re-check
            if ((nonResidentAlienTax.getFederalIncomeTaxPercent().equals(KualiDecimal.ZERO))) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_FEDERAL_TAX_CANNOT_BE_ZERO, "Gross Up Payment");
                return false;
            }
            // No other items (mutual exclusiveness checking on USAID Per Diem and Special W-4 Amount are optional here since these are also ensured by their validation later)
            if ((nonResidentAlienTax.isTaxUSAIDPerDiemIndicator()) || (nonResidentAlienTax.getTaxSpecialW4Amount() != null) || (nonResidentAlienTax.getReferenceFinancialDocumentNumber() != null) || (nonResidentAlienTax.getTaxNQIId() != null)) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_CANNOT_HAVE_VALUE, "Gross Up Payment", "NQI Id, Reference Doc, USAID Per Diem, or Special W-4 Amount");
                return false;
            }
        }
        // if Exempt Under Other Code is checked
        if (nonResidentAlienTax.isTaxOtherExemptIndicator()) {
            // Federal and State tax rate should be zero.
            if (!(nonResidentAlienTax.getStateIncomeTaxPercent().equals(KualiDecimal.ZERO)) || !(nonResidentAlienTax.getFederalIncomeTaxPercent().equals(KualiDecimal.ZERO))) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_FEDERAL_AND_STATE_TAXES_SHOULD_BE_ZERO, "Exempt Under Other Code");
                return false;
            }
        }
        // if USAID Per Diem is checked
        if (nonResidentAlienTax.isTaxUSAIDPerDiemIndicator()) {
            // income class code should be fellowship
            if (!nonResidentAlienTax.getIncomeClassCode().equals(NRA_TAX_INCOME_CLASS_FELLOWSHIP)) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_SHOULD_BE_SELECTED, "USAID Per Diem", "Income Class Code : Fellowship");
                return false;
            }
            // Federal and State tax rate should be zero.
            if (!(nonResidentAlienTax.getStateIncomeTaxPercent().equals(KualiDecimal.ZERO)) || !(nonResidentAlienTax.getFederalIncomeTaxPercent().equals(KualiDecimal.ZERO))) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_FEDERAL_AND_STATE_TAXES_SHOULD_BE_ZERO, "USAID Per Diem");
                return false;
            }
            // Exempt Under Other Code should be checked; this will ensure the other 3 check boxes not checked due to mutual exclusiveness
            if (!nonResidentAlienTax.isTaxOtherExemptIndicator()) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_SHOULD_BE_SELECTED, "USAID Per Diem", "Exempt Under Other Code");
                return false;
            }
            // Special W-4 Amount shall have no value
            if (nonResidentAlienTax.getTaxSpecialW4Amount() != null) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_CANNOT_HAVE_VALUE, "USAID Per Diem", "Special W-4 Amount");
                return false;
            }
        }
        // if Special W-4 Amount is entered
        if (nonResidentAlienTax.getTaxSpecialW4Amount() != null) {
            // income class code should be fellowship
            if (!nonResidentAlienTax.getIncomeClassCode().equals(NRA_TAX_INCOME_CLASS_FELLOWSHIP)) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_SHOULD_BE_SELECTED, "Special W-4 Amount", "Income Class Code : Fellowship");
                return false;
            }
            // Federal and State tax rate should be zero.
            if (!(nonResidentAlienTax.getStateIncomeTaxPercent().equals(KualiDecimal.ZERO)) || !(nonResidentAlienTax.getFederalIncomeTaxPercent().equals(KualiDecimal.ZERO))) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_FEDERAL_AND_STATE_TAXES_SHOULD_BE_ZERO, "Special W-4 Amount");
                return false;
            }
            // Exempt Under Other Code should be checked; this will ensure the other 3 check boxes not checked due to mutual exclusiveness
            if (!nonResidentAlienTax.isTaxOtherExemptIndicator()) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_SHOULD_BE_SELECTED, "Special W-4 Amount", "Exempt Under Other Code");
                return false;
            }
            // USAID Per Diem should not be checked (mutual exclusive checking on USAID Per Diem here is optional since this is also ensured by validation on Special W-4 Amount above
            if ((nonResidentAlienTax.isTaxUSAIDPerDiemIndicator())) {
                errors.putErrorWithoutFullErrorPath("DVNRATaxErrors", KFSKeyConstants.ERROR_DV_NRA_TAX_WHEN_CHECKED_CANNOT_BE_SELECTED, "Special W-4 Amount", "USAID Per Diem");
                return false;
            }
        }
        // if NQI Id is entered
        if (nonResidentAlienTax.getTaxNQIId() != null) {
        }
        // if Reference Doc is entered
        if (nonResidentAlienTax.getReferenceFinancialDocumentNumber() != null) {
        }
    }
    if (validationType != "GENERATE") {
        // verify tax lines have been generated
        if ((nonResidentAlienTax.getFederalIncomeTaxPercent().isNonZero() || nonResidentAlienTax.getStateIncomeTaxPercent().isNonZero())) {
            if (StringUtils.isBlank(nonResidentAlienTax.getFinancialDocumentAccountingLineText())) {
                errors.putErrorWithoutFullErrorPath(KFSConstants.GENERAL_NRATAX_TAB_ERRORS, KFSKeyConstants.ERROR_DV_NRA_NO_TAXLINES_GENERATED);
                return false;
            }
        }
    }
    errors.removeFromErrorPath(KFSPropertyConstants.DV_NON_RESIDENT_ALIEN_TAX);
    errors.removeFromErrorPath(KFSPropertyConstants.DOCUMENT);
    return isValid;
}
Also used : PersistableBusinessObject(org.kuali.kfs.krad.bo.PersistableBusinessObject) DisbursementVoucherNonResidentAlienTax(org.kuali.kfs.fp.businessobject.DisbursementVoucherNonResidentAlienTax) DisbursementVoucherPayeeDetail(org.kuali.kfs.fp.businessobject.DisbursementVoucherPayeeDetail) NonResidentAlienTaxPercent(org.kuali.kfs.fp.businessobject.NonResidentAlienTaxPercent) Person(org.kuali.rice.kim.api.identity.Person) DisbursementVoucherDocument(org.kuali.kfs.fp.document.DisbursementVoucherDocument) MessageMap(org.kuali.kfs.krad.util.MessageMap) BusinessObjectService(org.kuali.kfs.krad.service.BusinessObjectService)

Aggregations

Person (org.kuali.rice.kim.api.identity.Person)64 ArrayList (java.util.ArrayList)12 PersonService (org.kuali.rice.kim.api.identity.PersonService)12 HashMap (java.util.HashMap)10 CuDisbursementVoucherDocument (edu.cornell.kfs.fp.document.CuDisbursementVoucherDocument)8 List (java.util.List)6 AdHocRoutePerson (org.kuali.kfs.krad.bo.AdHocRoutePerson)6 Map (java.util.Map)5 DisbursementVoucherDocument (org.kuali.kfs.fp.document.DisbursementVoucherDocument)5 Note (org.kuali.kfs.krad.bo.Note)5 VendorDetail (org.kuali.kfs.vnd.businessobject.VendorDetail)5 DateTimeService (org.kuali.rice.core.api.datetime.DateTimeService)5 MessageMap (org.kuali.kfs.krad.util.MessageMap)4 CustomerProfile (org.kuali.kfs.pdp.businessobject.CustomerProfile)4 KualiDecimal (org.kuali.rice.core.api.util.type.KualiDecimal)4 WorkflowDocument (org.kuali.rice.kew.api.WorkflowDocument)4 IWantDocument (edu.cornell.kfs.module.purap.document.IWantDocument)3 Date (java.util.Date)3 ChartOrgHolder (org.kuali.kfs.sys.businessobject.ChartOrgHolder)3 AccountingXmlDocumentNote (edu.cornell.kfs.fp.batch.xml.AccountingXmlDocumentNote)2