<?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.
-->

<simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/simple-methods-v2.xsd">

    <!-- ============== Basic Permission Checking ============= -->

    <!-- Returns hasPermission=true if user has one of the base ACCOUNTING CRUD+ADMIN permissions -->
    <simple-method method-name="basePermissionCheck" short-description="Accounting component base permission logic">
        <set field="primaryPermission" value="ACCOUNTING"/>
        <call-simple-method method-name="genericBasePermissionCheck" xml-resource="component://common/script/org/ofbiz/common/permission/CommonPermissionServices.xml"/>
    </simple-method>

    <!-- Returns hasPermission=true if user has one of the base ACCOUNTING CRUD+ADMIN permissions
        OR if user has one of the base ACCOUNTING_ROLE CRUD+ADMIN permissions -->
    <simple-method method-name="basePlusRolePermissionCheck" short-description="Accounting component base permission logic">
        <set field="primaryPermission" value="ACCOUNTING"/>
        <set field="altPermission" value="ACCOUNTING_ROLE"/>
        <call-simple-method method-name="genericBasePermissionCheck" xml-resource="component://common/script/org/ofbiz/common/permission/CommonPermissionServices.xml"/>
    </simple-method>

    <!-- ============== Task-specific Permission Checking ============= -->

    <!-- Returns hasPermission=true if user has one of the ACCTG_PREF CRUD+ADMIN permissions -->
    <simple-method method-name="preferencePermissionCheck" short-description="Accounting preferences permission logic">
        <set field="primaryPermission" value="ACCTG_PREF"/>
        <call-simple-method method-name="genericBasePermissionCheck" xml-resource="component://common/script/org/ofbiz/common/permission/CommonPermissionServices.xml"/>
    </simple-method>

    <!-- Returns hasPermission=true if user has one of the ACCTG_FX CRUD+ADMIN permissions -->
    <simple-method method-name="acctgFxPermissionCheck" short-description="Foreign exchange permission logic">
        <set field="primaryPermission" value="ACCTG_FX"/>
        <call-simple-method method-name="genericBasePermissionCheck" xml-resource="component://common/script/org/ofbiz/common/permission/CommonPermissionServices.xml"/>
        <if-compare field="hasPermission" operator="not-equals" value="true">
            <!-- Check for deprecated permission -->
            <if-has-permission permission="ACCTG_FX_ENTRY">
                <set field="hasPermission" type="Boolean" value="true"/>
                <field-to-result field="hasPermission"/>
                <log level="warning" message="Deprecated permission ACCTG_FX_ENTRY in use"/>
                <else>
                    <property-to-field resource="CommonUiLabels" property="CommonGenericPermissionError" field="failMessage"/>
                    <set field="hasPermission" type="Boolean" value="false"/>
                    <field-to-result field="hasPermission"/>
                    <field-to-result field="failMessage"/>
                </else>
            </if-has-permission>
        </if-compare>
    </simple-method>

    <!-- Returns hasPermission=true if user has one of the base ACCOUNTING CRUD+ADMIN permissions
        OR if user has one of the base ACCOUNTING_ROLE CRUD+ADMIN permissions -->
    <!-- TODO: Make this more user-role-specific. Users working with suppliers should only access
        supplier agreements, users working with customers should only access customer
        agreements, etc. -->
    <simple-method method-name="acctgAgreementPermissionCheck" short-description="Accounting agreement permission logic">
        <call-simple-method method-name="basePlusRolePermissionCheck"/>
    </simple-method>

    <!-- Returns hasPermission=true if user has one of the ACCOUNTING_COMM CRUD+ADMIN permissions -->
    <simple-method method-name="commissionPermissionCheck" short-description="Accounting commissions permission logic">
        <set field="primaryPermission" value="ACCOUNTING_COMM"/>
        <call-simple-method method-name="genericBasePermissionCheck" xml-resource="component://common/script/org/ofbiz/common/permission/CommonPermissionServices.xml"/>
    </simple-method>

    <!-- Returns hasPermission=true if user has one of the base ACCOUNTING CRUD+ADMIN permissions -->
    <simple-method method-name="acctgCostPermissionCheck" short-description="Accounting cost permission logic">
        <call-simple-method method-name="basePermissionCheck"/>
    </simple-method>

    <!-- Returns hasPermission=true if user has one of the base ACCOUNTING CRUD+ADMIN permissions -->
    <simple-method method-name="acctgFinAcctPermissionCheck" short-description="Accounting financial account permission logic">
        <call-simple-method method-name="basePermissionCheck"/>
    </simple-method>

    <!-- Returns hasPermission=true if user has one of the base ACCOUNTING CRUD+ADMIN permissions
        OR if user has one of the base ACCOUNTING_ROLE CRUD+ADMIN permissions -->
    <!-- TODO: Make this more user-role-specific. Users working with suppliers should only access
        purchase invoices, users working with customers should only access sales-related
        invoices, etc. -->
    <simple-method method-name="acctgInvoicePermissionCheck" short-description="Accounting invoice permission logic">
        <call-simple-method method-name="basePlusRolePermissionCheck"/>
    </simple-method>

    <!-- Returns hasPermission=true if user has one of the ACCTG_ATX CRUD+ADMIN permissions -->
    <simple-method method-name="acctgTransactionPermissionCheck" short-description="Accounting transaction permission logic">
        <set field="primaryPermission" value="ACCTG_ATX"/>
        <call-simple-method method-name="genericBasePermissionCheck" xml-resource="component://common/script/org/ofbiz/common/permission/CommonPermissionServices.xml"/>
    </simple-method>

    <!-- Returns hasPermission=true if user has one of the base ACCOUNTING CRUD+ADMIN permissions -->
    <simple-method method-name="acctgBillingAcctCheck" short-description="Accounting billing account permission logic">
        <call-simple-method method-name="basePermissionCheck"/>
    </simple-method>
</simple-methods>
