<?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.
-->
<forms xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns="http://ofbiz.apache.org/Widget-Form" xsi:schemaLocation="http://ofbiz.apache.org/Widget-Form http://ofbiz.apache.org/dtds/widget-form.xsd">

   <!-- show list of upto 10 Invoices past due for longest duration -->
    <form name="ListReports" type="list" separate-columns="true" title="Invoice List" list-name="invoices" target=""
        odd-row-style="alternate-row" default-table-style="basic-table hover-bar" paginate="true" paginate-target="main">
        <row-actions>
            <service service-name="getPartyNameForDate" result-map="partyNameResultFrom">
                <field-map field-name="partyId" from-field="partyIdFrom"/>
                <field-map field-name="compareDate" from-field="invoiceDate"/>
                <field-map field-name="lastNameFirst" value="Y"/>
            </service>
            <service service-name="getPartyNameForDate" result-map="partyNameResultTo">
                <field-map field-name="partyId" from-field="partyId"/>
                <field-map field-name="compareDate" from-field="invoiceDate"/>
                <field-map field-name="lastNameFirst" value="Y"/>
            </service>
            <set field="amountToApply" value="${groovy:
                import java.text.NumberFormat;
                return(NumberFormat.getNumberInstance(context.get(&quot;locale&quot;)).format(org.apache.ofbiz.accounting.invoice.InvoiceWorker.getInvoiceNotApplied(delegator,invoiceId)));}"/>
            <set field="total" value="${groovy:
                import java.text.NumberFormat;
                return(NumberFormat.getNumberInstance(context.get(&quot;locale&quot;)).format(org.apache.ofbiz.accounting.invoice.InvoiceWorker.getInvoiceTotal(delegator,invoiceId)));}"/>
        </row-actions>
        <field name="invoiceId" widget-style="buttontext">
            <hyperlink description="${invoiceId}" target="invoiceOverview">
                <parameter param-name="invoiceId"/>
            </hyperlink>
        </field>
        <field name="invoiceTypeId"><display-entity entity-name="InvoiceType"/></field>
        <field name="invoiceDate"><display/></field>
        <field name="statusId" title="${uiLabelMap.CommonStatus}"><display-entity entity-name="StatusItem"/></field>
        <field name="description"><display/></field>
        <field name="partyIdFrom">
            <hyperlink description="${partyNameResultFrom.fullName} [${partyIdFrom}]" target="/partymgr/control/viewprofile" target-type="inter-app">
                <parameter param-name="partyId" from-field="partyIdFrom"/>
            </hyperlink>
        </field>
        <field name="partyIdTo">
            <hyperlink description="${partyNameResultTo.fullName} [${partyId}]" target="/partymgr/control/viewprofile" target-type="inter-app">
                <parameter param-name="partyId"/>
            </hyperlink>
        </field>
        <field name="invoiceDate"><display/></field>
        <field name="dueDate"><display/></field>
        <field name="total" widget-area-style="align-text"><display type="currency" currency="${currencyUomId}"/></field>
        <field name="amountToApply" widget-area-style="align-text"><display type="currency" currency="${currencyUomId}"/></field>
    </form>

    <form name="FindArInvoices" type="single" target="FindArInvoices" extends="FindInvoices" extends-resource="component://accounting/widget/InvoiceForms.xml">
        <actions>
            <entity-condition entity-name="InvoiceType" list="invoiceTypeList">
                <condition-list combine="or">
                    <condition-expr field-name="parentTypeId" value="SALES_INVOICE"/>
                    <condition-expr field-name="invoiceTypeId" value="SALES_INVOICE"/>
                </condition-list>
            </entity-condition>
        </actions>
        <field name="invoiceTypeId" position="1">
            <drop-down>
                <list-options key-name="invoiceTypeId" list-name="invoiceTypeList"/>
            </drop-down>
        </field>
    </form>
        
</forms>
