<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<services xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="https://ofbiz.apache.org/dtds/services.xsd">
    <description>Manufacturing Services - Production Run</description>
    <vendor>OFBiz</vendor>
    <version>1.0</version>

    <!-- Job Shop Management services -->
    <!-- creation of production runs -->
    <service name="createProductionRun" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="createProductionRun" auth="true">
        <description>Create a Production Run</description>
        <attribute name="productId" type="String" mode="IN" optional="false"/>
        <attribute name="pRQuantity" type="BigDecimal" mode="IN" optional="false"/>
        <attribute name="startDate" type="java.sql.Timestamp" mode="IN" optional="false"/>
        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
        <attribute name="routingId" type="String" mode="IN" optional="true"/>
        <attribute name="workEffortName" type="String" mode="IN" optional="true"/>
        <attribute name="description" type="String" mode="IN" optional="true"/>
        <attribute name="productionRunId" type="String" mode="OUT" optional="false"/>
        <attribute name="estimatedCompletionDate" type="java.sql.Timestamp" mode="OUT" optional="true"/>
    </service>
    <service name="createProductionRunPartyAssign" engine="groovy"
             location="component://manufacturing/src/main/groovy/org/apache/ofbiz/manufacturing/jobshopmgt/ProductionRunServicesScript.groovy" invoke="createProductionRunPartyAssign" auth="false">
        <description>
            Associate a party to the production run
        </description>
        <attribute name="productionRunId" type="String" mode="INOUT" optional="false"/>
        <attribute name="partyId" type="String" mode="IN" optional="false"/>
        <attribute name="roleTypeId" type="String" mode="IN" optional="false"/>
        <attribute name="workEffortId" mode="IN" type="String" optional="true"/>
        <attribute name="fromDate" type="java.sql.Timestamp" mode="INOUT" optional="true"/>
        <attribute name="thruDate" type="Timestamp" mode="IN" optional="true"/>
    </service>
    <service name="createProductionRunAssoc" engine="groovy"
             location="component://manufacturing/src/main/groovy/org/apache/ofbiz/manufacturing/jobshopmgt/ProductionRunServicesScript.groovy" invoke="createProductionRunAssoc" auth="false">
        <description>
            Associate the production run to another production run
        </description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="productionRunIdTo" type="String" mode="IN" optional="false"/>
        <attribute name="workFlowSequenceTypeId" type="String" mode="IN" optional="false"/>
    </service>
    <service name="createProductionRunsForProductBom" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="createProductionRunsForProductBom" auth="true">
        <description>Explodes a product id and creates all the needed production runs.</description>
        <attribute name="productId" type="String" mode="IN" optional="false"/>
        <attribute name="quantity" optional="true" mode="IN" type="BigDecimal"/>
        <attribute name="startDate" type="java.sql.Timestamp" mode="IN" optional="false"/>
        <attribute name="facilityId" type="String" mode="IN" optional="false"/>
        <attribute name="routingId" type="String" mode="IN" optional="true"/>
        <attribute name="workEffortName" type="String" mode="IN" optional="true"/>
        <attribute name="description" type="String" mode="IN" optional="true"/>
        <attribute name="productionRuns" optional="true" mode="OUT" type="java.util.List"/><!-- TODO -->
        <attribute name="productionRunId" type="String" mode="OUT" optional="false"/>
    </service>
    <service name="createProductionRunsForOrder" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="createProductionRunsForOrder" auth="true">
        <description>Explodes a product id and creates all the needed production runs; if an order id is also provided, it links the production runs to the sales order.</description>
        <attribute mode="IN" name="orderId" optional="false" type="String"/>
        <attribute mode="IN" name="orderItemSeqId" optional="true" type="String"/>
        <attribute mode="IN" name="shipGroupSeqId" optional="true" type="String"/>
        <attribute mode="IN" name="quantity" optional="true" type="BigDecimal"/>
        <attribute mode="IN" name="fromDate" optional="true" type="String"/>
        <attribute mode="IN" name="shipmentId" optional="true" type="String"/>
        <attribute mode="OUT" name="productionRuns" type="java.util.List"/>
    </service>
    <service name="createProductionRunFromRequirement" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="createProductionRunFromRequirement" auth="true">
        <description>Creates a production run from a requirement.</description>
        <attribute mode="IN" name="requirementId" optional="false" type="String"/>
        <attribute mode="IN" name="quantity" optional="true" type="BigDecimal"/>
        <attribute mode="OUT" name="productionRunId" optional="true" type="String"/>
    </service>
    <service name="createProductionRunFromConfiguration" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="createProductionRunFromConfiguration" auth="true">
        <description>Creates a production run from a product configuration.</description>
        <attribute mode="IN" name="facilityId" optional="false" type="String"/>
        <attribute mode="IN" name="configId" optional="true" type="String"/>
        <attribute mode="IN" name="config" optional="true" type="org.apache.ofbiz.product.config.ProductConfigWrapper"/>
        <attribute mode="IN" name="quantity" optional="true" type="BigDecimal"/>
        <attribute mode="IN" name="orderId" optional="true" type="String"/>
        <attribute mode="IN" name="orderItemSeqId" optional="true" type="String"/>
        <attribute mode="OUT" name="productionRunId" optional="false" type="String"/>
    </service>
    <service name="createProductionRunForMktgPkg" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="createProductionRunForMktgPkg" auth="true">
        <description>Creates a production run for a marketing package when the product is out of stock (ATP quantity less than zero.)
                Attempts to produce enough to bring total ATP quantity of the product back up to zero, but will only produce what is
                available based on the components required.</description>
        <attribute mode="IN" name="orderId" optional="false" type="String"/>
        <attribute mode="IN" name="orderItemSeqId" optional="false" type="String"/>
        <attribute mode="IN" name="facilityId" optional="false" type="String"/>
        <attribute mode="OUT" name="productionRunId" optional="true" type="String"/>
    </service>

    
    <service name="updateProductionRun" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="updateProductionRun" auth="true">
        <description>Update a Production Run</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="quantity" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="estimatedStartDate" type="Timestamp" mode="IN" optional="true"/>
        <attribute name="workEffortName" type="String" mode="IN" optional="true"/>
        <attribute name="description" type="String" mode="IN" optional="true"/>
        <attribute name="facilityId" type="String" mode="IN" optional="true"/>
    </service>
    <service name="changeProductionRunStatus" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="changeProductionRunStatus" auth="true">
        <description>Change the Production Run status</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="statusId" type="String" mode="IN" optional="true"/>
        <attribute name="newStatusId" type="String" mode="OUT" optional="false"/>
    </service>
    <service name="changeProductionRunTaskStatus" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="changeProductionRunTaskStatus" auth="true">
        <description>Change the Production Run Task status</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="workEffortId" type="String" mode="IN" optional="false"/> <!-- The task id -->
        <attribute name="statusId" type="String" mode="IN" optional="true"/>
        <attribute name="issueAllComponents" type="Boolean" mode="IN" optional="true"/>
        <attribute name="oldStatusId" type="String" mode="OUT" optional="false"/>
        <attribute name="newStatusId" type="String" mode="OUT" optional="false"/>
    </service>
    <service name="addProductionRunRoutingTask" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="addProductionRunRoutingTask" auth="true">
        <description>add a RoutingTask to an existing ProductionRun</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="routingTaskId" type="String" mode="INOUT" optional="false"/>
        <attribute name="priority" type="Long" mode="IN" optional="false"/>
        <attribute name="estimatedSetupMillis" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="estimatedMilliSeconds" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="workEffortName" type="String" mode="IN" optional="true"/>
        <attribute name="description" type="String" mode="IN" optional="true"/>
        <attribute name="estimatedStartDate" type="Timestamp" mode="INOUT" optional="true"/>
        <attribute name="estimatedCompletionDate" type="Timestamp" mode="INOUT" optional="true"/>
    </service>
    <service name="checkUpdatePrunRoutingTask" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="checkUpdatePrunRoutingTask" auth="true">
        <description>check if field for routingTask update are correct and if needed  recalculated data and update Production Run</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="routingTaskId" type="String" mode="IN" optional="false"/>
        <attribute name="priority" type="Long" mode="IN"/>
        <attribute name="estimatedStartDate" type="Timestamp" mode="IN"/>
        <attribute name="estimatedSetupMillis" type="BigDecimal" mode="IN"/>
        <attribute name="estimatedMilliSeconds" type="BigDecimal" mode="IN"/>
    </service>
    <!-- TODO: NOT STILL IMPLEMENTED ('deleteWorkEffort' is called directly) -->
    <service name="deleteProductionRunRoutingTask" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="deleteProductionRunRoutingTask" auth="true">
        <description>delete a RoutingTask to an existing ProductionRun</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="routingTaskId" type="String" mode="IN" optional="false"/>
    </service>
    <service name="addProductionRunComponent" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="addProductionRunComponent" auth="true">
        <description>add a Product Component to an existing ProductionRun</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="productId" type="String" mode="IN" optional="false"/>
        <attribute name="estimatedQuantity" type="BigDecimal" mode="IN"/>
        <attribute name="workEffortId" type="String" mode="IN" optional="true"/>
    </service>
    <service name="updateProductionRunComponent" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="updateProductionRunComponent" auth="true">
        <description>update a Product Component to an existing ProductionRun</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="productId" type="String" mode="IN" optional="false"/>
        <attribute name="workEffortId" type="String" mode="IN" optional="true"/>
        <attribute name="estimatedQuantity" type="BigDecimal" mode="IN" optional="true"/>
    </service>
    <!-- TODO: NOT STILL IMPLEMENTED ('removeWorkEffortGoodStandard' is called directly) -->
    <service name="deleteProductionRunComponent" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="deleteProductionRunComponent" auth="true">
        <description>delete a Product Component to an existing ProductionRun</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="productId" type="String" mode="IN" optional="false"/>
    </service>
    <service name="issueProductionRunTask" engine="groovy"
             location="component://manufacturing/src/main/groovy/org/apache/ofbiz/manufacturing/jobshopmgt/ProductionRunServicesScript.groovy" invoke="issueProductionRunTask" auth="false">
        <description>
            Issues the Inventory for a Production Run Task.
            Note that this skips the normal inventory reservation process.
        </description>
        <attribute name="workEffortId" type="String" mode="IN" optional="false"/>
        <attribute name="reserveOrderEnumId" type="String" mode="IN" optional="true"/>
        <attribute name="failIfItemsAreNotAvailable" type="String" mode="IN" optional="true"/>
        <attribute name="failIfItemsAreNotOnHand" type="String" mode="IN" optional="true"/>
    </service>
    <service name="issueProductionRunTaskComponent" engine="groovy"
             location="component://manufacturing/src/main/groovy/org/apache/ofbiz/manufacturing/jobshopmgt/ProductionRunServicesScript.groovy" invoke="issueProductionRunTaskComponent" auth="false">
        <description>
            Issues the Inventory for a Production Run Task Component. For more info see the issueProductionRunTask service.
            If fromDate is passed, then the WorkEffortGoodStandard record with pk composed of (workEffortId|productId|fromDate)
            with type PRUNT_PROD_NEEDED is retrieved and used to get the quantity; its status is also updated to COMPLETED after
            the issuance is done.
            If locationSeqIds are provided, then the items are only issued from the inventory items associated to the locations.
            If failIfItemsAreNotAvailable is set to "Y" (the default is "Y") then the service fails if there is not enough inventory available:
            no reservation will be stolen.
            If failIfItemsAreNotOnHand is set to "Y" (the default is "Y") then the service fails if there is not enough inventory:
            no items with negative qoh will be created.
            If lotId is filled, failIfItemsAreNotAvailable is set to automatically set to "Y".
        </description>
        <attribute name="workEffortId" type="String" mode="IN" optional="false"/>
        <attribute name="productId" type="String" mode="IN" optional="false"/>
        <attribute name="fromDate" type="Timestamp" mode="IN" optional="true"/>
        <attribute name="quantity" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="failIfItemsAreNotAvailable" type="String" mode="IN" optional="true"/>
        <attribute name="failIfItemsAreNotOnHand" type="String" mode="IN" optional="true"/>
        <attribute name="reserveOrderEnumId" type="String" mode="IN" optional="true"/>
        <attribute name="lotId" mode="IN" type="String" optional="true" />
        <attribute name="locationSeqId" type="String" mode="IN" optional="true"/>
        <attribute name="secondaryLocationSeqId" type="String" mode="IN" optional="true"/>
        <attribute name="reasonEnumId" type="String" mode="IN" optional="true"/>
        <attribute name="description" type="String" mode="IN" optional="true"/>
    </service>
    <service name="issueInventoryItemToWorkEffort" engine="groovy"
             location="component://manufacturing/src/main/groovy/org/apache/ofbiz/manufacturing/jobshopmgt/ProductionRunServicesScript.groovy" invoke="issueInventoryItemToWorkEffort" auth="false">
        <description>
            Issue one InventoryItem (or part of it) to a WorkEffort.
            Note that this skips the normal inventory reservation process.
        </description>
        <attribute name="workEffortId" type="String" mode="IN" optional="false"/>
        <attribute name="inventoryItem" type="org.apache.ofbiz.entity.GenericValue" mode="IN" optional="false"/>
        <attribute name="quantity" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="quantityIssued" type="BigDecimal" mode="OUT" optional="false"/>
        <attribute name="finishedProductId" type="String" mode="OUT" optional="false"/>
    </service>
    <service name="productionRunProduce" engine="java" transaction-timeout="7200"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="productionRunProduce" auth="true">
        <description>
            Create Inventory for product produced by a Production Run.
        </description>
        <attribute name="workEffortId" type="String" mode="IN" optional="false"/>
        <attribute name="inventoryItemIds" type="List" mode="OUT" optional="false"/>
        <attribute name="quantity" type="BigDecimal" mode="INOUT" optional="true"/>
        <attribute name="quantityUomId" type="String" mode="IN" optional="true"/>
        <attribute name="inventoryItemTypeId" type="String" mode="IN" optional="true"/>
        <attribute name="lotId" type="String" mode="IN" optional="true"/>
        <attribute name="locationSeqId" type="String" mode="IN" optional="true"/>
        <attribute name="createLotIfNeeded" type="Boolean" mode="IN" optional="true"/>
        <attribute name="autoCreateLot" type="Boolean" mode="IN" optional="true"/>
    </service>
    <service name="productionRunDeclareAndProduce" engine="java" transaction-timeout="7200"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="productionRunDeclareAndProduce" auth="true">
        <description>
            Create Inventory for product produced by a Production Run and if necessary add declared quantities to tasks (and issue materials, if needed).
        </description>
        <attribute name="workEffortId" type="String" mode="IN" optional="false"/>
        <attribute name="inventoryItemIds" type="List" mode="OUT" optional="false"/>
        <attribute name="quantity" type="BigDecimal" mode="INOUT" optional="false"/>
        <attribute name="quantityUomId" type="String" mode="IN" optional="true"/>
        <attribute name="inventoryItemTypeId" type="String" mode="IN" optional="true"/>
        <attribute name="locationSeqId" type="String" mode="IN" optional="true"/>
        <attribute name="lotId" type="String" mode="IN" optional="true"/>
        <attribute name="createLotIfNeeded" type="Boolean" mode="IN" optional="true"/>
        <attribute name="autoCreateLot" type="Boolean" mode="IN" optional="true"/>
        <attribute name="componentsLocationMap" mode="IN" type="Map" optional="true"/>
    </service>
    <service name="productionRunTaskProduce" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="productionRunTaskProduce" auth="true">
        <description>
            Create Inventory from a Production Run Task.
        </description>
        <attribute name="workEffortId" type="String" mode="IN" optional="false"/>
        <attribute name="productId" type="String" mode="IN" optional="false"/>
        <attribute name="quantity" type="BigDecimal" mode="IN" optional="false"/>
        <attribute name="facilityId" type="String" mode="IN" optional="true"/>
        <attribute name="locationSeqId" type="String" mode="IN" optional="true"/>
        <attribute name="unitCost" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="currencyUomId" type="String" mode="IN" optional="true"/>
        <attribute name="inventoryItemTypeId" type="String" mode="IN" optional="true"/>
        <attribute name="inventoryItemIds" type="List" mode="OUT" optional="false"/>
        <attribute name="lotId" mode="IN" type="String" optional="true" />
        <attribute name="isReturned" mode="IN" type="String" optional="true" default-value="N"></attribute>
    </service>
    <service name="productionRunTaskReturnMaterial" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="productionRunTaskReturnMaterial" auth="true">
        <description>
            Create Inventory from a Production Run Task, by returning to warehouse part of the materials allocated.
        </description>
        <attribute name="workEffortId" type="String" mode="IN" optional="false"/>
        <attribute name="productId" type="String" mode="IN" optional="false"/>
        <attribute name="quantity" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="inventoryItemTypeId" type="String" mode="IN" optional="true"/>
        <attribute name="lotId" mode="IN" type="String" optional="true" />
    </service>
    <service name="checkDecomposeInventoryItem" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="checkDecomposeInventoryItem" auth="true">
        <description>
            If the inventory item is for a 'marketing package' run the decomposeInventoryItem service.
            It is intended to be called as seca when a marketing package is received into warehouse (e.g. from a return).
        </description>
        <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/>
        <!--<attribute name="quantityAccepted" type="BigDecimal" mode="IN" optional="true"/>-->
    </service>
    <service name="decomposeInventoryItem" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="decomposeInventoryItem" auth="true">
        <description>
            Create a decompose work effort, issue the inventory item (or part of it), and put in warehouse its components.
            It is intended to be called when a marketing package is received into warehouse (e.g. from a return).
            The components will be returned to inventory at ((Marketing Package Actual Inventory Unit Cost) / (Marketing Package Standard Cost)) * (Component Standard Cost)
        </description>
        <attribute name="inventoryItemId" type="String" mode="IN" optional="false"/>
        <attribute name="quantity" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="inventoryItemIds" type="List" mode="OUT" optional="false"/>
    </service>
    <service name="updateProductionRunTask" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="updateProductionRunTask" auth="true">
        <description>
            Add a TimeEntry for the production run task and updates the relevant fields.
        </description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="productionRunTaskId" type="String" mode="IN" optional="false"/>
        <attribute name="partyId" type="String" mode="IN" optional="true"/>
        <attribute name="fromDate" type="Timestamp" mode="IN" optional="true"/>
        <attribute name="thruDate" type="Timestamp" mode="IN" optional="true"/>
        <attribute name="addQuantityProduced" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="addQuantityRejected" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="addSetupTime" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="addTaskTime" type="BigDecimal" mode="IN" optional="true"/>
        <attribute name="comments" type="String" mode="IN" optional="true"/>
        <attribute name="issueRequiredComponents" type="Boolean" mode="IN" optional="true"/>
        <attribute name="componentsLocationMap" mode="IN" type="Map" optional="true"/>
    </service>
    <service name="quickRunProductionRunTask" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="quickRunProductionRunTask" auth="true">
        <description>Quick runs a ProductionRun task to the completed status, also issuing components if necessary.</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="taskId" type="String" mode="IN" optional="false"/>
    </service>
    <service name="quickRunAllProductionRunTasks" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="quickRunAllProductionRunTasks" auth="true">
        <description>Quick runs all the tasks of a ProductionRun to the completed status, also issuing components if necessary.</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
    </service>
    <service name="quickStartAllProductionRunTasks" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="quickStartAllProductionRunTasks" auth="true">
        <description>Quick starts all the tasks of a ProductionRun.</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
    </service>
    <service name="quickChangeProductionRunStatus" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="quickChangeProductionRunStatus" auth="true">
        <description>Quick moves a ProductionRun to the passed in status, performing all the needed tasks in the way</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
        <attribute name="statusId" type="String" mode="IN" optional="false"/>
    </service>
    <service name="cancelProductionRun" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="cancelProductionRun" auth="true">
        <description>Cancels a ProductionRun.</description>
        <attribute name="productionRunId" type="String" mode="IN" optional="false"/>
    </service>
    <service name="getProductionRunTotResQty" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="getProductionRunTotResQty" auth="true">
        <description>Given a productId and an optional date, returns the total qty of productId reserved by production runs</description>
        <attribute name="productId" type="String" mode="IN" optional="false"/>
        <attribute name="startDate" type="Timestamp" mode="IN" optional="true"/>
        <attribute name="reservedQuantity" type="BigDecimal" mode="OUT" optional="false"/>
    </service>
    <service name="getWorkEffortCosts" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="getWorkEffortCosts" auth="true">
        <description>Retrieve the costs of a work effort (production run task).</description>
        <attribute mode="IN" name="workEffortId" optional="false" type="String"/>
        <attribute mode="OUT" name="costComponents" optional="false" type="List"/>
        <attribute mode="OUT" name="totalCost" optional="false" type="BigDecimal"/>
        <attribute mode="OUT" name="totalCostNoMaterials" optional="false" type="BigDecimal"/>
    </service>
    <service name="getProductionRunCost" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="getProductionRunCost" auth="true">
        <description>Retrieve the total cost of a production run.</description>
        <attribute mode="IN" name="workEffortId" optional="false" type="String"/>
        <attribute mode="OUT" name="totalCost" optional="false" type="BigDecimal"/>
    </service>
    <service name="createProductionRunTaskCosts" engine="java"
            location="org.apache.ofbiz.manufacturing.jobshopmgt.ProductionRunServices" invoke="createProductionRunTaskCosts" auth="true">
        <description>Compute the actual costs for the production run task.</description>
        <attribute mode="IN" name="productionRunTaskId" optional="false" type="String"/>
    </service>
</services>
