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

<#if allProductPromos?has_content>
<div class="screenlet">
    <div class="screenlet-title-bar">
        <div class="h3">&nbsp;${uiLabelMap.OrderManualPromotions}</div>
    </div>
    <div class="screenlet-body">
      <div>
        <form method="post" action="<@ofbizUrl>doManualPromotions</@ofbizUrl>" name="domanualpromotions" style="margin: 0;">
          <!-- to enter more than two manual promotions, just add a new select box with name="productPromoId_n" -->
          <select name="productPromoId_1">
            <option value=""></option>
            <#list allProductPromos as productPromo>
              <option value="${productPromo.productPromoId}">${productPromo.promoName!}</option>
            </#list>
          </select>
          <select name="productPromoId_2">
            <option value=""></option>
            <#list allProductPromos as productPromo>
              <option value="${productPromo.productPromoId}">${productPromo.promoName!}</option>
            </#list>
          </select>
          <input type="submit" class="smallSubmit" value="${uiLabelMap.OrderDoPromotions}" />
        </form>
      </div>
    </div>
</div>
</#if>
