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

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

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

<services xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/services.xsd">
    <description>Product Component Services</description>

    <service name="createFixedAssetAndLinkToProduct" default-entity-name="FixedAsset" engine="simple"
                location="component://product/minilang/product/rental/RentalServices.xml" invoke="createFixedAssetAndLinkToProduct" auth="true">
        <description>Create an FixedAsset and link to an existing product to ease rental products creation</description>
        <attribute name="productId" mode="IN" type="String"/>
        <auto-attributes include="pk" mode="INOUT" optional="true"/>
        <auto-attributes include="nonpk" mode="IN" optional="true"/>
    </service>

    <service name="getProductFirstRelatedFixedAsset" engine="simple"
                location="component://product/minilang/product/rental/RentalServices.xml" invoke="getProductFirstRelatedFixedAsset" auth="true">
        <description>Most rental products are associated with one fixed asset only, this service will return the first genericValue fixedAsset</description>
        <attribute name="productId" mode="INOUT" type="String"/>
        <attribute name="fixedAssetId" mode="OUT" type="String" optional="true"/>
    </service>
</services>
