ilscipio/scipio-erp

View on GitHub
applications/manufacturing/servicedef/services_production_run.xml

Summary

Maintainability
Test Coverage
<!--
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>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.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="simple"
        location="component://manufacturing/script/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.xml" 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="simple"
                location="component://manufacturing/script/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.xml" 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.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.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.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.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.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.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.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.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.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.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.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)
        SCIPIO: indeed this is missing from the java... so don't define the service yet!
    <service name="deleteProductionRunRoutingTask" engine="java"
            location="org.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.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.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) 
        SCIPIO: indeed this is missing from the java... so don't define the service yet!
    <service name="deleteProductionRunComponent" engine="java"
            location="org.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="simple"
                location="component://manufacturing/script/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.xml" 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="simple"
                location="component://manufacturing/script/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.xml" 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="simple"
                location="component://manufacturing/script/org/ofbiz/manufacturing/jobshopmgt/ProductionRunServices.xml" 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.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.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.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.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.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.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.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.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"/>
        <!-- SCIPIO (2019-02-11): Added role type because it's necessary for the WorkEffortPartyAssignment -->
        <attribute name="roleTypeId" 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.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.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.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.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.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.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.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.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.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>