<?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" 
        xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/widget-form.xsd">
    <form name="UpdateDeliveryScheduleInformation" type="single" target="updateOrderDeliverySchedule" title="" default-map-name="schedule"
        header-row-style="header-row" default-table-style="basic-table">
        <alt-target use-when="schedule==null" target="createOrderDeliverySchedule"/>
        <auto-fields-service service-name="updateOrderDeliverySchedule"/>
        <field name="orderId"><hidden/></field>
        <field name="orderItemSeqId"><hidden/></field>
        <field name="totalWeightUomId">
            <drop-down>
                <entity-options key-field-name="uomId" entity-name="Uom" description="${description}">
                    <entity-constraint name="uomTypeId" value="WEIGHT_MEASURE"/>
                </entity-options>
            </drop-down>
        </field>
        <field name="totalCubicUomId">
            <drop-down>
                <entity-options key-field-name="uomId" entity-name="Uom" description="${description}">
                    <entity-constraint name="uomTypeId" value="VOLUME_DRY_MEASURE"/>
                </entity-options>
            </drop-down>
        </field>
        <field name="statusId">
            <drop-down>
                <entity-options entity-name="StatusItem" description="${description}">
                    <entity-constraint name="statusTypeId" value="ORDER_DEL_SCH"/>
                    <entity-order-by field-name="sequenceId"/>
                </entity-options>
            </drop-down>
        </field>
        <field name="submitButton" title="${uiLabelMap.CommonUpdate}" widget-style="smallSubmit"><submit button-type="button"/></field>
    </form>
</forms>
