ilscipio/scipio-erp

View on GitHub
applications/workeffort/servicedef/services.xml

Summary

Maintainability
Test Coverage
<?xml version="1.0" encoding="UTF-8" ?>
<!--
This file is subject to the terms and conditions defined in the
files 'LICENSE' and 'NOTICE', which are part of this source
code package.
-->

<services xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/services.xsd">
    <description>Common Application Shared WorkEffort Services</description>
    <vendor>OFBiz</vendor>
    <version>1.0</version>

  <!-- WorkEffort services -->
    <service name="interfaceWorkEffort" default-entity-name="WorkEffort" engine="interface" location="" invoke="">
        <description>WorkEffort Entity Interface</description>
        <auto-attributes mode="IN" include="nonpk" optional="true">
            <exclude field-name="lastStatusUpdate"/>
            <exclude field-name="revisionNumber"/>
            <exclude field-name="createdDate"/>
            <exclude field-name="createdByUserLogin"/>
            <exclude field-name="lastModifiedDate"/>
            <exclude field-name="lastModifiedByUserLogin"/>
        </auto-attributes>
        <override name="workEffortName" allow-html="any"/>
        <override name="description" allow-html="any"/>
    </service>
    <service name="createWorkEffort" default-entity-name="WorkEffort" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffort">
        <description>Create a WorkEffort Entity</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <implements service="interfaceWorkEffort"/>
        <auto-attributes mode="INOUT" include="pk" optional="true"/>
        <attribute name="quickAssignPartyId" type="String" mode="IN" optional="true"/>
        <attribute name="requirementId" type="String" mode="IN" optional="true"/>
        <attribute name="custRequestId" type="String" mode="IN" optional="true"/>
        <attribute name="communicationEventId" type="String" mode="IN" optional="true"/>
        <attribute name="webSiteId" type="String" mode="IN" optional="true"/><!-- for notification services -->
        <override name="workEffortTypeId" optional="false"/>
        <override name="workEffortName" optional="false" allow-html="any"/>
        <override name="currentStatusId" optional="false"/>
        <override name="description" allow-html="any"/>
    </service>
    <service name="createWorkEffortAndPartyAssign" default-entity-name="WorkEffort" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortAndPartyAssign">
        <description>Create a WorkEffort Entity and assign to a party</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <implements service="interfaceWorkEffort"/>
        <auto-attributes mode="INOUT" include="pk" optional="true"/>
        <attribute name="partyId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingPartyId"/>
            </type-validate>
        </attribute>
        <attribute name="roleTypeId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingRoleTypeId"/>
            </type-validate>
        </attribute>
        <attribute name="statusId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingStatusId"/>
            </type-validate>
        </attribute>
        <attribute name="quickAssignPartyId" type="String" mode="IN" optional="true"/>
        <attribute name="requirementId" type="String" mode="IN" optional="true"/>
        <attribute name="communicationEventId" type="String" mode="IN" optional="true"/>
        <override name="workEffortTypeId" optional="false"/>
        <override name="workEffortName" optional="false"/>
        <override name="currentStatusId" optional="false"/>
    </service>
    <service name="updateWorkEffort" default-entity-name="WorkEffort" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateWorkEffort">
        <description>Update a WorkEffort Entity</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <implements service="interfaceWorkEffort"/>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <attribute name="communicationEventId" type="String" mode="IN" optional="true"/>
        <attribute name="reason" type="String" mode="IN" optional="true"/>
        <attribute name="webSiteId" type="String" mode="IN" optional="true"/><!-- for notification services -->
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffort" default-entity-name="WorkEffort" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkEffort">
        <description>Delete a WorkEffort Entity</description>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>

    <service name="copyWorkEffort" engine="simple" auth="true" transaction-timeout="300"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="copyWorkEffort">
        <description>Copies an existing WorkEffort to a new WorkEffort.</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <attribute name="sourceWorkEffortId" mode="IN" type="String" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingSourceWorkEffortId"/>
            </type-validate>
            <description>The ID of the WorkEffort to copy from.</description>
        </attribute>
        <attribute name="targetWorkEffortId" mode="IN" type="String" optional="true">
            <description>The ID of the WorkEffort copy. If empty a new WorkEffort ID will be created.</description>
        </attribute>
        <attribute name="copyWorkEffortAssocs" mode="IN" type="String" optional="true">
            <description>Copy WorkEffort associations (Y/N). Only child WorkEffort associations will be copied.</description>
        </attribute>
        <attribute name="deepCopy" mode="IN" type="String" optional="true">
            <description>Copy associated WorkEfforts (Y/N). Used only when copyWorkEffortAssocs = Y.</description>
        </attribute>
        <attribute name="excludeExpiredAssocs" mode="IN" type="String" optional="true">
            <description>Exclude expired associated WorkEfforts from copying (Y/N). Used only when copyWorkEffortAssocs = Y.</description>
        </attribute>
        <attribute name="copyRelatedValues" mode="IN" type="String" optional="true">
            <description>Copy WorkEffort related values (Y/N).</description>
        </attribute>
        <attribute name="excludeExpiredRelations" mode="IN" type="String" optional="true">
            <description>Exclude expired WorkEffort related values from copying (Y/N). Used only when copyRelatedValues = Y.</description>
        </attribute>
        <attribute name="workEffortId" mode="OUT" type="String" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </attribute>
    </service>

    <service name="duplicateWorkEffort" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="duplicateWorkEffort" auth="true">
        <description>Duplicate a Work Effort. If workEffortId is empty a new workEffortId will be generated.
            Set the statusId of the new WorkEffort to this status, otherwise, set the status to the first of the
            sequenceId of the statusTypeId</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <attribute name="workEffortId" type="String" mode="IN" optional="true"/>
        <attribute name="oldWorkEffortId" type="String" mode="IN" optional="false">
        <type-validate>
            <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingOldWorkEffortTypeId"/>
        </type-validate>
        </attribute>
        <attribute name="duplicateWorkEffortAssocs" type="String" mode="IN" optional="true"/>
        <attribute name="duplicateWorkEffortContents" type="String" mode="IN" optional="true"/>
        <attribute name="duplicateWorkEffortNotes" type="String" mode="IN" optional="true"/>
        <attribute name="duplicateWorkEffortAssignmentRates" type="String" mode="IN" optional="true"/>
        <attribute name="removeWorkEffortAssocs" type="String" mode="IN" optional="true"/>
        <attribute name="removeWorkEffortContents" type="String" mode="IN" optional="true"/>
        <attribute name="removeWorkEffortNotes" type="String" mode="IN" optional="true"/>
        <attribute name="removeWorkEffortAssignmentRates" type="String" mode="IN" optional="true"/>
        <attribute name="workEffortId" type="String" mode="OUT" optional="false"/>
        <attribute name="statusId" type="String" mode="IN" optional="true"/>
    </service>

    <!-- Communication Event WorkEffort -->
    <service name="makeCommunicationEventWorkEffort" default-entity-name="WorkEffort" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="makeCommunicationEventWorkEffort" auth="true">
        <description>Make a Communication Event Workeffort and create the workeffort itself if the ID not supplied</description>
        <auto-attributes include="pk" mode="INOUT" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <attribute name="communicationEventId" type="String" mode="INOUT"/>
        <attribute name="relationDescription" type="String" mode="IN" optional="true"/>
    </service>

    <!-- WorkEffortPartyAssignment services -->
    <service name="assignPartyToWorkEffort" default-entity-name="WorkEffortPartyAssignment" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="assignPartyToWorkEffort">
        <description>Create a WorkEffortPartyAssignment Entity</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <auto-attributes mode="IN" include="nonpk" optional="true">
            <exclude field-name="statusDateTime"/>
        </auto-attributes>
        <override name="fromDate" mode="INOUT" optional="true"/>
        <override name="partyId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingPartyId"/>
            </type-validate>
        </override>
        <override name="roleTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingRoleTypeId"/>
            </type-validate>
        </override>
        <override name="statusId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingStatusId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="updatePartyToWorkEffortAssignment" default-entity-name="WorkEffortPartyAssignment" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updatePartyToWorkEffortAssignment">
        <description>Update a WorkEffortPartyAssignment Entity</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <auto-attributes mode="IN" include="nonpk" optional="true">
            <exclude field-name="statusDateTime"/>
        </auto-attributes>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="partyId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingPartyId"/>
            </type-validate>
        </override>
        <override name="roleTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingRoleTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deletePartyToWorkEffortAssignment" default-entity-name="WorkEffortPartyAssignment" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deletePartyToWorkEffortAssignment">
        <description>delete/set the thrudate on the WorkEffortPartyAssignment Entity to today</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="partyId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingPartyId"/>
            </type-validate>
        </override>
        <override name="roleTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingRoleTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="unassignPartyFromWorkEffort" default-entity-name="WorkEffortPartyAssignment" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="unassignPartyFromWorkEffort">
        <description>Delete a WorkEffortPartyAssignment Entity</description>
        <permission-service service-name="workEffortGenericPermission" main-action="DELETE"/>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="partyId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingPartyId"/>
            </type-validate>
        </override>
        <override name="roleTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingRoleTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>

    <service name="quickAssignPartyToWorkEffort" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="quickAssignPartyToWorkEffort">
        <description>Quick Assign Party To WorkEffort as Owner</description>
        <attribute name="workEffortId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </attribute>
        <attribute name="quickAssignPartyId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingQuickAssignPartyId"/>
            </type-validate>
        </attribute>
    </service>
    <service name="quickAssignPartyToWorkEffortWithRole" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="quickAssignPartyToWorkEffortWithRole">
        <description>Quick Assign Party To WorkEffort as Owner</description>
        <attribute name="workEffortId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </attribute>
        <attribute name="quickAssignPartyId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingQuickAssignPartyId"/>
            </type-validate>
        </attribute>
        <attribute name="roleTypeId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingRoleTypeId"/>
            </type-validate>
        </attribute>
    </service>
    <service name="createWorkEffortNote" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortNote" auth="true">
        <description>Create a WorkEffort Note</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <attribute name="workEffortId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </attribute>
        <attribute name="noteInfo" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingNoteInfo"/>
            </type-validate>
        </attribute>
        <attribute name="noteParty" type="String" mode="IN" optional="true"/>
        <attribute name="noteName" type="String" mode="IN" optional="true"/>
        <attribute name="internalNote" type="String" mode="IN" optional="true"/>
        <attribute name="noteId" type="String" mode="OUT" optional="false"/>
    </service>
    <service name="updateWorkEffortNote" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateWorkEffortNote" auth="true">
        <description>Update a WorkEffort Note</description>
        <attribute name="workEffortId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </attribute>
        <attribute name="noteId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingNoteInfo"/>
            </type-validate>
        </attribute>
        <attribute name="internalNote" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldInternalNote"/>
            </type-validate>
        </attribute>
        <attribute name="noteInfo" type="String" mode="IN" optional="true"/>
    </service>
    <!-- Services for finding Assigned WorkEfforts -->
    <service name="getWorkEffortAssignedEventsForRole" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="getWorkEffortAssignedEventsForRole" >
        <description>Get the active WorkEffort Events where the logged in user is assigned in the specidied role.</description>
        <attribute name="createdPeriod" type="String" mode="IN" optional="true"/>        
        <attribute name="roleTypeId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingRoleTypeId"/>
            </type-validate>
        </attribute>
        <attribute name="events" type="java.util.List" mode="OUT" optional="false"/>
    </service>
    <service name="getWorkEffortAssignedEventsForRoleOfAllParties" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="getWorkEffortAssignedEventsForRoleOfAllParties">
        <description>Get the active WorkEffort Events in the specified role for all the parties.</description>
        <attribute name="createdPeriod" type="String" mode="IN" optional="true"/>
        <attribute name="roleTypeId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingRoleTypeId"/>
            </type-validate>
        </attribute>
        <attribute name="events" type="java.util.List" mode="OUT" optional="false"/>
    </service>
    <service name="getWorkEffortAssignedTasks" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="getWorkEffortAssignedTasks">
        <description>Get WorkEffort Assigned Tasks : workEffort assign to userLogin.partyId and with
            workEffortTypeId = TASK and currentStatusId not in (CAL_DECLINED, CAL_DELEGATED, CAL_COMPLETED, CAL_CANCELLED) and partyAssign.statusId != PRTYASGN_UNASSIGNED
            OR  workEffortTypeId = PROD_ORDER_TASK and currentStatusId not in (PRUN_CANCELLED, PRUN_COMPLETED, PRUN_CLOSED)</description>
        <attribute name="createdPeriod" type="String" mode="IN" optional="true"/>
        <attribute name="tasks" type="java.util.List" mode="OUT" optional="false"/>
    </service>
    <service name="getWorkEffortAssignedActivities" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="getWorkEffortAssignedActivities">
        <description>Get WorkEffort Assigned Activities : workEffort assign to userLogin.partyId and with
            workEffortTypeId = ACTIVITY and currentStatusId not in (WF_COMPLETED, WF_TERMINATED, WF_ABORTED)
            and partyAssign.statusId not in (CAL_DECLINED, CAL_DELEGATED, CAL_COMPLETED, CAL_CANCELLED, PRTYASGN_UNASSIGNED)</description>
        <attribute name="createdPeriod" type="String" mode="IN" optional="true"/>
        <attribute name="activities" type="java.util.List" mode="OUT" optional="false"/>
    </service>    
    <service name="getWorkEffortAssignedActivitiesByRole" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="getWorkEffortAssignedActivitiesByRole">
        <description>Get WorkEffort Assigned Activities By Role : same condition as getWorkEffortAssignedActivities but on view WorkEffortPartyAssignByRole
            to be able to have all party roles</description>
        <attribute name="createdPeriod" type="String" mode="IN" optional="true"/>
        <attribute name="roleActivities" type="java.util.List" mode="OUT" optional="false"/>
    </service>
    <service name="getWorkEffortAssignedActivitiesByGroup" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="getWorkEffortAssignedActivitiesByGroup">
        <description>Get WorkEffort Assigned Activities By Group : same condition as getWorkEffortAssignedActivities but on view WorkEffortPartyAssignByGroup
            to be able to have all parties associated to userLogin.partyId by PartyRelationship</description>
        <attribute name="createdPeriod" type="String" mode="IN" optional="true"/>
        <attribute name="groupActivities" type="java.util.List" mode="OUT" optional="false"/>
    </service>
    
    <!-- SCIPIO: New services for finding completed WorkEfforts -->
    <service name="getWorkEffortCompletedTasks" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="getWorkEffortCompletedTasks">
        <description>Get WorkEffort Completed Tasks : workEffort assign to userLogin.partyId and with
            workEffortTypeId = TASK and currentStatusId in (CAL_DECLINED, CAL_DELEGATED, CAL_COMPLETED, CAL_CANCELLED)
            OR  workEffortTypeId = PROD_ORDER_TASK and currentStatusId in (PRUN_CANCELLED, PRUN_COMPLETED, PRUN_CLOSED)</description>
        <attribute name="createdPeriod" type="String" mode="IN" optional="true"/>
        <attribute name="tasks" type="java.util.List" mode="OUT" optional="false"/>
    </service>
    <service name="getWorkEffortCompletedActivities" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="getWorkEffortCompletedActivities">
        <description>Get WorkEffort Completed Activities : workEffort assign to userLogin.partyId and with
            workEffortTypeId = ACTIVITY and partyAssign.statusId in (WF_COMPLETED, WF_TERMINATED, WF_ABORTED)
            and currentStatusId in (CAL_DECLINED, CAL_DELEGATED, CAL_COMPLETED, CAL_CANCELLED, PRTYASGN_UNASSIGNED)</description>
        <attribute name="createdPeriod" type="String" mode="IN" optional="true"/>
        <attribute name="activities" type="java.util.List" mode="OUT" optional="false"/>
    </service>

    <!-- Worker services -->
    <service name="getWorkEffort" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="getWorkEffort">
        <description>Get WorkEffort</description>
        <attribute name="workEffortId" type="java.lang.String" mode="INOUT" optional="true"/>
        <attribute name="currentStatusId" type="java.lang.String" mode="IN" optional="true"/>
        <attribute name="workEffort" type="org.ofbiz.entity.GenericValue" mode="OUT" optional="true"/>
        <attribute name="canView" type="java.lang.Boolean" mode="OUT" optional="true"/>
        <attribute name="tryEntity" type="java.lang.Boolean" mode="OUT" optional="true"/>
        <attribute name="currentStatusItem" type="org.ofbiz.entity.GenericValue" mode="OUT" optional="true"/>
        <attribute name="partyAssigns" type="java.util.Collection" mode="OUT" optional="true"/>
    </service>
    <service name="getWorkEffortEventsByPeriod" auth="true" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="getWorkEffortEventsByPeriod">
        <description>Get WorkEffort Events by a period specified by periodType attribute (one of the
          java.util.Calendar field values). Return a Map with periodStart as the key and a Collection of events for that period as value
          If filterOutCanceledEvents is set to Boolean(true) then workEfforts with currentStatusId=EVENT_CANCELLED will not be returned.
          To limit the events to a particular partyId, specify the partyId.  To limit the events to a set of partyIds, specify a Collection of partyIds.
        </description>
        <attribute name="calendarType" type="String" mode="IN" optional="true">
            <description>Can be either CAL_PERSONAL or CAL_MANUFACTURING, defaults to CAL_PERSONAL. The value controls the type of work efforts
            returned. To bypass this behavior, use an invalid value (like VOID).</description>
        </attribute>
        <attribute name="partyId" type="String" mode="IN" optional="true"/>
        <attribute name="partyIds" type="java.util.Collection" mode="IN" optional="true"/>
        <attribute name="facilityId" type="String" mode="IN" optional="true"/>
        <attribute name="fixedAssetId" type="String" mode="IN" optional="true"/>
        <attribute name="workEffortTypeId" type="String" mode="IN" optional="true"/>
        <attribute name="start" type="java.sql.Timestamp" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingStart"/>
            </type-validate>
        </attribute>
        <attribute name="numPeriods" type="java.lang.Integer" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingNumPeriods"/>
            </type-validate>
        </attribute>
        <attribute name="periodType" type="java.lang.Integer" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingNumPeriodType"/>
            </type-validate>
        </attribute>
        <attribute name="filterOutCanceledEvents" type="java.lang.Boolean" mode="IN" optional="true"/>
        <attribute name="entityExprList" type="java.util.List" mode="IN" optional="true"/>
        <attribute name="periods" type="java.util.List" mode="OUT" optional="false"/>
        <attribute name="maxConcurrentEntries" type="java.lang.Integer" mode="OUT" optional="false"/>
    </service>
    <service name="removeDuplicateWorkEfforts" auth="true" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="removeDuplicateWorkEfforts">
        <description>Removes duplicate work efforts from a list of work efforts.</description>
        <attribute name="workEffortIterator" type="java.util.ListIterator" mode="IN" optional="true"/>
        <attribute name="workEfforts" type="java.util.List" mode="INOUT" optional="true"/>
    </service>
    <service name="getProductManufacturingSummaryByFacility" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="getProductManufacturingSummaryByFacility">
        <description>
            Create a map with an entry for each facility. The value is another map with information about
            the manufacturing orders running in the facility for the given product:
            incoming - incomingProductionRunList, estimatedQuantityTotal.  Shows quantity of product to be produced.
            outgoing - outgoingProductionRunList, estimatedQuantityTotal.  Shows quantity of product to be consumed.
        </description>
        <attribute name="productId" type="String" mode="IN" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingProductId"/>
            </type-validate>
        </attribute>
        <attribute name="facilityId" type="String" mode="IN" optional="true"/>
        <attribute name="summaryInByFacility" type="Map" mode="OUT" optional="false"/>
        <attribute name="summaryOutByFacility" type="Map" mode="OUT" optional="false"/>
    </service>
    <service name="createWorkEffortAssoc" default-entity-name="WorkEffortAssoc" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortAssoc">
        <description>
            Create a WorkEffort Assoc, for linking task to describe a project or
            for linking routing with its routingTasks
        </description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="INOUT" optional="false"/><!-- SCIPIO: 2018-05-02: added mode="INOUT" to read back fromDate -->
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="workEffortAssocTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortAssocTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortIdFrom" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortIdFrom"/>
            </type-validate>
        </override>
        <override name="workEffortIdTo" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortIdTo"/>
            </type-validate>
        </override>
        <override name="fromDate" optional="true" mode="INOUT"/>
    </service>
    <service name="updateWorkEffortAssoc" default-entity-name="WorkEffortAssoc" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateWorkEffortAssoc">
        <description>
            Update a WorkEffort Assoc, for linking task to describe a project or
            for linking routing with its routingTasks
        </description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="workEffortAssocTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortAssocTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortIdFrom" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortIdFrom"/>
            </type-validate>
        </override>
        <override name="workEffortIdTo" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortIdTo"/>
            </type-validate>
        </override>
    </service>
    <service name="removeWorkEffortAssoc" engine="simple" default-entity-name="WorkEffortAssoc"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="removeWorkEffortAssoc">
        <description>
            Remove a WorkEffort Assoc, for linking task to describe a project or
            for linking routing with its routingTasks
        </description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="workEffortAssocTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortAssocTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortIdFrom" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortIdFrom"/>
            </type-validate>
        </override>
        <override name="workEffortIdTo" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortIdTo"/>
            </type-validate>
        </override>
    </service>

    <service name="copyWorkEffortAssocs" engine="simple" auth="true" transaction-timeout="300"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="copyWorkEffortAssocs">
        <description>Copies WorkEffortAssocs from one WorkEffort to another WorkEffort. Only child WorkEffort associations will be copied.</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <attribute name="sourceWorkEffortId" mode="IN" type="String" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingSourceWorkEffortId"/>
            </type-validate>
            <description>The ID of the WorkEffort to copy the associations from.</description>
        </attribute>
        <attribute name="targetWorkEffortId" mode="IN" type="String" optional="true">
            <description>The ID of the WorkEffort to copy the associations to.</description>
        </attribute>
        <attribute name="deepCopy" mode="IN" type="String" optional="true">
            <description>Copy associated WorkEfforts (Y/N).</description>
        </attribute>
        <attribute name="excludeExpiredAssocs" mode="IN" type="String" optional="true">
            <description>Exclude expired WorkEffort associations from copying (Y/N).</description>
        </attribute>
        <attribute name="copyRelatedValues" mode="IN" type="String" optional="true">
            <description>Copy WorkEffort related values (Y/N). Used only when deepCopy = Y.</description>
        </attribute>
        <attribute name="excludeExpiredRelations" mode="IN" type="String" optional="true">
            <description>Exclude expired WorkEffort related values from copying (Y/N). Used only when deepCopy = Y.</description>
        </attribute>
    </service>

    <service name="createWorkEffortAndAssoc" engine="simple" location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortAndAssoc" auth="true">
        <description>Creates a WorkEffort entity and WorkEffortAssoc</description>
        <auto-attributes include="pk" mode="INOUT" optional="true" entity-name="WorkEffort"/>
        <auto-attributes include="nonpk" mode="IN" optional="true" entity-name="WorkEffort"/>
        <auto-attributes include="pk" mode="INOUT" optional="false" entity-name="WorkEffortAssoc"/>
        <auto-attributes include="nonpk" mode="IN" optional="true" entity-name="WorkEffortAssoc"/>
        <attribute name="quickAssignPartyId" type="String" mode="IN" optional="true"/>
        <override name="workEffortIdTo" optional="true"/>
        <override name="fromDate" optional="true"/>
        <override name="currentStatusId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingCurrentStatusId"/>
            </type-validate>
        </override>
        <override name="workEffortName" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortName"/>
            </type-validate>
        </override>
        <override name="workEffortAssocTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortAssocTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortIdFrom" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortIdFrom"/>
            </type-validate>
        </override>
        <override name="workEffortTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortTypeId"/>
            </type-validate>
        </override>
    </service>
    <service name="updateWorkEffortAndAssoc" engine="group" location="updateWorkEffortAndAssoc" invoke="" auth="true">
        <description>Creates a WorkEffort entity and WorkEffortAssoc</description>
        <auto-attributes include="pk" mode="INOUT" optional="true" entity-name="WorkEffort"/>
        <auto-attributes include="nonpk" mode="IN" optional="true" entity-name="WorkEffort"/>
        <auto-attributes include="pk" mode="INOUT" optional="true" entity-name="WorkEffortAssoc"/>
        <auto-attributes include="nonpk" mode="IN" optional="true" entity-name="WorkEffortAssoc"/>
    </service>

    <service name="createWorkEffortGoodStandard" engine="simple" default-entity-name="WorkEffortGoodStandard"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortGoodStandard">
        <description>
            Create a WorkEffort - Product Assoc, for linking WorkEffort to In or Out  Product,
            for routing it's the link between Manufactured Product with its routings
        </description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="fromDate" optional="true"/>
        <override name="productId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingProductId"/>
            </type-validate>
        </override>
        <override name="workEffortGoodStdTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortGoodStdTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
        <override name="estimatedQuantity" type-convert="true"/><!-- SCIPIO: Support any type that converts to Double -->
    </service>
    <service name="updateWorkEffortGoodStandard" engine="simple" default-entity-name="WorkEffortGoodStandard"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateWorkEffortGoodStandard">
        <description>
            Update a WorkEffort - Product Assoc, for linking WorkEffort to In or Out  Product,
            for routing it's the link between Manufactured Product with its routings
        </description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="productId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingProductId"/>
            </type-validate>
        </override>
        <override name="workEffortGoodStdTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortGoodStdTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
        <override name="estimatedQuantity" type-convert="true"/><!-- SCIPIO: Support any type that converts to Double -->
    </service>
    <service name="removeWorkEffortGoodStandard" engine="simple" default-entity-name="WorkEffortGoodStandard"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="removeWorkEffortGoodStandard">
        <description>Remove a WorkEffort - Product Assoc, for linking WorkEffort to In or Out  Product,
            for routing it's the link between Manufactured Product with its routings
        </description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="productId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingProductId"/>
            </type-validate>
        </override>
        <override name="workEffortGoodStdTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortGoodStdTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="assignInventoryToWorkEffort" default-entity-name="WorkEffortInventoryAssign" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="assignInventoryToWorkEffort" auth="true">
        <description>Create or update WorkEffortInventoryAssign</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="inventoryItemId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingInventoryItemId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
        <override name="quantity" type-convert="true"/><!-- SCIPIO: improper ofbiz interface usage compatibility workaround -->
    </service>
    <service name="createCommunicationEventWorkEff" engine="simple" location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="makeCommunicationEventWorkEffort" auth="true">
        <description>Creates a CommunicationEvent entity and CommunicationEventWorkEff</description>
        <auto-attributes include="pk" mode="INOUT" optional="true" entity-name="CommunicationEvent"/>
        <auto-attributes include="nonpk" mode="IN" optional="true" entity-name="CommunicationEvent"/>
        <auto-attributes include="pk" mode="INOUT" optional="true" entity-name="CommunicationEventWorkEff"/>
        <auto-attributes include="nonpk" mode="IN" optional="true" entity-name="CommunicationEventWorkEff"/>
    </service>
    <service name="updateCommunicationEventWorkEff" engine="simple" location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateCommunicationEventWorkEff" auth="true">
        <description>Updates CommunicationEventWorkEff</description>
        <permission-service service-name="workEffortManagerPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="CommunicationEventWorkEff"/>
        <auto-attributes include="nonpk" mode="IN" optional="true" entity-name="CommunicationEventWorkEff"/>
        <override name="communicationEventId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingCommunicationEventId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteCommunicationEventWorkEff" engine="simple" location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteCommunicationEventWorkEff" auth="true">
        <description>Deletes CommunicationEventWorkEff</description>
        <permission-service service-name="workEffortManagerPermission" main-action="DELETE"/>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="CommunicationEventWorkEff"/>
        <override name="communicationEventId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingCommunicationEventId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="createWorkEffortRequest" engine="simple" location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortRequest" auth="true">
        <description>Creates a CustRequestWorkEffort</description>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="CustRequestWorkEffort"/>
        <auto-attributes include="all" mode="IN" optional="true" entity-name="CustRequest"/>
        <override name="custRequestId" optional="true" mode="INOUT">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingCustRequestId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
        <override name="description" allow-html="any"/>
    </service>
    <service name="deleteWorkEffortRequest" engine="simple" location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkEffortRequest" auth="true">
        <description>Deletes a CustRequestWorkEffort</description>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="CustRequestWorkEffort"/>
        <override name="custRequestId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingCustRequestId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="createWorkEffortRequestItemAndRequestItem" engine="group" location="createWorkEffortRequestItemAndRequestItem" invoke="" auth="true">
        <description>Creates a CustRequestItem entity and CustRequestItemWorkEffort</description>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="CustRequestItemWorkEffort"/>
        <auto-attributes include="all" mode="IN" optional="true" entity-name="CustRequestItem"/>
        <attribute name="custRequestItemExists" type="java.lang.String" mode="OUT" optional="true"/>
        <override name="custRequestId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingCustRequestId"/>
            </type-validate>
        </override>
        <override name="custRequestItemSeqId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingCustRequestItemSeqId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="createWorkEffortRequestItem" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortRequestItem" auth="true">
        <description>Creates a CustRequestItemWorkEffort</description>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="CustRequestItemWorkEffort"/>
        <auto-attributes include="all" mode="IN" optional="true" entity-name="CustRequestItem"/>
        <attribute name="custRequestItemExists" type="java.lang.String" mode="IN" optional="true"/>
        <override name="custRequestId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingCustRequestId"/>
            </type-validate>
        </override>
        <override name="custRequestItemSeqId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingCustRequestItemSeqId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortRequestItem" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkEffortRequestItem" auth="true">
        <description>Deletes a CustRequestItemWorkEffort</description>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="CustRequestItemWorkEffort"/>
        <override name="custRequestId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingCustRequestId"/>
            </type-validate>
        </override>
        <override name="custRequestItemSeqId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingCustRequestItemSeqId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="checkCustRequestItemExists" engine="simple" location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="checkCustRequestItemExists" auth="true">
        <description>Checks to see if a CustRequestItem exists</description>
        <auto-attributes include="pk" mode="IN" optional="true" entity-name="CustRequestItem"/>
        <attribute name="custRequestItemExists" type="java.lang.String" mode="OUT" optional="true"/>
    </service>

    <service name="createWorkEffortQuote" engine="simple" location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortQuote" auth="true">
        <description>Creates a QuoteWorkEffort</description>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="QuoteWorkEffort"/>
        <auto-attributes include="all" mode="IN" optional="true" entity-name="Quote"/>
        <override name="quoteId" optional="false" mode="INOUT">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingQuoteId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortQuote" default-entity-name="QuoteWorkEffort" engine="simple" auth="true"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkEffortQuote">
        <description>Deletes a QuoteWorkEffort</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <override name="quoteId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingQuoteId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>

    <service name="createWorkRequirementFulfillment" engine="simple" auth="true"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkRequirementFulfillment">
        <description>Creates a WorkRequirementFulfillment</description>
        <auto-attributes include="pk" mode="IN" optional="true" entity-name="WorkRequirementFulfillment"/>
        <auto-attributes include="nonpk" mode="IN" optional="true" entity-name="WorkRequirementFulfillment"/>
        <auto-attributes include="all" mode="IN" optional="true" entity-name="Requirement"/>
        <!-- SCIPIO: 2018-09-10: TODO: REVIEW: upstream set these to optional="false", which are really optional?
        <override name="workEffortId" optional="true">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
        <override name="requirementId" optional="true">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingRequirementId"/>
            </type-validate>
        </override>
        -->
    </service>
    <service name="deleteWorkRequirementFulfillment" engine="simple" auth="true"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkRequirementFulfillment">
        <description>Deletes a WorkRequirementFulfillment</description>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="WorkRequirementFulfillment"/>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
        <override name="requirementId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingRequirementId"/>
            </type-validate>
        </override>
    </service>

    <service name="createShoppingListWorkEffort" engine="simple" location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createShoppingListWorkEffort" auth="true">
        <description>Creates a ShoppingListWorkEffort</description>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="ShoppingListWorkEffort"/>
        <auto-attributes include="nonpk" mode="IN" optional="true" entity-name="ShoppingListWorkEffort"/>
        <auto-attributes include="all" mode="IN" optional="true" entity-name="ShoppingList"/>
        <override name="shoppingListId" optional="true" mode="INOUT"/>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteShoppingListWorkEffort" engine="simple" location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteShoppingListWorkEffort" auth="true">
        <description>Deletes a ShoppingListWorkEffort</description>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="ShoppingListWorkEffort"/>
        <override name="shoppingListId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingShoppingListId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>

    <service name="createOrderHeaderWorkEffort" engine="simple" auth="true"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createOrderHeaderWorkEffort">
        <description>Creates a OrderHeaderWorkEffort</description>
        <auto-attributes include="pk" mode="IN" optional="false" entity-name="OrderHeaderWorkEffort"/>
        <auto-attributes include="nonpk" mode="IN" optional="true" entity-name="OrderHeaderWorkEffort"/>
        <auto-attributes include="all" mode="IN" optional="true" entity-name="OrderHeader"/>
        <override name="orderId" optional="true" mode="INOUT"/>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteOrderHeaderWorkEffort" default-entity-name="OrderHeaderWorkEffort" engine="simple" auth="true"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteOrderHeaderWorkEffort">
        <description>Deletes a OrderHeaderWorkEffort</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <override name="orderId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingOrderId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="setWorkEffortFixedAssetAssign" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="setWorkEffortFixedAssetAssign" auth="true">
        <description>Based on task's estimate dates, write assign entries for the fixed asset the task is assigned to</description>
        <attribute mode="IN" name="workEffortId" optional="false" type="String">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </attribute>
    </service>
    <!-- WorkEffort-FixedAsset management services -->
    <service name="createWorkEffortFixedAssetStd" engine="simple" auth="true"
            default-entity-name="WorkEffortFixedAssetStd"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml"
            invoke="createWorkEffortFixedAssetStd">
        <description>Creates a WorkEffortFixedAssetStd entry to associate a routing task
            with a fixed asset (type)</description>
        <permission-service service-name="workEffortManagerPermission" main-action="CREATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="fixedAssetTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFixedAssetTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="updateWorkEffortFixedAssetStd" engine="simple" auth="true"
            default-entity-name="WorkEffortFixedAssetStd"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml"
            invoke="updateWorkEffortFixedAssetStd">
        <description>Updates an existing WorkEffortFixedAssetStd entry</description>
        <permission-service service-name="workEffortManagerPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="fixedAssetTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFixedAssetTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="removeWorkEffortFixedAssetStd" engine="simple" auth="true"
            default-entity-name="WorkEffortFixedAssetStd"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml"
            invoke="removeWorkEffortFixedAssetStd">
        <description>Removes a WorkEffortFixedAssetStd, thus removing the association between a routing task
            and a fixed asset (type)</description>
        <permission-service service-name="workEffortManagerPermission" main-action="DELETE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <override name="fixedAssetTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFixedAssetTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="createWorkEffortFixedAssetAssign" engine="simple" auth="true"
            default-entity-name="WorkEffortFixedAssetAssign"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml"
            invoke="createWorkEffortFixedAssetAssign">
        <description>Create a WorkEffortFixedAssetAssign entry to associate a fixed asset
            with a work effort (e.g. a production run task)</description>
        <permission-service service-name="workEffortManagerPermission" main-action="CREATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="fromDate" optional="true" mode="IN"/>
        <override name="fixedAssetId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFixedAssetId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="updateWorkEffortFixedAssetAssign" engine="simple" auth="true"
            default-entity-name="WorkEffortFixedAssetAssign"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml"
            invoke="updateWorkEffortFixedAssetAssign">
        <description>Update an existing WorkEffortFixedAssetAssign entry</description>
        <permission-service service-name="workEffortManagerPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="fixedAssetId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFixedAssetId"/>
            </type-validate>
        </override>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="removeWorkEffortFixedAssetAssign" engine="simple" auth="true"
            default-entity-name="WorkEffortFixedAssetAssign"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml"
            invoke="removeWorkEffortFixedAssetAssign">
        <description>Remove a WorkEffortFixedAssign entry, which removes the association between a fixed asset
            and a work effort (e.g. a production run task)</description>
        <permission-service service-name="workEffortManagerPermission" main-action="DELETE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <override name="fixedAssetId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFixedAssetId"/>
            </type-validate>
        </override>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>

    <!-- work effort content services -->
    <service name="createWorkEffortContent" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml"
        invoke="createWorkEffortContent"
        default-entity-name="WorkEffortContent" auth="true">
        <description>Create a Work Effort Content</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="fromDate" optional="true"/>
        <override name="contentId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingContentId"/>
            </type-validate>
        </override>
        <override name="workEffortContentTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortContentTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="updateWorkEffortContent" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml"
        invoke="updateWorkEffortContent"
        default-entity-name="WorkEffortContent" auth="true">
        <description>Update a Work Effort Content</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="contentId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingContentId"/>
            </type-validate>
        </override>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="workEffortContentTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortContentTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortContent" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml"
        invoke="deleteWorkEffortContent"
        default-entity-name="WorkEffortContent" auth="true">
        <description>Delete a Work Effort Content</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="contentId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingContentId"/>
            </type-validate>
        </override>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="workEffortContentTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortContentTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>

    <!-- simple use content services -->
    <service name="createWorkEffortTextContent" engine="group" transaction-timeout="300" auth="true">
        <description>Creates a Text Document DataResource and Content Records</description>
        <group>
            <invoke name="createTextContent" result-to-context="true"/>
            <invoke name="createWorkEffortContent"/>
        </group>
    </service>
    <service name="updateWorkEffortTextContent" engine="group" transaction-timeout="300" auth="true">
        <description>Update a Text Document DataResource and Content Records</description>
        <group>
            <invoke name="updateTextContent" result-to-context="true"/>
            <invoke name="updateWorkEffortContent"/>
        </group>
    </service>

    <service name="uploadWorkEffortContentFile" engine="group" transaction-timeout="300">
        <description>Upload and attach a file to a WorkEffort</description>
        <group>
            <invoke name="createContentFromUploadedFile" result-to-context="true"/>
            <invoke name="createWorkEffortContent"/>
        </group>
    </service>

    <!-- work effort review services -->
    <service name="createWorkEffortReview" default-entity-name="WorkEffortReview" engine="simple"
                location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortReview" auth="true">
        <description>Create a Work Effort Review</description>
        <permission-service service-name="workEffortManagerPermission" main-action="CREATE"/>
        <auto-attributes include="pk" mode="IN" optional="true"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="updateWorkEffortReview" default-entity-name="WorkEffortReview" engine="simple"
                location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateWorkEffortReview" auth="true">
        <description>Update a Work Effort Review</description>
        <permission-service service-name="workEffortManagerPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="reviewDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingReviewDate"/>
            </type-validate>
        </override>
        <override name="userLoginId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingUserLoginId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortReview" engine="simple"
                location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkEffortReview" auth="true">
        <description>Remove a Work Effort Review</description>
        <permission-service service-name="workEffortManagerPermission" main-action="DELETE"/>
        <auto-attributes entity-name="WorkEffortReview" include="pk" mode="IN" optional="false"/>
        <override name="reviewDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingReviewDate"/>
            </type-validate>
        </override>
        <override name="userLoginId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingUserLoginId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>

    <service name="indexWorkEffortKeywords" engine="simple"
                location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="indexWorkEffortKeywords">
        <description>Index the Keywords for a WorkEffort</description>
        <attribute name="workEffortId" type="String" mode="IN" optional="false"/>
        <attribute name="workEffortInstance" type="org.ofbiz.entity.GenericValue" mode="IN" optional="true"/>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="createWorkEffortKeyword" default-entity-name="WorkEffortKeyword" engine="simple"
                location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortKeyword" auth="true">
        <description>Create a Work Effort Keyword</description>
        <permission-service service-name="workEffortManagerPermission" main-action="CREATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="keyword" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingKeyword"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortKeyword" engine="simple"
                location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkEffortKeyword" auth="true">
        <description>Remove a Work Effort Keyword</description>
        <permission-service service-name="workEffortManagerPermission" main-action="DELETE"/>
        <auto-attributes entity-name="WorkEffortKeyword" include="pk" mode="IN" optional="false"/>
        <override name="keyword" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingKeyword"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="createWorkEffortKeywords" default-entity-name="WorkEffortKeyword" engine="simple"
                location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortKeywords" auth="true">
        <description>Create a Work Effort Keyword</description>
        <permission-service service-name="workEffortManagerPermission" main-action="CREATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="keyword" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingKeyword"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortKeywords" engine="simple"
                location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkEffortKeywords" auth="true">
        <description>Remove all Work Effort Keyword</description>
        <permission-service service-name="workEffortManagerPermission" main-action="DELETE"/>
        <auto-attributes entity-name="WorkEffort" include="pk" mode="IN" optional="false"/>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>

    <!-- Permission Services -->
    <service name="workEffortManagerPermission" engine="simple"
             location="component://workeffort/script/org/ofbiz/workeffort/permission/WorkEffortPermissionServices.xml" invoke="workEffortManagerPermission">
        <implements service="permissionInterface"/>
    </service>
    <service name="workEffortGenericPermission" engine="simple"
             location="component://workeffort/script/org/ofbiz/workeffort/permission/WorkEffortPermissionServices.xml" invoke="workEffortGenericPermission">
        <implements service="permissionInterface"/>
        <attribute name="workEffortId" mode="IN" type="String" optional="true"/>
        <attribute name="workEffortParentId" mode="IN" type="String" optional="true"/>
    </service>
    <service name="timesheetUpdatePermission" engine="simple"
             location="component://workeffort/script/org/ofbiz/workeffort/permission/WorkEffortPermissionServices.xml" invoke="timesheetUpdatePermission">
        <implements service="permissionInterface"/>
        <attribute name="workEffortId" mode="IN" type="String" optional="true"></attribute>
    </service>

    <!-- WorkEffort Skill Standard Services -->
    <service name="createWorkEffortSkillStandard" engine="simple" default-entity-name="WorkEffortSkillStandard"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortSkillStandard" auth="true">
        <description>Create WorkEffortSkillStandard</description>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
        <override name="skillTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingSkillTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="updateWorkEffortSkillStandard" engine="simple" default-entity-name="WorkEffortSkillStandard"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateWorkEffortSkillStandard" auth="true">
        <description>Update WorkEffortSkillStandard</description>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
        <override name="skillTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingSkillTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortSkillStandard" engine="simple" default-entity-name="WorkEffortSkillStandard"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkEffortSkillStandard" auth="true">
        <description>Delete WorkEffortSkillStandard</description>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <override name="skillTypeId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingSkillTypeId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>

    <!-- WorkEffort Attribute Services -->
    <service name="createWorkEffortAttribute" default-entity-name="WorkEffortAttribute" engine="entity-auto" invoke="create" auth="true">
        <description>Create a WorkEffort Attribute</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="attrName" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingAttrName"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="updateWorkEffortAttribute" default-entity-name="WorkEffortAttribute" engine="entity-auto" invoke="update" auth="true">
        <description>Update a WorkEffort Attribute</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="attrName" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingAttrName"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortAttribute" default-entity-name="WorkEffortAttribute" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete a WorkEffort Attribute</description>
        <permission-service service-name="workEffortGenericPermission" main-action="DELETE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <override name="attrName" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingAttrName"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>

    <!-- WorkEffort Contact Mech Services -->
    <service name="createWorkEffortContactMech" engine="simple"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortContactMech" auth="true">
        <description>Create WorkEffortContactMech; if contactMechId is not provided, a new contact mech is created (if partyId is set then the new contact mech is also associated to the party)</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <auto-attributes entity-name="WorkEffortContactMech" mode="IN" include="nonpk" optional="true"/>
        <auto-attributes entity-name="PartyContactMech" include="all" mode="IN" optional="true"/>
        <attribute name="workEffortId" mode="IN" type="String" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </attribute>
        <attribute name="contactMechTypeId" mode="IN" type="String" optional="true"/>
        <attribute name="infoString" mode="IN" type="String" optional="true"></attribute>
        <attribute name="contactMechPurposeTypeId" type="String" mode="IN" optional="true"/>
        <attribute name="contactMechId" type="String" mode="INOUT" optional="true"/>
    </service>
    <service name="updateWorkEffortContactMech" engine="simple"
             location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateWorkEffortContactMech" auth="true">
        <description>Update WorkEffortContactMech</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes entity-name="WorkEffortContactMech" mode="IN" include="nonpk" optional="true"/>
        <auto-attributes entity-name="PartyContactMech" include="all" mode="IN" optional="true"/>
        <attribute name="workEffortId" mode="IN" type="String" optional="false"></attribute>
        <attribute name="contactMechTypeId" mode="IN" type="String" optional="true"></attribute>
        <attribute name="infoString" mode="IN" type="String" optional="true"></attribute>
        <attribute name="contactMechPurposeTypeId" type="String" mode="IN" optional="true"/>
        <attribute name="newContactMechId" type="String" mode="IN" optional="true"/>
        <attribute name="contactMechId" type="String" mode="INOUT" optional="true"/>
    </service>
    <service name="deleteWorkEffortContactMech" engine="simple" default-entity-name="WorkEffortContactMech"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkEffortContactMech" auth="true">
        <description>Delete WorkEffortContactMech</description>
        <permission-service service-name="workEffortGenericPermission" main-action="DELETE"/>
        <auto-attributes mode="IN" include="pk" optional="false"/>
    </service>
    <service name="createWorkEffortPostalAddress" engine="simple"
             location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortPostalAddress">
        <description>Create WorkEffort PostalAddress</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <implements service="createPostalAddress"/>
        <implements service="createPartyPostalAddress"/>
        <implements service="createWorkEffortContactMech"/>
    </service>
    <service name="updateWorkEffortPostalAddress" engine="simple"
             location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateWorkEffortPostalAddress">
        <description>Update WorkEffort PostalAddress</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <implements service="updatePostalAddress"/>
        <implements service="updateWorkEffortContactMech"/>
    </service>
    <service name="createWorkEffortTelecomNumber" engine="simple"
             location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortTelecomNumber">
        <description>Create WorkEffort TelecomNumber</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <implements service="createTelecomNumber"/>
        <implements service="createPartyTelecomNumber"/>
        <implements service="createWorkEffortContactMech"/>
    </service>
    <service name="updateWorkEffortTelecomNumber" engine="simple"
             location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateWorkEffortTelecomNumber">
        <description>Update WorkEffort TelecomNumber</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <implements service="updateTelecomNumber"/>
        <implements service="updateWorkEffortContactMech"/>
    </service>
    <service name="createWorkEffortEmailAddress" engine="simple"
             location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortEmailAddress">
        <description>Create WorkEffort Email Address</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <implements service="createWorkEffortContactMech"/>
    </service>
    <service name="updateWorkEffortEmailAddress" engine="simple"
             location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateWorkEffortEmailAddress">
        <description>Update WorkEffort Email Address</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <implements service="updateWorkEffortContactMech"/>
    </service>

    <!--WorkEffortInventoryProduced Services   -->
    <service name="createWorkEffortInventoryProduced" engine="simple" default-entity-name="WorkEffortInventoryProduced"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortInventoryProduced" auth="true">
        <description>Create WorkEffortInventoryProduced</description>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="false"/>
        <override name="inventoryItemId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingInventoryItemId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortInventoryProduced" engine="simple" default-entity-name="WorkEffortInventoryProduced"
            location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkEffortInventoryProduced" auth="true">
        <description>Delete WorkEffortInventoryProduced</description>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <!-- SCIPIO: 2018-09-10: TODO: REVIEW: from upstream, but field does not exist
        <override name="contactMechId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingContactMechId"/>
            </type-validate>
        </override>
        -->
        <!-- SCIPIO: 2018-09-10: TODO: REVIEW: from upstream, but no fromDate on WorkEffortInventoryProduced currently
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        -->
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
        <override name="inventoryItemId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingInventoryItemId"/>
            </type-validate>
        </override>
    </service>

    <!-- WorkEffort iCalendar Services -->
    <service name="createWorkEffortICalData" default-entity-name="WorkEffortIcalData" engine="entity-auto" invoke="create" auth="true">
        <description>Create WorkEffort iCalendar Data</description>
        <permission-service service-name="workEffortICalendarPermission" main-action="CREATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="updateWorkEffortICalData" default-entity-name="WorkEffortIcalData" engine="entity-auto" invoke="update" auth="true">
        <description>Update WorkEffort iCalendar Data</description>
        <permission-service service-name="workEffortICalendarPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortICalData" default-entity-name="WorkEffortIcalData" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete WorkEffort iCalendar Data</description>
        <permission-service service-name="workEffortICalendarPermission" main-action="DELETE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="workEffortICalendarPermission" engine="simple"
             location="component://workeffort/script/org/ofbiz/workeffort/permission/WorkEffortPermissionServices.xml" invoke="workEffortICalendarPermission">
        <description>iCalendar Permission Check</description>
        <implements service="permissionInterface"/>
        <attribute type="String" mode="IN" name="workEffortId" optional="true"/>
    </service>
    <service name="getICalWorkEfforts" engine="simple" auth="false"
             location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="getICalWorkEfforts">
        <description>Get iCalendar Work Efforts</description>
        <!-- No permission checking - the servlet handles that -->
        <attribute type="String" mode="IN" name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </attribute>
        <attribute type="String" mode="IN" name="workEffortTypeId" optional="true"/>
        <attribute type="List" mode="OUT" name="workEfforts"/>
    </service>
    <service name="getPartyICalUrl" engine="simple" auth="false"
             location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="getPartyICalUrl">
        <description>Get Party iCalendar URL</description>
        <!-- No permission checking - the servlet handles that -->
        <attribute type="String" mode="IN" name="partyId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingPartyId"/>
            </type-validate>
        </attribute>
        <attribute type="String" mode="OUT" name="iCalUrl" optional="true"/>
    </service>

    <!-- WorkEffort Event Reminder Services -->
    <service name="createWorkEffortEventReminder" default-entity-name="WorkEffortEventReminder" engine="entity-auto" invoke="create" auth="true">
        <description>Create a WorkEffort Event Reminder</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="sequenceId" mode="OUT"/>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="updateWorkEffortEventReminder" default-entity-name="WorkEffortEventReminder" engine="entity-auto" invoke="update" auth="true">
        <description>Update a WorkEffort Event Reminder</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="sequenceId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingSequenceId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortEventReminder" default-entity-name="WorkEffortEventReminder" engine="entity-auto" invoke="delete" auth="true">
        <description>Delete a WorkEffort Event Reminder</description>
        <permission-service service-name="workEffortGenericPermission" main-action="DELETE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <override name="sequenceId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingSequenceId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="processWorkEffortEventReminders" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="processWorkEffortEventReminders" auth="true">
        <description>Process work effort event reminders. This service is run by the job scheduler.</description>
    </service>
    <service name="processWorkEffortEventReminder" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="processWorkEffortEventReminder" auth="true">
        <description>Send a work effort event reminder</description>
        <attribute name="reminder" mode="IN" type="GenericValue"/>
        <attribute name="bodyParameters" mode="IN" type="Map"/>
    </service>
    <service name="migrateWorkEffortEventReminders" engine="java"
            location="org.ofbiz.workeffort.workeffort.WorkEffortServices" invoke="migrateWorkEffortEventReminders" auth="true">
        <description>Migrate work effort event reminders. Run this service to update work effort reminders.</description>
    </service>

    <!-- WorkEffort and Survey Services -->
    <service name="createWorkEffortSurveyAppl" engine="simple" default-entity-name="WorkEffortSurveyAppl"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="createWorkEffortSurveyAppl" auth="true">
        <description>Create a WorkEffort Survey</description>
        <permission-service service-name="workEffortGenericPermission" main-action="CREATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="fromDate" optional="true">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="surveyId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingSurveyId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="updateWorkEffortSurveyAppl" default-entity-name="WorkEffortSurveyAppl" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="updateWorkEffortSurveyAppl" auth="true">
        <description>Update a WorkEffort Survey</description>
        <permission-service service-name="workEffortGenericPermission" main-action="UPDATE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
        <override name="fromDate" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingFromDate"/>
            </type-validate>
        </override>
        <override name="surveyId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingSurveyId"/>
            </type-validate>
        </override>
        <override name="workEffortId" optional="false">
            <type-validate>
                <fail-property resource="WorkEffortUiLabels" property="WorkEffortRequiredFieldMissingWorkEffortId"/>
            </type-validate>
        </override>
    </service>
    <service name="deleteWorkEffortSurveyAppl" default-entity-name="WorkEffortSurveyAppl" engine="simple"
        location="component://workeffort/script/org/ofbiz/workeffort/workeffort/WorkEffortSimpleServices.xml" invoke="deleteWorkEffortSurveyAppl" auth="true">
        <description>Delete a WorkEffort Survey</description>
        <permission-service service-name="workEffortGenericPermission" main-action="DELETE"/>
        <auto-attributes include="pk" mode="IN" optional="false"/>
    </service>
</services>