<?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>Order Opportunity Services</description>
    <vendor>OFBiz</vendor>

    <service name="createSalesForecast" engine="simple" auth="true" default-entity-name="SalesForecast"
            location="component://order/script/org/ofbiz/order/opportunity/OpportunityServices.xml" invoke="createSalesForecast">
       <description>Creates a Sales Forecast for the userLogin. Requires ORDERMGR_4C_CREATE permission.
            This will save the forecast into the history as well. Note that this service does not compute
            the forecast. That must be done in a higher level service.</description>
        <required-permissions join-type="AND">
            <check-permission permission="ORDERMGR" action="_4C_CREATE"/>
        </required-permissions>
        <auto-attributes mode="OUT" include="pk" optional="false"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
    </service>

    <service name="updateSalesForecast" engine="simple" auth="true" default-entity-name="SalesForecast"
            location="component://order/script/org/ofbiz/order/opportunity/OpportunityServices.xml" invoke="updateSalesForecast">
       <description>Updates a Sales Forecast and marks it as modified by the userLogin. Requires ORDERMGR_4C_UPDATE
            permission. This will save the current forecast into the history before overwritting it.
            Note that this service does not compute the forecast. That must be done in a higher level service.</description>
        <required-permissions join-type="AND">
            <check-permission permission="ORDERMGR" action="_4C_UPDATE"/>
        </required-permissions>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
        <attribute name="changeNote" type="String" mode="IN" optional="true"/>
    </service>

     <!-- Sales Forecast Detail -->
    <service name="createSalesForecastDetail" engine="simple" auth="true" default-entity-name="SalesForecastDetail"
            location="component://order/script/org/ofbiz/order/opportunity/OpportunityServices.xml" invoke="createSalesForecastDetail">
        <description>Creates a Sales Forecast Detail</description>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
        <override name="salesForecastDetailId" mode="OUT"/>
    </service>
    <service name="updateSalesForecastDetail" engine="simple" auth="true" default-entity-name="SalesForecastDetail"
            location="component://order/script/org/ofbiz/order/opportunity/OpportunityServices.xml" invoke="updateSalesForecastDetail">
        <description>Updates a Sales Forecast Detail</description>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
    </service>
    <service name="deleteSalesForecastDetail" engine="simple" default-entity-name="SalesForecastDetail"
            location="component://order/script/org/ofbiz/order/opportunity/OpportunityServices.xml" invoke="deleteSalesForecastDetail">
        <description>Delete a Sales Forecast Detail</description>
        <auto-attributes mode="IN" include="pk" optional="false"/>
    </service>
    
        <!-- opportunity service -->
    <service name="createSalesOpportunity" engine="simple" default-entity-name="SalesOpportunity"
        location="component://order/script/org/ofbiz/order/opportunity/OpportunityServices.xml" invoke="createSalesOpportunity">
        <description>Create an sales opportunity</description>
        <auto-attributes mode="INOUT" include="pk" optional="true"/>
        <auto-attributes mode="IN" include="nonpk" optional="true">
            <exclude field-name="createdByUserLogin"/>
        </auto-attributes>
        <attribute name="accountPartyId" mode="IN" type="String" optional="true"/>
        <attribute name="leadPartyId" mode="IN" type="String" optional="true"/>
        <override name="opportunityName" allow-html="safe"/>
        <override name="description" allow-html="safe"/>
        <override name="nextStep" allow-html="safe"/>
    </service>
    <service name="updateSalesOpportunity" engine="simple" default-entity-name="SalesOpportunity"
        location="component://order/script/org/ofbiz/order/opportunity/OpportunityServices.xml" invoke="updateSalesOpportunity">
        <description>Update an sales opportunity</description>
        <auto-attributes mode="IN" include="pk" optional="false"/>
        <auto-attributes mode="IN" include="nonpk" optional="true"/>
        <attribute name="accountPartyId" mode="IN" type="String" optional="true"/>
        <attribute name="leadPartyId" mode="IN" type="String" optional="true"/>
        <override name="opportunityName" allow-html="safe"/>
        <override name="description" allow-html="safe"/>
        <override name="nextStep" allow-html="safe"/>
    </service>
    <service name="createSalesOpportunityRole" engine="simple" default-entity-name="SalesOpportunityRole" 
        location="component://order/script/org/ofbiz/order/opportunity/OpportunityServices.xml" invoke="createSalesOpportunityRole">
        <description>Create sales opportunity role</description>
        <auto-attributes mode="INOUT" include="pk" optional="true"/>
    </service>
    <service name="createSalesOpportunityAccountRole" engine="simple" default-entity-name="SalesOpportunityRole" 
        location="component://order/script/org/ofbiz/order/opportunity/OpportunityServices.xml" invoke="createSalesOpportunityAccountRole">
        <description>Create sales opportunity account role</description>
        <attribute name="accountPartyId" mode="IN" type="String"/>
        <attribute name="salesOpportunityId" mode="IN" type="String"/>
    </service>
    <service name="createSalesOpportunityLeadRole" engine="simple" default-entity-name="SalesOpportunityRole" 
        location="component://order/script/org/ofbiz/order/opportunity/OpportunityServices.xml" invoke="createSalesOpportunityLeadRole">
        <description>Create sales opportunity lead role</description>
        <attribute name="leadPartyId" mode="IN" type="String"/>
        <attribute name="salesOpportunityId" mode="IN" type="String"/>
    </service>
    <service name="findPartyInSalesOpportunityRole" engine="simple" default-entity-name="SalesOpportunityRole" 
        location="component://order/script/org/ofbiz/order/opportunity/OpportunityServices.xml" invoke="findPartyInSalesOpportunityRole">
        <description>find sales opportunity role party</description>
        <attribute name="roleTypeId" mode="IN" type="String"/>
        <attribute name="salesOpportunityId" mode="IN" type="String" optional="true"/>
        <attribute name="partyId" mode="OUT" type="String" optional="true"/>
    </service>

    
</services>
