You are on page 1of 18

/* Publish Master Agreement to SD/Vistex Script

* Portions (c) 2010 by SAP


* Portions (c) 2011 by Sparta Consulting and Dolby Laboratories. All Rights
Reserved.
*
* This script publishes the contract data to the ERP system using the standard SAP
integration. It
* also locks the line items so that changes cannot be republished (the invoices
have been sent!) but
* allows the user to add more line items if needed. NOTE if you make changes here,
also change the other
* toolbar script (there are two: publish and update)
*
* Change History:
* Version 1.0 - SAP Standard
* Version 1.1 - 14 July 2010 HJW Initial Release with locking of line items
* Version 1.2 - 28 July 2010 HJW Prevent publish unless contract is Fully Executed
and
* creation date of contract doc is at least one hour ago (to allow CLM to SFDC
integration
* to run prior to publishing to SD)
* Version 1.3 - 26 Aug 2010 HJW Restrict the ability to send to ERP only if the
customer has an account group code of 0001 (Sold To)
* Version 1.4 - 2 Sep 2010 HJW Reintroduced code to restrict this to BSG users only
* Version 1.5 - 8 Sep 2010 HJW made Payment Term required prior to publish to ERP
* Version 1.6 - 14 Sep 2010 HJW verify Primary Market has a valid nonnull value
prior to publish to ERP
* Version 1.7 - 6 Apr 2011 HJW: Introduced code to send email to the Contract Push
to SAP Notification group after push.
* Version 1.8 - 20 Sep 2011 OCE: Lock the list of DPNs as part of the DDoD project.

*/
private void sendAgreementPushedMessage(Object mailRecipient) {
/* This portion has parts (c) 2009 by Crafty Systems, Inc. All Rights Reserved.
Used by permission */
/* Alert Creator: Send an alert to the specified recipient */
/* Note this uses classes that are not yet exposed to the standard API. */
/* Code should be revisited after an upgrade. However, the classes and methods
referenced */
/* are core common classes and methods. If SAP does not do a complete architectural
change */
/* then these should all continue to work without modification */
/* Refer to standard SAP classes when bypassing API */
import com.frictionless.doccommon.masterdata.AlertHome;
import com.frictionless.common.platform.HomeLocator;
import com.frictionless.common.types.ResourceId;
import com.frictionless.doccommon.doc.AbsHighLevelBizDocHome;
import com.frictionless.common.platform.ClassInfo;
import com.frictionless.doc.BizDocBo;
import com.frictionless.doc.BizDocHome;
import com.frictionless.doc.AbsDocHome;
import com.frictionless.doc.ContainerDocHome;
import com.frictionless.doc.ContainerHome;
import com.frictionless.doc.AlertIfc;
import com.frictionless.common.i18n.ResourceReference;
import com.frictionless.comp.messaging.MailTypeEnum;
sapAlertHome = new AlertHome(session);
sapAlert = sapAlertHome.createTng();
/* This uses the "Master Agreement Penalty Not Met Alert" mail template (70), which
has placeholders for lots of info. */
/* build alert title for workbench, using the localized resource
dolby$alert.contractdocexecuted.subject,
/* injecting three parameters into workbench alert */
sapAlertTitle = new ResourceReference(new ResourceId("dolby",
"alert.contractdocexecuted.subject"));
sapAlertTitle.addModifier(kdocType);
sapAlertTitle.addModifier(doc.getDisplayName());
sapAlertTitle.addModifier(doc.getDocumentOwnerUserReference().getDisplayName());
mailType = new MailTypeEnum(70);
sapContractHome = HomeLocator.lookup(session,
ClassInfo.getClassIdFromName("contracts.Contract"));
targetDocument = sapContractHome.find(doc.getObjectReference());
classNameReference = new ResourceId("cterms", "cterm.contract");
vendorHome = IBeanHomeLocator.lookup(session,
com.frictionless.api.doccommon.masterdata.VendorIBeanHomeIfc.sHOME_NAME);
contactHome = IBeanHomeLocator.lookup(session,
com.frictionless.api.usermgmt.masterdata.ContactIBeanHomeIfc.sHOME_NAME);
/* build alert valid for seven days with a reference to this contract */
endDate = Calendar.getInstance();
endDate.setTime(new Date());
endDate.add(Calendar.DATE, 7);
/* initialize any mail template-specific tokens used in message text */
/* We have LI_NUMBER, LI_PARTNUMBER, THRESHOLD, MA_EXPIRATION_DAYS, LI_DESC,
PENALTY_AMOUNT */
/* plus the regular fields */
/* Need to share Agreement Status (constant), Effective date, agreement
type/name/id, country, licensee name */
/* tech contact names */
docCounterparty = vendorHome.findWhere("OBJECTID=" +
doc.getVendorRef().getObjectId()).get(0);
/*sapAlert.addMailProperty("EXPIRATION_DATE",
doc.getFieldMetadata("EFFECTIVE_DATE").get(doc).toString());*/
sapAlert.addMailProperty("DOCUMENT_TYPE", kdocType);
sapAlert.addMailProperty("LI_PARTNUMBER", docCounterparty.getDisplayName());

/* First build up the header information for the top of the email, stuff it into
AGREEMENT_TITLE variable */
messagebody = " Agreement Type: " + kdocType + " - " + doc.getDisplayName() +
(char)13 + (char)13;
messagebody = messagebody + " Agreement ID: " + doc.getDocumentId() + (char)13 +
(char)13;
messagebody = messagebody + " Agreement Status: Fully Executed" + (char)13 +
(char)13;
messagebody = messagebody + " Effective Date: " +
doc.getFieldMetadata("EFFECTIVE_DATE").get(doc).toString() + (char)13;
sapAlert.addMailProperty("AGREEMENT_TITLE", messagebody);
/* Build the first part of the text, into the AGREEMENT_DOCID variable */
messagebody = "";
if (hasValue(docCounterparty.getCountryObjRef())) {
messagebody = messagebody + " Country: " +
docCounterparty.getCountryObjRef().getDisplayName() + (char)13 + (char)13;
}
if (hasValue(doc.getExtensionField("OPPORTUNITY").get())) {
messagebody = messagebody + " SFDC: https://na5.salesforce.com/" +
doc.getExtensionField("OPPORTUNITY").get() + (char)13 + (char)13;
}
/* Account Owner line: */
if (hasValue(doc.getExtensionField("REQUESTOR").get())) {
messagebody = messagebody + " Account Owner: " +
doc.getExtensionField("REQUESTOR").get().getDisplayName();
} else {
messagebody = messagebody + " Account Owner: Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
/* IP Specialist line: */
messagebody = messagebody + " IP Specialist: " +
doc.getDocumentOwnerUserReference().getDisplayName() + (char)13 + (char)13;
sapAlert.addMailProperty("AGREEMENT_DOCID", messagebody);

/* Technical Contacts: There could be up to 12 imp and 12 sys contacts, in any


field. Need to cycle through each.
* Lets do IMP contacts first loaded into the THRESHOLD variable, followed by SYS
contacts loaded into the PENALTY_AMOUNT variable
*/

messagebody = "";
contact = contactHome.find(doc.getExtensionField("PRIMARY_TECH_IMP").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP Contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */

contact = contactHome.find(doc.getExtensionField("TECH_IMP_02").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP Contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_IMP_03").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP Contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_IMP_04").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP Contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_IMP_05").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP Contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_IMP_06").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP Contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_IMP_07").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_IMP_08").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_IMP_09").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_IMP_10").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_IMP_11").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_IMP_12").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech IMP contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
/* Store the IMP contacts into the THRESHOLD variable */
sapAlert.addMailProperty("THRESHOLD", messagebody);

/* Process SYS contacts into the %PENALTY_AMOUNT% Variable */


messagebody = "";
contact = contactHome.find(doc.getExtensionField("PRIMARY_TECH_SYS").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS Contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_SYS_02").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_SYS_03").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_SYS_04").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_SYS_05").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_SYS_06").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_SYS_07").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_SYS_08").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_SYS_09").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_SYS_10").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_SYS_11").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
contact = contactHome.find(doc.getExtensionField("TECH_SYS_12").get());
if (hasValue(contact)) {
messagebody = messagebody + "Tech SYS contact" + (char)13 +
contact.getDisplayName() + (char)13;
if (hasValue(contact.getAddress1())) {
messagebody = messagebody + contact.getAddress1() + (char)13;
if (hasValue(contact.getAddress2())) {
messagebody = messagebody + contact.getAddress2() + (char)13;
}
if (hasValue(contact.getCity())) {
messagebody = messagebody + contact.getCity() + ", ";
}
if (hasValue(contact.getState())) {
messagebody = messagebody + contact.getState() + " ";
}
if (hasValue(contact.getPostalCode())) {
messagebody = messagebody + contact.getPostalCode() + " ";
}
if (hasValue(contact.getCountryObjRef())) {
messagebody = messagebody + (char)13 + "Country Code: " +
contact.getCountryObjRef().getDisplayName();
}
} else {
messagebody = messagebody + "Address Unknown";
}
messagebody = messagebody + (char)13 + (char)13;
}
/* end of processing this contact */
if (messagebody.equals("")) {
messagebody = "Technical Contacts: There were none listed on the CLM Agreement.
Check SFDC for contact information." + (char)13 + (char)13;
}
sapAlert.addMailProperty("PENALTY_AMOUNT", messagebody);
/* END OF PROCESSING TECH SYS AND IMP CONTACTS */
messagebody = "";
/* Cycle through the line items, if any, and list the part numbers, putting them
into the AGREEMENT_DOCID variable */
lineitems = doc.getLineItems();
if (lineitems.size() > 0) {
liIter = lineitems.iterator();
while (liIter.hasNext()) {
li = liIter.next();
if (hasValue(li.getPartNumber())) {
messagebody = messagebody + li.getPartNumber() + ": " + li.getDocumentDescription()
+ (char)13;
}
}
} else {
messagebody = messagebody + " None Listed on Agreement." + (char)13 + (char)13;
}

sapAlert.addMailProperty("LI_DESC", messagebody);

/* build alert and email */


sapAlert.postEmail(true);
sapAlert.setModuleName(classNameReference);
sapAlert.setTargetDocument(targetDocument);
sapAlert.setTargetPageOfDocument(null);
sapAlert.setStart(TypeFactory.createSysDate(new Date()));
sapAlert.setEnd(TypeFactory.createSysDate(endDate.getTime()));
sapAlert.setMailType(mailType);
sapAlert.setMessage(sapAlertTitle);
sapAlert.setRecipient(mailRecipient);
logMsg.setLogMessage("**** Alert Creator: Sending message " + mailType + " to " +
mailRecipient.getDisplayName() + " " + sapAlertTitle.getValue(session) + "
referring to " + targetDocument.getDisplayName() + " ****");
Logger.debug(logMsg);
sapAlert.post();
logMsg.setLogMessage("**** Contract Pushed to SD Processor: Sent message and alert
to " + mailRecipient.getDisplayName() + " ****");
Logger.info(logMsg);
}

/* Main Code */
logMsg = Logger.createLogMessage(session);
logMsg.setLogMessage("**** Publish To ERP: Trying to Publish Contract " +
doc.getDisplayName());
Logger.debug(logMsg);

/* User must be a member of the BSG group, otherwise error */


user = session.getAccount().getAccountObjectReference();
groupIbeanHome = IBeanHomeLocator.lookup(session,
com.frictionless.api.usermgmt.masterdata.GroupIBeanHomeIfc.sHOME_NAME);
BSGGroup = groupIbeanHome.findGroup("Business Systems Group");
if (hasValue(BSGGroup)) {
if (!BSGGroup.findGroupMembers().contains(user)) {
throw new ApplicationException(session, "publishtoERP.BSGonly.errormessage");
}
}

/* Verify that there is a payment term on the agreement */


if (!hasValue(doc.getPayTermsRef())) {
throw doc.createApplicationException("PAYTERMS",
"dolby.publishToERP.PaytermsRequired.errortext");
}

/* Verify that there is a valid Market Segment on the agreement */


pm = doc.getExtensionField("PRIMARY_MARKET").get();
if (hasValue(pm)) {
if (!(pm.equals("Automotive") || pm.equals("Broadcast") || pm.equals("CE") ||
pm.equals("Gaming") || pm.equals("Mobile") || pm.equals("PC"))) {
throw doc.createApplicationException("PRIMARY_MARKET",
"dolby.publishToERP.PrimaryMarketValid.errortext");
}
} else {
throw doc.createApplicationException("PRIMARY_MARKET",
"dolby.publishToERP.PrimaryMarketValid.errortext");
}

/* Verify that the customer has Account Group 0001 */


vendorHome = IBeanHomeLocator.lookup(session,
com.frictionless.api.doccommon.masterdata.VendorIBeanHomeIfc.sHOME_NAME);
customerObjectId = doc.getVendorRef().getObjectId();
customer = vendorHome.findWhere("OBJECTID=" + customerObjectId.toString()).get(0);
sapAcctGroup = customer.getExtensionField("sapaccgrp").get();
if (hasValue(sapAcctGroup)) {
if (!sapAcctGroup.getDisplayName(session).equals("0001")) {
logMsg.setLogMessage("**** Publish To ERP: Customer is not a Sold To entity.
Throwing exception. ");
Logger.debug(logMsg);
throw new ApplicationException(session,
"dolby.publishToERP.mustBeSoldTo.errortext");
}
} else {
logMsg.setLogMessage("**** Publish To ERP: Could not find account group on Customer
(needs to be a Sold To entity). Throwing exception. ");
Logger.debug(logMsg);
throw new ApplicationException(session,
"dolby.publishToERP.mustBeSoldTo.errortext");
}
foundExecutedContractDoc = false;
/* initialize kdocType */
kdocType = "";
contractDocuments = doc.getContractDocuments();
contractDocIter = contractDocuments.iterator();
while (contractDocIter.hasNext()) {
contractDoc = contractDocIter.next();
currentPhase = contractDoc.getCurrentPhase().getDisplayName(session);
logMsg.setLogMessage("**** Publish To ERP: found contract doc with phase " +
currentPhase);
Logger.debug(logMsg);
if (hasValue(currentPhase) && currentPhase.equals("Fully Executed")) {
logMsg.setLogMessage("**** Publish To ERP: Found Fully Executed contract doc ");
Logger.debug(logMsg);
createDate = contractDoc.getCreatedAt();
kdocType = kdocType + contractDoc.getDocTypeReference().getDisplayName(session) + "
";
/* need to get kdocType for Change Form email, there might be multiple kdocs */
testDate = Calendar.getInstance();
testDate.setTime(new Date());
testDate.add(Calendar.HOUR, -1);
if (createDate.before(testDate.getTime())) {
logMsg.setLogMessage("**** Publish To ERP: Fully Executed contract doc is older
than one hour");
Logger.debug(logMsg);
foundExecutedContractDoc = true;
} else {
logMsg.setLogMessage("**** Publish To ERP: Fully Executed contract doc is not older
than one hour. Throwing exception. ");
Logger.debug(logMsg);
throw new ApplicationException(session,
"dolby.publishToERP.moreThanOneHour.errortext");
}
}
}
if (foundExecutedContractDoc) {

/* Original SAP Code (c) SAP */


import java.util.HashMap;
import com.frictionless.sap.integration.exporter.ExporterIfc;
import com.frictionless.sap.integration.exporter.SmartExporter;
HashMap map = new HashMap();
map.put("mode", "export");
ExporterIfc exporter = new SmartExporter(doc, map);
exporter.process();

/* Dolby-Specific Code: Lock all line items */


lockManager = new IapiDocumentLockManager();
lockManager.lockField(session, doc, "RATABLE_ROYLATIES");
lockManager.lockField(session, doc, "RATABLE_TERM");
lockManager.lockField(session, doc, "MA_LINEITEMS");
lineItemList = doc.getLineItems();
lineItemListIter = lineItemList.iterator();
while (lineItemListIter.hasNext()) {
lineItem = lineItemListIter.next();
lockManager.lockField(session, lineItem, "MATERIAL");
lockManager.lockField(session, lineItem, "QUANTITY");
lockManager.lockField(session, lineItem, "PRICE_UNIT");
lockManager.lockField(session, lineItem, "UNIT_PRICE");
lockManager.lockField(session, lineItem, "PRICE");
lockManager.lockField(session, lineItem, "VENDOR_PART_NUM");
lockManager.lockField(session, lineItem, "PROGRAM_LEAD");
lockManager.lockField(session, lineItem, "ORDER_LEAD");
lockManager.lockField(session, lineItem, "PRICE_COMPONENTS");
lockManager.lockField(session, lineItem, "LIST_UP");
lockManager.lockField(session, lineItem, "UP_BEGIN");
lockManager.lockField(session, lineItem, "UP_END");
priceComponents = lineItem.getCollnDeliveryTerms();
priceComponentsIter = priceComponents.iterator();
while (priceComponentsIter.hasNext()) {
priceComponent = priceComponentsIter.next();
lockManager.lockField(session, priceComponent, "UNIT_PRICE");
lockManager.lockField(session, priceComponent, "AWARDED");
}
logMsg.setLogMessage("**** Publish To ERP: Locking Line Item " +
lineItem.getDisplayName());
Logger.debug(logMsg);
}

/* Dolby-Specific Code: Lock DPNs */


DPNList = doc.getExtensionCollection("Table_DPN");
DPNListIter = DPNList.iterator();
while (DPNListIter.hasNext()) {
DPN = DPNListIter.next();
lockManager.lockField(session, DPN, "MATERIAL_ID");
lockManager.lockField(session, DPN, "DOLBY_DPN");
}
lockManager.lockField(session, doc, "Table_DPN");

/* Send a special message to the groups defined on the Agreement Type */


/* if the Send Execution Notices flag is set */
if (doc.getExtensionField("SENDEXECNOTICES").get()) {
parentDocType = doc.getDocTypeReference().getDisplayName();
agreementTypeHome = IBeanHomeLocator.lookup(session,
com.frictionless.api.contracts.ContractTypeIBeanHomeIfc.sHOME_NAME);
thisAgreementType = agreementTypeHome.findWhere("DISPLAY_NAME='" + parentDocType +
"'").get(0);
logMsg.setLogMessage("**** Publish To ERP: Send Execution Notices is set, Looking
at Agreement type " + thisAgreementType.getDisplayName() + " ****");
Logger.debug(logMsg);

executedNotifyColln = thisAgreementType.getExtensionCollection("PUSH_NOTIFY");
if (executedNotifyColln.size() > 0) {
groupHome = IBeanHomeLocator.lookup(session,
com.frictionless.api.usermgmt.masterdata.GroupIBeanHomeIfc.sHOME_NAME);
executedNotifyIter = executedNotifyColln.iterator();
while (executedNotifyIter.hasNext()) {
notificationGroup = executedNotifyIter.next();
group = notificationGroup.getExtensionField("GROUP").get();
logMsg.setLogMessage("**** Publish To ERP: Processing group " +
group.getDisplayName() + " ****");
Logger.debug(logMsg);
thisGroup = groupHome.findWhere("DISPLAY_NAME='" + group.getDisplayName() +
"'").get(0);
logMsg.setLogMessage("**** Publish To ERP: Processing thisGroup " +
thisGroup.getDisplayName() + " ****");
Logger.debug(logMsg);

groupMembers = thisGroup.findGroupMembers();
groupMemberIter = groupMembers.iterator();
while (groupMemberIter.hasNext()) {
member = groupMemberIter.next();
sendAgreementPushedMessage(member);
}
}
}
logMsg.setLogMessage("**** Publish To ERP: Finished processing all groups ****");
Logger.debug(logMsg);
}
} else {
logMsg.setLogMessage("**** Publish To ERP: Did not find a fully executed contract
doc. Throwing exception. ");
Logger.debug(logMsg);
throw new ApplicationException(session,
"dolby.publishToERP.needExecutedKDoc.errortext");
}

You might also like