blob: b6f02eff9859fe6ae01f6697aab05879182ee6af [file] [log] [blame]
<?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"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/simple-methods.xsd">
<simple-method method-name="createCommunicationEventWithPermission" short-description="Create a CommunicationEvent with permission check">
<set field="parameters.permission" value="true"/>
<call-simple-method method-name="createCommunicationEvent"/>
</simple-method>
<simple-method method-name="createCommunicationEventWithoutPermission" short-description="Create a CommunicationEvent without permission check">
<set field="parameters.permission" value="false"/>
<call-simple-method method-name="createCommunicationEvent"/>
</simple-method>
<simple-method method-name="createCommunicationEvent" short-description="Create a CommunicationEvent with or w/o permission check">
<if-not-empty field="parameters.parentCommEventId">
<entity-and list-name="roles" entity-name="CommunicationEventRole">
<field-map field-name="communicationEventId" env-name="parameters.parentCommEventId"/>
<field-map field-name="partyId" env-name="parameters.partyIdFrom"/>
</entity-and>
<if-not-empty field="roles">
<first-from-list list-name="roles" entry-name="role"/>
<set field="newStat.communicationEventId" from-field="parameters.parentCommEventId"/>
<set field="newStat.partyId" from-field="parameters.partyIdFrom"/>
<set field="newStat.roleTypeId" from-field="role.roleTypeId"/>
<set field="newStat.statusId" value="COM_ROLE_COMPLETED"/>
<call-service service-name="setCommunicationEventRoleStatus" in-map-name="newStat"/>
</if-not-empty>
</if-not-empty>
<if-empty field="parameters.statusId">
<set value="COM_ENTERED" field="parameters.statusId"/>
</if-empty>
<make-value value-name="newEntity" entity-name="CommunicationEvent"/>
<set-nonpk-fields map-name="parameters" value-name="newEntity"/>
<if-empty field="parameters.communicationEventId">
<sequenced-id-to-env sequence-name="CommunicationEvent" env-name="newEntity.communicationEventId"/>
<else>
<set field="newEntity.communicationEventId" from-field="parameters.communicationEventId"/>
</else>
</if-empty>
<field-to-result field-name="newEntity.communicationEventId" result-name="communicationEventId"/>
<!-- if only contactMechId and no partyIdTo is provided for creation email address find the related party -->
<if-empty field="parameters.partyIdTo">
<if-not-empty field="parameters.contactMechIdTo">
<entity-and entity-name="PartyAndContactMech" list-name="partyContactMechs" filter-by-date="true">
<field-map field-name="contactMechId" env-name="parameters.contactMechIdTo"/>
<field-map field-name="contactMechTypeId" value="EMAIL_ADDRESS"/>
</entity-and>
<first-from-list entry-name="partyContactMech" list-name="partyContactMechs"/>
<set field="newEntity.partyIdTo" from-field="partyContactMech.partyId"/>
</if-not-empty>
</if-empty>
<now-timestamp-to-env env-name="newEntity.entryDate"/>
<create-value value-name="newEntity"/>
<if-not-empty field="parameters.productId">
<make-value value-name="eventProduct" entity-name="CommunicationEventProduct"/>
<set from-field="parameters.productId" field="eventProduct.productId"/>
<set from-field="newEntity.communicationEventId" field="eventProduct.communicationEventId"/>
<create-value value-name="eventProduct"/>
</if-not-empty>
<if-not-empty field="parameters.orderId">
<make-value value-name="eventOrder" entity-name="CommunicationEventOrder"/>
<set from-field="parameters.orderId" field="eventOrder.orderId"/>
<set from-field="newEntity.communicationEventId" field="eventOrder.communicationEventId"/>
<create-value value-name="eventOrder"/>
</if-not-empty>
<if-not-empty field="parameters.custReqId">
<make-value value-name="eventRequest" entity-name="CustRequestCommEvent"/>
<set from-field="parameters.custReqId" field="eventRequest.custReqId"/>
<set from-field="newEntity.communicationEventId" field="eventRequest.communicationEventId"/>
<create-value value-name="eventRequest"/>
</if-not-empty>
<!-- partyIdTo role-->
<if-not-empty field="newEntity.partyIdTo">
<set field="commRole.communicationEventId" from-field="newEntity.communicationEventId" />
<set field="commRole.partyId" from-field="newEntity.partyIdTo" />
<set field="commRole.roleTypeId" value="ADDRESSEE" />
<set field="commRole.contactMechId" from-field="newEntity.contactMechIdTo" />
<set field="commRole.statusId" value="COM_ROLE_CREATED" />
<if-compare field="parameters.permission" value="true" operator="equals">
<call-service service-name="createCommunicationEventRole" in-map-name="commRole"/>
<else>
<call-service service-name="createCommunicationEventRoleWithoutPermission" in-map-name="commRole"/>
</else>
</if-compare>
</if-not-empty>
<!-- partyIdFrom role-->
<if-not-empty field="newEntity.partyIdFrom">
<set field="commRole.communicationEventId" from-field="newEntity.communicationEventId" />
<set field="commRole.partyId" from-field="newEntity.partyIdFrom" />
<set field="commRole.roleTypeId" value="ORIGINATOR" />
<set field="commRole.contactMechId" from-field="newEntity.contactMechIdFrom" />
<set field="commRole.statusId" value="COM_ROLE_COMPLETED" />
<if-compare field="parameters.permission" value="true" operator="equals">
<call-service service-name="createCommunicationEventRole" in-map-name="commRole"/>
<else>
<call-service service-name="createCommunicationEventRoleWithoutPermission" in-map-name="commRole"/>
</else>
</if-compare>
</if-not-empty>
</simple-method>
<simple-method method-name="updateCommunicationEvent"
short-description="Update a CommunicationEvent">
<entity-one entity-name="CommunicationEvent" value-name="event" />
<set field="oldStatusId" from-field="event.statusId" />
<set-nonpk-fields map-name="parameters" value-name="event" />
<if-compare-field operator="not-equals" field="event.statusId"
to-field="oldStatusId">
<call-simple-method method-name="setCommunicationEventStatus" />
</if-compare-field>
<!-- if the from- or to-party changed change also the roles -->
<if-not-empty field="parameters.partyIdFrom">
<if-compare operator="not-equals" value="parameters.partIdFrom" field="event.partyIdFrom">
<!-- check if role exist then delete old role -->
<entity-one entity-name="CommunicationEventRole"
value-name="roleFrom">
<field-map field-name="communicationEventId" env-name="event.communicationEventId" />
<field-map field-name="partyId" env-name="parameters.partyIdFrom" />
<field-map field-name="roleTypeId" value="ORIGINATOR" />
</entity-one>
<if-not-empty field="roleFrom">
<remove-value value-name="roleFrom" />
</if-not-empty>
<!-- add new role -->
<set field="newRoleFrom.communicationEventId" from-field="event.communicationEventId" />
<set field="newRoleFrom.partyId" from-field="event.partyIdFrom" />
<set field="newRoleFrom.roleTypeId" value="ORIGINATOR" />
<set field="newRoleFrom.contactMechId" from-field="event.contactMechIdFrom" />
<call-service service-name="createCommunicationEventRole"
in-map-name="newRoleFrom" />
</if-compare>
</if-not-empty>
<if-empty field="parameters.partyIdTo">
<if-not-empty field="parameters.contactMechIdTo">
<entity-and entity-name="PartyAndContactMech" list-name="partyContactMechs" filter-by-date="true">
<field-map field-name="contactMechId" env-name="parameters.contactMechIdTo"/>
<field-map field-name="contactMechTypeId" value="EMAIL_ADDRESS"/>
</entity-and>
<first-from-list entry-name="partyContactMech" list-name="partyContactMechs"/>
<set field="parameters.partyIdTo" from-field="partyContactMech.partyId"/>
<set field="event.partyIdTo" from-field="partyContactMech.partyId"/>
</if-not-empty>
</if-empty>
<if-not-empty field="parameters.partyIdTo">
<if-compare operator="not-equals" value="parameters.partIdTo"
field="event.partyIdTo">
<!-- check if role exist then delete old role -->
<entity-one entity-name="CommunicationEventRole"
value-name="roleTo">
<field-map field-name="communicationEventId" env-name="event.communicationEventId" />
<field-map field-name="partyId" env-name="event.partyIdTo" />
<field-map field-name="roleTypeId" value="ADDRESSEE" />
</entity-one>
<if-not-empty field="roleTo">
<remove-value value-name="roleTo" />
</if-not-empty>
<!-- add new role -->
<set field="newRoleTo.communicationEventId" from-field="event.communicationEventId" />
<set field="newRoleTo.partyId" from-field="event.partyIdTo" />
<set field="newRoleTo.roleTypeId" value="ADDRESSEE" />
<set field="newRoleTo.contactMechId" from-field="event.contactMechIdTo" />
<call-service service-name="createCommunicationEventRole"
in-map-name="newRoleTo" />
</if-compare>
</if-not-empty>
<store-value value-name="event" />
</simple-method>
<simple-method method-name="deleteCommunicationEvent" short-description="Delete a CommunicationEvent">
<entity-one entity-name="CommunicationEvent" value-name="event"/>
<!-- remove related links to content -->
<get-related value-name="event" relation-name="CommEventContentAssoc" list-name="contentAssocs"/>
<if-not-empty field="contentAssocs">
<iterate entry-name="contentAssoc" list-name="contentAssocs">
<remove-value value-name="contentAssoc"/>
<!-- delete content and dataresource too if requested -->
<if-compare field="parameters.delContentDataResource" value="Y" operator="equals">
<get-related value-name="contentAssoc" relation-name="FromContent" list-name="contents"/>
<if-not-empty field="contents">
<iterate entry-name="content" list-name="contents">
<remove-related value-name="content" relation-name="ContentRole"/>
<remove-value value-name="content"/>
<get-related-one value-name="content" relation-name="DataResource" to-value-name="dataResource"/>
<if-not-empty field="dataResource">
<get-related-one value-name="dataResource" relation-name="ImageDataResource" to-value-name="imageDataResource"/>
<if-not-empty field="imageDataResource">
<remove-value value-name="imageDataResource"/>
</if-not-empty>
<get-related-one value-name="dataResource" relation-name="ElectronicText" to-value-name="electronicText"/>
<if-not-empty field="electronicText">
<remove-value value-name="electronicText"/>
</if-not-empty>
<remove-related value-name="dataResource" relation-name="DataResourceRole"/>
<remove-value value-name="dataResource"/>
</if-not-empty>
</iterate>
</if-not-empty>
</if-compare>
</iterate>
</if-not-empty>
<!-- delete the roles when exist and the event itself -->
<remove-related value-name="event" relation-name="CommunicationEventRole"/>
<remove-value value-name="event"/>
</simple-method>
<simple-method method-name="deleteCommunicationEventWorkEffort" short-description="delete commEvent and workEffort">
<entity-one entity-name="CommunicationEvent" value-name="event"/>
<!-- remove related workeffort when this is the only communicationevent connected to it -->
<get-related value-name="event" relation-name="CommunicationEventWorkEff" list-name="workEffortComs"/>
<if-not-empty field="workEffortComs">
<iterate entry-name="workEffortCom" list-name="workEffortComs">
<remove-value value-name="workEffortCom"/>
<get-related-one value-name="workEffortCom" relation-name="WorkEffort" to-value-name="workEffort"/>
<get-related value-name="workEffort" relation-name="CommunicationEventWorkEff" list-name="otherComs"/>
<if-empty field="otherComs">
<log level="info" message="remove workeffort ${workEffort.workEffortId} and related parties and status"/>
<remove-related value-name="workEffort" relation-name="WorkEffortPartyAssignment"/>
<remove-related value-name="workEffort" relation-name="WorkEffortPartyAssignment"/>
<remove-related value-name="workEffort" relation-name="WorkEffortStatus"/>
<remove-related value-name="workEffort" relation-name="WorkEffortKeyword"/>
<remove-value value-name="workEffort"/>
</if-empty>
</iterate>
</if-not-empty>
<!-- delete the event itself -->
<call-service service-name="deleteCommunicationEvent" in-map-name="parameters"/>
</simple-method>
<!-- since these ancillary operations on communication event cause them to be updated,
they will all use the CME_UPDATE permission -->
<simple-method method-name="createCommunicationEventPurpose" short-description="Create a CommunicationEventPurpose">
<make-value value-name="newEntity" entity-name="CommunicationEventPurpose"/>
<set-pk-fields map-name="parameters" value-name="newEntity"/>
<set-nonpk-fields map-name="parameters" value-name="newEntity"/>
<create-value value-name="newEntity"/>
</simple-method>
<simple-method method-name="removeCommunicationEventPurpose" short-description="Remove a CommunicationEventPurpose">
<entity-one entity-name="CommunicationEventPurpose" value-name="eventPurpose"/>
<remove-value value-name="eventPurpose"/>
</simple-method>
<simple-method method-name="createCommunicationEventRole"
short-description="Create a CommunicationEventRole">
<!-- check if role already exist, then ignore -->
<entity-one entity-name="CommunicationEventRole" value-name="communicationEventRole" />
<if-empty field="communicationEventRole">
<entity-one entity-name="UserLogin" value-name="sysUserLogin">
<field-map field-name="userLoginId" value="system"/>
</entity-one>
<set-service-fields service-name="createPartyRole" map-name="parameters" to-map-name="partyRole"/>
<set field="partyRole.userLogin" from-field="sysUserLogin"/>
<call-service service-name="createPartyRole" in-map-name="partyRole" include-user-login="false"/>
<make-value value-name="newEntity" entity-name="CommunicationEventRole" />
<set-pk-fields map-name="parameters" value-name="newEntity" />
<set-nonpk-fields map-name="parameters" value-name="newEntity" />
<if-empty field="newEntity.statusId">
<set field="newEntity.statusId" value="COM_ROLE_CREATED" />
</if-empty>
<create-value value-name="newEntity" />
</if-empty>
</simple-method>
<simple-method method-name="updateCommunicationEventRole" short-description="Create a CommunicationEventRole">
<entity-one value-name="eventRole" entity-name="CommunicationEventRole" />
<if-not-empty field="eventRole">
<set-nonpk-fields map-name="parameters" value-name="eventRole" />
<store-value value-name="eventRole" />
</if-not-empty>
</simple-method>
<simple-method method-name="removeCommunicationEventRole" short-description="Remove a CommunicationEventRole">
<entity-one entity-name="CommunicationEventRole" value-name="eventRole"/>
<if-not-empty field="eventRole">
<remove-value value-name="eventRole"/>
<if-compare field="parameters.deleteCommEventIfLast" operator="equals" value="Y">
<entity-and list-name="roles" entity-name="CommunicationEventRole">
<field-map field-name="communicationEventId" env-name="eventRole.communicationEventId"/>
</entity-and>
<if-empty field="roles">
<set-service-fields service-name="deleteCommunicationEvent" map-name="parameters" to-map-name="inMapDel"/>
<call-service service-name="deleteCommunicationEvent" in-map-name="inMapDel"/>
</if-empty>
</if-compare>
</if-not-empty>
</simple-method>
<simple-method method-name="markEventRead" short-description="Marks a Communication Event as Read">
<if-empty field="parameters.communicationEventId">
<set from-field="parameters.messageId" field="parameters.communicationEventId"/>
</if-empty>
<entity-one entity-name="CommunicationEvent" value-name="event"/>
<if>
<condition>
<or>
<if-compare-field field="event.partyIdTo" to-field="userLogin.partyId" operator="equals"/>
<if-has-permission permission="PARTYMGR" action="_CME_UPDATE"/>
</or>
</condition>
<then>
<if>
<condition>
<or>
<if-compare field="event.statusId" operator="equals" value="COM_ENTERED"/>
<if-compare field="event.statusId" operator="equals" value="COM_PENDING"/>
</or>
</condition>
<then>
<set value="COM_READ" field="event.statusId"/>
<store-value value-name="event"/>
</then>
</if>
</then>
</if>
</simple-method>
<simple-method method-name="sendEmailDated"
short-description="Checks for email communication events with the status COM_IN_PROGRESS and a startdate which is expired, then send the email">
<now-timestamp-to-env env-name="nowDate" />
<entity-condition entity-name="CommunicationEvent" list-name="communicationEvents">
<condition-list combine="and">
<condition-list combine="or">
<condition-expr field-name="communicationEventTypeId" operator="equals" value="EMAIL_COMMUNICATION" />
<condition-expr field-name="communicationEventTypeId" operator="equals" value="AUTO_EMAIL_COMM" />
</condition-list>
<condition-expr field-name="statusId" operator="equals" value="COM_IN_PROGRESS" />
<condition-list combine="or">
<condition-expr field-name="datetimeStarted" operator="less" env-name="nowDate" />
<condition-expr field-name="datetimeStarted" operator="equals" env-name="nullField" />
</condition-list>
</condition-list>
</entity-condition>
<iterate entry-name="communicationEvent" list-name="communicationEvents">
<set-service-fields service-name="sendCommEventAsEmail" map-name="communicationEvent" to-map-name="inMap"/>
<call-service service-name="sendCommEventAsEmail" in-map-name="inMap" require-new-transaction="true"/>
</iterate>
<set field="cookie" from-field="parameters.cookie" type="Integer"/>
<calculate field-name="cookie" type="Integer">
<calcop operator="add">
<number value="1"/>
<calcop operator="get" field-name="cookie"/>
</calcop>
</calculate>
<set field="pk.runtimeDataId" value="TESTID"/>
<find-by-primary-key map-name="pk" value-name="runtimeData" entity-name="RuntimeData"/>
<set field="newData.runtimeDataId" from-field="pk.runtimeDataId"/>
<set field="newData.cookie" from-field="cookie"/>
<call-class-method method-name="serialize" class-name="org.ofbiz.entity.serialize.XmlSerializer" ret-field-name="dummy">
<field field-name="newData" type="Object"/>
</call-class-method>
<log level="always" message="${dummy}"></log>
<set field="runtimeData.runtimeInfo" from-field="dummy"/>
<store-value value-name="runtimeData"/>
</simple-method>
<simple-method method-name="allocateMsgToParty" short-description="Allocate an emailaddress to an existing/new party, update the communication event accordingly">
<entity-one entity-name="CommunicationEvent" value-name="communicationEvent"/>
<if-empty field="communicationEvent">
<add-error><fail-message message="Communication Event ID: ${parameters.commnicationEventId} not found"/></add-error>
</if-empty>
<if-empty field="parameters.partyId">
<if-empty field="parameters.emailAddress">
<add-error><fail-message message="Email address is required"/></add-error>
</if-empty>
<if-empty field="parameters.lastName">
<add-error><fail-message message="Please enter a lastName"/></add-error>
</if-empty>
<if-empty field="parameters.firstName">
<add-error><fail-message message="Please enter a firstName"/></add-error>
<check-errors/>
</if-empty>
</if-empty>
<check-errors/>
<!-- create partyId if not provided -->
<if-empty field="parameters.partyId">
<set-service-fields service-name="createPerson" map-name="parameters" to-map-name="newParty"/>
<call-service service-name="createPerson" in-map-name="newParty">
<result-to-field result-name="partyId" field-name="parameters.partyId"/>
</call-service>
</if-empty>
<!-- allocate email to the party -->
<if-not-empty field="parameters.emailAddress">
<entity-one entity-name="Party" value-name="party" />
<if-empty field="party">
<add-error>
<fail-message message="Party ID: ${parameters.partyId} not found" />
</add-error>
<check-errors />
</if-empty>
<set field="newEmail.contactMechPurposeTypeId" value="PRIMARY_EMAIL" />
<set field="newEmail.partyId" from-field="parameters.partyId" />
<set field="newEmail.emailAddress" from-field="parameters.emailAddress" />
<call-service service-name="createPartyEmailAddress"
in-map-name="newEmail">
<result-to-field result-name="contactMechId"
field-name="inCom.contactMechIdFrom" />
</call-service>
</if-not-empty>
<!-- update the communication event -->
<set field="inCom.communicationEventId" from-field="parameters.communicationEventId"/>
<set field="inCom.partyIdFrom" from-field="parameters.partyId"/>
<set field="inCom.statusId" value="COM_ENTERED"/>
<call-service service-name="updateCommunicationEvent" in-map-name="inCom"/>
<field-to-request field-name="parameters.communicationEventId" request-name="communicationEventId"/>
<entity-one entity-name="PartyNameView" value-name="nameView"/>
<set field="_event_message_" value="Email addres: ${parameters.emailAddress} allocated to party: ${nameView.groupName}${nameView.firstName} ${nameView.middleName} ${nameView.lastName}[${parameters.partyId}]"/>
</simple-method>
<simple-method method-name="createCustRequestCommEvent" short-description="Create CustRequestCommEvent" >
<make-value value-name="newEntity" entity-name="CustRequestCommEvent"/>
<set-pk-fields map-name="parameters" value-name="newEntity"/>
<create-value value-name="newEntity"/>
</simple-method>
<simple-method method-name="setCommunicationEventStatus" short-description="Set The Communication Event Status">
<entity-one entity-name="CommunicationEvent" value-name="communicationEvent"/>
<field-to-result field-name="communicationEvent.statusId" result-name="oldStatusId"/>
<if-compare-field field="communicationEvent.statusId" to-field="parameters.statusId" operator="not-equals">
<entity-one entity-name="StatusValidChange" value-name="statusChange">
<field-map field-name="statusId" env-name="communicationEvent.statusId"/>
<field-map field-name="statusIdTo" env-name="parameters.statusId"/>
</entity-one>
<if-empty field="statusChange">
<add-error><fail-message message="Status is not a valid change"/></add-error>
<log level="error" message="Cannot change from ${communicationEvent.statusId} to ${parameters.statusId}"/>
<check-errors/>
<else>
<set field="communicationEvent.statusId" from-field="parameters.statusId"/>
<store-value value-name="communicationEvent"/>
<!-- if complete, set all role status fields to 'complete' (intentionally ignoring the status change checking)-->
<if-compare operator="equals" value="COM_COMPLETE" field="parameters.statusId">
<get-related value-name="communicationEvent" relation-name="CommunicationEventRole" list-name="updRoles"/>
<iterate entry-name="updRole" list-name="updRoles">
<set field="updRole.statusId" value="COM_ROLE_COMPLETED"/>
<store-value value-name="updRole"/>
</iterate>
</if-compare>
</else>
</if-empty>
</if-compare-field>
</simple-method>
<simple-method method-name="setCommunicationEventRoleStatus" short-description="Set The Communication Event Status for a specific role">
<entity-one entity-name="CommunicationEventRole" value-name="communicationEventRole"/>
<field-to-result field-name="communicationEventRole.statusId" result-name="oldStatusId"/>
<if-compare-field field="communicationEventRole.statusId" to-field="parameters.statusId" operator="not-equals">
<entity-one entity-name="StatusValidChange" value-name="statusChange">
<field-map field-name="statusId" env-name="communicationEventRole.statusId"/>
<field-map field-name="statusIdTo" env-name="parameters.statusId"/>
</entity-one>
<if-empty field="statusChange">
<add-error><fail-message message="Status is not a valid change"/></add-error>
<log level="error" message="Cannot change from ${communicationEventRole.statusId} to ${parameters.statusId}"/>
<check-errors/>
<else>
<set field="communicationEventRole.statusId" from-field="parameters.statusId"/>
<store-value value-name="communicationEventRole"/>
</else>
</if-empty>
</if-compare-field>
</simple-method>
</simple-methods>