<?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/script/org/ofbiz/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/script/org/ofbiz/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>
