Search in sources :

Example 6 with VendorDetail

use of org.kuali.kfs.vnd.businessobject.VendorDetail in project cu-kfs by CU-CommunityApps.

the class CuB2BPurchaseOrderSciquestServiceImpl method getCxml.

public String getCxml(PurchaseOrderDocument purchaseOrder, String requisitionInitiatorPrincipalId, String password, ContractManager contractManager, String contractManagerEmail, String vendorDuns, boolean includeNewFields) {
    WorkflowDocument workFlowDocument = purchaseOrder.getDocumentHeader().getWorkflowDocument();
    String documentType = workFlowDocument.getDocumentTypeName();
    // KFSUPGRADE-1458 complete the potransmission enhancement
    int disbMethod = 0;
    String poTransmissionCode = purchaseOrder.getPurchaseOrderTransmissionMethodCode();
    if (PurapConstants.POTransmissionMethods.FAX.equalsIgnoreCase(poTransmissionCode)) {
        // fax
        disbMethod = FAX;
    } else if (CUPurapConstants.POTransmissionMethods.EMAIL.equalsIgnoreCase(poTransmissionCode)) {
        // email
        disbMethod = EMAIL;
    } else if (CUPurapConstants.POTransmissionMethods.CONVERSION.equalsIgnoreCase(poTransmissionCode)) {
        // conversion
        disbMethod = CONVERSION;
    } else {
        // manual
        disbMethod = MANUAL;
    }
    StringBuffer cxml = new StringBuffer();
    List<Note> notesToSendToVendor = getNotesToSendToVendor(purchaseOrder);
    // comment out for investigation
    if (CollectionUtils.isNotEmpty(notesToSendToVendor)) {
        cxml.append("--" + CUPurapConstants.MIME_BOUNDARY_FOR_ATTACHMENTS + "\r\n");
        cxml.append("Content-Type: application/xop+xml;\r\n");
        cxml.append("        charset=\"UTF-8\";\r\n");
        cxml.append("        type=\"text/xml\"\r\n");
        cxml.append("Content-Transfer-Encoding: 8bit\r\n");
        cxml.append("Content-ID: <1222711868656.6893160141700477326@sciquest.com>\r\n");
        // blank line before part
        cxml.append("\r\n");
    }
    cxml.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n");
    cxml.append("<!DOCTYPE PurchaseOrderMessage SYSTEM \"PO.dtd\">\n");
    cxml.append("<PurchaseOrderMessage version=\"2.0\">\n");
    cxml.append("  <Header>\n");
    // MessageId - can be whatever you would like it to be. Just make it unique.
    cxml.append("    <MessageId>KFS_cXML_PO</MessageId>\n");
    // Timestamp - it doesn't matter what's in the timezone, just that it's there (need "T" space between date/time)
    Date d = SpringContext.getBean(DateTimeService.class).getCurrentDate();
    SimpleDateFormat date = PurApDateFormatUtils.getSimpleDateFormat(PurapConstants.NamedDateFormats.CXML_SIMPLE_DATE_FORMAT);
    SimpleDateFormat time = PurApDateFormatUtils.getSimpleDateFormat(PurapConstants.NamedDateFormats.CXML_SIMPLE_TIME_FORMAT);
    cxml.append("    <Timestamp>").append(date.format(d)).append("T").append(time.format(d)).append("+05:30").append("</Timestamp>\n");
    cxml.append("    <Authentication>\n");
    // Cu is using useragent
    // cxml.append("      <Identity>").append(getB2bPurchaseOrderIdentity()).append("</Identity>\n");
    cxml.append("      <Identity>").append(getB2bUserAgent()).append("</Identity>\n");
    cxml.append("      <SharedSecret>").append(password).append("</SharedSecret>\n");
    cxml.append("    </Authentication>\n");
    cxml.append("  </Header>\n");
    cxml.append("  <PurchaseOrder>\n");
    // void = VOPE      ammend = CGIN ?   ammend should =
    if (StringUtils.equals(workFlowDocument.getApplicationDocumentStatus(), PurapConstants.PurchaseOrderStatuses.APPDOC_PENDING_VOID) || documentType.equalsIgnoreCase(PurapConstants.PurchaseOrderDocTypes.PURCHASE_ORDER_VOID_DOCUMENT)) {
        cxml.append("    <POHeader type=\"cancel\">\n");
        // KFSPTS-1458 -- otherwise distribute revision tag needs to be true (for "Fax", "Email", and "US Mail"=manual mopot).
        if (disbMethod == CONVERSION) {
            cxml.append("    <DistributeRevision>false</DistributeRevision>\n");
        } else {
            // FAX, EMAIL, MANUAL=US Mail
            cxml.append("    <DistributeRevision>true</DistributeRevision>\n");
        }
    } else if (documentType.equals(PurapConstants.PurchaseOrderDocTypes.PURCHASE_ORDER_AMENDMENT_DOCUMENT)) {
        cxml.append("    <POHeader type=\"update\">\n");
        // KFSPTS-1458 -- otherwise distribute revision tag needs to be true (for "Fax", "Email", and "US Mail"=manual mopot).
        if (disbMethod == CONVERSION) {
            cxml.append("    <DistributeRevision>false</DistributeRevision>\n");
        } else {
            // FAX, EMAIL, MANUAL=US Mail
            cxml.append("    <DistributeRevision>true</DistributeRevision>\n");
        }
    } else {
        cxml.append("    <POHeader>\n");
    }
    cxml.append("      <PONumber>").append(purchaseOrder.getPurapDocumentIdentifier()).append("</PONumber>\n");
    cxml.append("      <Requestor>\n");
    cxml.append("        <UserProfile username=\"").append(requisitionInitiatorPrincipalId.toUpperCase()).append("\">\n");
    cxml.append("        </UserProfile>\n");
    cxml.append("      </Requestor>\n");
    cxml.append("      <Priority>High</Priority>\n");
    cxml.append("      <AccountingDate>").append(purchaseOrder.getPurchaseOrderCreateTimestamp()).append("</AccountingDate>\n");
    // Provide DUNS number and SupplierNumber if vendor is B2B
    if (purchaseOrder.getVendorContract() != null && purchaseOrder.getVendorContract().getVendorB2bIndicator() && disbMethod != CONVERSION) {
        /**
         *** SUPPLIER SECTION ****
         */
        cxml.append("      <Supplier>\n");
        cxml.append("        <DUNS>").append(vendorDuns).append("</DUNS>\n");
        cxml.append("        <SupplierNumber>").append(purchaseOrder.getVendorNumber()).append("</SupplierNumber>\n");
        // Type attribute is required. Valid values: main and technical. Only main will be considered for POImport.
        cxml.append("        <ContactInfo type=\"main\">\n");
        // TelephoneNumber is required. With all fields, only numeric digits will be stored. Non-numeric characters are allowed, but
        // will be stripped before storing.
        cxml.append("          <Phone>\n");
        cxml.append("            <TelephoneNumber>\n");
        cxml.append("              <CountryCode>1</CountryCode>\n");
        if (contractManager.getContractManagerPhoneNumber().length() > 4) {
            cxml.append("              <AreaCode>").append(contractManager.getContractManagerPhoneNumber().substring(0, 3)).append("</AreaCode>\n");
            cxml.append("              <Number>").append(contractManager.getContractManagerPhoneNumber().substring(3)).append("</Number>\n");
        } else {
            LOG.error("getCxml() The phone number is invalid for this contract manager: " + contractManager.getContractManagerUserIdentifier() + " " + contractManager.getContractManagerName());
            cxml.append("              <AreaCode>555</AreaCode>\n");
            cxml.append("              <Number>").append(contractManager.getContractManagerPhoneNumber()).append("</Number>\n");
        }
        cxml.append("            </TelephoneNumber>\n");
        cxml.append("          </Phone>\n");
        cxml.append("        </ContactInfo>\n");
        cxml.append("      </Supplier>\n");
    // Only pass address and distribution method if vendor is non-B2B
    } else {
        /**
         *** SUPPLIER SECTION ****
         */
        cxml.append("      <Supplier>\n");
        cxml.append("        <Name><![CDATA[").append(purchaseOrder.getVendorName()).append("]]></Name>\n");
        // Type attribute is required. Valid values: main and technical. Only main will be considered for POImport.
        cxml.append("        <ContactInfo type=\"main\">\n");
        // TelephoneNumber is required. With all fields, only numeric digits will be stored. Non-numeric characters are allowed, but
        // will be stripped before storing.
        cxml.append("          <Phone>\n");
        cxml.append("            <TelephoneNumber>\n");
        cxml.append("              <CountryCode>1</CountryCode>\n");
        if (StringUtils.isNotEmpty(purchaseOrder.getVendorPhoneNumber()) && purchaseOrder.getVendorPhoneNumber().length() > 4) {
            cxml.append("              <AreaCode>").append(purchaseOrder.getVendorPhoneNumber().substring(0, 3)).append("</AreaCode>\n");
            cxml.append("              <Number>").append(purchaseOrder.getVendorPhoneNumber().substring(3)).append("</Number>\n");
        } else {
            cxml.append("              <AreaCode>000</AreaCode>\n");
            cxml.append("              <Number>-000-0000</Number>\n");
        }
        cxml.append("            </TelephoneNumber>\n");
        cxml.append("          </Phone>\n");
        cxml.append("          <ContactAddress>\n");
        if (StringUtils.isNotEmpty(purchaseOrder.getVendorLine1Address())) {
            cxml.append("          <AddressLine label=\"Street1\" linenumber=\"1\"><![CDATA[").append(purchaseOrder.getVendorLine1Address()).append("]]></AddressLine>\n");
        }
        if (StringUtils.isNotEmpty(purchaseOrder.getVendorLine2Address())) {
            cxml.append("          <AddressLine label=\"Street2\" linenumber=\"2\"><![CDATA[").append(purchaseOrder.getVendorLine2Address()).append("]]></AddressLine>\n");
        }
        if (StringUtils.isNotEmpty(purchaseOrder.getVendorStateCode())) {
            cxml.append("          <State>").append(purchaseOrder.getBillingStateCode()).append("</State>\n");
        }
        if (StringUtils.isNotEmpty(purchaseOrder.getVendorPostalCode())) {
            cxml.append("          <PostalCode>").append(purchaseOrder.getBillingPostalCode()).append("</PostalCode>\n");
        }
        if (StringUtils.isNotEmpty(purchaseOrder.getVendorCountryCode())) {
            cxml.append("          <Country isocountrycode=\"").append(purchaseOrder.getBillingCountryCode()).append("\">").append(purchaseOrder.getBillingCountryCode()).append("</Country>\n");
        }
        cxml.append("          </ContactAddress>\n");
        cxml.append("        </ContactInfo>\n");
        cxml.append("      </Supplier>\n");
        /**
         *** DISTRIBUTION SECTION ***
         */
        VendorAddress vendorAddress = SpringContext.getBean(VendorService.class).getVendorDefaultAddress(purchaseOrder.getVendorDetail().getVendorAddresses(), VendorConstants.AddressTypes.PURCHASE_ORDER, purchaseOrder.getDeliveryCampusCode());
        cxml.append("      <OrderDistribution>\n");
        // first take fax from PO, if empty then get fax number for PO default vendor address
        String vendorFaxNumber = purchaseOrder.getVendorFaxNumber();
        if (StringUtils.isBlank(vendorFaxNumber) && vendorAddress != null) {
            vendorFaxNumber = vendorAddress.getVendorFaxNumber();
        }
        // KFSPTS-1458 -- code existing prior to this change is commented out below.
        // KFSPTS-1458 -- new code should model how fax number is determined:
        // KFSPTS-1458 -- first take vendor email address from PO, if empty then get vendor email address from PO default vendor address
        // String emailAddress = "";
        // if (vendorAddress != null) {
        // emailAddress = vendorAddress.getVendorAddressEmailAddress();
        // }
        String emailAddress = purchaseOrder.getVendorEmailAddress();
        if (StringUtils.isBlank(emailAddress) && vendorAddress != null) {
            emailAddress = vendorAddress.getVendorAddressEmailAddress();
        }
        // Distribution Method
        switch(disbMethod) {
            case FAX:
                // fax
                cxml.append("        <DistributionMethod type=\"fax\">\n");
                cxml.append("          <Fax>\n");
                cxml.append("            <TelephoneNumber>\n");
                cxml.append("              <CountryCode>1</CountryCode>\n");
                cxml.append("              <AreaCode>").append(vendorFaxNumber.substring(0, 3)).append("</AreaCode>\n");
                cxml.append("              <Number>").append(vendorFaxNumber.substring(3)).append("</Number>\n");
                cxml.append("            </TelephoneNumber>\n");
                cxml.append("          </Fax>\n");
                break;
            case EMAIL:
                // email
                cxml.append("        <DistributionMethod type=\"html_email_attachments\">\n");
                cxml.append("          <Email><![CDATA[").append(emailAddress).append("]]></Email>\n");
                break;
            case CONVERSION:
                // conversion
                // KFSPTS-1458 : removed logic that was temp mopot for conversion.
                // /**
                // * Temporary method of distribution for PO conversion effort.  Will be short-lived, so we
                // * didn't bother setting up constants and parameters to store the email, but rather hard-
                // * coded the email address.
                // */
                // cxml.append("        <DistributionMethod type=\"html_email_attachments\">\n");
                // cxml.append("          <Email><![CDATA[").append("db18@cornell.edu").append("]]></Email>\n");
                // 
                // KFSPTS-1458: replaced temp logic with distribution method type of manual
                cxml.append("        <DistributionMethod type=\"manual\">\n");
                break;
            default:
                // manual
                // KFSPTS-1458 removed: cxml.append("        <DistributionMethod type=\"manual\">\n");
                // 
                // KFSPTS-1458: US Mail = manual should be sent to EGA email address
                // KFSPTS-1458: Replaced hard coded email address with parameterized email address.
                cxml.append("        <DistributionMethod type=\"html_email_attachments\">\n");
                cxml.append("          <Email><![CDATA[").append(this.getMethodOfPOTransmissionConversionEmail()).append("]]></Email>\n");
                break;
        }
        cxml.append("        </DistributionMethod>\n");
        cxml.append("      </OrderDistribution>\n");
    }
    /**
     *** BILL TO SECTION ****
     */
    cxml.append("      <BillTo>\n");
    cxml.append("        <Address>\n");
    cxml.append("          <TemplateName>Bill To</TemplateName>\n");
    cxml.append("          <AddressCode>").append(purchaseOrder.getDeliveryCampusCode()).append("</AddressCode>\n");
    // Contact - There can be 0-5 Contact elements. The label attribute is optional.
    // TODO : this may cause sequence error from SQ if email is empty, then it will send sequence of 1,2,3,5.
    // in CU 3.0.1, it only sends billingphone#
    // cxml.append("          <Contact label=\"FirstName\" linenumber=\"1\"><![CDATA[Accounts]]></Contact>\n");
    // cxml.append("          <Contact label=\"LastName\" linenumber=\"2\"><![CDATA[Payable]]></Contact>\n");
    // cxml.append("          <Contact label=\"Company\" linenumber=\"3\"><![CDATA[").append(purchaseOrder.getBillingName().trim()).append("]]></Contact>\n");
    // // since email address is not required, we need to check whether its empty; if yes, don't add it
    // if (!StringUtils.isEmpty(purchaseOrder.getBillingEmailAddress())) {
    // cxml.append("          <Contact label=\"Email\" linenumber=\"4\"><![CDATA[").append(purchaseOrder.getBillingEmailAddress().trim()).append("]]></Contact>\n");
    // }
    // since phone number is not required, we need to check whether its empty; if yes, don't add it
    // if (!StringUtils.isEmpty(purchaseOrder.getBillingPhoneNumber())) {
    // cxml.append("          <Contact label=\"Phone\" linenumber=\"5\"><![CDATA[").append(purchaseOrder.getBillingPhoneNumber().trim()).append("]]></Contact>\n");
    cxml.append("          <Contact label=\"Phone\" linenumber=\"1\"><![CDATA[").append(purchaseOrder.getBillingPhoneNumber().trim()).append("]]></Contact>\n");
    // }
    // There must be 1-5 AddressLine elements. The label attribute is optional.
    cxml.append("          <AddressLine label=\"Street1\" linenumber=\"1\"><![CDATA[").append(purchaseOrder.getBillingLine1Address()).append("]]></AddressLine>\n");
    cxml.append("          <AddressLine label=\"Street2\" linenumber=\"2\"><![CDATA[").append(purchaseOrder.getBillingLine2Address()).append("]]></AddressLine>\n");
    // Required.
    cxml.append("          <City><![CDATA[").append(purchaseOrder.getBillingCityName()).append("]]></City>\n");
    cxml.append("          <State>").append(purchaseOrder.getBillingStateCode()).append("</State>\n");
    // Required.
    cxml.append("          <PostalCode>").append(purchaseOrder.getBillingPostalCode()).append("</PostalCode>\n");
    cxml.append("          <Country isocountrycode=\"").append(purchaseOrder.getBillingCountryCode()).append("\">").append(purchaseOrder.getBillingCountryCode()).append("</Country>\n");
    cxml.append("        </Address>\n");
    cxml.append("      </BillTo>\n");
    /**
     *** SHIP TO SECTION ****
     */
    cxml.append("      <ShipTo>\n");
    cxml.append("        <Address>\n");
    cxml.append("          <TemplateName>Ship To</TemplateName>\n");
    // AddressCode. A code to identify the address, that is sent to the supplier.
    cxml.append("          <AddressCode>").append(purchaseOrder.getDeliveryBuildingCode()).append("</AddressCode>\n");
    cxml.append("          <Contact label=\"Name\" linenumber=\"1\"><![CDATA[").append(purchaseOrder.getDeliveryToName().trim()).append("]]></Contact>\n");
    cxml.append("          <Contact label=\"PurchasingEmail\" linenumber=\"2\"><![CDATA[").append(contractManagerEmail).append("]]></Contact>\n");
    if (ObjectUtils.isNotNull(purchaseOrder.getInstitutionContactEmailAddress())) {
        cxml.append("          <Contact label=\"ContactEmail\" linenumber=\"3\"><![CDATA[").append(purchaseOrder.getInstitutionContactEmailAddress()).append("]]></Contact>\n");
    } else {
        cxml.append("          <Contact label=\"ContactEmail\" linenumber=\"3\"><![CDATA[").append(purchaseOrder.getRequestorPersonEmailAddress()).append("]]></Contact>\n");
    }
    if (ObjectUtils.isNotNull(purchaseOrder.getInstitutionContactPhoneNumber())) {
        cxml.append("          <Contact label=\"Phone\" linenumber=\"4\"><![CDATA[").append(purchaseOrder.getInstitutionContactPhoneNumber().trim()).append("]]></Contact>\n");
    } else {
        cxml.append("          <Contact label=\"Phone\" linenumber=\"4\"><![CDATA[").append(purchaseOrder.getRequestorPersonPhoneNumber()).append("]]></Contact>\n");
    }
    // check indicator to decide if receiving or delivery address should be sent to the vendor
    if (purchaseOrder.getAddressToVendorIndicator()) {
        // use receiving address
        cxml.append("          <AddressLine label=\"Street1\" linenumber=\"1\"><![CDATA[").append(purchaseOrder.getReceivingName().trim()).append("]]></AddressLine>\n");
        cxml.append("          <AddressLine label=\"Street2\" linenumber=\"2\"><![CDATA[").append(purchaseOrder.getReceivingLine1Address().trim()).append("]]></AddressLine>\n");
        if (ObjectUtils.isNull(purchaseOrder.getReceivingLine2Address())) {
            cxml.append("          <AddressLine label=\"Street3\" linenumber=\"3\"><![CDATA[").append(" ").append("]]></AddressLine>\n");
        } else {
            cxml.append("          <AddressLine label=\"Street3\" linenumber=\"3\"><![CDATA[").append(purchaseOrder.getReceivingLine2Address()).append("]]></AddressLine>\n");
        }
        cxml.append("          <City><![CDATA[").append(purchaseOrder.getReceivingCityName().trim()).append("]]></City>\n");
        cxml.append("          <State>").append(purchaseOrder.getReceivingStateCode()).append("</State>\n");
        cxml.append("          <PostalCode>").append(purchaseOrder.getReceivingPostalCode()).append("</PostalCode>\n");
        cxml.append("          <Country isocountrycode=\"").append(purchaseOrder.getReceivingCountryCode()).append("\">").append(purchaseOrder.getReceivingCountryCode()).append("</Country>\n");
    } else {
        // use final delivery address
        /* replaced this with getBuildingLine so institutions can customize what info they need on this line
            if (StringUtils.isNotEmpty(purchaseOrder.getDeliveryBuildingName())) {
                cxml.append("          <Contact label=\"Building\" linenumber=\"5\"><![CDATA[").append(purchaseOrder.getDeliveryBuildingName()).append(" (").append(purchaseOrder.getDeliveryBuildingCode()).append(")]]></Contact>\n");
            }
            */
        cxml.append(getBuildingLine(purchaseOrder));
        cxml.append("          <AddressLine label=\"Street1\" linenumber=\"1\"><![CDATA[").append(purchaseOrder.getDeliveryBuildingLine1Address().trim()).append("]]></AddressLine>\n");
        cxml.append("          <AddressLine label=\"Street2\" linenumber=\"2\"><![CDATA[Room #").append(purchaseOrder.getDeliveryBuildingRoomNumber().trim()).append("]]></AddressLine>\n");
        cxml.append("          <AddressLine label=\"Company\" linenumber=\"4\"><![CDATA[").append(purchaseOrder.getBillingName().trim()).append("]]></AddressLine>\n");
        if (ObjectUtils.isNull(purchaseOrder.getDeliveryBuildingLine2Address())) {
            cxml.append("          <AddressLine label=\"Street3\" linenumber=\"3\"><![CDATA[").append(" ").append("]]></AddressLine>\n");
        } else {
            cxml.append("          <AddressLine label=\"Street3\" linenumber=\"3\"><![CDATA[").append(purchaseOrder.getDeliveryBuildingLine2Address()).append("]]></AddressLine>\n");
        }
        cxml.append("          <City><![CDATA[").append(purchaseOrder.getDeliveryCityName().trim()).append("]]></City>\n");
        cxml.append("          <State>").append(purchaseOrder.getDeliveryStateCode()).append("</State>\n");
        cxml.append("          <PostalCode>").append(purchaseOrder.getDeliveryPostalCode()).append("</PostalCode>\n");
        cxml.append("          <Country isocountrycode=\"").append(purchaseOrder.getDeliveryCountryCode()).append("\">").append(purchaseOrder.getDeliveryCountryCode()).append("</Country>\n");
    }
    cxml.append("        </Address>\n");
    cxml.append("      </ShipTo>\n");
    // KFSUPGRADE-408
    // Get payment terms for the PO
    String payTermCode = purchaseOrder.getVendorPaymentTermsCode();
    if (StringUtils.isBlank(payTermCode)) {
        // Retrieve the vendor and pull the payment terms from the vendor record if the PO terms are null
        VendorDetail poVendor = SpringContext.getBean(VendorService.class).getByVendorNumber(purchaseOrder.getVendorNumber());
        payTermCode = poVendor.getVendorPaymentTermsCode();
    }
    PaymentTermType payTerm = SpringContext.getBean(BusinessObjectService.class).findBySinglePrimaryKey(PaymentTermType.class, payTermCode);
    cxml.append("      <PaymentInfo>\n");
    cxml.append("        <Terms>\n");
    if (payTerm.getVendorPaymentTermsPercent().doubleValue() > 0.0) {
        cxml.append("          <Discount>").append(payTerm.getVendorPaymentTermsPercent()).append("</Discount>\n");
    }
    if (payTerm.getVendorDiscountDueNumber().doubleValue() > 0.0) {
        cxml.append("          <Days>").append(payTerm.getVendorDiscountDueNumber()).append("</Days>\n");
    }
    cxml.append("          <Net>").append(payTerm.getVendorNetDueNumber()).append("</Net>\n");
    cxml.append("        </Terms>\n");
    cxml.append("      </PaymentInfo>\n");
    // List<Note> notesToSendToVendor = getNotesToSendToVendor(purchaseOrder);
    if (!notesToSendToVendor.isEmpty()) {
        String allNotes = "";
        String allNotesNoAttach = "";
        String vendorNoteText = purchaseOrder.getVendorNoteText();
        if (ObjectUtils.isNotNull(vendorNoteText)) {
            allNotesNoAttach = vendorNoteText;
        }
        cxml.append("      <ExternalInfo>\n");
        for (int i = 0; i < notesToSendToVendor.size(); i++) {
            Note note = notesToSendToVendor.get(i);
            Attachment attachment = SpringContext.getBean(AttachmentService.class).getAttachmentByNoteId(note.getNoteIdentifier());
            if (ObjectUtils.isNotNull(attachment)) {
                allNotes = allNotes + "\n(" + (i + 1) + ") " + note.getNoteText() + "  ";
            } else {
                allNotesNoAttach = allNotesNoAttach + "          " + note.getNoteText() + "          ";
            }
        }
        cxml.append("          <Note><![CDATA[" + allNotesNoAttach + "          " + allNotes + "]]></Note>\n");
        cxml.append("        <Attachments xmlns:xop = \"http://www.w3.org/2004/08/xop/include/\" >\n");
        for (int i = 0; i < notesToSendToVendor.size(); i++) {
            Note note = notesToSendToVendor.get(i);
            Attachment attachment = SpringContext.getBean(AttachmentService.class).getAttachmentByNoteId(note.getNoteIdentifier());
            if (ObjectUtils.isNotNull(attachment)) {
                cxml.append("          <Attachment id=\"" + attachment.getAttachmentIdentifier() + "\" type=\"file\">\n");
                cxml.append("            <AttachmentName><![CDATA[" + attachment.getAttachmentFileName() + "]]></AttachmentName>\n");
                cxml.append("            <AttachmentURL>http://usertest.sciquest.com/apps/Router/ReqAttachmentDownload?AttachmentId=" + attachment.getAttachmentIdentifier() + "&amp;DocId=" + purchaseOrder.getPurapDocumentIdentifier() + "&amp;OrgName=SQSupportTest&amp;AuthMethod=Local</AttachmentURL>\n");
                cxml.append("            <AttachmentSize>" + attachment.getAttachmentFileSize() / 1024 + "</AttachmentSize>\n");
                cxml.append("            <xop:Include href=\"cid:" + attachment.getAttachmentIdentifier() + "@sciquest.com\" />\n");
                cxml.append("          </Attachment>\n");
            }
        }
        cxml.append("        </Attachments>\n");
        cxml.append("      </ExternalInfo>\n");
    } else {
        String vendorNoteText = purchaseOrder.getVendorNoteText();
        if (ObjectUtils.isNotNull(vendorNoteText)) {
            cxml.append("      <ExternalInfo>\n");
            cxml.append("        <Note><![CDATA[").append(vendorNoteText).append("]]></Note>\n");
            cxml.append("      </ExternalInfo>\n");
        }
    }
    /*KFSPTS-794: End new code: Define the attachments */
    cxml.append("      <CustomFieldValueSet label=\"Contact Name\" name=\"InitiatorName\">\n");
    cxml.append("        <CustomFieldValue>\n");
    if (ObjectUtils.isNotNull(purchaseOrder.getInstitutionContactName())) {
        cxml.append("          <Value><![CDATA[").append(purchaseOrder.getInstitutionContactName()).append("]]></Value>\n");
    } else {
        cxml.append("          <Value><![CDATA[").append(purchaseOrder.getRequestorPersonName()).append("]]></Value>\n");
    }
    cxml.append("         </CustomFieldValue>\n");
    cxml.append("      </CustomFieldValueSet>\n");
    cxml.append("      <CustomFieldValueSet label=\"Supplier Address\" name=\"SupplierAddress1\">\n");
    cxml.append("        <CustomFieldValue>\n");
    cxml.append("          <Value><![CDATA[").append(purchaseOrder.getVendorLine1Address()).append("]]></Value>\n");
    cxml.append("         </CustomFieldValue>\n");
    cxml.append("      </CustomFieldValueSet>\n");
    cxml.append("      <CustomFieldValueSet label=\"Supplier City State Zip\" name=\"SupplierCityStateZip\">\n");
    cxml.append("        <CustomFieldValue>\n");
    cxml.append("          <Value><![CDATA[").append(purchaseOrder.getVendorCityName()).append(", ").append(purchaseOrder.getVendorStateCode()).append(" ").append(purchaseOrder.getVendorPostalCode()).append("]]></Value>\n");
    cxml.append("         </CustomFieldValue>\n");
    cxml.append("      </CustomFieldValueSet>\n");
    String deliveryInstructionText = purchaseOrder.getDeliveryInstructionText();
    if (ObjectUtils.isNotNull(deliveryInstructionText)) {
        cxml.append("      <CustomFieldValueSet label=\"Delivery Instructions\" name=\"Delivery Instructions\">\n");
        cxml.append("        <CustomFieldValue>\n");
        cxml.append("          <Value><![CDATA[").append(deliveryInstructionText).append("]]></Value>\n");
        cxml.append("         </CustomFieldValue>\n");
        cxml.append("      </CustomFieldValueSet>\n");
    }
    // KFSUPGRADE-583
    if (purchaseOrder.getDocumentFundingSourceCode().equalsIgnoreCase(CUPurapConstants.PurapFundingSources.FEDERAL_FUNDING_SOURCE)) {
        cxml.append("      <CustomFieldValueSet label=\"Funding\" name=\"Funding\">\n");
        cxml.append("        <CustomFieldValue>\n");
        cxml.append("          <Value><![CDATA[" + FEDERAL_FUNDING_TEXT + "]]></Value>\n");
        cxml.append("         </CustomFieldValue>\n");
        cxml.append("      </CustomFieldValueSet>\n");
    }
    // do we have to check if field is empty or null ?
    if (includeNewFields) {
        cxml.append(addCustomFieldValueSet("DeliveryPhone", "Delivery Phone", purchaseOrder.getDeliveryToPhoneNumber()));
        cxml.append(addCustomFieldValueSet("DeliveryEmail", "Delivery Email", purchaseOrder.getDeliveryToEmailAddress()));
        cxml.append(addCustomFieldValueSet("ShipPayTerms", "Ship Pay Termse", getVendorShipPayTerms(purchaseOrder)));
        cxml.append(addCustomFieldValueSet("SupplierAddress2", "Supplier Address 2", purchaseOrder.getVendorLine2Address()));
        cxml.append(addCustomFieldValueSet("SupplierCountry", "Supplier Country", getVendorCountry(purchaseOrder)));
    }
    // end KFSUPGRADE-400 KFSPTS-427 fields
    cxml.append("    </POHeader>\n");
    /**
     *** Items Section ****
     */
    List detailList = purchaseOrder.getItems();
    for (Iterator iter = detailList.iterator(); iter.hasNext(); ) {
        PurchaseOrderItem poi = (PurchaseOrderItem) iter.next();
        if ((ObjectUtils.isNotNull(poi.getItemType())) && poi.getItemType().isLineItemIndicator()) {
            // KFSUPGRADE-406
            String uom = poi.getItemUnitOfMeasureCode();
            KualiDecimal quantity = poi.getItemQuantity();
            // Pass in value of 1 for quantity if no quantity provided. This helps handle non-quantity orders in SciQuest. KFSPTS-792
            if (quantity == null || quantity.isZero()) {
                quantity = new KualiDecimal(1);
                uom = NON_QUANTITY_UOM;
            }
            // ==== CU Customization: Use quantity of zero for inactive PO items, allowing SciQuest to cancel them properly. ====
            if (!poi.isItemActiveIndicator()) {
                quantity = new KualiDecimal(0);
            }
            // ==== End CU Customization ====
            cxml.append("    <POLine linenumber=\"").append(poi.getItemLineNumber()).append("\">\n");
            cxml.append("      <Item>\n");
            // CatalogNumber - This is a string that the supplier uses to identify the item (i.e., SKU). Optional.
            cxml.append("        <CatalogNumber><![CDATA[").append(poi.getItemCatalogNumber()).append("]]></CatalogNumber>\n");
            if (ObjectUtils.isNotNull(poi.getItemAuxiliaryPartIdentifier())) {
                cxml.append("        <AuxiliaryCatalogNumber><![CDATA[").append(poi.getItemAuxiliaryPartIdentifier()).append("]]></AuxiliaryCatalogNumber>\n");
            }
            // Required.
            cxml.append("        <Description><![CDATA[").append(poi.getItemDescription()).append("]]></Description>\n");
            cxml.append("        <ProductUnitOfMeasure type=\"supplier\"><Measurement><MeasurementValue><![CDATA[").append(uom).append("]]></MeasurementValue></Measurement></ProductUnitOfMeasure>\n");
            cxml.append("        <ProductUnitOfMeasure type=\"system\"><Measurement><MeasurementValue><![CDATA[").append(uom).append("]]></MeasurementValue></Measurement></ProductUnitOfMeasure>\n");
            // ProductReferenceNumber - Unique id for hosted products in SelectSite
            if (poi.getExternalOrganizationB2bProductTypeName().equals("Punchout")) {
                cxml.append("        <ProductReferenceNumber>null</ProductReferenceNumber>\n");
            } else {
                cxml.append("        <ProductReferenceNumber>").append(poi.getExternalOrganizationB2bProductReferenceNumber()).append("</ProductReferenceNumber>\n");
            }
            // ProductType - Describes the type of the product or service. Valid values: Catalog, Form, Punchout. Mandatory.
            if (PurapConstants.RequisitionSources.B2B.equals(purchaseOrder.getRequisitionSourceCode())) {
                cxml.append("        <ProductType>").append(poi.getExternalOrganizationB2bProductTypeName()).append("</ProductType>\n");
            } else {
                cxml.append("        <ProductType>").append("Form").append("</ProductType>\n");
            }
            cxml.append("      </Item>\n");
            cxml.append("      <Quantity>").append(quantity).append("</Quantity>\n");
            // LineCharges - All the monetary charges for this line, including the price, tax, shipping, and handling.
            // Required.
            cxml.append("      <LineCharges>\n");
            cxml.append("        <UnitPrice>\n");
            cxml.append("          <Money currency=\"USD\">").append(poi.getItemUnitPrice()).append("</Money>\n");
            cxml.append("        </UnitPrice>\n");
            cxml.append("      </LineCharges>\n");
            cxml.append("    </POLine>\n");
        }
    }
    cxml.append("  </PurchaseOrder>\n");
    cxml.append("</PurchaseOrderMessage>\r\n");
    LOG.debug("getCxml(): cXML for po number " + purchaseOrder.getPurapDocumentIdentifier() + ":\n" + cxml.toString());
    // *****************************************************************************************************************
    if (!notesToSendToVendor.isEmpty()) {
        // cxml.append("\r\n");
        for (int i = 0; i < notesToSendToVendor.size(); i++) {
            Note note = notesToSendToVendor.get(i);
            try {
                Attachment poAttachment = SpringContext.getBean(AttachmentService.class).getAttachmentByNoteId(note.getNoteIdentifier());
                if (ObjectUtils.isNotNull(poAttachment)) {
                    // cxml.append("\r\n"); // blank line.  This extra blank line cause first word doc has format issue
                    cxml.append("--" + CUPurapConstants.MIME_BOUNDARY_FOR_ATTACHMENTS + "\r\n");
                    cxml.append("Content-Type: application/octet-stream\r\n");
                    // cxml.append("Content-Type: application/pdf\r\n");
                    cxml.append("Content-Transfer-Encoding: binary\r\n");
                    cxml.append("Content-ID: <" + poAttachment.getAttachmentIdentifier() + "@sciquest.com>\r\n");
                    cxml.append("Content-Disposition: attachment; filename=\"" + poAttachment.getAttachmentFileName() + "\"" + "\r\n\r\n");
                    InputStream attInputStream = poAttachment.getAttachmentContents();
                    ByteArrayOutputStream buffer = new ByteArrayOutputStream();
                    int c;
                    while ((c = attInputStream.read()) != -1) buffer.write(c);
                    String binaryStream = new String(buffer.toByteArray(), "ISO-8859-1");
                    cxml.append(binaryStream + "\r\n");
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        // signals this is the last MIME boundary
        cxml.append("--" + CUPurapConstants.MIME_BOUNDARY_FOR_ATTACHMENTS + "--\r\n");
    } else {
    // cxml.append("\n\n--" + CUPurapConstants.MIME_BOUNDARY_FOR_ATTACHMENTS + "--\n");
    }
    return cxml.toString();
}
Also used : WorkflowDocument(org.kuali.rice.kew.api.WorkflowDocument) InputStream(java.io.InputStream) Attachment(org.kuali.kfs.krad.bo.Attachment) ByteArrayOutputStream(java.io.ByteArrayOutputStream) IOException(java.io.IOException) PaymentTermType(org.kuali.kfs.vnd.businessobject.PaymentTermType) Date(java.util.Date) BusinessObjectService(org.kuali.kfs.krad.service.BusinessObjectService) VendorService(org.kuali.kfs.vnd.document.service.VendorService) VendorDetail(org.kuali.kfs.vnd.businessobject.VendorDetail) PurchaseOrderItem(org.kuali.kfs.module.purap.businessobject.PurchaseOrderItem) Note(org.kuali.kfs.krad.bo.Note) Iterator(java.util.Iterator) KualiDecimal(org.kuali.rice.core.api.util.type.KualiDecimal) ArrayList(java.util.ArrayList) List(java.util.List) DateTimeService(org.kuali.rice.core.api.datetime.DateTimeService) SimpleDateFormat(java.text.SimpleDateFormat) VendorAddress(org.kuali.kfs.vnd.businessobject.VendorAddress) AttachmentService(org.kuali.kfs.krad.service.AttachmentService)

Example 7 with VendorDetail

use of org.kuali.kfs.vnd.businessobject.VendorDetail in project cu-kfs by CU-CommunityApps.

the class CuCreditMemoServiceImpl method populateDocumentAfterInit.

/**
 * @see org.kuali.kfs.module.purap.document.service.CreditMemoCreateService#populateDocumentAfterInit(org.kuali.kfs.module.purap.document.CreditMemoDocument)
 */
@Override
public void populateDocumentAfterInit(VendorCreditMemoDocument cmDocument) {
    // make a call to search for expired/closed accounts
    HashMap<String, ExpiredOrClosedAccountEntry> expiredOrClosedAccountList = accountsPayableService.getExpiredOrClosedAccountList(cmDocument);
    if (cmDocument.isSourceDocumentPaymentRequest()) {
        populateDocumentFromPreq(cmDocument, expiredOrClosedAccountList);
    } else if (cmDocument.isSourceDocumentPurchaseOrder()) {
        populateDocumentFromPO(cmDocument, expiredOrClosedAccountList);
    } else {
        populateDocumentFromVendor(cmDocument);
    }
    // KFSPTS-1891
    VendorDetail vendorDetail = vendorService.getVendorDetail(cmDocument.getVendorHeaderGeneratedIdentifier(), cmDocument.getVendorDetailAssignedIdentifier());
    if (ObjectUtils.isNotNull(vendorDetail) && ObjectUtils.isNotNull(vendorDetail.getExtension())) {
        if (vendorDetail.getExtension() instanceof VendorDetailExtension && StringUtils.isNotBlank(((VendorDetailExtension) vendorDetail.getExtension()).getDefaultB2BPaymentMethodCode())) {
            ((CuVendorCreditMemoDocument) cmDocument).setPaymentMethodCode(((VendorDetailExtension) vendorDetail.getExtension()).getDefaultB2BPaymentMethodCode());
        }
    }
    populateDocumentDescription(cmDocument);
    // write a note for expired/closed accounts if any exist and add a message stating there were expired/closed accounts at the
    // top of the document
    accountsPayableService.generateExpiredOrClosedAccountNote(cmDocument, expiredOrClosedAccountList);
    // set indicator so a message is displayed for accounts that were replaced due to expired/closed status
    if (ObjectUtils.isNotNull(expiredOrClosedAccountList) && !expiredOrClosedAccountList.isEmpty()) {
        cmDocument.setContinuationAccountIndicator(true);
    }
}
Also used : VendorDetail(org.kuali.kfs.vnd.businessobject.VendorDetail) CuVendorCreditMemoDocument(edu.cornell.kfs.module.purap.document.CuVendorCreditMemoDocument) VendorDetailExtension(edu.cornell.kfs.vnd.businessobject.VendorDetailExtension) ExpiredOrClosedAccountEntry(org.kuali.kfs.module.purap.util.ExpiredOrClosedAccountEntry)

Example 8 with VendorDetail

use of org.kuali.kfs.vnd.businessobject.VendorDetail 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.
 */
protected String checkAutomaticPurchaseOrderRules(RequisitionDocument requisition) {
    String requisitionSource = requisition.getRequisitionSourceCode();
    KualiDecimal reqTotal = requisition.getTotalDollarAmount();
    KualiDecimal apoLimit = purapService.getApoLimit(requisition.getVendorContractGeneratedIdentifier(), requisition.getChartOfAccountsCode(), requisition.getOrganizationCode());
    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 = getPersonService().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())) {
            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 "Requistion 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 = purchaseOrderRequiresCommodityCode.equals("Y");
    for (Iterator iter = requisition.getItems().iterator(); iter.hasNext(); ) {
        RequisitionItem item = (RequisitionItem) iter.next();
        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()) {
            String commodityCodesReason = "";
            List<VendorCommodityCode> vendorCommodityCodes = commodityCodeRequired ? requisition.getVendorDetail().getVendorCommodities() : null;
            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.";
            }
        }
    }
    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) RequisitionItem(org.kuali.kfs.module.purap.businessobject.RequisitionItem) VendorContract(org.kuali.kfs.vnd.businessobject.VendorContract) Iterator(java.util.Iterator) KualiDecimal(org.kuali.rice.core.api.util.type.KualiDecimal) Person(org.kuali.rice.kim.api.identity.Person) VendorCommodityCode(org.kuali.kfs.vnd.businessobject.VendorCommodityCode)

Example 9 with VendorDetail

use of org.kuali.kfs.vnd.businessobject.VendorDetail in project cu-kfs by CU-CommunityApps.

the class CuElectronicInvoiceHelperServiceImpl method validateVendorDetails.

protected void validateVendorDetails(ElectronicInvoiceRejectDocument rejectDocument) {
    boolean vendorFound = false;
    if (StringUtils.isNotEmpty(rejectDocument.getVendorDunsNumber())) {
        // KFSUPGRADE-479 : retrieve vendor from po vendor.
        PurchaseOrderDocument po = rejectDocument.getCurrentPurchaseOrderDocument();
        VendorDetail vendorDetail = null;
        if (po != null) {
            vendorDetail = vendorService.getVendorDetail(po.getVendorHeaderGeneratedIdentifier(), po.getVendorDetailAssignedIdentifier());
            if (vendorDetail == null) {
                vendorDetail = vendorService.getVendorByDunsNumber(rejectDocument.getVendorDunsNumber());
            }
        } else {
            vendorDetail = vendorService.getVendorByDunsNumber(rejectDocument.getVendorDunsNumber());
        }
        if (vendorDetail != null) {
            LOG.info("Vendor [" + vendorDetail.getVendorNumber() + "] match found for the DUNS - " + rejectDocument.getVendorDunsNumber());
            rejectDocument.setVendorHeaderGeneratedIdentifier(vendorDetail.getVendorHeaderGeneratedIdentifier());
            rejectDocument.setVendorDetailAssignedIdentifier(vendorDetail.getVendorDetailAssignedIdentifier());
            rejectDocument.setVendorDetail(vendorDetail);
            vendorFound = true;
        }
    }
    if (!vendorFound) {
        rejectDocument.setVendorHeaderGeneratedIdentifier(null);
        rejectDocument.setVendorDetailAssignedIdentifier(null);
        rejectDocument.setVendorDetail(null);
    }
    String newDocumentDesc = generateRejectDocumentDescription(rejectDocument);
    rejectDocument.getDocumentHeader().setDocumentDescription(newDocumentDesc);
}
Also used : VendorDetail(org.kuali.kfs.vnd.businessobject.VendorDetail) PurchaseOrderDocument(org.kuali.kfs.module.purap.document.PurchaseOrderDocument)

Example 10 with VendorDetail

use of org.kuali.kfs.vnd.businessobject.VendorDetail in project cu-kfs by CU-CommunityApps.

the class CuRequisitionAction method addItem.

@SuppressWarnings("unchecked")
@Override
public ActionForward addItem(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
    PurchasingFormBase purchasingForm = (PurchasingFormBase) form;
    PurApItem item = purchasingForm.getNewPurchasingItemLine();
    RequisitionItem requisitionItem = (RequisitionItem) item;
    PurchasingDocument purDocument = (PurchasingDocument) purchasingForm.getDocument();
    if (StringUtils.isBlank(requisitionItem.getPurchasingCommodityCode())) {
        boolean commCodeParam = SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(CuRequisitionDocument.class, PurapParameterConstants.ENABLE_DEFAULT_VENDOR_COMMODITY_CODE_IND);
        if (commCodeParam) {
            if (purchasingForm instanceof RequisitionForm) {
                CuRequisitionDocument reqs = (CuRequisitionDocument) purchasingForm.getDocument();
                VendorDetail dtl = reqs.getVendorDetail();
                if (ObjectUtils.isNotNull(dtl)) {
                    List<VendorCommodityCode> vcc = dtl.getVendorCommodities();
                    String defaultCommodityCode = "";
                    Iterator<VendorCommodityCode> it = vcc.iterator();
                    while (it.hasNext()) {
                        VendorCommodityCode commodity = it.next();
                        if (commodity.isCommodityDefaultIndicator()) {
                            defaultCommodityCode = commodity.getPurchasingCommodityCode();
                            requisitionItem.setPurchasingCommodityCode(defaultCommodityCode);
                        }
                    }
                }
            }
        }
    }
    boolean rulePassed = SpringContext.getBean(KualiRuleService.class).applyRules(new AttributedAddPurchasingAccountsPayableItemEvent("", purDocument, item));
    if (rulePassed) {
        item = purchasingForm.getAndResetNewPurchasingItemLine();
        purDocument.addItem(item);
        // KFSPTS-985
        if (((PurchasingDocumentBase) (purDocument)).isIntegratedWithFavoriteAccount()) {
            populatePrimaryFavoriteAccount(item.getSourceAccountingLines(), getAccountClassFromNewPurApAccountingLine(purchasingForm));
        }
    }
    return mapping.findForward(KFSConstants.MAPPING_BASIC);
}
Also used : CuRequisitionDocument(edu.cornell.kfs.module.purap.document.CuRequisitionDocument) PurApItem(org.kuali.kfs.module.purap.businessobject.PurApItem) ParameterService(org.kuali.kfs.coreservice.framework.parameter.ParameterService) PurchasingDocument(org.kuali.kfs.module.purap.document.PurchasingDocument) PurchasingDocumentBase(org.kuali.kfs.module.purap.document.PurchasingDocumentBase) VendorDetail(org.kuali.kfs.vnd.businessobject.VendorDetail) KualiRuleService(org.kuali.kfs.krad.service.KualiRuleService) RequisitionItem(org.kuali.kfs.module.purap.businessobject.RequisitionItem) PurchasingFormBase(org.kuali.kfs.module.purap.document.web.struts.PurchasingFormBase) AttributedAddPurchasingAccountsPayableItemEvent(org.kuali.kfs.module.purap.document.validation.event.AttributedAddPurchasingAccountsPayableItemEvent) RequisitionForm(org.kuali.kfs.module.purap.document.web.struts.RequisitionForm) VendorCommodityCode(org.kuali.kfs.vnd.businessobject.VendorCommodityCode)

Aggregations

VendorDetail (org.kuali.kfs.vnd.businessobject.VendorDetail)54 ArrayList (java.util.ArrayList)14 VendorAddress (org.kuali.kfs.vnd.businessobject.VendorAddress)12 Date (java.util.Date)10 List (java.util.List)10 VendorDetailExtension (edu.cornell.kfs.vnd.businessobject.VendorDetailExtension)9 HashMap (java.util.HashMap)9 BusinessObjectService (org.kuali.kfs.krad.service.BusinessObjectService)7 VendorHeader (org.kuali.kfs.vnd.businessobject.VendorHeader)7 VendorService (org.kuali.kfs.vnd.document.service.VendorService)7 Iterator (java.util.Iterator)6 CuDisbursementVoucherDocument (edu.cornell.kfs.fp.document.CuDisbursementVoucherDocument)5 MessageMap (org.kuali.kfs.krad.util.MessageMap)5 KualiDecimal (org.kuali.rice.core.api.util.type.KualiDecimal)5 Person (org.kuali.rice.kim.api.identity.Person)5 IOException (java.io.IOException)4 VendorCommodityCode (org.kuali.kfs.vnd.businessobject.VendorCommodityCode)4 VendorContract (org.kuali.kfs.vnd.businessobject.VendorContract)4 VendorSupplierDiversity (org.kuali.kfs.vnd.businessobject.VendorSupplierDiversity)4 FileNotFoundException (java.io.FileNotFoundException)3