Search in sources :

Example 16 with Person

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

the class CuPurchaseOrderAmendmentDocument method isSeparationOfDutiesReviewRequired.

protected boolean isSeparationOfDutiesReviewRequired() {
    try {
        Set<Person> priorApprovers = getAllPriorApprovers();
        // then no need for separation of duties
        if (priorApprovers.size() > 0) {
            return false;
        }
    } catch (WorkflowException we) {
        LOG.error("Exception while attempting to retrieve all prior approvers from workflow: " + we);
    }
    ParameterService parameterService = SpringContext.getBean(ParameterService.class);
    KualiDecimal maxAllowedAmount = new KualiDecimal(parameterService.getParameterValueAsString(RequisitionDocument.class, PurapParameterConstants.SEPARATION_OF_DUTIES_DOLLAR_AMOUNT));
    // if app param amount is greater than or equal to documentTotalAmount... no need for separation of duties
    KualiDecimal totalAmount = getFinancialSystemDocumentHeader().getFinancialDocumentTotalAmount();
    if (ObjectUtils.isNotNull(maxAllowedAmount) && ObjectUtils.isNotNull(totalAmount) && (maxAllowedAmount.compareTo(totalAmount) >= 0)) {
        return false;
    } else {
        return true;
    }
}
Also used : RequisitionDocument(org.kuali.kfs.module.purap.document.RequisitionDocument) ParameterService(org.kuali.kfs.coreservice.framework.parameter.ParameterService) WorkflowException(org.kuali.kfs.kew.api.exception.WorkflowException) KualiDecimal(org.kuali.kfs.core.api.util.type.KualiDecimal) Person(org.kuali.kfs.kim.api.identity.Person)

Example 17 with Person

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

the class CuRequisitionDocument method initiateDocument.

/**
 * Overridden to unmask name and phone number. This will be able to be removed once this fix is in the base code.
 *
 * Also overridden to use the alternate CuPurapService method for setting the APO limit.
 */
@Override
public void initiateDocument() throws WorkflowException {
    super.initiateDocument();
    Person currentUser = GlobalVariables.getUserSession().getPerson();
    this.setDeliveryToName(currentUser.getNameUnmasked());
    this.setDeliveryToPhoneNumber(SpringContext.getBean(PhoneNumberService.class).formatNumberIfPossible(currentUser.getPhoneNumberUnmasked()));
    this.setRequestorPersonName(currentUser.getNameUnmasked());
    this.setRequestorPersonPhoneNumber(SpringContext.getBean(PhoneNumberService.class).formatNumberIfPossible(currentUser.getPhoneNumberUnmasked()));
    this.setOrganizationAutomaticPurchaseOrderLimit(getPurapService().getApoLimit(this));
}
Also used : Person(org.kuali.kfs.kim.api.identity.Person)

Example 18 with Person

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

the class CuRequisitionServiceImpl method checkAutomaticPurchaseOrderRules.

/**
 * Checks the rule for Automatic Purchase Order eligibility of the requisition and return a String containing the
 * reason why the requisition was not eligible to become an APO if it was not eligible, or return an empty String
 * if the requisition is eligible to become an APO
 *
 * @param requisition the requisition document to be checked for APO eligibility.
 * @return String containing the reason why the requisition was not eligible to become an APO if it was not
 *         eligible, or an empty String if the requisition is eligible to become an APO.
 */
@Override
protected String checkAutomaticPurchaseOrderRules(RequisitionDocument requisition) {
    String requisitionSource = requisition.getRequisitionSourceCode();
    KualiDecimal reqTotal = requisition.getTotalDollarAmount();
    KualiDecimal apoLimit = ((CuPurapService) purapService).getApoLimit(requisition);
    requisition.setOrganizationAutomaticPurchaseOrderLimit(apoLimit);
    if (LOG.isDebugEnabled()) {
        LOG.debug("isAPO() reqId = " + requisition.getPurapDocumentIdentifier() + "; apoLimit = " + apoLimit + "; reqTotal = " + reqTotal);
    }
    if (apoLimit == null) {
        return "APO limit is empty.";
    } else {
        if (reqTotal.compareTo(apoLimit) == 1) {
            return "Requisition total is greater than the APO limit.";
        }
    }
    if (reqTotal.compareTo(KualiDecimal.ZERO) <= 0) {
        return "Requisition total is not greater than zero.";
    }
    if (LOG.isDebugEnabled()) {
        LOG.debug("isAPO() vendor #" + requisition.getVendorHeaderGeneratedIdentifier() + "-" + requisition.getVendorDetailAssignedIdentifier());
    }
    if (requisition.getVendorHeaderGeneratedIdentifier() == null || requisition.getVendorDetailAssignedIdentifier() == null) {
        return "Vendor was not selected from the vendor database.";
    } else {
        VendorDetail vendorDetail = vendorService.getVendorDetail(requisition.getVendorHeaderGeneratedIdentifier(), requisition.getVendorDetailAssignedIdentifier());
        if (vendorDetail == null) {
            return "Error retrieving vendor from the database.";
        }
        if (StringUtils.isBlank(requisition.getVendorLine1Address()) || StringUtils.isBlank(requisition.getVendorCityName()) || StringUtils.isBlank(requisition.getVendorCountryCode())) {
            return "Requisition does not have all of the vendor address fields that are required for Purchase " + "Order.";
        }
        requisition.setVendorRestrictedIndicator(vendorDetail.getVendorRestrictedIndicator());
        if (requisition.getVendorRestrictedIndicator() != null && requisition.getVendorRestrictedIndicator()) {
            return "Selected vendor is marked as restricted.";
        }
        if (vendorDetail.isVendorDebarred()) {
            return "Selected vendor is marked as a debarred vendor";
        }
        requisition.setVendorDetail(vendorDetail);
        if (!PurapConstants.RequisitionSources.B2B.equals(requisitionSource) && ObjectUtils.isNull(requisition.getVendorContractGeneratedIdentifier())) {
            Person initiator = personService.getPerson(requisition.getDocumentHeader().getWorkflowDocument().getInitiatorPrincipalId());
            VendorContract b2bContract = vendorService.getVendorB2BContract(vendorDetail, initiator.getCampusCode());
            if (b2bContract != null) {
                return "Standard requisition with no contract selected but a B2B contract exists for the " + "selected vendor.";
            }
        }
        // if the vendor is selected through vendor contract is selected
        if (StringUtils.isNotBlank(requisition.getVendorContractName())) {
            // CU mod: KFSUPGRADE-926
            boolean routeToCM = parameterService.getParameterValueAsBoolean(RequisitionDocument.class, CUPurapParameterConstants.ROUTE_REQS_WITH_EXPIRED_CONTRACT_TO_CM, Boolean.FALSE);
            if (routeToCM && vendorService.isVendorContractExpired(requisition, requisition.getVendorContractGeneratedIdentifier(), vendorDetail)) {
                return "Contracted Vendor used where the contract end date is expired.";
            }
        }
    }
    // if vendor address isn't complete, no APO
    if (StringUtils.isBlank(requisition.getVendorLine1Address()) || StringUtils.isBlank(requisition.getVendorCityName()) || StringUtils.isBlank(requisition.getVendorCountryCode()) || !postalCodeValidationService.validateAddress(requisition.getVendorCountryCode(), requisition.getVendorStateCode(), requisition.getVendorPostalCode(), "", "")) {
        return "Requisition does not contain a complete vendor address";
    }
    // These are needed for commodity codes. They are put in here so that we don't have to loop through items too
    // many times.
    String purchaseOrderRequiresCommodityCode = parameterService.getParameterValueAsString(PurchaseOrderDocument.class, PurapRuleConstants.ITEMS_REQUIRE_COMMODITY_CODE_IND);
    boolean commodityCodeRequired = "Y".equals(purchaseOrderRequiresCommodityCode);
    for (Object anItem : requisition.getItems()) {
        RequisitionItem item = (RequisitionItem) anItem;
        if (item.isItemRestrictedIndicator()) {
            return "Requisition contains an item that is marked as restricted.";
        }
        // We only need to check the commodity codes if this is an above the line item.
        if (item.getItemType().isLineItemIndicator()) {
            List<VendorCommodityCode> vendorCommodityCodes = commodityCodeRequired ? requisition.getVendorDetail().getVendorCommodities() : null;
            String commodityCodesReason = checkAPORulesPerItemForCommodityCodes(item, vendorCommodityCodes, commodityCodeRequired);
            if (StringUtils.isNotBlank(commodityCodesReason)) {
                return commodityCodesReason;
            }
        }
        if (PurapConstants.ItemTypeCodes.ITEM_TYPE_ORDER_DISCOUNT_CODE.equals(item.getItemType().getItemTypeCode()) || PurapConstants.ItemTypeCodes.ITEM_TYPE_TRADE_IN_CODE.equals(item.getItemType().getItemTypeCode())) {
            if (item.getItemUnitPrice() != null && BigDecimal.ZERO.compareTo(item.getItemUnitPrice()) != 0) {
                // discount or trade-in item has unit price that is not empty or zero
                return "Requisition contains a " + item.getItemType().getItemTypeDescription() + " item, so it does not qualify as an APO.";
            }
        }
    // //Base code logic check not in CU mod
    // if (!PurapConstants.RequisitionSources.B2B.equals(requisitionSource)) {
    // for (PurApAccountingLine accountingLine : item.getSourceAccountingLines()) {
    // if (capitalAssetManagementModuleService.doesAccountingLineFailAutomaticPurchaseOrderRules(
    // accountingLine)) {
    // return "Requisition contains accounting line with capital object level";
    // }
    // }
    // }
    }
    if (StringUtils.isNotEmpty(requisition.getRecurringPaymentTypeCode())) {
        return "Payment type is marked as recurring.";
    }
    if (requisition.getPurchaseOrderTotalLimit() != null && KualiDecimal.ZERO.compareTo(requisition.getPurchaseOrderTotalLimit()) != 0) {
        LOG.debug("isAPO() po total limit is not null and not equal to zero; return false.");
        return "The 'PO not to exceed' amount has been entered.";
    }
    if (StringUtils.isNotEmpty(requisition.getAlternate1VendorName()) || StringUtils.isNotEmpty(requisition.getAlternate2VendorName()) || StringUtils.isNotEmpty(requisition.getAlternate3VendorName()) || StringUtils.isNotEmpty(requisition.getAlternate4VendorName()) || StringUtils.isNotEmpty(requisition.getAlternate5VendorName())) {
        LOG.debug("isAPO() alternate vendor name exists; return false.");
        return "Requisition contains additional suggested vendor names.";
    }
    if (requisition.isPostingYearNext() && !purapService.isTodayWithinApoAllowedRange()) {
        return "Requisition is set to encumber next fiscal year and approval is not within APO allowed date range.";
    }
    return "";
}
Also used : VendorDetail(org.kuali.kfs.vnd.businessobject.VendorDetail) CuPurapService(edu.cornell.kfs.module.purap.document.service.CuPurapService) RequisitionItem(org.kuali.kfs.module.purap.businessobject.RequisitionItem) VendorContract(org.kuali.kfs.vnd.businessobject.VendorContract) KualiDecimal(org.kuali.kfs.core.api.util.type.KualiDecimal) Person(org.kuali.kfs.kim.api.identity.Person) VendorCommodityCode(org.kuali.kfs.vnd.businessobject.VendorCommodityCode)

Example 19 with Person

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

the class IWantDocumentServiceImpl method setUpDeliverToSectionOfReqDoc.

/**
 * Sets up the deliver to section of the Requisition document based on the information
 * on the I Want Document.
 *
 * @param requisitionDocument
 * @param iWantDocument
 */
private void setUpDeliverToSectionOfReqDoc(RequisitionDocument requisitionDocument, IWantDocument iWantDocument, CuPurapService purapService) {
    Person deliverTo = null;
    if (StringUtils.isNotBlank(iWantDocument.getDeliverToNetID())) {
        requisitionDocument.setDeliveryBuildingRoomNumber(KFSConstants.NOT_AVAILABLE_STRING);
        requisitionDocument.setDeliveryCountryCode(KFSConstants.COUNTRY_CODE_UNITED_STATES);
        requisitionDocument.setDeliveryBuildingOtherIndicator(true);
        deliverTo = personService.getPersonByPrincipalName(iWantDocument.getDeliverToNetID());
        if (ObjectUtils.isNotNull(deliverTo)) {
            Person currentUser = GlobalVariables.getUserSession().getPerson();
            ChartOrgHolder purapChartOrg = financialSystemUserService.getPrimaryOrganization(currentUser, PurapConstants.PURAP_NAMESPACE);
            if (ObjectUtils.isNotNull(purapChartOrg)) {
                requisitionDocument.setChartOfAccountsCode(purapChartOrg.getChartOfAccountsCode());
                requisitionDocument.setOrganizationCode(purapChartOrg.getOrganizationCode());
            }
            requisitionDocument.setDeliveryCampusCode(deliverTo.getCampusCode());
            requisitionDocument.setDeliveryToName(iWantDocument.getDeliverToName());
            requisitionDocument.setDeliveryToEmailAddress(iWantDocument.getDeliverToEmailAddress());
            requisitionDocument.setDeliveryToPhoneNumber(phoneNumberService.formatNumberIfPossible(iWantDocument.getDeliverToPhoneNumber()));
            requisitionDocument.setRequestorPersonName(iWantDocument.getInitiatorName());
            requisitionDocument.setRequestorPersonEmailAddress(iWantDocument.getInitiatorEmailAddress());
            requisitionDocument.setRequestorPersonPhoneNumber(phoneNumberService.formatNumberIfPossible(iWantDocument.getInitiatorPhoneNumber()));
            parseAndSetRequestorAddress(iWantDocument.getDeliverToAddress(), requisitionDocument);
            requisitionDocument.setOrganizationAutomaticPurchaseOrderLimit(purapService.getApoLimit(requisitionDocument));
            // populate billing address
            BillingAddress billingAddress = new BillingAddress();
            billingAddress.setBillingCampusCode(requisitionDocument.getDeliveryCampusCode());
            @SuppressWarnings("unchecked") Map<String, ?> keys = persistenceService.getPrimaryKeyFieldValues(billingAddress);
            billingAddress = businessObjectService.findByPrimaryKey(BillingAddress.class, keys);
            requisitionDocument.templateBillingAddress(billingAddress);
        }
    }
    if (StringUtils.isBlank(iWantDocument.getDeliverToNetID()) || ObjectUtils.isNull(deliverTo)) {
        // populate requisition fields from I Want doc initiator
        deliverTo = personService.getPerson(iWantDocument.getDocumentHeader().getWorkflowDocument().getInitiatorPrincipalId());
        if (ObjectUtils.isNotNull(deliverTo)) {
            Person currentUser = GlobalVariables.getUserSession().getPerson();
            ChartOrgHolder purapChartOrg = financialSystemUserService.getPrimaryOrganization(currentUser, PurapConstants.PURAP_NAMESPACE);
            if (ObjectUtils.isNotNull(purapChartOrg)) {
                requisitionDocument.setChartOfAccountsCode(purapChartOrg.getChartOfAccountsCode());
                requisitionDocument.setOrganizationCode(purapChartOrg.getOrganizationCode());
            }
            requisitionDocument.setDeliveryCampusCode(deliverTo.getCampusCode());
            requisitionDocument.setDeliveryToName(deliverTo.getName());
            requisitionDocument.setDeliveryToEmailAddress(deliverTo.getEmailAddressUnmasked());
            requisitionDocument.setDeliveryToPhoneNumber(phoneNumberService.formatNumberIfPossible(deliverTo.getPhoneNumber()));
            requisitionDocument.setRequestorPersonName(deliverTo.getName());
            requisitionDocument.setRequestorPersonEmailAddress(deliverTo.getEmailAddressUnmasked());
            requisitionDocument.setRequestorPersonPhoneNumber(phoneNumberService.formatNumberIfPossible(deliverTo.getPhoneNumber()));
            DefaultPrincipalAddress defaultPrincipalAddress = new DefaultPrincipalAddress(deliverTo.getPrincipalId());
            @SuppressWarnings("unchecked") Map<String, ?> addressKeys = persistenceService.getPrimaryKeyFieldValues(defaultPrincipalAddress);
            defaultPrincipalAddress = (DefaultPrincipalAddress) businessObjectService.findByPrimaryKey(DefaultPrincipalAddress.class, addressKeys);
            if (ObjectUtils.isNotNull(defaultPrincipalAddress) && ObjectUtils.isNotNull(defaultPrincipalAddress.getBuilding())) {
                if (defaultPrincipalAddress.getBuilding().isActive()) {
                    requisitionDocument.setDeliveryCampusCode(defaultPrincipalAddress.getCampusCode());
                    requisitionDocument.templateBuildingToDeliveryAddress(defaultPrincipalAddress.getBuilding());
                    requisitionDocument.setDeliveryBuildingRoomNumber(defaultPrincipalAddress.getBuildingRoomNumber());
                } else {
                    // since building is now inactive, delete default building record
                    businessObjectService.delete(defaultPrincipalAddress);
                }
            }
            // set the APO limit
            requisitionDocument.setOrganizationAutomaticPurchaseOrderLimit(purapService.getApoLimit(requisitionDocument));
            // populate billing address
            BillingAddress billingAddress = new BillingAddress();
            billingAddress.setBillingCampusCode(requisitionDocument.getDeliveryCampusCode());
            @SuppressWarnings("unchecked") Map<String, ?> keys = persistenceService.getPrimaryKeyFieldValues(billingAddress);
            billingAddress = (BillingAddress) businessObjectService.findByPrimaryKey(BillingAddress.class, keys);
            requisitionDocument.templateBillingAddress(billingAddress);
        }
    }
}
Also used : BillingAddress(org.kuali.kfs.module.purap.businessobject.BillingAddress) DefaultPrincipalAddress(org.kuali.kfs.module.purap.businessobject.DefaultPrincipalAddress) ChartOrgHolder(org.kuali.kfs.sys.businessobject.ChartOrgHolder) Person(org.kuali.kfs.kim.api.identity.Person)

Example 20 with Person

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

the class IWantDocumentServiceImpl method getPersonData.

/**
 * @see edu.cornell.kfs.module.purap.document.service.IWantDocumentService#getPersonData(java.lang.String)
 */
public PersonData getPersonData(String principalName) {
    PersonData personData = new PersonData();
    Person person = personService.getPersonByPrincipalName(principalName);
    personData.setPersonName(person.getNameUnmasked());
    personData.setNetID(principalName);
    personData.setEmailAddress(person.getEmailAddressUnmasked());
    personData.setPhoneNumber(person.getPhoneNumberUnmasked());
    personData.setCampusAddress(getPersonCampusAddress(principalName));
    return personData;
}
Also used : PersonData(edu.cornell.kfs.module.purap.businessobject.PersonData) Person(org.kuali.kfs.kim.api.identity.Person)

Aggregations

Person (org.kuali.kfs.kim.api.identity.Person)84 ArrayList (java.util.ArrayList)11 PersonService (org.kuali.kfs.kim.api.identity.PersonService)11 HashMap (java.util.HashMap)9 Note (org.kuali.kfs.krad.bo.Note)9 CuDisbursementVoucherDocument (edu.cornell.kfs.fp.document.CuDisbursementVoucherDocument)8 WorkflowDocument (org.kuali.kfs.kew.api.WorkflowDocument)6 AdHocRoutePerson (org.kuali.kfs.krad.bo.AdHocRoutePerson)6 DateTimeService (org.kuali.kfs.core.api.datetime.DateTimeService)5 KualiDecimal (org.kuali.kfs.core.api.util.type.KualiDecimal)5 VendorDetail (org.kuali.kfs.vnd.businessobject.VendorDetail)5 DisbursementVoucherDocument (org.kuali.kfs.fp.document.DisbursementVoucherDocument)4 WorkflowException (org.kuali.kfs.kew.api.exception.WorkflowException)4 CustomerProfile (org.kuali.kfs.pdp.businessobject.CustomerProfile)4 IWantDocument (edu.cornell.kfs.module.purap.document.IWantDocument)3 PayeeACHAccount (org.kuali.kfs.pdp.businessobject.PayeeACHAccount)3 Bank (org.kuali.kfs.sys.businessobject.Bank)3 ChartOrgHolder (org.kuali.kfs.sys.businessobject.ChartOrgHolder)3 AccountingXmlDocumentNote (edu.cornell.kfs.fp.batch.xml.AccountingXmlDocumentNote)2 CuDisbursementPayee (edu.cornell.kfs.fp.businessobject.CuDisbursementPayee)2