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

<screens xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns="http://ofbiz.apache.org/Widget-Screen" xsi:schemaLocation="http://ofbiz.apache.org/Widget-Screen http://ofbiz.apache.org/dtds/widget-screen.xsd">
    <screen name="ViewFacilityInventoryByProduct">
        <section>
            <actions>
                <set field="titleProperty" value="PageTitleEditFacilityInventoryItems"/>
                <set field="headerItem" value="facility"/>
                <set field="tabButtonItem" value="EditFacilityInventoryItems"/>
                <set field="viewIndex" from-field="parameters.VIEW_INDEX" type="Integer" default-value="0"/>
                <property-to-field resource="widget" property="widget.form.defaultViewSize" field="viewSizeDefaultValue"/>
                <set field="viewSize" from-field="parameters.VIEW_SIZE" type="Integer" default-value="${viewSizeDefaultValue}"/>

                <!-- This is the target of the search form-->
                <set field="facilityInventoryByProductScreen" value="ViewFacilityInventoryByProduct"/>

                <set field="facilityId" from-field="parameters.facilityId"/>
                <set field="productTypeId" from-field="parameters.productTypeId"/>
                <set field="searchInProductCategoryId" from-field="parameters.searchInProductCategoryId"/>
                <set field="productSupplierId" from-field="parameters.productSupplierId"/>
                <set field="offsetQOHQty" from-field="parameters.offsetQOHQty"/>
                <set field="offsetATPQty" from-field="parameters.offsetATPQty"/>
                <set field="productsSoldThruTimestamp" from-field="parameters.productsSoldThruTimestamp" type="Timestamp"/>
                <set field="internalName" from-field="parameters.internalName"/>
                <set field="productId" from-field="parameters.productId"/>

                <script location="component://product/groovyScripts/facility/facility/CountFacilityInventoryByProduct.groovy"/>
            </actions>
            <widgets>
                <decorator-screen name="CommonFacilityDecorator" location="${parameters.mainDecoratorLocation}">
                    <decorator-section name="body">

                        <container>
                            <label style="h1">${uiLabelMap.PageTitleEditFacilityInventoryItems} ${uiLabelMap.CommonFor}:</label>
                            <label style="h2">${facility.facilityName} [${uiLabelMap.CommonId}:${facilityId}]</label>
                        </container>
                        <container>
                            <link target="EditFacilityInventoryItems" text="${uiLabelMap.ProductInventoryItems}" style="buttontext">
                                <parameter param-name="facilityId" from-field="facilityId"/>
                            </link>
                            <!--<link target="ViewFacilityInventoryByProductSimple" text="${uiLabelMap.CommonPrint}" style="buttontext">
                                <parameter param-name="facilityId" from-field="facilityId"/>
                            </link>-->
                            <link target="ViewFacilityInventoryByProductReport?${searchParameterString}" text="${uiLabelMap.CommonPrint}" style="buttontext"/>
                            <link target="ViewFacilityInventoryByProductExport?${searchParameterString}" text="${uiLabelMap.CommonExport}" style="buttontext"/>
                        </container>

                        <include-form name="FindFacilityInventoryByProduct" location="component://product/widget/facility/FacilityForms.xml"/>
                        <include-form name="ListFacilityInventoryByProduct" location="component://product/widget/facility/FacilityForms.xml"/>
                    </decorator-section>
                </decorator-screen>
            </widgets>
        </section>
    </screen>
</screens>
