This is an automated email from the ASF dual-hosted git repository.
nmalin pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git The following commit(s) were added to refs/heads/trunk by this push: new c8a838e Improved: Convert PartyServices.xml from mini lang to groovy (OFBIZ-11361) c8a838e is described below commit c8a838ef03aca43cddd827cf7139c94261898c80 Author: Nicolas Malin <[hidden email]> AuthorDate: Tue Mar 10 14:37:57 2020 +0100 Improved: Convert PartyServices.xml from mini lang to groovy (OFBIZ-11361) Thanks to Leila Mekika for providing the patch --- .../party/groovyScripts/party/PartyServices.groovy | 927 +++++++++++++++++ .../party/minilang/party/PartyServices.xml | 1074 -------------------- applications/party/servicedef/services.xml | 76 +- applications/party/servicedef/services_view.xml | 20 +- 4 files changed, 975 insertions(+), 1122 deletions(-) diff --git a/applications/party/groovyScripts/party/PartyServices.groovy b/applications/party/groovyScripts/party/PartyServices.groovy new file mode 100644 index 0000000..d1d9360 --- /dev/null +++ b/applications/party/groovyScripts/party/PartyServices.groovy @@ -0,0 +1,927 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ + +import org.apache.ofbiz.entity.condition.EntityCondition +import org.apache.ofbiz.entity.condition.EntityJoinOperator +import org.apache.ofbiz.entity.condition.EntityOperator +import org.apache.ofbiz.entity.util.EntityUtil +import org.apache.ofbiz.minilang.SimpleMapProcessor + +import java.sql.Timestamp +import org.apache.ofbiz.base.util.StringUtil +import org.apache.ofbiz.base.util.UtilDateTime +import org.apache.ofbiz.entity.GenericValue +import org.apache.ofbiz.service.ServiceUtil +import org.apache.ofbiz.party.party.PartyHelper + +/** + * Save Party Name Change + */ +def savePartyNameChange() { + // for special case in ecommerce, if no partyId is passed in use userLogin.partyId + if (!parameters.partyId) parameters.partyId = userLogin.partyId + + GenericValue partyNameHistory = makeValue('PartyNameHistory', parameters) + partyNameHistory.changeDate = UtilDateTime.nowTimestamp() + + if (parameters.groupName) { + GenericValue partyGroup = from('PartyGroup').where(parameters).queryOne() + if (partyGroup.groupName != parameters.groupName) { + partyNameHistory.setNonPKFields(partyGroup) + partyNameHistory.create() + } + } else if (parameters.firstName || + parameters.middleName || + parameters.lastName || + parameters.personalTitle || + parameters.suffix) { + GenericValue person = from('Person').where(parameters).queryOne() + if (person.firstName != parameters.firstName || + person.middleName != parameters.middleName || + person.lastName != parameters.lastName || + person.personalTitle != parameters.personalTitle || + person.suffix != parameters.suffix) { + partyNameHistory.setNonPKFields(person) + partyNameHistory.create() + } + } + return success() +} + +/** + * Get Party Name For Date + */ +def getPartyNameForDate() { + Map resultMap = success() + + List<GenericValue> partyNameHistoryList = from("PartyNameHistory") + .where("partyId", parameters.partyId) + .orderBy("-changeDate") + .queryList() + + GenericValue person = from('Person').where(parameters).queryOne() + GenericValue partyGroup = from('PartyGroup').where(parameters).queryOne() + + if (!parameters.compareDate) parameters.compareDate = UtilDateTime.nowTimestamp() + + // go through the list which is sorted by most recent first and find the oldest (last) one with the changeDate greater than the compareDate + GenericValue partyNameHistoryCurrent = null + for (GenericValue partyNameHistory : partyNameHistoryList) { + Timestamp changeDate = partyNameHistory.changeDate + if (changeDate.after(parameters.compareDate)) { + partyNameHistoryCurrent = partyNameHistory + } + } + + if (partyNameHistoryCurrent) { + // partyNameHistoryCurrent has a value + if (person) { + person = partyNameHistoryCurrent + } else if (partyGroup) { + partyGroup = partyNameHistoryCurrent + } + } + + if (person) { + resultMap.firstName = person.firstName + resultMap.lastName = person.lastName + if (person.middleName) resultMap.middleName = person.middleName + if (person.personalTitle) resultMap.personalTitle = person.personalTitle + if (person.suffix) resultMap.suffix = person.suffix + if (person.gender) resultMap.gender = person.gender + + resultMap.fullName = PartyHelper.getPartyName(person, parameters.lastNameFirst == "Y") + } else if (partyGroup) { + resultMap.groupName = partyGroup.groupName + resultMap.fullName = partyGroup.groupName + } + + return resultMap +} + +/** + * Get Postal Address Boundary + */ +def getPostalAddressBoundary() { + Map resultMap = success() + + List<String> geoIds = from('PostalAddressBoundary') + .where(makeValue('PostalAddressBoundary', parameters)) + .getFieldList('geoId') + + List<GenericValue> geos = from('Geo') + .where(EntityCondition.makeCondition('geoId', EntityOperator.IN, geoIds)) + .queryList() + + resultMap.geos = geos + return resultMap +} + +/** + * Create mass party identification with association between value and type + */ +def createPartyIdentifications() { + Map resultMap = success() + + for (Map.Entry<String, String> entry : parameters.identifications.entrySet()) { + GenericValue identificationType = from('PartyIdentificationType') + .where("partyIdentificationTypeId", entry.getValue()) + .queryOne() + if (identificationType) { + String idValue = parameters.identifications[identificationType.partyIdentificationTypeId] + if (idValue) { + run service: 'createPartyIdentification', with: [partyId: parameters.partyId, + idValue: idValue, + partyIdentificationTypeId: identificationType.partyIdentificationTypeId] + } + } + } + + return resultMap +} + +/** + * Sets Party Profile Defaults + */ +def setPartyProfileDefaults() { + if (!parameters.partyId) parameters.partyId = userLogin.partyId + + // lookup existing value + GenericValue partyProfileDefault = from('PartyProfileDefault') + .where(parameters) + .queryOne() + if (!partyProfileDefault) { + + // create the profile defaut because is missing + partyProfileDefault = makeValue('PartyProfileDefault', parameters) + partyProfileDefault.create() + } else { + + // update the fields + partyProfileDefault.setNonPKFields(parameters) + partyProfileDefault.store() + } + + return success() +} + +/** + * Gets all parties related to partyIdFrom using the PartyRelationship entity + */ +def getPartiesByRelationship() { + Map resultMap = success() + + GenericValue lookupMap = makeValue('PartyRelationship') + lookupMap.setAllFields(parameters, false, null, null) + List<String> partyIdTos = from('PartyRelationship') + .where(lookupMap) + .getFieldList('partyIdTo') + + List<GenericValue> parties = from('Party') + .where(EntityCondition.makeCondition('partyId', EntityOperator.IN, partyIdTos)) + .queryList() + if (parties) resultMap.parties = parties + return resultMap +} + +/** + * Gets Parent Organizations for an Organization Party + */ +def getParentOrganizations() { + Map resultMap = success() + + List relatedPartyIdList = [parameters.organizationPartyId] + String recurse = "Y" + if (parameters.getParentsOfParents) recurse = parameters.getParentsOfParents + + Map res = followPartyRelationshipsInline(relatedPartyIdList,'GROUP_ROLLUP', + 'ORGANIZATION_UNIT', 'Y', 'PARENT_ORGANIZATION', + null, 'Y', recurse, 'Y') + resultMap.parentOrganizationPartyIdList = res.relatedPartyIdList + return resultMap +} + +/** + * Get Parties Related to a Party + */ +def getRelatedParties() { + Map resultMap = success() + + List relatedPartyIdList = [parameters.partyIdFrom] + resultMap.relatedPartyIdList = followPartyRelationshipsInline(relatedPartyIdList, parameters.partyRelationshipTypeId, + parameters.roleTypeIdFrom, parameters.roleTypeIdFromInclueAllChildTypes, + parameters.roleTypeIdTo, parameters.roleTypeIdToIncludeAllChildTypes, + parameters.includeFromToSwitched, parameters.recurse, parameters.useCache) + return resultMap +} + +/** + * Get Child RoleTypes + */ +def getChildRoleTypes () { + Map resultMap = success() + + Map res = getChildRoleTypesInline([parameters.roleTypeId]) + + resultMap.childRoleTypeIdList = res.childRoleTypeIdList + return resultMap +} + +/** + * Get the email of the party + */ +def getPartyEmail () { + Map resultMap = success() + + // First try to find primary email Address when not found get other email + Timestamp searchTimestamp = UtilDateTime.nowTimestamp() + GenericValue emailAddress = from("PartyContactWithPurpose") + .where(partyId: parameters.partyId, contactMechPurposeTypeId: parameters.contactMechPurposeTypeId) + .filterByDate(searchTimestamp, 'purposeFromDate', 'purposeThruDate', 'contactFromDate', 'contactThruDate') + .queryFirst() + // Any other email + if (!emailAddress) { + emailAddress = from("PartyAndContactMech") + .where(partyId: parameters.partyId, contactMechTypeId: "EMAIL_ADDRESS") + .filterByDate(searchTimestamp) + .queryFirst() + } + // Any other electronic address + if (!emailAddress) { + emailAddress = from("PartyAndContactMech") + .where(partyId: parameters.partyId, contactMechTypeId: "ELECTRONIC_ADDRESS") + .filterByDate(searchTimestamp) + .queryFirst() + } + if (emailAddress) { + resultMap.emailAddress = emailAddress.infoString + resultMap.contactMechId = emailAddress.contactMechId + } + return resultMap +} + +/** + * Get the telephone number of the party + */ +def getPartyTelephone () { + Map resultMap = success() + Timestamp searchTimestamp = UtilDateTime.nowTimestamp() + GenericValue telephone = null + + List<GenericValue> telephoneList = from("PartyContactDetailByPurpose") + .where(partyId: parameters.partyId, contactMechTypeId: 'TELECOM_NUMBER') + .filterByDate(searchTimestamp, 'purposeFromDate', 'purposeThruDate', 'fromDate', 'thruDate') + .queryList() + if (telephoneList) { + List<String> types = [] + if (!parameters.contactMechPurposeTypeId) { + // search in this order if not provided + types = ['PRIMARY_PHONE', 'PHONE_MOBILE', 'PHONE_WORK', + 'PHONE_QUICK', 'PHONE_HOME', 'PHONE_BILLING', + 'PHONE_SHIPPING', 'PHONE_SHIP_ORIG'] + } else { + types << parameters.contactMechPurposeTypeId + } + + telephone = EntityUtil.getFirst(EntityUtil.filterByCondition(telephoneList, + EntityCondition.makeCondition("contactMechPurposeTypeId", EntityJoinOperator.IN, types))) + if (telephone) { + resultMap.contactMechPurposeTypeId = telephone.contactMechPurposeTypeId + } + } else { + telephone = from("PartyAndContactMech") + .where(partyId: parameters.partyId, contactMechTypeId: 'TELECOM_NUMBER') + .filterByDate(searchTimestamp) + .queryFirst() + } + + if (telephone) { + resultMap.contactMechId = telephone.contactMechId + if (telephone.containsKey('countryCode')) { + resultMap.countryCode = telephone.countryCode + } else if (telephone.containsKey('tnCountryCode')) { + resultMap.countryCode = telephone.tnCountryCode + } + if (telephone.containsKey('areaCode')) { + resultMap.areaCode = telephone.areaCode + } else if (telephone.containsKey('tnAreaCode')) { + resultMap.areaCode = telephone.tnAreaCode + } + if (telephone.containsKey('contactNumber')) { + resultMap.contactNumber = telephone.contactNumber + } else if (telephone.containsKey('tnContactNumber')) { + resultMap.contactNumber = telephone.tnContactNumber + } + if (telephone.containsKey('extension')) resultMap.extension = telephone.extension + } + + return resultMap +} + +/** + * Get the postal address of the party + */ +def getPartyPostalAddress () { + Map resultMap = success() + GenericValue address = null + Timestamp searchTimestamp = UtilDateTime.nowTimestamp() + + List<GenericValue> addressList = from("PartyContactDetailByPurpose") + .where(partyId: parameters.partyId, contactMechTypeId: 'POSTAL_ADDRESS') + .filterByDate(searchTimestamp, 'purposeFromDate', 'purposeThruDate', 'fromDate', 'thruDate') + .queryList() + if (addressList) { + List<String> types = [] + if (!parameters.contactMechPurposeTypeId) { + // search in this order if not provided + types = ['GENERAL_LOCATION', 'BILLING_LOCATION', 'PAYMENT_LOCATION', 'SHIPPING_LOCATION'] + } else { + types << parameters.contactMechPurposeTypeId + } + addressList = EntityUtil.filterByCondition(addressList, + EntityCondition.makeCondition("contactMechPurposeTypeId", EntityJoinOperator.IN, types)) + if (addressList) { + address = addressList[0] + resultMap.contactMechPurposeTypeId = address.contactMechPurposeTypeId + } + } else { + address = from("PartyAndContactMech") + .where(partyId: parameters.partyId, contactMechTypeId: 'POSTAL_ADDRESS') + .filterByDate(searchTimestamp) + .queryFirst() + } + + if (address) { + resultMap.contactMechId = address.contactMechId + if (address.containsKey("address1")) { + if (address.address1) resultMap.address1 = address.address1 + if (address.address2) resultMap.address2 = address.address2 + if (address.directions) resultMap.directions = address.directions + if (address.city) resultMap.city = address.city + if (address.postalCode) resultMap.postalCode = address.postalCode + if (address.stateProvinceGeoId) resultMap.stateProvinceGeoId = address.stateProvinceGeoId + if (address.countyGeoId) resultMap.countyGeoId = address.countyGeoId + if (address.countryGeoId) resultMap.countryGeoId = address.countryGeoId + } else if (address.containsKey("paAddress1")) { + if (address.paAddress1) resultMap.address1 = address.paAddress1 + if (address.paAddress2) resultMap.address2 = address.paAddress2 + if (address.paDirections) resultMap.directions = address.paDirections + if (address.paCity) resultMap.city = address.paCity + if (address.paPostalCode) resultMap.postalCode = address.paPostalCode + if (address.paStateProvinceGeoId) resultMap.stateProvinceGeoId = address.paStateProvinceGeoId + if (address.paCountyGeoId) resultMap.countyGeoId = address.paCountyGeoId + if (address.paCountryGeoId) resultMap.countryGeoId = address.paCountryGeoId + } + } + + return resultMap +} + +/** + * Create an AddressMatchMap + */ +def createAddressMatchMap() { + GenericValue newAddressMatchMap = makeValue('AddressMatchMap', parameters) + if (parameters.mapKey) newAddressMatchMap.mapKey = ((String) parameters.mapKey).toUpperCase(context.locale) + if (parameters.mapValue) newAddressMatchMap.mapValue = ((String) parameters.mapValue).toUpperCase(context.locale) + newAddressMatchMap.create() + return success() +} + +/** + * Remove all AddressMatchMap + */ +def clearAddressMatchMap() { + delegator.removeAll('AddressMatchMap') + return success() +} + +/** + * Create a PartyRelationship + */ +def createPartyRelationship() { + if (!parameters.fromDate) parameters.fromDate = UtilDateTime.nowTimestamp() + if (!parameters.roleTypeIdFrom) parameters.roleTypeIdFrom = '_NA_' + if (!parameters.roleTypeIdTo) parameters.roleTypeIdTo = '_NA_' + if (!parameters.partyIdFrom) parameters.partyIdFrom = userLogin.partyId + + // check if not already exist + List<GenericValue> partyRels = from("PartyRelationship") + .where(partyIdFrom: parameters.partyIdFrom, + partyIdTo: parameters.partyIdTo, + roleTypeIdFrom: parameters.roleTypeIdFrom, + roleTypeIdTo: parameters.roleTypeIdTo) + .filterByDate() + .queryList() + if (!partyRels) { + GenericValue partyRelationship = makeValue('PartyRelationship', parameters) + partyRelationship.create() + } + return success() +} + +/** + * Update a PartyRelationship + */ +def updatePartyRelationship() { + if (!parameters.roleTypeIdFrom) parameters.roleTypeIdFrom = '_NA_' + if (!parameters.roleTypeIdTo) parameters.roleTypeIdTo = '_NA_' + + // lookup existing value + GenericValue partyRelationship = from('PartyRelationship') + .where(parameters) + .queryOne() + partyRelationship.setNonPKFields(parameters) + partyRelationship.store() + + return success() +} + +/** + * Delete a PartyRelationship + */ +def deletePartyRelationship() { + if (!parameters.roleTypeIdFrom) parameters.roleTypeIdFrom = '_NA_' + if (!parameters.roleTypeIdTo) parameters.roleTypeIdTo = '_NA_' + + // lookup existing value + GenericValue partyRelationship = from('PartyRelationship') + .where(parameters) + .queryOne() + partyRelationship.remove() + + return success() +} + +/** + * Create a company/contact relationship and add the related roles + */ +def createPartyRelationshipContactAccount() { + Map resultMap = success() + + Map roleMap = [partyId: parameters.accountPartyId, roleTypeId: 'ACCOUNT'] + GenericValue partyRole = from('PartyRole') + .where(roleMap) + .queryOne() + if (!partyRole) { + run service: 'createPartyRole', with: roleMap + } + + roleMap = [partyId: parameters.contactPartyId, roleTypeId: 'CONTACT'] + partyRole = from('PartyRole') + .where(roleMap) + .queryOne() + if (!partyRole) { + run service: 'createPartyRole', with: roleMap + } + + run service: 'createPartyRelationship', + with: [partyIdFrom: parameters.accountPartyId, + roleTypeIdFrom: 'ACCOUNT', + partyIdTo: parameters.contactPartyId, + roleTypeIdTo: 'CONTACT', + partyRelationshipTypeId: 'EMPLOYMENT', + comments: parameters.comments + ] + + return resultMap +} + +/** + * Notification email on party creation + */ +def sendCreatePartyEmailNotification() { + Map resultMap = success() + + Map lookupMap = [emailType: 'PARTY_REGIS_CONFIRM'] + String productStoreId = parameters.productStoreId + if (!productStoreId) { + logWarning('No productStoreId specified.') + } else { + lookupMap.productStoreId = productStoreId + } + + GenericValue storeEmail = from('ProductStoreEmailSetting') + .where(lookupMap) + .queryOne() + if (storeEmail && storeEmail.bodyScreenLocation) { + GenericValue webSite = from('WebSite') + .where(productStoreId: storeEmail.productStoreId) + .queryFirst() + + Map bodyParameters = parameters + GenericValue person = from('Person') + .where(parameters) + .queryOne() + bodyParameters.person = person + + run service: 'sendMailFromScreen', + with: [bodyParameters: bodyParameters, + sendTo: parameters.emailAddress, + subject: storeEmail.subject, + sendFrom: storeEmail.fromAddress, + sendCc: storeEmail.ccAddress, + sendBcc: storeEmail.bccAddress, + contentType: storeEmail.contentType, + bodyScreenUri: storeEmail.bodyScreenLocation, + webSiteId: webSite.webSiteId, + emailType: lookupMap.emailType] + } + return resultMap +} + +/** + * Send the Notification email on personal information update + */ +def sendUpdatePersonalInfoEmailNotification() { + Map resultMap = success() + + Map lookupMap = [emailType: 'UPD_PRSNL_INF_CNFRM'] + String productStoreId = parameters.productStoreId + if (!productStoreId) { + logWarning('No productStoreId specified.') + } else { + lookupMap.productStoreId = productStoreId + } + + GenericValue storeEmail = from('ProductStoreEmailSetting') + .where(lookupMap) + .queryOne() + if (storeEmail && storeEmail.bodyScreenLocation) { + String partyId = parameters.partyId + if (parameters.updatedUserLogin) partyId = parameters.updatedUserLogin.partyId + + GenericValue webSite = from('WebSite') + .where(productStoreId: storeEmail.productStoreId) + .queryFirst() + + Map bodyParameters = parameters + GenericValue partyAndPerson = from('PartyAndPerson') + .where(parameters) + .queryOne() + bodyParameters.partyAndPerson = partyAndPerson + + GenericValue partyContactDetailByPurpose = from('PartyContactDetailByPurpose') + .where(partyId: partyId, contactMechPurposeTypeId: 'PRIMARY_EMAIL') + .filterByDate() + .queryFirst() + if (!partyContactDetailByPurpose) logWarning('No email found.') + else { + GenericValue contactMech = from('ContactMech') + .where(contactMechId: partyContactDetailByPurpose.contactMechId) + .queryOne() + run service: 'sendMailFromScreen', + with: [bodyParameters: bodyParameters, + sendTo: contactMech.infoString, + subject: storeEmail.subject, + sendFrom: storeEmail.fromAddress, + sendCc: storeEmail.ccAddress, + sendBcc: storeEmail.bccAddress, + contentType: storeEmail.contentType, + bodyScreenUri: storeEmail.bodyScreenLocation, + webSiteId: webSite.webSiteId, + emailType: lookupMap.emailType] + } + } + return resultMap +} + +/** + * Send the Notification email on account activated + */ +def sendAccountActivatedEmailNotification() { + Map resultMap = success() + + Map lookupMap = [emailType: 'PRDS_CUST_ACTIVATED'] + String productStoreId = parameters.productStoreId + if (!productStoreId) { + logWarning('No productStoreId specified.') + } else { + lookupMap.productStoreId = productStoreId + } + + GenericValue storeEmail = from('ProductStoreEmailSetting') + .where(lookupMap) + .queryOne() + if (storeEmail && storeEmail.bodyScreenLocation) { + String partyId = parameters.partyId + if (!partyId) partyId = userLogin.partyId + + GenericValue webSite = from('WebSite') + .where(productStoreId: storeEmail.productStoreId) + .queryFirst() + + Map bodyParameters = parameters + GenericValue person = from('Person') + .where(partyId: partyId) + .queryOne() + bodyParameters.person = person + + GenericValue partyContactDetailByPurpose = from('PartyContactDetailByPurpose') + .where(partyId: partyId, contactMechPurposeTypeId: 'PRIMARY_EMAIL') + .filterByDate() + .queryFirst() + if (!partyContactDetailByPurpose) logWarning('No email found.') + else { + GenericValue contactMech = from('ContactMech') + .where('contactMechId': partyContactDetailByPurpose.contactMechId) + .queryOne() + run service: 'sendMailFromScreen', + with: [bodyParameters: bodyParameters, + sendTo: contactMech.infoString, + subject: storeEmail.subject, + sendFrom: storeEmail.fromAddress, + sendCc: storeEmail.ccAddress, + sendBcc: storeEmail.bccAddress, + contentType: storeEmail.contentType, + bodyScreenUri: storeEmail.bodyScreenLocation, + webSiteId: webSite.webSiteId, + emailType: lookupMap.emailType] + } + } + return resultMap +} + +/** + * Create and update a person + */ +def createUpdatePerson() { + Map resultMap = success() + String partyId = parameters.partyId + + Map personContext = [partyId: partyId] + List<String> messages = [] + //TODO need to convert from MapProcessor + SimpleMapProcessor.runSimpleMapProcessor('component://party/minilang/party/PartyMapProcs.xml', + 'person', parameters, personContext, messages, context.locale) + + // Check errors + if (messages) return error(StringUtil.join(messages, ',')) + + GenericValue party = from('Party') + .where(partyId: partyId) + .queryOne() + String serviceName = (party ? 'update' : 'create') + 'Person' + run service: serviceName, with: personContext + resultMap.partyId = partyId + return resultMap +} + +/** + * Create customer profile on basis of First Name ,Last Name and Email Address + */ +def quickCreateCustomer() { + Map resultMap = success() + + Map personContext = [:] + Map emailContext = [:] + List<String> messages = [] + //TODO need to convert from MapProcessor + SimpleMapProcessor.runSimpleMapProcessor('component://party/minilang/contact/PartyContactMechMapProcs.xml', + 'person', parameters, personContext, messages, context.locale) + SimpleMapProcessor.runSimpleMapProcessor('component://party/minilang/contact/PartyContactMechMapProcs.xml', + 'emailAddress', parameters, emailContext, messages, context.locale) + + // Check errors + if (messages) return error(StringUtil.join(messages, ',')) + + // Create person + Map serviceResult = run service: 'createPerson', with: personContext + if (ServiceUtil.isError(serviceResult)) return serviceResult + String partyId = serviceResult.partyId + + GenericValue userLogin = from('UserLogin') + .where(userLoginId: 'system') + .cache() + .queryOne() + emailContext.partyId = partyId + emailContext.userLogin = userLogin + emailContext.contactMechPurposeTypeId = 'PRIMARY_EMAIL' + serviceResult = run service: 'createPartyEmailAddress', with: emailContext + if (ServiceUtil.isError(serviceResult)) return serviceResult + + // Sign up for Contact List + if (parameters.subscribeContactList == 'Y') { + serviceResult = run service: 'signUpForContactList', with: [partyId: partyId, + contactListId: parameters.contactListId, + email: parameters.emailAddress] + if (ServiceUtil.isError(serviceResult)) return serviceResult + } + + // Create the PartyRole + serviceResult = run service: 'createPartyRole', with: [partyId: partyId, + roleTypeId: 'CUSTOMER'] + if (ServiceUtil.isError(serviceResult)) return serviceResult + + resultMap.partyId = partyId + return resultMap +} + +/** + * Get the main role of this party which is a child of the MAIN_ROLE roletypeId + */ +def getPartyMainRole() { + Map resultMap = success() + + List<GenericValue> partyRoles = from("PartyRole") + .where(partyId: parameters.partyId) + .queryList() + // find the role in the list + String mainRoleTypeId = null + for (GenericValue partyRole : partyRoles) { + if (!mainRoleTypeId) { + List<GenericValue> roleTypeIn3Levels = from("RoleTypeIn3Levels") + .where(topRoleTypeId: 'MAIN_ROLE', lowRoleTypeId: partyRole.roleTypeId) + .queryList() + if (roleTypeIn3Levels) { + mainRoleTypeId = partyRole.roleTypeId + } + } + } + if (mainRoleTypeId) { + resultMap.roleTypeId = mainRoleTypeId + GenericValue roleType = from('RoleType') + .where(roleTypeId: mainRoleTypeId) + .cache() + .queryOne() + resultMap.description = roleType.description + } + + return resultMap +} + +// Specific methods + +/** + * Follow PartyRelationships + * Uses the following fields in the env (with * are required): + * relatedPartyIdList* (initial partyIdFrom should be in this list; accumulator of new partyIds, ie all partyIdTo found will be added to this, thus can support recursion) + * partyRelationshipTypeId + * roleTypeIdFrom + * roleTypeIdFromIncludeAllChildTypes + * roleTypeIdTo + * roleTypeIdToInclueAllChildTypes + * includeFromToSwitched + * recurse + * useCache (should be "true" or "false") + */ +def followPartyRelationshipsInline(List relatedPartyIdList,String partyRelationshipTypeId, String roleTypeIdFrom, String roleTypeIdFromIncludeAllChildTypes, + String roleTypeIdTo, String roleTypeIdToInclueAllChildTypes, String includeFromToSwitched, String recurse, String useCache ) { + Map resultMap = success() + Timestamp nowTimestamp = UtilDateTime.nowTimestamp() + + List roleTypeIdFromList = null + if (roleTypeIdFrom) roleTypeIdFromList = [roleTypeIdFrom] + if ("Y" == roleTypeIdFromIncludeAllChildTypes) { + List roleTypeIdListName = roleTypeIdFromList + Map res = getChildRoleTypesInline(roleTypeIdListName) + roleTypeIdFromList = res.childRoleTypeIdList + } + + List roleTypeIdToList = null + if (roleTypeIdTo) roleTypeIdToList = [roleTypeIdTo] + if ("Y" == roleTypeIdToInclueAllChildTypes) { + List roleTypeIdListName = roleTypeIdToList + Map res = getChildRoleTypesInline(roleTypeIdListName) + roleTypeIdToList = res.childRoleTypeIdList + } + + Map res = followPartyRelationshipsInlineRecurse(relatedPartyIdList, roleTypeIdFromList, roleTypeIdToList, + partyRelationshipTypeId, includeFromToSwitched, recurse, nowTimestamp, useCache) + for (String newPartyId : res.NewRelatedPartyIdList) { + if (!relatedPartyIdList.contains(newPartyId)) { + relatedPartyIdList << newPartyId + } + } + resultMap.relatedPartyIdList = relatedPartyIdList + return resultMap +} + +/** + * Follow PartyRelationships Recurse + */ +def followPartyRelationshipsInlineRecurse (List relatedPartyIdList, List roleTypeIdFromList, List roleTypeIdToList, String partyRelationshipTypeId, + String includeFromToSwitched, String recurse, Timestamp searchTimestamp, String useCache) { + + Map resultMap = success() + List newRelatedPartyIdList = [] + List relatedPartyIdAlreadySearchedList = [] + for (String relatedPartyId : relatedPartyIdList) { + if (!relatedPartyIdAlreadySearchedList.contains(relatedPartyId)) { + relatedPartyIdAlreadySearchedList.add(relatedPartyId) + + List<EntityCondition> entityConditionList = [EntityCondition.makeCondition("partyIdFrom", relatedPartyId)] + if (roleTypeIdFromList) entityConditionList << EntityCondition.makeCondition("roleTypeIdFrom", EntityOperator.IN, roleTypeIdFromList) + if (roleTypeIdToList) entityConditionList << EntityCondition.makeCondition("roleTypeIdTo", EntityOperator.IN, roleTypeIdToList) + if (partyRelationshipTypeId) entityConditionList << EntityCondition.makeCondition("partyRelationshipTypeId", partyRelationshipTypeId) + EntityCondition condition = EntityCondition.makeCondition(entityConditionList) + + // get the newest (highest date) first + List PartyRelationshipList = from("PartyRelationship") + .where(condition) + .orderBy('-fromDate') + .filterByDate(searchTimestamp) + .cache('Y' == useCache) + .queryList() + for (GenericValue PartyRelationship : PartyRelationshipList) { + if ( !relatedPartyIdList.contains(PartyRelationship.partyIdTo) && + !newRelatedPartyIdList.contains(PartyRelationship.partyIdTo)) { + newRelatedPartyIdList << PartyRelationship.partyIdTo + } + } + + if ('Y' == includeFromToSwitched) { + entityConditionList = [EntityCondition.makeCondition("partyIdTo", relatedPartyId)] + // The roles are reversed + if (roleTypeIdFromList) entityConditionList << EntityCondition.makeCondition("roleTypeIdFrom", EntityOperator.IN, roleTypeIdToList) + if (roleTypeIdToList) entityConditionList << EntityCondition.makeCondition("roleTypeIdTo", EntityOperator.IN, roleTypeIdFromList) + if (partyRelationshipTypeId) entityConditionList << EntityCondition.makeCondition("partyRelationshipTypeId", partyRelationshipTypeId) + condition = EntityCondition.makeCondition(entityConditionList) + + PartyRelationshipList = from("PartyRelationship") + .where(condition) + .orderBy('-fromDate') + .filterByDate(searchTimestamp) + .cache('Y' == useCache) + .queryList() + for (GenericValue PartyRelationship : PartyRelationshipList) { + if ( !relatedPartyIdList.contains(PartyRelationship.partyIdFrom) && + !newRelatedPartyIdList.contains(PartyRelationship.partyIdFrom)) { + newRelatedPartyIdList << PartyRelationship.partyIdFrom + } + } + } + } + } + + // if we found new ones, add them to the master list and if recurse=Y then recurse + if (newRelatedPartyIdList) { + relatedPartyIdList = newRelatedPartyIdList + if ('Y' == recurse) { + logVerbose("Recursively calling followPartyRelationshipsInlineRecurse NewRelatedPartyIdList=${newRelatedPartyIdList}") + Map res = followPartyRelationshipsInlineRecurse(relatedPartyIdList, roleTypeIdFromList, roleTypeIdToList, + partyRelationshipTypeId, includeFromToSwitched, recurse, searchTimestamp, useCache) + for (String newPartyId : res.NewRelatedPartyIdList) { + if ( !newRelatedPartyIdList.contains(newPartyId)) { + newRelatedPartyIdList << newPartyId + } + } + } + } + resultMap.NewRelatedPartyIdList = newRelatedPartyIdList + return resultMap +} + +/** + * Get Child RoleTypes Inline + */ +def getChildRoleTypesInline (List roleTypeIdListName) { + Map resultMap = success() + List newRoleTypeIdList = [] + List roleTypeIdAlreadySearchedList = [] + + for (String roleTypeId : roleTypeIdListName) { + if (!roleTypeIdAlreadySearchedList.contains(roleTypeId)) { + roleTypeIdAlreadySearchedList << roleTypeId + + List RoleTypeList = from("RoleType").where(parentTypeId: roleTypeId).cache().queryList() + for (GenericValue newRoleType : RoleTypeList) { + if ( !roleTypeIdListName.contains(newRoleType.roleTypeId) && + !newRoleTypeIdList.contains(newRoleType.roleTypeId)) { + newRoleTypeIdList << newRoleType.roleTypeId + } + } + } + } + + // if we found new ones, add them to the master list and if recurse=Y then recurse + if (newRoleTypeIdList) { + roleTypeIdListName = newRoleTypeIdList + logVerbose("Recursively calling getChildRoleTypesInline roleTypeIdListName=${roleTypeIdListName}, newRoleTypeIdList=${newRoleTypeIdList}") + Map res = getChildRoleTypesInline(roleTypeIdListName) + for (String childRoleTypeId : res.childRoleTypeIdList) { + if ( !newRoleTypeIdList.contains(childRoleTypeId)) { + newRoleTypeIdList << childRoleTypeId + } + } + } + + resultMap.childRoleTypeIdList = newRoleTypeIdList + return resultMap +} diff --git a/applications/party/minilang/party/PartyServices.xml b/applications/party/minilang/party/PartyServices.xml deleted file mode 100644 index fcdebf7..0000000 --- a/applications/party/minilang/party/PartyServices.xml +++ /dev/null @@ -1,1074 +0,0 @@ -<?xml version="1.0" encoding="UTF-8" ?> -<!-- -Licensed to the Apache Software Foundation (ASF) under one -or more contributor license agreements. See the NOTICE file -distributed with this work for additional information -regarding copyright ownership. The ASF licenses this file -to you under the Apache License, Version 2.0 (the -"License"); you may not use this file except in compliance -with the License. You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, -software distributed under the License is distributed on an -"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, either express or implied. See the License for the -specific language governing permissions and limitations -under the License. ---> - -<simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xmlns="http://ofbiz.apache.org/Simple-Method" xsi:schemaLocation="http://ofbiz.apache.org/Simple-Method http://ofbiz.apache.org/dtds/simple-methods.xsd"> - - <simple-method method-name="savePartyNameChange" short-description="Save Party Name Change"> - <!-- for special case in ecommerce, if no partyId is passed in use userLogin.partyId --> - <if-empty field="parameters.partyId"> - <set field="parameters.partyId" from-field="userLogin.partyId"/> - </if-empty> - - <make-value entity-name="PartyNameHistory" value-field="partyNameHistory"/> - <set-pk-fields value-field="partyNameHistory" map="parameters"/> - <now-timestamp field="partyNameHistory.changeDate"/> - - <if> - <condition><not><if-empty field="parameters.groupName"/></not></condition> - <then> - <entity-one entity-name="PartyGroup" value-field="partyGroup"/> - <if> - <condition><if-compare-field field="partyGroup.groupName" to-field="parameters.groupName" operator="not-equals"/></condition> - <then> - <set-nonpk-fields map="partyGroup" value-field="partyNameHistory"/> - <create-value value-field="partyNameHistory"/> - </then> - </if> - </then> - <else-if> - <condition> - <or> - <not><if-empty field="parameters.firstName"></if-empty></not> - <not><if-empty field="parameters.middleName"></if-empty></not> - <not><if-empty field="parameters.lastName"></if-empty></not> - <not><if-empty field="parameters.personalTitle"></if-empty></not> - <not><if-empty field="parameters.suffix"></if-empty></not> - </or> - </condition> - <then> - <entity-one entity-name="Person" value-field="person"/> - <if> - <condition> - <or> - <if-compare-field field="person.firstName" to-field="parameters.firstName" operator="not-equals"/> - <if-compare-field field="person.middleName" to-field="parameters.middleName" operator="not-equals"/> - <if-compare-field field="person.lastName" to-field="parameters.lastName" operator="not-equals"/> - <if-compare-field field="person.personalTitle" to-field="parameters.personalTitle" operator="not-equals"/> - <if-compare-field field="person.suffix" to-field="parameters.suffix" operator="not-equals"/> - </or> - </condition> - <then> - <set-nonpk-fields map="person" value-field="partyNameHistory"/> - <create-value value-field="partyNameHistory"/> - </then> - </if> - </then> - </else-if> - </if> - </simple-method> - - <simple-method method-name="getPartyNameForDate" short-description="Get Party Name For Date"> - <entity-and entity-name="PartyNameHistory" list="partyNameHistoryList"> - <field-map field-name="partyId" from-field="parameters.partyId"/> - <order-by field-name="-changeDate"/> - </entity-and> - <entity-one entity-name="Person" value-field="person"/> - <entity-one entity-name="PartyGroup" value-field="partyGroup"/> - <if-empty field="parameters.compareDate"> - <now-timestamp field="nowTimestamp"/> - <set field="parameters.compareDate" from-field="nowTimestamp"/> - </if-empty> - <!-- go through the list which is sorted by most recent first and find the oldest (last) one with the changeDate greater than the compareDate --> - <iterate list="partyNameHistoryList" entry="partyNameHistory"> - <if-compare-field field="partyNameHistory.changeDate" to-field="parameters.compareDate" operator="greater" type="Timestamp"> - <set field="partyNameHistoryCurrent" from-field="partyNameHistory"/> - </if-compare-field> - </iterate> - - <if-empty field="partyNameHistoryCurrent"> - <if-not-empty field="person"> - <field-to-result field="person.firstName" result-name="firstName"/> - <if-not-empty field="person.middleName"> - <field-to-result field="person.middleName" result-name="middleName"/> - </if-not-empty> - <field-to-result field="person.lastName" result-name="lastName"/> - <if-not-empty field="person.personalTitle"> - <field-to-result field="person.personalTitle" result-name="personalTitle"/> - </if-not-empty> - <if-not-empty field="person.gender"> - <field-to-result field="person.gender" result-name="gender"/> - </if-not-empty> - <if-not-empty field="person.suffix"> - <field-to-result field="person.suffix" result-name="suffix"/> - </if-not-empty> - - - <if-compare field="parameters.lastNameFirst" operator="equals" value="Y"> - <set field="fullName" value="${person.personalTitle} ${person.lastName}, ${person.firstName} ${person.middleName} ${person.suffix}"/> - <else> - <set field="fullName" value="${person.personalTitle} ${person.firstName} ${person.middleName} ${person.lastName} ${person.suffix}"/> - </else> - </if-compare> - <field-to-result field="fullName"/> - - <else> - <if-not-empty field="partyGroup"> - <field-to-result field="partyGroup.groupName" result-name="groupName"/> - <field-to-result field="partyGroup.groupName" result-name="fullName"/> - </if-not-empty> - </else> - </if-not-empty> - <else> - <!-- partyNameHistoryCurrent has a value --> - <if-not-empty field="person"> - <field-to-result field="partyNameHistoryCurrent.firstName" result-name="firstName"/> - <if-not-empty field="partyNameHistoryCurrent.middleName"> - <field-to-result field="partyNameHistoryCurrent.middleName" result-name="middleName"/> - </if-not-empty> - <field-to-result field="partyNameHistoryCurrent.lastName" result-name="lastName"/> - <if-not-empty field="partyNameHistoryCurrent.personalTitle"> - <field-to-result field="partyNameHistoryCurrent.personalTitle" result-name="personalTitle"/> - </if-not-empty> - <if-not-empty field="partyNameHistoryCurrent.suffix"> - <field-to-result field="partyNameHistoryCurrent.suffix" result-name="suffix"/> - </if-not-empty> - <if-not-empty field="person.gender"> - <field-to-result field="person.gender" result-name="gender"/> - </if-not-empty> - - - <if-compare field="parameters.lastNameFirst" operator="equals" value="Y"> - <set field="fullName" value="${partyNameHistoryCurrent.personalTitle} ${partyNameHistoryCurrent.lastName}, ${partyNameHistoryCurrent.firstName} ${partyNameHistoryCurrent.middleName} ${partyNameHistoryCurrent.suffix}"/> - <else> - <set field="fullName" value="${partyNameHistoryCurrent.personalTitle} ${partyNameHistoryCurrent.firstName} ${partyNameHistoryCurrent.middleName} ${partyNameHistoryCurrent.lastName} ${partyNameHistoryCurrent.suffix}"/> - </else> - </if-compare> - <field-to-result field="fullName"/> - - <else> - <if-not-empty field="partyGroup"> - <field-to-result field="partyNameHistoryCurrent.groupName" result-name="groupName"/> - <field-to-result field="partyNameHistoryCurrent.groupName" result-name="fullName"/> - </if-not-empty> - </else> - </if-not-empty> - </else> - </if-empty> - </simple-method> - - <!-- PostalAddressBoundary methods --> - <simple-method method-name="getPostalAddressBoundary" short-description="Get Postal Address Boundary"> - <make-value entity-name="PostalAddressBoundary" value-field="postalAddressBoundaryLookupMap"/> - <set field="postalAddressBoundaryLookupMap.geoId" from-field="parameters.geoId"/> - <find-by-and entity-name="PostalAddressBoundary" map="postalAddressBoundaryLookupMap" list="postalAddressBoundaries"/> - <iterate list="postalAddressBoundaries" entry="postalAddressBoundary"> - <get-related-one value-field="postalAddressBoundary" to-value-field="geo" relation-name="Geo"/> - <field-to-list field="geo" list="geos"/> - </iterate> - <field-to-result field="geos"/> - </simple-method> - - <!-- PartyIdentification methods --> - <simple-method method-name="createPartyIdentifications" short-description="create mass party identification with association between value and type"> - <set field="partyIdentCtx.partyId" from-field="parameters.partyId"/> - <iterate-map key="key" value="value" map="parameters.identifications"> - <entity-one entity-name="PartyIdentificationType" value-field="identificationType" use-cache="true"> - <field-map field-name="partyIdentificationTypeId" from-field="value"/> - </entity-one> - <if-not-empty field="identificationType"> - <set field="idValue" value="${parameters.identifications.${identificationType.partyIdentificationTypeId}}"/> - <if-not-empty field="idValue"> - <set field="partyIdentCtx.partyIdentificationTypeId" from-field="identificationType.partyIdentificationTypeId"/> - <set field="partyIdentCtx.idValue" from-field="idValue"/> - <call-service service-name="createPartyIdentification" in-map-name="partyIdentCtx"/> - </if-not-empty> - </if-not-empty> - </iterate-map> - </simple-method> - - <!-- party profile default --> - <simple-method method-name="setPartyProfileDefaults" short-description="Sets Party Profile Defaults"> - <if-empty field="parameters.partyId"> - <set from-field="userLogin.partyId" field="parameters.partyId"/> - </if-empty> - - <!-- lookup existing value --> - <entity-one entity-name="PartyProfileDefault" value-field="partyProfileDefault"/> - <if-empty field="partyProfileDefault"> - <make-value entity-name="PartyProfileDefault" value-field="partyProfileDefault"/> - <set-pk-fields value-field="partyProfileDefault" map="parameters"/> - <create-value value-field="partyProfileDefault"/> - </if-empty> - - <!-- update the fields --> - <set-nonpk-fields map="parameters" value-field="partyProfileDefault"/> - <store-value value-field="partyProfileDefault"/> - </simple-method> - - <!-- create party content --> - <!-- TODO: this method will be deleted in favor of new content methods and the PartyContentServices.xml --> - <simple-method method-name="createPartyContent" short-description="Creates Party Associated Content" login-required="false"> - <!-- make sure we are logged in when passing a partyId --> - <if-not-empty field="parameters.partyId"> - <if-empty field="parameters.userLogin"> - <add-error><fail-property resource="PartyUiLabels" property="PartyPermissionErrorForThisParty"/></add-error> - <check-errors/> - </if-empty> - </if-not-empty> - - <!-- check permission when creating content on behalf of another party --> - <if-empty field="parameters.partyId"> - <if-not-empty field="parameters.userLogin"> - <set from-field="userLogin.partyId" field="parameters.partyId"/> - <if-compare-field to-field="userLogin.partyId" field="parameters.partyId" operator="not-equals"> - <check-permission permission="PARTYMGR" action="_UPDATE"> - <fail-property resource="PartyUiLabels" property="PartyPermissionErrorForThisParty"/> - </check-permission> - </if-compare-field> - </if-not-empty> - </if-empty> - <if-not-empty field="parameters._uploadedFile_fileName"> - <set field="absolute" value="true" type="Boolean"/> - <call-class-method method-name="getDataResourceContentUploadPath" class-name="org.apache.ofbiz.content.data.DataResourceWorker" ret-field="uploadPath"> - <field field="delegator" type="org.apache.ofbiz.entity.Delegator"/> - <field field="absolute" type="boolean"/> - </call-class-method> - <log level="info" message="[createPartyContent] - Found Subdir : ${uploadPath}"/> - <!-- locate the file extension to use based on mime-type --> - <set from-field="parameters._uploadedFile_contentType" field="extenLookup.mimeTypeId"/> - <find-by-and entity-name="FileExtension" map="extenLookup" list="extensions"/> - <first-from-list list="extensions" entry="extension"/> - <set-service-fields service-name="createDataResource" map="parameters" to-map="dataResource"/> - <!-- create the data resource object --> - <set from-field="parameters._uploadedFile_fileName" field="dataResource.dataResourceName"/> - <set from-field="parameters._uploadedFile_contentType" field="dataResource.mimeTypeId"/> - <set value="LOCAL_FILE" field="dataResource.dataResourceTypeId"/> - <call-service service-name="createDataResource" in-map-name="dataResource" break-on-error="false"> - <result-to-field result-name="dataResourceId" field="dataResourceId"/> - </call-service> - - <set-service-fields service-name="updateDataResource" map="dataResource" to-map="dataResource"/> - <set from-field="dataResourceId" field="dataResource.dataResourceId"/> - <call-service service-name="updateDataResource" in-map-name="dataResource" break-on-error="false"/> - <set from-field="dataResource.dataResourceId" field="lookup.dataResourceId"/> - <find-by-primary-key entity-name="DataResource" map="lookup" value-field="dataResourceMap" use-cache="true"/> - </if-not-empty> - - <set-service-fields service-name="createContent" map="parameters" to-map="createContentMap"/> - <if-not-empty field="parameters._uploadedFile_fileName"> - <set from-field="dataResourceId" field="createContentMap.dataResourceId"/> - </if-not-empty> - <call-service service-name="createContent" in-map-name="createContentMap" break-on-error="false"> - <result-to-field result-name="contentId" field="contentId"/> - </call-service> - <!-- create the content role --> - <if-not-empty field="parameters.partyId"> - <now-timestamp field="nowTimestamp"/> - <set-service-fields service-name="createContentRole" map="parameters" to-map="contentRole"/> - <set from-field="contentId" field="contentRole.contentId"/> - <set from-field="parameters.partyId" field="contentRole.partyId"/> - <set from-field="nowTimestamp" field="contentRole.fromDate"/> - <set value="OWNER" field="contentRole.roleTypeId"/> - <call-service service-name="createContentRole" in-map-name="contentRole" break-on-error="false"/> - <!-- check party role --> - <make-value entity-name="PartyRole" value-field="partyRole"/> - <set-pk-fields value-field="partyRole" map="contentRole"/> - <find-by-and entity-name="PartyRole" map="partyRole" list="pRoles"/> - <if-empty field="pRoles"> - <set-service-fields service-name="createPartyRole" map="contentRole" to-map="partyRole"/> - <call-service service-name="createPartyRole" in-map-name="partyRole" break-on-error="false"/> - </if-empty> - </if-not-empty> - <if-not-empty field="parameters._uploadedFile_fileName"> - <!-- store the file --> - <set-service-fields service-name="createAnonFile" map="dataResourceMap" to-map="fileCtx"/> - <set from-field="parameters.uploadedFile" field="fileCtx.binData"/> - <set from-field="dataResourceMap" field="fileCtx.dataResource"/> - <call-service service-name="createAnonFile" in-map-name="fileCtx" include-user-login="true"/> - </if-not-empty> - <field-to-result field="contentId"/> - </simple-method> - - <!-- Update party content --> - <!-- TODO: this method will be deleted in favor of new content methods and the PartyContentServices.xml --> - <simple-method method-name="updatePartyContent" short-description="Creates Party Associated Content" login-required="false"> - <!-- make sure we are logged in when passing a partyId --> - <if-not-empty field="parameters.partyId"> - <if-empty field="parameters.userLogin"> - <add-error><fail-property resource="PartyUiLabels" property="PartyPermissionErrorForThisParty"/></add-error> - <check-errors/> - </if-empty> - </if-not-empty> - - <!-- check permission when creating content on behalf of another party --> - <if-empty field="parameters.partyId"> - <if-not-empty field="parameters.userLogin"> - <set from-field="userLogin.partyId" field="parameters.partyId"/> - <if-compare-field to-field="userLogin.partyId" field="parameters.partyId" operator="not-equals"> - <check-permission permission="PARTYMGR" action="_UPDATE"> - <fail-property resource="PartyUiLabels" property="PartyPermissionErrorForThisParty"/> - </check-permission> - </if-compare-field> - </if-not-empty> - </if-empty> - - <if-not-empty field="parameters._uploadedFile_fileName"> - <set from-field="parameters.contentId" field="lookupParam.contentId"/> - <find-by-primary-key entity-name="Content" map="lookupParam" value-field="content" use-cache="true"/> - <if-not-empty field="content.dataResourceId"> - <set-service-fields service-name="updateDataResource" map="parameters" to-map="dataResource"/> - <set from-field="content.dataResourceId" field="dataResource.dataResourceId"/> - <call-service service-name="updateDataResource" in-map-name="dataResource" break-on-error="false"/> - <set from-field="content.dataResourceId" field="lookup.dataResourceId"/> - <find-by-primary-key entity-name="DataResource" map="lookup" value-field="dataResourceMap" use-cache="true"/> - <else> - <set field="absolute" value="true" type="Boolean"/> - <call-class-method method-name="getDataResourceContentUploadPath" class-name="org.apache.ofbiz.content.data.DataResourceWorker" ret-field="uploadPath"> - <field field="delegator" type="org.apache.ofbiz.entity.Delegator"/> - <field field="absolute" type="boolean"/> - </call-class-method> - <log level="info" message="[createPartyContent] - Found Subdir : ${uploadPath}"/> - <!-- locate the file extension to use based on mime-type --> - <set from-field="parameters._uploadedFile_contentType" field="extenLookup.mimeTypeId"/> - <find-by-and entity-name="FileExtension" map="extenLookup" list="extensions"/> - <first-from-list list="extensions" entry="extension"/> - <set-service-fields service-name="createDataResource" map="parameters" to-map="dataResource"/> - <!-- create the data resource object --> - <!-- create the data resource object --> - <set from-field="parameters._uploadedFile_fileName" field="dataResource.dataResourceName"/> - <set from-field="parameters._uploadedFile_contentType" field="dataResource.mimeTypeId"/> - <set value="LOCAL_FILE" field="dataResource.dataResourceTypeId"/> - <call-service service-name="createDataResource" in-map-name="dataResource" break-on-error="false"> - <result-to-field result-name="dataResourceId" field="dataResourceId"/> - </call-service> - <set value="${uploadPath}/${dataResourceId}" field="dataResource.objectInfo"/> - <if-not-empty field="extension"> - <set value="${uploadPath}/${dataResourceId}.${extension.fileExtensionId}" field="dataResource.objectInfo"/> - </if-not-empty> - <set-service-fields service-name="updateDataResource" map="dataResource" to-map="dataResource"/> - <set from-field="dataResourceId" field="dataResource.dataResourceId"/> - <call-service service-name="updateDataResource" in-map-name="dataResource" break-on-error="false"/> - <set from-field="dataResource.dataResourceId" field="lookup.dataResourceId"/> - <find-by-primary-key entity-name="DataResource" map="lookup" value-field="dataResourceMap" use-cache="true"/> - </else> - </if-not-empty> - </if-not-empty> - <set-service-fields service-name="updateContent" map="parameters" to-map="updateContentMap"/> - <if-not-empty field="dataResourceId"> - <set from-field="dataResourceId" field="updateContentMap.dataResourceId"/> - </if-not-empty> - <call-service service-name="updateContent" in-map-name="updateContentMap" break-on-error="false"/> - <if-not-empty field="parameters._uploadedFile_fileName"> - <set-service-fields service-name="createAnonFile" map="dataResourceMap" to-map="fileCtx"/> - <set from-field="parameters.uploadedFile" field="fileCtx.binData"/> - <set from-field="dataResourceMap" field="fileCtx.dataResource"/> - <call-service service-name="createAnonFile" in-map-name="fileCtx" include-user-login="true"/> - </if-not-empty> - <field-to-result field="parameters.contentId" result-name="contentId"/> - </simple-method> - - <!-- get parties based on PartyRelationship --> - <simple-method method-name="getPartiesByRelationship" - short-description="Gets all parties related to partyIdFrom using the PartyRelationship entity" login-required="false"> - <set from-field="parameters.partyIdFrom" field="lookupMap.partyIdFrom"/> - <set from-field="parameters.partyIdTo" field="lookupMap.partyIdTo"/> - <set from-field="parameters.roleTypeIdFrom" field="lookupMap.roleTypeIdFrom"/> - <set from-field="parameters.roleTypeIdTo" field="lookupMap.roleTypeIdTo"/> - <set from-field="parameters.statusId" field="lookupMap.statusId"/> - <set from-field="parameters.priorityTypeId" field="lookupMap.priorityTypeId"/> - <set from-field="parameters.partyRelationshipTypeId" field="lookupMap.partyRelationshipTypeId"/> - - <find-by-and entity-name="PartyRelationship" map="lookupMap" list="partyRelationships"/> - <iterate list="partyRelationships" entry="partyRelationship"> - <get-related-one value-field="partyRelationship" relation-name="ToParty" to-value-field="party"/> - <field-to-list field="party" list="parties"/> - </iterate> - <if-not-empty field="parties"> - <field-to-result field="parties"/> - </if-not-empty> - </simple-method> - - <simple-method method-name="getParentOrganizations" short-description="Gets Parent Organizations for an Organization Party"> - <set from-field="parameters.organizationPartyId" field="relatedPartyIdList[]"/> - <set from-field="parameters.getParentsOfParents" field="recurse"/> - <if-empty field="recurse"><set value="Y" field="recurse"/></if-empty> - - <set value="GROUP_ROLLUP" field="partyRelationshipTypeId"/> - <set value="ORGANIZATION_UNIT" field="roleTypeIdFrom"/> - <set value="PARENT_ORGANIZATION" field="roleTypeIdTo"/> - <set value="Y" field="roleTypeIdFromInclueAllChildTypes"/> - - <set value="Y" field="includeFromToSwitched"/> - <set value="true" field="useCache"/> - - <call-simple-method method-name="followPartyRelationshipsInline"/> - - <field-to-result field="relatedPartyIdList" result-name="parentOrganizationPartyIdList"/> - </simple-method> - - <simple-method method-name="getRelatedParties" short-description="Get Parties Related to a Party"> - <set from-field="parameters.partyIdFrom" field="relatedPartyIdList[]"/> - <set from-field="parameters.partyRelationshipTypeId" field="partyRelationshipTypeId"/> - <set from-field="parameters.roleTypeIdFrom" field="roleTypeIdFrom"/> - <set from-field="parameters.roleTypeIdFromInclueAllChildTypes" field="roleTypeIdFromInclueAllChildTypes"/> - <set from-field="parameters.roleTypeIdTo" field="roleTypeIdTo"/> - <set from-field="parameters.roleTypeIdToIncludeAllChildTypes" field="roleTypeIdToIncludeAllChildTypes"/> - <set from-field="parameters.includeFromToSwitched" field="includeFromToSwitched"/> - <set from-field="parameters.recurse" field="recurse"/> - <set from-field="parameters.useCache" field="useCache"/> - - <call-simple-method method-name="followPartyRelationshipsInline"/> - - <field-to-result field="relatedPartyIdList"/> - </simple-method> - - <simple-method method-name="followPartyRelationshipsInline" short-description="followPartyRelationshipsInline"> - <!-- - Uses the following fields in the env (with * are required): - - relatedPartyIdList* (initial partyIdFrom should be in this list; accumulator of new partyIds, ie all partyIdTo found will be added to this, thus can support recursion) - - partyRelationshipTypeId - - roleTypeIdFrom - - roleTypeIdFromInclueAllChildTypes - - roleTypeIdTo - - roleTypeIdToIncludeAllChildTypes - - includeFromToSwitched - - recurse - - useCache (should be "true" or "false") - --> - - <if-empty field="nowTimestamp"><now-timestamp field="nowTimestamp"/></if-empty> - - <!-- only create these if they don't already exist, more efficient and avoids potential problems in recursed calls --> - <if-empty field="_inline_roleTypeIdFromList"> - <field-to-list field="roleTypeIdFrom" list="_inline_roleTypeIdFromList"/> - <if-compare field="roleTypeIdFromInclueAllChildTypes" operator="equals" value="Y"> - <set value="_inline_roleTypeIdFromList" field="roleTypeIdListName"/> - <call-simple-method method-name="getChildRoleTypesInline"/> - </if-compare> - </if-empty> - <if-empty field="_inline_roleTypeIdToList"> - <field-to-list field="roleTypeIdTo" list="_inline_roleTypeIdToList"/> - <if-compare field="roleTypeIdToInclueAllChildTypes" operator="equals" value="Y"> - <set value="_inline_roleTypeIdToList" field="roleTypeIdListName"/> - <call-simple-method method-name="getChildRoleTypesInline"/> - </if-compare> - </if-empty> - - <call-simple-method method-name="followPartyRelationshipsInlineRecurse"/> - </simple-method> - <simple-method method-name="followPartyRelationshipsInlineRecurse" short-description="followPartyRelationshipsInlineRecurse"> - <clear-field field="_inline_NewRelatedPartyIdList"/> - - <iterate list="relatedPartyIdList" entry="relatedPartyId"> - <if> - <condition><not><if-compare-field field="_inline_relatedPartyIdAlreadySearchedList" to-field="relatedPartyId" operator="contains"/></not></condition> - <then> - <field-to-list field="relatedPartyId" list="_inline_relatedPartyIdAlreadySearchedList"/> - - <clear-field field="_inline_PartyRelationshipList"/> - <entity-condition entity-name="PartyRelationship" list="_inline_PartyRelationshipList" use-cache="${useCache}"> - <condition-list combine="and"> - <condition-expr field-name="partyIdFrom" from-field="relatedPartyId"/> - <condition-expr field-name="roleTypeIdFrom" operator="in" from-field="_inline_roleTypeIdFromList" ignore-if-empty="true"/> - <condition-expr field-name="roleTypeIdTo" operator="in" from-field="_inline_roleTypeIdToList" ignore-if-empty="true"/> - <condition-expr field-name="partyRelationshipTypeId" from-field="partyRelationshipTypeId" ignore-if-empty="true"/> - - <condition-expr field-name="fromDate" operator="less-equals" from-field="nowTimestamp"/> - <condition-list combine="or"> - <condition-expr field-name="thruDate" operator="equals" from-field="nullField"/> - <condition-expr field-name="thruDate" operator="greater" from-field="nowTimestamp"/> - </condition-list> - </condition-list> - - <!-- get the newest (highest date) first --> - <order-by field-name="-fromDate"/> - </entity-condition> - <iterate list="_inline_PartyRelationshipList" entry="_inline_PartyRelationship"> - <if> - <condition> - <and> - <not><if-compare-field field="relatedPartyIdList" to-field="_inline_PartyRelationship.partyIdTo" operator="contains"/></not> - <not><if-compare-field field="_inline_NewRelatedPartyIdList" to-field="_inline_PartyRelationship.partyIdTo" operator="contains"/></not> - </and> - </condition> - <then> - <field-to-list field="_inline_PartyRelationship.partyIdTo" list="_inline_NewRelatedPartyIdList"/> - </then> - </if> - </iterate> - - <if-compare field="includeFromToSwitched" operator="equals" value="Y"> - <clear-field field="_inline_PartyRelationshipList"/> - <entity-condition entity-name="PartyRelationship" list="_inline_PartyRelationshipList" use-cache="${useCache}"> - <condition-list combine="and"> - <condition-expr field-name="partyIdTo" from-field="relatedPartyId"/> - <condition-expr field-name="roleTypeIdTo" operator="in" from-field="_inline_roleTypeIdFromList" ignore-if-empty="true"/> - <condition-expr field-name="roleTypeIdFrom" operator="in" from-field="_inline_roleTypeIdToList" ignore-if-empty="true"/> - <condition-expr field-name="partyRelationshipTypeId" from-field="partyRelationshipTypeId" ignore-if-empty="true"/> - - <condition-expr field-name="fromDate" operator="less-equals" from-field="nowTimestamp"/> - <condition-list combine="or"> - <condition-expr field-name="thruDate" operator="equals" from-field="nullField"/> - <condition-expr field-name="thruDate" operator="greater" from-field="nowTimestamp"/> - </condition-list> - </condition-list> - - <!-- get the newest (highest date) first --> - <order-by field-name="-fromDate"/> - </entity-condition> - <iterate list="_inline_PartyRelationshipList" entry="_inline_PartyRelationship"> - <if> - <condition> - <and> - <not><if-compare-field field="relatedPartyIdList" to-field="_inline_PartyRelationship.partyIdFrom" operator="contains"/></not> - <not><if-compare-field field="_inline_NewRelatedPartyIdList" to-field="_inline_PartyRelationship.partyIdFrom" operator="contains"/></not> - </and> - </condition> - <then> - <field-to-list field="_inline_PartyRelationship.partyIdFrom" list="_inline_NewRelatedPartyIdList"/> - </then> - </if> - </iterate> - </if-compare> - </then> - </if> - </iterate> - - <!-- if we found new ones, add them to the master list and if recurse=Y then recurse --> - <if-not-empty field="_inline_NewRelatedPartyIdList"> - <list-to-list list="_inline_NewRelatedPartyIdList" to-list="relatedPartyIdList"/> - <if-compare field="recurse" operator="equals" value="Y"> - <log level="verbose" message="Recursively calling followPartyRelationshipsInlineRecurse _inline_NewRelatedPartyIdList=${_inline_NewRelatedPartyIdList}"/> - <call-simple-method method-name="followPartyRelationshipsInlineRecurse"/> - </if-compare> - </if-not-empty> - </simple-method> - - <simple-method method-name="getChildRoleTypes" short-description="Get Child RoleTypes"> - <field-to-list field="roleTypeId" list="childRoleTypeIdList"/> - <set value="childRoleTypeIdList" field="roleTypeIdListName"/> - <call-simple-method method-name="getChildRoleTypesInline"/> - <field-to-result field="childRoleTypeIdList"/> - </simple-method> - <simple-method method-name="getChildRoleTypesInline" short-description="getChildRoleTypes"> - <clear-field field="_inline_NewRoleTypeIdList"/> - - <iterate list="${roleTypeIdListName}" entry="roleTypeId"> - <if> - <condition><not><if-compare-field field="_inline_roleTypeIdAlreadySearchedList" to-field="roleTypeId" operator="contains"/></not></condition> - <then> - <field-to-list field="roleTypeId" list="_inline_roleTypeIdAlreadySearchedList"/> - - <clear-field field="_inline_RoleTypeList"/> - <entity-condition entity-name="RoleType" list="_inline_RoleTypeList" use-cache="true"> - <condition-expr field-name="parentTypeId" operator="equals" from-field="roleTypeId"/> - </entity-condition> - <iterate list="_inline_RoleTypeList" entry="newRoleType"> - <if> - <condition> - <and> - <not><if-compare-field field="${roleTypeIdListName}" to-field="newRoleType.roleTypeId" operator="contains"/></not> - <not><if-compare-field field="_inline_NewRoleTypeIdList" to-field="newRoleType.roleTypeId" operator="contains"/></not> - </and> - </condition> - <then> - <field-to-list field="newRoleType.roleTypeId" list="_inline_NewRoleTypeIdList"/> - </then> - </if> - </iterate> - </then> - </if> - </iterate> - - <!-- if we found some new types, add them to the main list --> - <if-not-empty field="_inline_NewRoleTypeIdList"> - <list-to-list list="_inline_NewRoleTypeIdList" to-list="${roleTypeIdListName}"/> - <log level="verbose" message="Recursively calling getChildRoleTypesInline roleTypeIdListName=${roleTypeIdListName}, _inline_NewRoleTypeIdList=${_inline_NewRoleTypeIdList}"/> - <call-simple-method method-name="getChildRoleTypesInline"/> - </if-not-empty> - </simple-method> - - <simple-method method-name="getPartyEmail" short-description="Get the email of the party"> - <!-- first try to find primary email Address when not found get other email --> - <entity-and entity-name="PartyContactWithPurpose" list="emailAddressesPurposes"> - <field-map field-name="partyId" from-field="parameters.partyId"/> - <field-map field-name="contactMechPurposeTypeId" from-field="parameters.contactMechPurposeTypeId"/> - </entity-and> - <filter-list-by-date list="emailAddressesPurposes" to-list="emailAddressesPurposes1" from-field-name="purposeFromDate" thru-field-name="purposeThruDate"/> - <filter-list-by-date list="emailAddressesPurposes1" to-list="emailAddresses" from-field-name="contactFromDate" thru-field-name="contactThruDate"/> - <!-- any other email --> - <if-empty field="emailAddresses"> - <entity-and entity-name="PartyAndContactMech" list="emailAddresses" filter-by-date="true"> - <field-map field-name="partyId" from-field="parameters.partyId"/> - <field-map field-name="contactMechTypeId" value="EMAIL_ADDRESS"/> - </entity-and> - </if-empty> - <!-- any other electronic address --> - <if-empty field="emailAddresses"> - <entity-and entity-name="PartyAndContactMech" list="emailAddresses" filter-by-date="true"> - <field-map field-name="partyId" from-field="parameters.partyId"/> - <field-map field-name="contactMechTypeId" value="ELECTRONIC_ADDRESS"/> - </entity-and> - </if-empty> - <if-not-empty field="emailAddresses"> - <first-from-list list="emailAddresses" entry="emailAddress"/> - <field-to-result field="emailAddress.infoString" result-name="emailAddress"/> - <field-to-result field="emailAddress.contactMechId" result-name="contactMechId"/> - </if-not-empty> - </simple-method> - - <simple-method method-name="getPartyTelephone" short-description="Get the telephone number of the party"> - <set field="findMap.partyId" from-field="parameters.partyId"/> - <if-empty field="parameters.contactMechPurposeTypeId"> - <!-- search in this order if not provided--> - <set field="type" value="PRIMARY_PHONE"/><field-to-list field="type" list="types"/> - <set field="type" value="PHONE_MOBILE"/><field-to-list field="type" list="types"/> - <set field="type" value="PHONE_WORK"/><field-to-list field="type" list="types"/> - <set field="type" value="PHONE_QUICK"/><field-to-list field="type" list="types"/> - <set field="type" value="PHONE_HOME"/><field-to-list field="type" list="types"/> - <set field="type" value="PHONE_BILLING"/><field-to-list field="type" list="types"/> - <set field="type" value="PHONE_SHIPPING"/><field-to-list field="type" list="types"/> - <set field="type" value="PHONE_SHIP_ORIG"/><field-to-list field="type" list="types"/> - <else> - <set field="type" from-field="parameters.contactMechPurposeTypeId"/> - <field-to-list field="type" list="types"/> - </else> - </if-empty> - <set field="findMap.contactMechTypeId" value="TELECOM_NUMBER"/> - <find-by-and entity-name="PartyContactDetailByPurpose" map="findMap" list="telephoneAll1"/> - <filter-list-by-date list="telephoneAll1" to-list="telephoneAll2" from-field-name="purposeFromDate" thru-field-name="purposeThruDate"/> - <filter-list-by-date list="telephoneAll2" to-list="telephoneAll3"/> - <if-not-empty field="telephoneAll3"> - <iterate list="types" entry="type"> - <iterate list="telephoneAll3" entry="telephone"> - <if-empty field="found"> - <if-compare-field field="telephone.contactMechPurposeTypeId" to-field="type" operator="equals"> - <set field="found" value="notImportant"/> - <field-to-result field="telephone.contactMechId" result-name="contactMechId"/> - <if-not-empty field="telephone.countryCode"> - <field-to-result field="telephone.countryCode" result-name="countryCode"/> - </if-not-empty> - <if-not-empty field="telephone.areaCode"> - <field-to-result field="telephone.areaCode" result-name="areaCode"/> - </if-not-empty> - <if-not-empty field="telephone.contactNumber"> - <field-to-result field="telephone.contactNumber" result-name="contactNumber"/> - </if-not-empty> - <if-not-empty field="telephone.extension"> - <field-to-result field="telephone.extension" result-name="extension"/> - </if-not-empty> - <field-to-result field="telephone.contactMechPurposeTypeId" result-name="contactMechPurposeTypeId"/> - </if-compare-field> - </if-empty> - </iterate> - </iterate> - <else> - <find-by-and entity-name="PartyAndContactMech" map="findMap" list="telephoneAll1"/> - <filter-list-by-date list="telephoneAll1" to-list="telephoneAll2"/> - <first-from-list list="telephoneAll2" entry="telephone"/> - <field-to-result field="telephone.contactMechId" result-name="contactMechId"/> - <if-not-empty field="telephone.tnCountryCode"> - <field-to-result field="telephone.tnCountryCode" result-name="countryCode"/> - </if-not-empty> - <if-not-empty field="telephone.tnAreaCode"> - <field-to-result field="telephone.tnAreaCode" result-name="areaCode"/> - </if-not-empty> - <if-not-empty field="telephone.tnContactNumber"> - <field-to-result field="telephone.tnContactNumber" result-name="contactNumber"/> - </if-not-empty> - <if-not-empty field="telephone.extension"> - <field-to-result field="telephone.extension" result-name="extension"/> - </if-not-empty> - </else> - </if-not-empty> - </simple-method> - - <simple-method method-name="getPartyPostalAddress" short-description="Get the postal address of the party"> - <set field="findMap.partyId" from-field="parameters.partyId"/> - <if-empty field="parameters.contactMechPurposeTypeId"> - <!-- search in this order if not provided--> - <set field="type" value="GENERAL_LOCATION"/><field-to-list field="type" list="types"/> - <set field="type" value="BILLING_LOCATION"/><field-to-list field="type" list="types"/> - <set field="type" value="PAYMENT_LOCATION"/><field-to-list field="type" list="types"/> - <set field="type" value="SHIPPING_LOCATION"/><field-to-list field="type" list="types"/> - <else> - <set field="type" from-field="parameters.contactMechPurposeTypeId"/><field-to-list field="type" list="types"/> - </else> - </if-empty> - <set field="findMap.contactMechTypeId" value="POSTAL_ADDRESS"/> - <find-by-and entity-name="PartyContactDetailByPurpose" map="findMap" list="addressAll1"></find-by-and> - <filter-list-by-date list="addressAll1" to-list="addressAll2" from-field-name="purposeFromDate" thru-field-name="purposeThruDate"/> - <filter-list-by-date list="addressAll2" to-list="addressAll3"/> - <if-not-empty field="addressAll3"> - <iterate list="types" entry="type"> - <iterate list="addressAll3" entry="address"> - <if-empty field="found"> - <if-compare-field field="address.contactMechPurposeTypeId" to-field="type" operator="equals"> - <set field="found" value="notImportant"/> - <field-to-result field="address.contactMechId" result-name="contactMechId"/> - <if-not-empty field="address.address1"> - <field-to-result field="address.address1" result-name="address1"/> - </if-not-empty> - <if-not-empty field="address.address2"> - <field-to-result field="address.address2" result-name="address2"/> - </if-not-empty> - <if-not-empty field="address.directions"> - <field-to-result field="address.directions" result-name="directions"/> - </if-not-empty> - <if-not-empty field="address.city"> - <field-to-result field="address.city" result-name="city"/> - </if-not-empty> - <if-not-empty field="address.postalCode"> - <field-to-result field="address.postalCode" result-name="postalCode"/> - </if-not-empty> - <if-not-empty field="address.stateProvinceGeoId"> - <field-to-result field="address.stateProvinceGeoId" result-name="stateProvinceGeoId"/> - </if-not-empty> - <if-not-empty field="address.countyGeoId"> - <field-to-result field="address.countyGeoId" result-name="countyGeoId"/> - </if-not-empty> - <if-not-empty field="address.countryGeoId"> - <field-to-result field="address.countryGeoId" result-name="countryGeoId"/> - </if-not-empty> - <field-to-result field="address.contactMechPurposeTypeId" result-name="contactMechPurposeTypeId"/> - </if-compare-field> - </if-empty> - </iterate> - </iterate> - <else> - <find-by-and entity-name="PartyAndContactMech" map="findMap" list="addressAll1"/> - <filter-list-by-date list="addressAll1" to-list="addressAll2"/> - <first-from-list list="addressAll2" entry="address"/> - <field-to-result field="address.contactMechId" result-name="contactMechId"/> - <if-not-empty field="address.paAddress1"> - <field-to-result field="address.paAddress1" result-name="address1"/> - </if-not-empty> - <if-not-empty field="address.paAddress2"> - <field-to-result field="address.paAddress2" result-name="address2"/> - </if-not-empty> - <if-not-empty field="address.paDirections"> - <field-to-result field="address.paDirections" result-name="directions"/> - </if-not-empty> - <if-not-empty field="address.paCity"> - <field-to-result field="address.paCity" result-name="city"/> - </if-not-empty> - <if-not-empty field="address.paPostalCode"> - <field-to-result field="address.paPostalCode" result-name="postalCode"/> - </if-not-empty> - <if-not-empty field="address.paStateProvinceGeoId"> - <field-to-result field="address.paStateProvinceGeoId" result-name="stateProvinceGeoId"/> - </if-not-empty> - <if-not-empty field="address.paCountyGeoId"> - <field-to-result field="address.paCountyGeoId" result-name="countyGeoId"/> - </if-not-empty> - <if-not-empty field="address.paCountryGeoId"> - <field-to-result field="address.paCountryGeoId" result-name="countryGeoId"/> - </if-not-empty> - </else> - </if-not-empty> - </simple-method> - - <!-- address match map --> - <simple-method method-name="createAddressMatchMap" short-description="create a AddressMatchMap"> - <call-object-method obj-field="parameters.mapValue" method-name="toUpperCase" ret-field="parameters.mapValue"/> - <call-object-method obj-field="parameters.mapKey" method-name="toUpperCase" ret-field="parameters.mapKey"/> - <make-value entity-name="AddressMatchMap" value-field="newEntity"/> - <set-pk-fields map="parameters" value-field="newEntity"/> - <set-nonpk-fields map="parameters" value-field="newEntity"/> - <create-value value-field="newEntity"/> - </simple-method> - <simple-method method-name="clearAddressMatchMap" short-description="remove all AddressMatchMap"> - <entity-condition entity-name="AddressMatchMap" list="addrs"> - <use-iterator/> - </entity-condition> - <iterate list="addrs" entry="addr"> - <remove-value value-field="addr"/> - </iterate> - </simple-method> - - <!-- PartyRelationship services --> - <simple-method method-name="createPartyRelationship" short-description="createPartyRelationship"> - <if-empty field="parameters.roleTypeIdFrom"><set field="parameters.roleTypeIdFrom" value="_NA_"/></if-empty> - <if-empty field="parameters.roleTypeIdTo"><set field="parameters.roleTypeIdTo" value="_NA_"/></if-empty> - <if-empty field="parameters.partyIdFrom"><set field="parameters.partyIdFrom" from-field="userLogin.partyId"/></if-empty> - - <if-empty field="parameters.fromDate"><now-timestamp field="parameters.fromDate"/></if-empty> - - <!-- check if not already exist --> - <entity-and entity-name="PartyRelationship" list="partyRels" filter-by-date="true"> - <field-map field-name="partyIdFrom" from-field="parameters.partyIdFrom"/> - <field-map field-name="roleTypeIdFrom" from-field="parameters.roleTypeIdFrom"/> - <field-map field-name="partyIdTo" from-field="parameters.partyIdTo"/> - <field-map field-name="roleTypeIdTo" from-field="parameters.roleTypeIdTo"/> - </entity-and> - - <if-empty field="partyRels"> - <make-value entity-name="PartyRelationship" value-field="newEntity"/> - <set-pk-fields map="parameters" value-field="newEntity"/> - <set-nonpk-fields map="parameters" value-field="newEntity"/> - <create-value value-field="newEntity"/> - </if-empty> - </simple-method> - <simple-method method-name="updatePartyRelationship" short-description="updatePartyRelationship"> - <if-empty field="parameters.roleTypeIdFrom"><set field="parameters.roleTypeIdFrom" value="_NA_"/></if-empty> - <if-empty field="parameters.roleTypeIdTo"><set field="parameters.roleTypeIdTo" value="_NA_"/></if-empty> - - <entity-one entity-name="PartyRelationship" value-field="lookedUpValue"/> - <set-nonpk-fields map="parameters" value-field="lookedUpValue"/> - <store-value value-field="lookedUpValue"/> - </simple-method> - <simple-method method-name="deletePartyRelationship" short-description="deletePartyRelationship"> - <if-empty field="parameters.roleTypeIdFrom"><set field="parameters.roleTypeIdFrom" value="_NA_"/></if-empty> - <if-empty field="parameters.roleTypeIdTo"><set field="parameters.roleTypeIdTo" value="_NA_"/></if-empty> - - <entity-one entity-name="PartyRelationship" value-field="lookedUpValue"/> - <remove-value value-field="lookedUpValue"/> - </simple-method> - - <simple-method method-name="createPartyRelationshipContactAccount" short-description="create a company/contact relationship and add the related roles"> - <set field="roleMap.partyId" from-field="parameters.accountPartyId"/> - <set field="roleMap.roleTypeId" value="ACCOUNT"/> - <entity-one entity-name="PartyRole" value-field="partyRole"> - <field-map field-name="partyId" from-field="roleMap.partyId"/> - <field-map field-name="roleTypeId" from-field="roleMap.roleTypeId"/> - </entity-one> - <if-empty field="partyRole"> - <call-service service-name="createPartyRole" in-map-name="roleMap"/> - </if-empty> - <set field="roleMap.partyId" from-field="parameters.contactPartyId"/> - <set field="roleMap.roleTypeId" value="CONTACT"/> - <entity-one entity-name="PartyRole" value-field="partyRole"> - <field-map field-name="partyId" from-field="roleMap.partyId"/> - <field-map field-name="roleTypeId" from-field="roleMap.roleTypeId"/> - </entity-one> - <if-empty field="partyRole"> - <call-service service-name="createPartyRole" in-map-name="roleMap"/> - </if-empty> - <set field="relMap.partyIdFrom" from-field="parameters.accountPartyId"/> - <set field="relMap.roleTypeIdFrom" value="ACCOUNT"/> - <set field="relMap.partyIdTo" from-field="parameters.contactPartyId"/> - <set field="relMap.roleTypeIdTo" value="CONTACT"/> - <set field="relMap.partyRelationshipTypeId" value="EMPLOYMENT"/> - <set field="relMap.comments" from-field="parameters.comments"/> - <call-service service-name="createPartyRelationship" in-map-name="relMap"/> - </simple-method> - - <!-- send party creation email notification --> - <simple-method method-name="sendCreatePartyEmailNotification" short-description="Notification email on party creation" login-required="false"> - <map-to-map map="parameters" to-map="bodyParameters"/> - <set field="emailType" value="PARTY_REGIS_CONFIRM"/> - <set field="productStoreId" from-field="parameters.productStoreId" /> - <if-empty field="productStoreId"> - <log level="warning" message="No productStoreId specified."/> - </if-empty> - <entity-one entity-name="ProductStoreEmailSetting" value-field="storeEmail"> - <field-map field-name="emailType"/> - <field-map field-name="productStoreId"/> - </entity-one> - <entity-and entity-name="WebSite" list="webSites"> - <field-map field-name="productStoreId" from-field="storeEmail.productStoreId"/> - </entity-and> - <first-from-list list="webSites" entry="webSite"/> - <if-not-empty field="storeEmail.bodyScreenLocation"> - <entity-one entity-name="Person" value-field="person"/> - <set field="bodyParameters.person" from-field="person"/> - <set field="emailParams.bodyParameters" from-field="bodyParameters"/> - - <set field="emailParams.sendTo" from-field="parameters.emailAddress"/> - <set field="emailParams.subject" from-field="storeEmail.subject"/> - <set field="emailParams.sendFrom" from-field="storeEmail.fromAddress"/> - <set field="emailParams.sendCc" from-field="storeEmail.ccAddress"/> - <set field="emailParams.sendBcc" from-field="storeEmail.bccAddress"/> - <set field="emailParams.contentType" from-field="storeEmail.contentType"/> - <set field="emailParams.bodyScreenUri" from-field="storeEmail.bodyScreenLocation"/> - <set field="emailParams.webSiteId" from-field="webSite.webSiteId"/> - <set field="emailParams.emailType" from-field="emailType"/> - <call-service service-name="sendMailFromScreen" in-map-name="emailParams"/> - </if-not-empty> - </simple-method> - - <!-- send personal information update email notification --> - <simple-method method-name="sendUpdatePersonalInfoEmailNotification" short-description="Send the Notification email on personal information updation" login-required="false"> - <map-to-map map="parameters" to-map="bodyParameters"/> - <set field="productStoreId" from-field="parameters.productStoreId" /> - <if-empty field="productStoreId"> - <log level="warning" message="No productStoreId specified."/> - </if-empty> - <entity-one entity-name="ProductStoreEmailSetting" value-field="storeEmail"> - <field-map field-name="emailType" value="UPD_PRSNL_INF_CNFRM"/> - <field-map field-name="productStoreId"/> - </entity-one> - <entity-and entity-name="WebSite" list="webSites"> - <field-map field-name="productStoreId" from-field="storeEmail.productStoreId"/> - </entity-and> - <first-from-list list="webSites" entry="webSite"/> - <if-not-empty field="storeEmail.bodyScreenLocation"> - <if-not-empty field="parameters.updatedUserLogin.partyId"> - <set field="partyId" from-field="parameters.updatedUserLogin.partyId"/> - <else> - <set field="partyId" from-field="parameters.partyId"/> - </else> - </if-not-empty> - <entity-condition entity-name="PartyContactDetailByPurpose" list="partyContactDetailByPurposes" filter-by-date="true"> - <condition-list> - <condition-expr field-name="contactMechPurposeTypeId" operator="equals" value="PRIMARY_EMAIL"/> - <condition-expr field-name="partyId" operator="equals" from-field="partyId"/> - </condition-list> - </entity-condition> - <first-from-list list="partyContactDetailByPurposes" entry="partyContactDetailByPurpose"/> - <entity-one entity-name="PartyAndPerson" value-field="partyAndPerson"/> - <set field="bodyParameters.partyAndPerson" from-field="partyAndPerson"/> - <set field="contactMechId" from-field="partyContactDetailByPurpose.contactMechId"/> - <entity-one entity-name="ContactMech" value-field="contactMech"/> - <set field="emailParams.sendTo" from-field="contactMech.infoString"/> - <set field="emailParams.subject" from-field="storeEmail.subject"/> - <set field="emailParams.sendFrom" from-field="storeEmail.fromAddress"/> - <set field="emailParams.sendCc" from-field="storeEmail.ccAddress"/> - <set field="emailParams.sendBcc" from-field="storeEmail.bccAddress"/> - <set field="emailParams.contentType" from-field="storeEmail.contentType"/> - <set field="emailParams.bodyParameters" from-field="bodyParameters"/> - <set field="emailParams.bodyScreenUri" from-field="storeEmail.bodyScreenLocation"/> - <set field="emailParams.webSiteId" from-field="webSite.webSiteId"/> - - <if-not-empty field="emailParams.sendTo"> - <call-service service-name="sendMailFromScreen" in-map-name="emailParams"/> - <else> - <log level="warning" message="Tried to send Update Personal Info Notifcation with no to address; partyId is [${partyId}], subject is: ${emailParams.subject}"/> - </else> - </if-not-empty> - </if-not-empty> - </simple-method> - - <simple-method method-name="createUpdatePerson" short-description="Create and update a person" login-required="false"> - <call-map-processor xml-resource="component://party/minilang/party/PartyMapProcs.xml" - processor-name="person" in-map-name="parameters" out-map-name="personMap"/> - <check-errors/> - <set field="partyId" from-field="parameters.partyId"/> - <entity-one entity-name="Party" value-field="party"/> - <set field="personContext.partyId" from-field="partyId"/> - <set-service-fields service-name="createPerson" map="personMap" to-map="personContext"/> - <if-empty field="party"> - <call-service service-name="createPerson" in-map-name="personContext"> - <result-to-field result-name="partyId" field="partyId"/> - </call-service> - <else><!-- If party object already exist, update the person record. --> - <set field="personContext.userLogin" from-field="parameters.userLogin"/> - <call-service service-name="updatePerson" in-map-name="personContext"/> - </else> - </if-empty> - <field-to-result field="partyId"/> - </simple-method> - - <simple-method method-name="quickCreateCustomer" short-description="Create customer profile on basis of First Name ,Last Name and Email Address" login-required="false"> - <call-map-processor xml-resource="component://party/minilang/contact/PartyContactMechMapProcs.xml" - processor-name="person" in-map-name="parameters" out-map-name="personInMap"/> - <call-map-processor xml-resource="component://party/minilang/contact/PartyContactMechMapProcs.xml" - processor-name="emailAddress" in-map-name="parameters" out-map-name="emailAddressInMap"/> - <check-errors/> - - <!-- create person --> - <call-service service-name="createPerson" in-map-name="personInMap"> - <result-to-field result-name="partyId"/> - <result-to-result result-name="partyId"/> - </call-service> - - <!-- Create email address --> - <entity-one entity-name="UserLogin" value-field="userLogin"> - <field-map field-name="userLoginId" value="system"/> - </entity-one> - <set field="emailAddressInMap.partyId" from-field="partyId"/> - <set field="emailAddressInMap.userLogin" from-field="userLogin"/> - <set field="emailAddressInMap.contactMechPurposeTypeId" value="PRIMARY_EMAIL"/> - <call-service service-name="createPartyEmailAddress" in-map-name="emailAddressInMap"/> - - <!-- Signup for Contact List --> - <if-compare field="parameters.subscribeContactList" operator="equals" value="Y"> - <set field="signUpForContactListMap.partyId" from-field="partyId"/> - <set field="signUpForContactListMap.contactListId" from-field="parameters.contactListId"/> - <set field="signUpForContactListMap.email" from-field="parameters.emailAddress"/> - <call-service service-name="signUpForContactList" in-map-name="signUpForContactListMap"/> - </if-compare> - - <!-- Create the PartyRole --> - <set field="createPartyRoleInMap.partyId" from-field="partyId"/> - <set field="createPartyRoleInMap.roleTypeId" value="CUSTOMER"/> - <set field="createPartyRoleInMap.userLogin" from-field="userLogin"/> - <call-service service-name="createPartyRole" in-map-name="createPartyRoleInMap"/> - </simple-method> - - <simple-method method-name="getPartyMainRole" - short-description="Get the main role of this party which is a child of the MAIN_ROLE roletypeId"> - <entity-and entity-name="PartyRole" list="partyRoles"> - <field-map field-name="partyId" from-field="parameters.partyId" /> - </entity-and> - <!-- find the role in the list --> - <clear-field field="mainRoleTypeId"/> - <iterate list="partyRoles" entry="partyRole"> - <if-empty field="mainRoleTypeId"> - <entity-and entity-name="RoleTypeIn3Levels" list="roleTypeIn3Levels"> - <field-map field-name="topRoleTypeId" value="MAIN_ROLE" /> - <field-map field-name="lowRoleTypeId" from-field="partyRole.roleTypeId" /> - </entity-and> - <if-not-empty field="roleTypeIn3Levels"> - <set field="mainRoleTypeId" from-field="partyRole.roleTypeId" /> - </if-not-empty> - </if-empty> - </iterate> - <if-not-empty field="mainRoleTypeId"> - <field-to-result field="mainRoleTypeId" result-name="roleTypeId" /> - <entity-one entity-name="RoleType" value-field="roleType"> - <field-map field-name="roleTypeId" from-field="mainRoleTypeId" /> - </entity-one> - <field-to-result field="roleType.description" result-name="description" /> - </if-not-empty> - </simple-method> - - <!-- send account activated email notification --> - <simple-method method-name="sendAccountActivatedEmailNotification" short-description="Notification email on account activated" login-required="false"> - <map-to-map map="parameters" to-map="bodyParameters"/> - <set field="emailType" value="PRDS_CUST_ACTIVATED"/> - <set field="productStoreId" from-field="parameters.productStoreId" /> - <entity-one entity-name="ProductStoreEmailSetting" value-field="storeEmail"> - <field-map field-name="emailType"/> - <field-map field-name="productStoreId"/> - </entity-one> - <entity-and entity-name="WebSite" list="webSites"> - <field-map field-name="productStoreId" from-field="storeEmail.productStoreId"/> - </entity-and> - <first-from-list list="webSites" entry="webSite"/> - <if-not-empty field="storeEmail.bodyScreenLocation"> - <entity-one entity-name="UserLogin" value-field="userLoginParty"/> - <set field="parameters.partyId" from-field="userLoginParty.partyId"/> - <entity-condition entity-name="PartyContactDetailByPurpose" list="partyContactDetailByPurposes" filter-by-date="true"> - <condition-list> - <condition-expr field-name="contactMechPurposeTypeId" operator="equals" value="PRIMARY_EMAIL"/> - <condition-expr field-name="partyId" operator="equals" from-field="parameters.partyId"/> - </condition-list> - </entity-condition> - <first-from-list list="partyContactDetailByPurposes" entry="partyContactDetailByPurpose"/> - <entity-one entity-name="Person" value-field="person"/> - <set field="bodyParameters.person" from-field="person"/> - <set field="emailParams.bodyParameters" from-field="bodyParameters"/> - <set field="contactMechId" from-field="partyContactDetailByPurpose.contactMechId"/> - <entity-one entity-name="ContactMech" value-field="contactMech"/> - <set field="emailParams.sendTo" from-field="contactMech.infoString"/> - <set field="emailParams.subject" from-field="storeEmail.subject"/> - <set field="emailParams.sendFrom" from-field="storeEmail.fromAddress"/> - <set field="emailParams.sendCc" from-field="storeEmail.ccAddress"/> - <set field="emailParams.sendBcc" from-field="storeEmail.bccAddress"/> - <set field="emailParams.contentType" from-field="storeEmail.contentType"/> - <set field="emailParams.bodyScreenUri" from-field="storeEmail.bodyScreenLocation"/> - <set field="emailParams.webSiteId" from-field="webSite.webSiteId"/> - <set field="emailParams.emailType" from-field="emailType"/> - <call-service service-name="sendMailFromScreen" in-map-name="emailParams"/> - </if-not-empty> - </simple-method> -</simple-methods> diff --git a/applications/party/servicedef/services.xml b/applications/party/servicedef/services.xml index 22b8e9f..00b7109 100644 --- a/applications/party/servicedef/services.xml +++ b/applications/party/servicedef/services.xml @@ -25,8 +25,8 @@ under the License. <version>1.0</version> <!-- AddressMatchMap services --> - <service name="createAddressMatchMap" engine="simple" default-entity-name="AddressMatchMap" auth="true" - location="component://party/minilang/party/PartyServices.xml" invoke="createAddressMatchMap"> + <service name="createAddressMatchMap" engine="groovy" default-entity-name="AddressMatchMap" auth="true" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="createAddressMatchMap"> <description>Create an AddressMatchMap record</description> <permission-service service-name="partyBasePermissionCheck" main-action="CREATE"/> <auto-attributes mode="IN" include="pk" optional="false"/> @@ -45,8 +45,8 @@ under the License. <permission-service service-name="partyBasePermissionCheck" main-action="DELETE"/> <auto-attributes mode="IN" include="pk" optional="false"/> </service> - <service name="clearAddressMatchMap" engine="simple" default-entity-name="AddressMatchMap" auth="true" - location="component://party/minilang/party/PartyServices.xml" invoke="clearAddressMatchMap"> + <service name="clearAddressMatchMap" engine="groovy" default-entity-name="AddressMatchMap" auth="true" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="clearAddressMatchMap"> <description>Delete an AddressMatchMap record</description> <permission-service service-name="partyBasePermissionCheck" main-action="DELETE"/> </service> @@ -130,8 +130,8 @@ under the License. <override name="comments" allow-html="safe"/> </service> - <service name="savePartyNameChange" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="savePartyNameChange" auth="true"> + <service name="savePartyNameChange" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="savePartyNameChange" auth="true"> <description>Save Party Name Change</description> <attribute name="partyId" type="String" mode="IN" optional="true"><!-- if empty, will use userLogin.partyId to handle special case for updatePerson, etc --></attribute> <attribute name="groupName" type="String" mode="IN" optional="true"/> @@ -141,8 +141,8 @@ under the License. <attribute name="personalTitle" type="String" mode="IN" optional="true"/> <attribute name="suffix" type="String" mode="IN" optional="true"/> </service> - <service name="getPartyNameForDate" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="getPartyNameForDate" auth="true"> + <service name="getPartyNameForDate" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="getPartyNameForDate" auth="true"> <description>Get Party Name For Date</description> <attribute name="partyId" type="String" mode="IN" optional="false"/> <attribute name="compareDate" type="Timestamp" mode="IN" optional="true"><!-- defaults to now --></attribute> @@ -200,8 +200,8 @@ under the License. <attribute name="roleType" type="org.apache.ofbiz.entity.GenericValue" mode="OUT"/> </service> - <service name="setPartyProfileDefaults" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="setPartyProfileDefaults" auth="true"> + <service name="setPartyProfileDefaults" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="setPartyProfileDefaults" auth="true"> <description>Sets the party (customer) profile defaults</description> <permission-service service-name="partyIdPermissionCheck" main-action="UPDATE"/> <auto-attributes mode="IN" entity-name="PartyProfileDefault" include="all" optional="true"/> @@ -294,8 +294,8 @@ under the License. </service> <!-- Party Relationship services --> - <service name="createPartyRelationship" default-entity-name="PartyRelationship" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="createPartyRelationship" auth="true"> + <service name="createPartyRelationship" default-entity-name="PartyRelationship" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="createPartyRelationship" auth="true"> <description> Create a Relationship between two Parties; if partyIdFrom is not specified the partyId of the current userLogin will be used; @@ -307,8 +307,8 @@ under the License. <auto-attributes include="nonpk" mode="IN" optional="true"/> <override name="partyIdTo" optional="false"/> </service> - <service name="updatePartyRelationship" default-entity-name="PartyRelationship" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="updatePartyRelationship" auth="true"> + <service name="updatePartyRelationship" default-entity-name="PartyRelationship" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="updatePartyRelationship" auth="true"> <description> Update a Relationship between two Parties; if partyIdFrom is not specified the partyId of the current userLogin will be used; @@ -322,8 +322,8 @@ under the License. <override name="roleTypeIdFrom" optional="true"/> <override name="roleTypeIdTo" optional="true"/> </service> - <service name="deletePartyRelationship" default-entity-name="PartyRelationship" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="deletePartyRelationship" auth="true"> + <service name="deletePartyRelationship" default-entity-name="PartyRelationship" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="deletePartyRelationship" auth="true"> <description> Delete a Relationship between two Parties; if partyIdFrom is not specified the partyId of the current userLogin will be used; @@ -367,8 +367,8 @@ under the License. <override name="fromDate" optional="true"/> </service> - <service name="createPartyRelationshipContactAccount" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="createPartyRelationshipContactAccount" auth="true"> + <service name="createPartyRelationshipContactAccount" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="createPartyRelationshipContactAccount" auth="true"> <description>create a company/contact relationship and add the related roles</description> <attribute name="accountPartyId" type="String" mode="IN"/> <attribute name="contactPartyId" type="String" mode="IN"/> @@ -636,8 +636,8 @@ under the License. <permission-service service-name="partyBasePermissionCheck" main-action="DELETE"/> <auto-attributes mode="IN" include="pk"/> </service> - <service name="createPartyIdentifications" engine="simple" default-entity-name="PartyIdentification" - location="component://party/minilang/party/PartyServices.xml" invoke="createPartyIdentifications"> + <service name="createPartyIdentifications" engine="groovy" default-entity-name="PartyIdentification" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="createPartyIdentifications"> <description>create many identifications with format in map identifications : [partyType : TYPE, TYPE : value]</description> <permission-service service-name="partyBasePermissionCheck" main-action="CREATE"/> <attribute name="partyId" mode="IN" type="String"/> @@ -963,8 +963,8 @@ under the License. </group> </service> - <service name="getPartyEmail" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="getPartyEmail" auth="false"> + <service name="getPartyEmail" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="getPartyEmail" auth="false"> <description>Get the main party Email address</description> <attribute name="partyId" type="String" mode="IN" optional="false"/> <attribute name="contactMechPurposeTypeId" type="String" mode="IN" optional="false" default-value="PRIMARY_EMAIL"/> @@ -972,8 +972,8 @@ under the License. <attribute name="contactMechId" type="String" mode="OUT" optional="true"/> </service> - <service name="getPartyTelephone" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="getPartyTelephone" auth="false"> + <service name="getPartyTelephone" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="getPartyTelephone" auth="false"> <description>Get the party Email Telephone</description> <attribute name="contactMechId" type="String" mode="OUT" optional="true"/> <attribute name="partyId" type="String" mode="IN" optional="false"/> @@ -984,8 +984,8 @@ under the License. <attribute name="extension" type="String" mode="OUT" optional="true"/> </service> - <service name="getPartyPostalAddress" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="getPartyPostalAddress" auth="false"> + <service name="getPartyPostalAddress" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="getPartyPostalAddress" auth="false"> <description>Get the party postal address</description> <attribute name="partyId" type="String" mode="IN" optional="false"/> <attribute name="contactMechPurposeTypeId" type="String" mode="INOUT" optional="true"/> @@ -1014,14 +1014,14 @@ under the License. <auto-attributes mode="IN" include="nonpk" optional="true"/> </service> - <service name="sendUpdatePersonalInfoEmailNotification" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="sendUpdatePersonalInfoEmailNotification" auth="false"> + <service name="sendUpdatePersonalInfoEmailNotification" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="sendUpdatePersonalInfoEmailNotification" auth="false"> <attribute name="partyId" type="String" mode="IN" optional="true"/> <attribute name="updatedUserLogin" type="org.apache.ofbiz.entity.GenericValue" mode="IN" optional="true"/> <attribute name="productStoreId" type="String" mode="IN" optional="true"/> </service> - <service name="sendCreatePartyEmailNotification" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="sendCreatePartyEmailNotification" auth="false"> + <service name="sendCreatePartyEmailNotification" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="sendCreatePartyEmailNotification" auth="false"> <attribute name="partyId" type="String" mode="IN" optional="false"/> <attribute name="emailAddress" type="String" mode="IN" optional="false"/> <attribute name="productStoreId" type="String" mode="IN" optional="false"/> @@ -1221,8 +1221,8 @@ under the License. <auto-attributes entity-name="TelecomNumber" include="nonpk" mode="IN" optional="true"/> <attribute name="phoneContactMechId" type="String" mode="IN" optional="true"/> </service> - <service name="createUpdatePerson" engine="simple" default-entity-name="Person" - location="component://party/minilang/party/PartyServices.xml" invoke="createUpdatePerson" auth="false"> + <service name="createUpdatePerson" engine="groovy" default-entity-name="Person" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="createUpdatePerson" auth="false"> <description>Create and Update a person</description> <auto-attributes mode="INOUT" include="pk" optional="true"/> <auto-attributes mode="IN" include="nonpk" optional="true"/> @@ -1289,8 +1289,8 @@ under the License. <implements service="mailProcessInterface"/> </service> - <service name="quickCreateCustomer" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="quickCreateCustomer"> + <service name="quickCreateCustomer" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="quickCreateCustomer"> <description>Create customer profile on basis of First Name ,Last Name and Email Address</description> <attribute name="firstName" type="String" mode="IN" optional="false"/> <attribute name="lastName" type="String" mode="IN" optional="false"/> @@ -1300,8 +1300,8 @@ under the License. <attribute name="subscribeContactList" type="String" mode="IN" optional="true"/> </service> - <service name="getPartyMainRole" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="getPartyMainRole"> + <service name="getPartyMainRole" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="getPartyMainRole"> <description>Get the main role of this party which is a child of the MAIN_ROLE roletypeId</description> <attribute name="partyId" type="String" mode="IN" optional="false"/> <attribute name="roleTypeId" type="String" mode="OUT" optional="true"/> @@ -1327,8 +1327,8 @@ under the License. </service> <!-- send account activated email notification --> - <service name="sendAccountActivatedEmailNotification" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="sendAccountActivatedEmailNotification" auth="false"> + <service name="sendAccountActivatedEmailNotification" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="sendAccountActivatedEmailNotification" auth="false"> <attribute name="userLoginId" type="String" mode="IN" optional="false"/> <attribute name="productStoreId" type="String" mode="IN" optional="false"/> </service> diff --git a/applications/party/servicedef/services_view.xml b/applications/party/servicedef/services_view.xml index d0d2793..8b8c05c 100644 --- a/applications/party/servicedef/services_view.xml +++ b/applications/party/servicedef/services_view.xml @@ -169,8 +169,8 @@ under the License. <attribute name="parties" type="java.util.List" mode="OUT" optional="true"/> </service> - <service name="getPartiesByRelationship" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="getPartiesByRelationship"> + <service name="getPartiesByRelationship" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="getPartiesByRelationship"> <description>Gets all parties related to partyIdFrom through the PartyRelationship entity</description> <auto-attributes mode="IN" include="all" optional="true" entity-name="PartyRelationship"/> <attribute name="parties" type="java.util.Collection" mode="OUT" optional="true"/> @@ -196,8 +196,8 @@ under the License. <attribute name="relatedPartyIdList" type="List" mode="OUT" optional="false"/> </service> - <service name="getParentOrganizations" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="getParentOrganizations"> + <service name="getParentOrganizations" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="getParentOrganizations"> <description> Gets Parent Organizations for an Organization Party. This uses the PartyRelationship table with partyRelationshipTypeId="GROUP_ROLLUP". @@ -211,8 +211,8 @@ under the License. <attribute name="parentOrganizationPartyIdList" type="List" mode="OUT" optional="false"/> </service> - <service name="getChildRoleTypes" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="getChildRoleTypes"> + <service name="getChildRoleTypes" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="getChildRoleTypes"> <description> Get Child RoleTypes. The childRoleTypeIdList coming out will contain the original roleTypeId. @@ -222,16 +222,16 @@ under the License. </service> <!-- PostalAddressBoundary --> - <service name="getPostalAddressBoundary" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="getPostalAddressBoundary"> + <service name="getPostalAddressBoundary" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="getPostalAddressBoundary"> <description>Get all Postal Address Boundaries</description> <permission-service service-name="partyBasePermissionCheck" main-action="VIEW"/> <attribute name="contactMechId" type="String" mode="IN" optional="false"/> <attribute name="geos" type="java.util.List" mode="OUT" optional="true"/> </service> - <service name="getRelatedParties" engine="simple" - location="component://party/minilang/party/PartyServices.xml" invoke="getRelatedParties"> + <service name="getRelatedParties" engine="groovy" + location="component://party/groovyScripts/party/PartyServices.groovy" invoke="getRelatedParties"> <description> Get Parties Related to a Party - The relatedPartyIdList coming out will include the original partyIdFrom |
Free forum by Nabble | Edit this page |