applications/product/webapp/facility/shipment/PackOrder.ftl
<#--
This file is subject to the terms and conditions defined in the
files 'LICENSE' and 'NOTICE', which are part of this source
code package.
-->
<@script>
function clearLine(facilityId, orderId, orderItemSeqId, productId, shipGroupSeqId, inventoryItemId, packageSeqId) {
document.clearPackLineForm.facilityId.value = facilityId;
document.clearPackLineForm.orderId.value = orderId;
document.clearPackLineForm.orderItemSeqId.value = orderItemSeqId;
document.clearPackLineForm.productId.value = productId;
document.clearPackLineForm.shipGroupSeqId.value = shipGroupSeqId;
document.clearPackLineForm.inventoryItemId.value = inventoryItemId;
document.clearPackLineForm.packageSeqId.value = packageSeqId;
document.clearPackLineForm.submit();
}
function addLine(facilityId, orderId, orderItemSeqId, productId, shipGroupSeqId, index) {
document.singlePackForm.facilityId.value = facilityId;
document.singlePackForm.orderId.value = orderId;
document.singlePackForm.orderItemSeqId.value = orderItemSeqId;
document.singlePackForm.productId.value = productId;
document.singlePackForm.shipGroupSeqId.value = shipGroupSeqId;
<#-- document.singlePackForm.inventoryItemId.value = inventoryItemId;-->
document.singlePackForm.packageSeq.value = document.multiPackForm['pkg_o_' + index].value;
document.singlePackForm.quantity.value = document.multiPackForm['qty_o_' + index].value;
document.singlePackForm.weight.value = document.multiPackForm['wgt_o_' + index].value;
document.singlePackForm.packageNumber.value = document.multiPackForm['numPackages_o_' + index].value;
document.singlePackForm.submit();
}
</@script>
<#if security.hasEntityPermission("FACILITY", "_VIEW", request)>
<#assign showInput = requestParameters.showInput?default("Y")>
<#if (requestParameters.forceComplete?has_content && !invoiceIds?has_content)>
<#assign forceComplete = "true">
<#assign showInput = "Y">
</#if>
<#macro globalMenuContent menuArgs={}>
<#if invoiceIds?has_content>
<@menu type="button">
<#list invoiceIds as invoiceId>
<@menuitem type="link" href=makeServerUrl("/accounting/control/invoiceOverview?invoiceId=" + invoiceId + "&" + raw(externalKeyParam)) class="+${styles.action_nav!} ${styles.action_view!}" text=(uiLabelMap.AccountingInvoice + " " + uiLabelMap.CommonNbr + " " + invoiceId) />
(<@menuitem type="link" href=makeServerUrl("/accounting/control/invoice.pdf?invoiceId=" + invoiceId + "&" + raw(externalKeyParam)) class="+${styles.action_nav!} ${styles.action_export!}" text="PDF" />)
</#list>
</@menu>
</#if>
</#macro>
<@section menuContent=globalMenuContent>
<#-- select order form -->
<#-- select picklist bin form -->
<#if !orderId?has_content && !picklistBinId?has_content>
<@section>
<form name="selectOrderForm" method="post" action="<@pageUrl>PackOrder</@pageUrl>">
<input type="hidden" name="facilityId" value="${facilityId!}" />
<@field type="generic" label=uiLabelMap.ProductOrderId>
<@field type="lookup" formName="selectOrderForm" name="orderId" id="orderId" size="20" maxlength="20" fieldFormName="LookupOrderHeader"/>
/
<@field type="input" inline=true name="shipGroupSeqId" size="6" maxlength="6" value=shipGroupSeqId!'00001'/>
</@field>
<@field type="generic" label=uiLabelMap.FormFieldTitle_picklistBinId>
<@field type="input" name="picklistBinId" size="29" maxlength="60" value=(picklistBinId!)/>
</@field>
<@field type="submitarea">
<@field type="submit" submitType="link" href="javascript:document.selectOrderForm.submit();" class="+${styles.link_run_sys!} ${styles.action_update!}" text=uiLabelMap.ProductPackOrder />
<@field type="submit" submitType="link" href="javascript:document.selectOrderForm.action='${makePageUrl('WeightPackageOnly')}';document.selectOrderForm.submit();" class="+${styles.link_run_sys!} ${styles.action_verify!}" text=uiLabelMap.ProductWeighPackageOnly />
</@field>
</form>
</@section>
</#if>
<form name="clearPackForm" method="post" action="<@pageUrl>ClearPackAll</@pageUrl>">
<input type="hidden" name="orderId" value="${orderId!}"/>
<input type="hidden" name="shipGroupSeqId" value="${shipGroupSeqId!}"/>
<input type="hidden" name="facilityId" value="${facilityId!}"/>
<input type="hidden" name="shipmentId" value="${shipmentId!}"/>
</form>
<form name="incPkgSeq" method="post" action="<@pageUrl>SetNextPackageSeq</@pageUrl>">
<input type="hidden" name="orderId" value="${orderId!}"/>
<input type="hidden" name="shipGroupSeqId" value="${shipGroupSeqId!}"/>
<input type="hidden" name="facilityId" value="${facilityId!}"/>
</form>
<form name="clearPackLineForm" method="post" action="<@pageUrl>ClearPackLine</@pageUrl>">
<input type="hidden" name="facilityId"/>
<input type="hidden" name="orderId"/>
<input type="hidden" name="orderItemSeqId"/>
<input type="hidden" name="productId"/>
<input type="hidden" name="shipGroupSeqId"/>
<input type="hidden" name="inventoryItemId"/>
<input type="hidden" name="packageSeqId"/>
<input type="hidden" name="shipmentId" value="${shipmentId!}"/>
</form>
<form name="singlePackForm" method="post" action="<@pageUrl>ProcessPackOrder</@pageUrl>">
<input type="hidden" name="facilityId" value="${facilityId!}" />
<input type="hidden" name="orderId" value="${orderId!}" />
<input type="hidden" name="shipGroupSeqId" value="${shipGroupSeqId!}" />
<input type="hidden" name="originFacilityId" value="${facilityId!}" />
<input type="hidden" name="shipmentId" value="${shipmentId!}" />
<input type="hidden" name="orderItemSeqId" />
<input type="hidden" name="quantity" />
<input type="hidden" name="weight" />
<input type="hidden" name="productId" />
<input type="hidden" name="packageSeq" />
<input type="hidden" name="packageNumber" />
</form>
<#if showInput != "N" && ((orderHeader?exists && orderHeader?has_content))>
<#assign itemInfos = packingSession.getItemInfos()!>
<#macro menuContent menuArgs={}>
<@menu type="button">
<#if shipment?has_content>
<#if shipment.statusId == "SHIPMENT_PACKED" || shipment.statusId == "SHIPMENT_DELIVERED" || shipment.statusId == "SHIPMENT_SHIPPED">
<@menuitem type="link" href=makePageUrl("PackingSlip.pdf?shipmentId=" + shipmentId) class="+${styles.action_nav!} ${styles.action_view!}" text=(uiLabelMap.ProductPackingSlip) />
<@menuitem type="link" href=makePageUrl("ShipmentBarCode.pdf?shipmentId=" + shipmentId) class="+${styles.action_nav!} ${styles.action_view!}" text=(uiLabelMap.ProductBarcode) />
</#if>
<@menuitem type="link" href=makePageUrl("EditShipment?shipmentId=" + shipmentId!) class="+${styles.action_nav!} ${styles.action_view!}" text=(uiLabelMap.ProductShipmentId + " " + shipmentId) />
</#if>
<#assign sectionTitle="${rawLabel('ProductProduct')} ${rawLabel('ProductToPack')}"/>
<@modal label=sectionTitle id="modal_addProductPack" linkClass="${styles.link_nav!} ${styles.action_add!}">
<#if showInput != "N" && itemInfos?has_content>
<@section title=sectionTitle>
<form name="singlePackProductForm" method="post" action="<@pageUrl>ProcessPackOrder</@pageUrl>">
<input type="hidden" name="packageSeq" value="${packingSession.getCurrentPackageSeq()}"/>
<input type="hidden" name="orderId" value="${orderId}"/>
<input type="hidden" name="shipGroupSeqId" value="${shipGroupSeqId}"/>
<input type="hidden" name="facilityId" value="${facilityId!}"/>
<@field type="lookup" formName="singlePackProductForm" name="productId"id="productId" size="20" maxlength="20" fieldFormName="LookupProduct" label=uiLabelMap.ProductProductId/>
<@field type="input" name="quantity" size="6" maxlength="6" value="1" label=uiLabelMap.ProductQuantity/>
<@field type="display" label=uiLabelMap.ProductCurrentPackageSequence>
${packingSession.getCurrentPackageSeq()}
</@field>
<@field type="submitarea">
<@field type="submit" submitType="link" href="javascript:document.singlePackProductForm.submit();" class="+${styles.link_run_sys!} ${styles.action_update!}" text=uiLabelMap.ProductPackItem />
<@field type="submit" submitType="input-button" text=uiLabelMap.ProductNextPackage onClick="javascript:document.incPkgSeq.submit();" />
</@field>
</form>
</@section>
</#if>
</@modal>
<@menuitem type="generic">
<a href="javascript:document.multiPackForm.action='${makePageUrl('ProcessBulkPackOrder')}';document.multiPackForm.submit();" class="+${styles.link_run_sys!} ${styles.action_update!}">${uiLabelMap.ProductPackAllItems}</a>
</@menuitem>
</@menu>
</#macro>
<#assign sectionTitle>${getLabel('ProductOrderId')} <a href="<@serverUrl>/ordermgr/control/orderview?orderId=${orderId}</@serverUrl>">${orderId}</a> / ${getLabel('ProductOrderShipGroupId')} #${shipGroupSeqId}</#assign>
<@section title=wrapAsRaw(sectionTitle, 'htmlmarkup') menuContent=menuContent>
<#if orderItemShipGroup?has_content>
<#if (orderItemShipGroup.contactMechId)?has_content>
<#assign postalAddress = orderItemShipGroup.getRelatedOne("PostalAddress", false)>
</#if>
<#assign carrier = orderItemShipGroup.carrierPartyId!(uiLabelMap.CommonNA)>
<@row>
<@cell columns=4>
<#if postalAddress?exists >
<@heading><strong>${uiLabelMap.ProductShipToAddress}</strong></@heading>
${uiLabelMap.CommonTo}: ${postalAddress.toName!""}<br />
<#if postalAddress.attnName?has_content>
${uiLabelMap.CommonAttn}: ${postalAddress.attnName}<br />
</#if>
${postalAddress.address1}<br/>
<#if postalAddress.address2?has_content>
${postalAddress.address2}<br/>
</#if>
${postalAddress.city!}, ${postalAddress.stateProvinceGeoId!} ${postalAddress.postalCode!}<br />
${postalAddress.countryGeoId!}<br/>
</#if>
</@cell>
<@cell columns=4>
<@heading><strong>${uiLabelMap.ProductCarrierShipmentMethod}</strong></@heading>
<#if carrier == "USPS">
<#assign color = "red">
<#elseif carrier == "UPS">
<#assign color = "green">
<#else>
<#assign color = "black">
</#if>
<#if carrier != "_NA_">
<font color="${color}">${carrier}</font>
</#if>
<#if orderItemShipGroup.shipmentMethodTypeId?has_content>
<#assign description = (delegator.findOne("ShipmentMethodType", {"shipmentMethodTypeId":orderItemShipGroup.shipmentMethodTypeId}, false)).description>
</#if>
${description!"??"}<br/>
${uiLabelMap.ProductEstimatedShipCostForShipGroup}<br />
<#if shipmentCostEstimateForShipGroup?exists>
<@ofbizCurrency amount=shipmentCostEstimateForShipGroup isoCode=(orderReadHelper.getCurrency()!)/><br />
</#if>
</@cell>
<@cell columns=4>
<@heading><strong>${uiLabelMap.OrderInstructions}</strong></@heading>
${orderItemShipGroup.shippingInstructions?default("(${uiLabelMap.CommonNone})")}
</@cell>
</@row>
</#if>
</@section>
<#if showInput != "N" && itemInfos?has_content>
<#-- auto grid form -->
<#assign sectionTitle="${rawLabel('ProductProducts')} ${rawLabel('ProductToPack')}"/>
<@section title=sectionTitle>
<form name="multiPackForm" method="post" action="<@pageUrl>ProcessPackOrder</@pageUrl>">
<@fields type="default-manual">
<input type="hidden" name="facilityId" value="${facilityId!}" />
<input type="hidden" name="orderId" value="${orderId!}" />
<input type="hidden" name="shipGroupSeqId" value="${shipGroupSeqId!}" />
<input type="hidden" name="originFacilityId" value="${facilityId!}" />
<input type="hidden" name="shipmentId" value="${shipmentId!}" />
<input name="_useRowSubmit" type="hidden" value="Y"/>
<@table type="data-list" autoAltRows=true scrollable=true responsive=true>
<@thead>
<@tr class="header-row">
<@th>${uiLabelMap.ProductItem} ${uiLabelMap.CommonNbr}</@th>
<@th>${uiLabelMap.ProductProductId}</@th>
<@th>${uiLabelMap.ProductInternalName}</@th>
<@th>${uiLabelMap.ProductOrderedQuantity}</@th>
<@th>${uiLabelMap.ProductQuantityShipped}</@th>
<@th>${uiLabelMap.ProductPackedQty}</@th>
<@th> </@th>
<@th>${uiLabelMap.ProductPackQty}</@th>
<@th>${uiLabelMap.ProductPackedWeight} (${("uiLabelMap.ProductShipmentUomAbbreviation_" + defaultWeightUomId)?eval})</@th>
<@th>${uiLabelMap.ProductPackage}</@th>
<@th>* ${uiLabelMap.ProductPackages}</@th>
<@th>${uiLabelMap.ProductPackItem}</@th>
</@tr>
</@thead>
<#if (itemInfos?has_content)>
<#list itemInfos as itemInfo>
<#assign orderItem = itemInfo.orderItem/>
<#assign shippedQuantity = orderReadHelper.getItemShippedQuantity(orderItem)!>
<#assign orderItemQuantity = itemInfo.quantity/>
<#assign orderProduct = orderItem.getRelatedOne("Product", false)!/>
<#assign product = Static["org.ofbiz.product.product.ProductWorker"].findProduct(delegator, itemInfo.productId)!/>
<#assign inputQty = orderItemQuantity - packingSession.getPackedQuantity(orderId, orderItem.orderItemSeqId, shipGroupSeqId, itemInfo.productId)>
<@tr>
<@td>${orderItem.orderItemSeqId}</@td>
<@td>
${orderProduct.productId!(uiLabelMap.CommonNA)}
<#if orderProduct.productId != product.productId>
${product.productId!(uiLabelMap.CommonNA)}
</#if>
</@td>
<@td>
<a href="<@serverUrl>/catalog/control/ViewProduct?productId=${orderProduct.productId!}${raw(externalKeyParam)}</@serverUrl>" class="${styles.link_nav_info_name!}" target="_blank">${(orderProduct.internalName)!}</a>
<#if orderProduct.productId != product.productId>
[<a href="<@serverUrl>/catalog/control/ViewProduct?productId=${product.productId!}${raw(externalKeyParam)}</@serverUrl>" class="${styles.link_nav_info_name!}" target="_blank">${(product.internalName)!}</a>]
</#if>
</@td>
<@td>${orderItemQuantity}</@td>
<@td>${shippedQuantity!0}</@td>
<@td>${packingSession.getPackedQuantity(orderId, orderItem.orderItemSeqId, shipGroupSeqId, itemInfo.productId)}</@td>
<@td> </@td>
<@td>
<@field type="input" size="7" name="qty_o_${itemInfo_index}" value=inputQty />
</@td>
<@td>
<@field type="input" size="7" name="wgt_o_${itemInfo_index}" value="" />
</@td>
<@td>
<@field type="select" name="pkg_o_${itemInfo_index}">
<#if packingSession.getPackageSeqIds()?has_content>
<#list packingSession.getPackageSeqIds() as packageSeqId>
<option value="${packageSeqId}">${uiLabelMap.ProductPackage} ${packageSeqId}</option>
</#list>
<#assign nextPackageSeqId = packingSession.getPackageSeqIds().size() + 1>
<option value="${nextPackageSeqId}">${uiLabelMap.ProductNextPackage}</option>
<#else>
<option value="1">${uiLabelMap.ProductPackage} 1</option>
<option value="2">${uiLabelMap.ProductPackage} 2</option>
<option value="3">${uiLabelMap.ProductPackage} 3</option>
<option value="4">${uiLabelMap.ProductPackage} 4</option>
<option value="5">${uiLabelMap.ProductPackage} 5</option>
</#if>
</@field>
</@td>
<@td>
<@field type="input" size="7" name="numPackages_o_${itemInfo_index}" value="1" />
</@td>
<@td>
<a href="javascript:addLine('${facilityId}', '${orderItem.orderId}', '${orderItem.orderItemSeqId}',
'${orderItem.productId!""}', '${shipGroupSeqId!}', ${itemInfo_index})"
class="${styles.link_run_sys!} ${styles.action_update!}">${uiLabelMap.ProductPackItem}
</a>
</@td>
<input type="hidden" name="prd_o_${itemInfo_index}" value="${itemInfo.productId!}"/>
<input type="hidden" name="ite_o_${itemInfo_index}" value="${orderItem.orderItemSeqId}"/>
<input name="_rowSubmit_o_${itemInfo_index}" type="hidden" value="N"/>
</@tr>
</#list>
</#if>
</@table>
</@fields>
</form>
</@section>
</#if>
<#-- display items in packages, per packed package and in order -->
<#assign linesByPackageResultMap = packingSession.getPackingSessionLinesByPackage()!>
<#assign packageMap = linesByPackageResultMap.get("packageMap")!>
<#assign sortedKeys = linesByPackageResultMap.get("sortedKeys")!>
<#if ((packageMap?has_content) && (sortedKeys?has_content))>
<@section title="${rawLabel('ProductPackages')} : ${sortedKeys.size()!}">
<#list sortedKeys as key>
<#assign packedLines = packageMap.get(key)>
<#if packedLines?has_content>
<#assign packedLine = packedLines.get(0)!>
${uiLabelMap.ProductPackage} ${packedLine.getPackageSeq()!}
<@table type="data-list">
<@tr class="header-row">
<@td>${uiLabelMap.ProductItem} ${uiLabelMap.CommonNbr}</@td>
<@td>${uiLabelMap.ProductProductId}</@td>
<@td>${uiLabelMap.ProductProductDescription}</@td>
<@td>${uiLabelMap.ProductInventoryItem} ${uiLabelMap.CommonNbr}</@td>
<@td>${uiLabelMap.ProductPackedQty}</@td>
<@td>${uiLabelMap.ProductPackedWeight} (${("uiLabelMap.ProductShipmentUomAbbreviation_" + defaultWeightUomId)?eval}) (${uiLabelMap.ProductPackage})</@td>
<@td>${uiLabelMap.ProductPackage} ${uiLabelMap.CommonNbr}</@td>
<@td> </@td>
</@tr>
<#list packedLines as line>
<#assign product = Static["org.ofbiz.product.product.ProductWorker"].findProduct(delegator, line.getProductId())/>
<@tr>
<@td>${line.getOrderItemSeqId()}</@td>
<@td>${line.getProductId()!(uiLabelMap.CommonNA)}</@td>
<@td>
<a href="<@serverUrl>/catalog/control/ViewProduct?productId=${line.getProductId()!}${raw(externalKeyParam)}</@serverUrl>" class="${styles.link_nav_info_name!}" target="_blank">${product.internalName!("[${uiLabelMap.CommonNA}]")}</a>
</@td>
<@td>${line.getInventoryItemId()}</@td>
<@td>${line.getQuantity()}</@td>
<@td>${line.getWeight()} (${packingSession.getPackageWeight(line.getPackageSeq()?int)!})</@td>
<@td>${line.getPackageSeq()}</@td>
<@td><a href="javascript:clearLine('${facilityId}', '${line.getOrderId()}', '${line.getOrderItemSeqId()}', '${line.getProductId()!""}', '${line.getShipGroupSeqId()}', '${line.getInventoryItemId()}', '${line.getPackageSeq()}')" class="${styles.link_run_sys!} ${styles.action_clear!}">${uiLabelMap.CommonClear}</a></@td>
</@tr>
</#list>
<@tfoot>
<@tr>
<@td colspan="12">
<@field type="submitarea">
<@field type="submit" text="${rawLabel('CommonClear')} (${rawLabel('CommonAll')})" onClick="javascript:document.clearPackForm.submit();"/>
</@field>
</@td>
</@tr>
</@tfoot>
</@table>
</#if>
</#list>
</@section>
</#if>
<#-- complete form -->
<#assign packageSeqIds = packingSession.getPackageSeqIds()/>
<#if showInput != "N" && packageSeqIds?has_content>
<@section>
<form name="completePackForm" method="post" action="<@pageUrl>CompletePack</@pageUrl>">
<@fields type="default-manual">
<input type="hidden" name="orderId" value="${orderId!}"/>
<input type="hidden" name="shipGroupSeqId" value="${shipGroupSeqId!}"/>
<input type="hidden" name="facilityId" value="${facilityId!}"/>
<input type="hidden" name="forceComplete" value="${forceComplete!'false'}"/>
<input type="hidden" name="weightUomId" value="${defaultWeightUomId}"/>
<input type="hidden" name="showInput" value="N"/>
<input type="hidden" name="shipmentId" value="${shipmentId!}"/>
<@table type="fields" class="+${styles.table_spacing_tiny_hint!}">
<@thead>
<@tr>
<@th>${uiLabelMap.ProductPackedWeight} (${("uiLabelMap.ProductShipmentUomAbbreviation_" + defaultWeightUomId)?eval})</@th>
<@th>${uiLabelMap.ProductShipmentBoxType}</@th>
<@th>${uiLabelMap.ProductAdditionalShippingCharge}</@th>
<@th>${uiLabelMap.ProductHandlingInstructions}</@th>
<@th>${uiLabelMap.ProductComplete}</@th>
</@tr>
</@thead>
<#list packageSeqIds as packageSeqId>
<@tr>
<@td>
<#assign packageWeightLabel>${rawLabel('ProductPackage')} ${raw(packageSeqId)}</#assign>
<@field type="input" size="7" name="packageWeight_${packageSeqId}" value=(packingSession.getPackageWeight(packageSeqId?int)!) label=packageWeightLabel/>
<#if orderItemShipGroup?has_content>
<input type="hidden" name="shippingContactMechId" value="${orderItemShipGroup.contactMechId!}"/>
<input type="hidden" name="shipmentMethodTypeId" value="${orderItemShipGroup.shipmentMethodTypeId!}"/>
<input type="hidden" name="carrierPartyId" value="${orderItemShipGroup.carrierPartyId!}"/>
<input type="hidden" name="carrierRoleTypeId" value="${orderItemShipGroup.carrierRoleTypeId!}"/>
<input type="hidden" name="productStoreId" value="${productStoreId!}"/>
</#if>
</@td>
<@td>
<#if carrierShipmentBoxTypes?has_content>
<@field type="select" name="boxType_${packageSeqId}">
<option value=""></option>
<#list carrierShipmentBoxTypes as carrierShipmentBoxType>
<#assign shipmentBoxType = carrierShipmentBoxType.getRelatedOne("ShipmentBoxType", false) />
<option value="${shipmentBoxType.shipmentBoxTypeId}">${shipmentBoxType.description!shipmentBoxType.shipmentBoxTypeId}</option>
</#list>
</@field>
</#if>
</@td>
<@td>
<@field type="input" name="additionalShippingCharge" value=(packingSession.getAdditionalShippingCharge()!) size="20"/>
<#if packageSeqIds?has_content>
<a href="javascript:document.completePackForm.action='<@pageUrl>calcPackSessionAdditionalShippingCharge</@pageUrl>';document.completePackForm.submit();" class="${styles.link_run_sys!} ${styles.action_verify!}">${uiLabelMap.ProductEstimateShipCost}</a>
</#if>
</@td>
<@td>
<@field type="textarea" name="handlingInstructions" rows="2" cols="30">${packingSession.getHandlingInstructions()!}</@field>
</@td>
<@td>
<#assign buttonName = uiLabelMap.ProductComplete>
<#if (forceComplete!"false") == "true">
<#assign buttonName = uiLabelMap.ProductCompleteForce>
</#if>
<@field type="submit" text=buttonName onClick="javascript:document.completePackForm.submit();"/>
</@td>
</@tr>
</#list>
</@table>
</@fields>
</form>
</@section>
</#if>
</#if>
</@section>
<#else>
<@commonMsg type="error">${uiLabelMap.ProductFacilityViewPermissionError}</@commonMsg>
</#if>