Author: sichen
Date: Thu Mar 15 09:31:50 2007 New Revision: 518682 URL: http://svn.apache.org/viewvc?view=rev&rev=518682 Log: Improve the packing slip PDF so that it's organized as one page per package. It could use a little more work on the flow of the header and gift message. Perhaps the gift message and other such data should be on a page of its own? Added: ofbiz/trunk/applications/product/webapp/facility/WEB-INF/actions/shipment/PackingSlip.bsh Modified: ofbiz/trunk/applications/product/webapp/facility/shipment/PackingSlip.fo.ftl ofbiz/trunk/applications/product/widget/facility/ShipmentScreens.xml Added: ofbiz/trunk/applications/product/webapp/facility/WEB-INF/actions/shipment/PackingSlip.bsh URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/facility/WEB-INF/actions/shipment/PackingSlip.bsh?view=auto&rev=518682 ============================================================================== --- ofbiz/trunk/applications/product/webapp/facility/WEB-INF/actions/shipment/PackingSlip.bsh (added) +++ ofbiz/trunk/applications/product/webapp/facility/WEB-INF/actions/shipment/PackingSlip.bsh Thu Mar 15 09:31:50 2007 @@ -0,0 +1,85 @@ +/* + * 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. + */ + +// This script gets shipment items grouped by package for use in the packing slip PDF or any screens that require by-package layout + +import javolution.util.FastList; +import javolution.util.FastMap; +import org.ofbiz.base.util.UtilMisc; + +// Since this script is run after ViewShipment, we will re-use the shipment in the context +shipment = context.get("shipment"); +if (shipment == null) return; + +// get the packages related to this shipment in order of packages +orderBy = UtilMisc.toList("shipmentPackageSeqId"); +shipmentPackages = shipment.getRelated("ShipmentPackage", orderBy); + +// first we scan the shipment items and count the quantity of each product that is being shipped +quantityShippedByProduct = FastMap.newInstance(); +shipmentItems = shipment.getRelated("ShipmentItem"); +for (iter = shipmentItems.iterator(); iter.hasNext(); ) { + shipmentItem = iter.next(); + productId = shipmentItem.get("productId"); + + shipped = quantityShippedByProduct.get(productId); + if (shipped == null) shipped = new Double(0); + shipped += shipmentItem.getDouble("quantity").doubleValue(); + quantityShippedByProduct.put(productId, shipped); +} + +// next scan the order items (via issuances) to count the quantity of each product requested +quantityRequestedByProduct = FastMap.newInstance(); +issuances = shipment.getRelated("ItemIssuance"); +for (iter = issuances.iterator(); iter.hasNext(); ) { + issuance = iter.next(); + orderItem = issuance.getRelatedOne("OrderItem"); + productId = orderItem.get("productId"); + + requested = quantityRequestedByProduct.get(productId); + if (requested == null) requested = new Double(0); + cancelQuantity = orderItem.getDouble("cancelQuantity"); + quantity = orderItem.getDouble("quantity"); + requested += quantity.doubleValue() - (cancelQuantity != null ? cancelQuantity.doubleValue() : 0); + quantityRequestedByProduct.put(productId, requested); +} + +// for each package, we want to list the quantities and details of each product +packages = FastList.newInstance(); // note we assume that the package number is simply the index + 1 of this list +for (iter = shipmentPackages.iterator(); iter.hasNext(); ) { + shipmentPackage = iter.next(); + contents = shipmentPackage.getRelated("ShipmentPackageContent", UtilMisc.toList("shipmentItemSeqId")); + + // each line is one logical Product and the quantities associated with it + lines = FastList.newInstance(); + for (citer = contents.iterator(); citer.hasNext(); ) { + content = citer.next(); + shipmentItem = content.getRelatedOne("ShipmentItem"); + product = shipmentItem.getRelatedOne("Product"); + + line = FastMap.newInstance(); + line.put("product", product); + line.put("quantityInPackage", content.get("quantity")); + line.put("quantityShipped", quantityShippedByProduct.get(product.get("productId"))); + line.put("quantityRequested", quantityRequestedByProduct.get(product.get("productId"))); + lines.add(line); + } + packages.add(lines); +} +context.put("packages", packages); Modified: ofbiz/trunk/applications/product/webapp/facility/shipment/PackingSlip.fo.ftl URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/facility/shipment/PackingSlip.fo.ftl?view=diff&rev=518682&r1=518681&r2=518682 ============================================================================== --- ofbiz/trunk/applications/product/webapp/facility/shipment/PackingSlip.fo.ftl (original) +++ ofbiz/trunk/applications/product/webapp/facility/shipment/PackingSlip.fo.ftl Thu Mar 15 09:31:50 2007 @@ -31,7 +31,6 @@ </fo:layout-master-set> <#if hasPermission> - <#assign rowColor = "white"> <#assign shipGroup = shipment.getRelatedOne("PrimaryOrderItemShipGroup")?if_exists> <#assign carrier = (shipGroup.carrierPartyId)?default("N/A")> <fo:page-sequence master-reference="main"> @@ -51,7 +50,10 @@ </fo:block> <fo:block><fo:leader/></fo:block> - <fo:block font-size="14pt">${uiLabelMap.ProductShipmentId} #${shipmentId}</fo:block> + + <#list packages as package> + + <fo:block font-size="14pt">${uiLabelMap.ProductShipmentId} #${shipmentId} / Package ${package_index + 1}</fo:block> <fo:block font-size="12pt">${uiLabelMap.ProductOrderId} #${shipment.primaryOrderId?default("N/A")} / ${shipment.primaryShipGroupSeqId?default("N/A")}</fo:block> <fo:block><fo:leader/></fo:block> @@ -110,47 +112,51 @@ <fo:block space-after.optimum="10pt" font-size="10pt"> <fo:table> <fo:table-column column-width="250pt"/> - <fo:table-column column-width="100pt"/> - <fo:table-column column-width="100pt"/> + <fo:table-column column-width="67pt"/> + <fo:table-column column-width="67pt"/> + <fo:table-column column-width="67pt"/> <fo:table-header> <fo:table-row font-weight="bold"> <fo:table-cell padding="2pt" background-color="#D4D0C8"><fo:block>${uiLabelMap.ProductProduct}</fo:block></fo:table-cell> - <fo:table-cell padding="2pt" background-color="#D4D0C8"><fo:block>${uiLabelMap.ProductQuantityRequested}</fo:block></fo:table-cell> - <fo:table-cell padding="2pt" background-color="#D4D0C8"><fo:block>${uiLabelMap.ProductQuantityShipped}</fo:block></fo:table-cell> + <fo:table-cell padding="2pt" background-color="#D4D0C8"><fo:block>Requested</fo:block></fo:table-cell> + <fo:table-cell padding="2pt" background-color="#D4D0C8"><fo:block>In this Package</fo:block></fo:table-cell> + <fo:table-cell padding="2pt" background-color="#D4D0C8"><fo:block>Total Shipped</fo:block></fo:table-cell> </fo:table-row> </fo:table-header> <fo:table-body> - <#list shipmentItemDatas as shipmentItem> - <#assign itemIssuances = shipmentItem.itemIssuances> - <#list itemIssuances as issue> - <#assign orderItem = issue.getRelatedOne("OrderItem")> - <#assign product = shipmentItem.product> + <#list package as line> + <#if ((line_index % 2) == 0)> + <#assign rowColor = "white"> + <#else> + <#assign rowColor = "#CCCCCC"> + </#if> + <fo:table-row> <fo:table-cell padding="2pt" background-color="${rowColor}"> - <#if product?has_content> - <fo:block>${product.internalName?default("Internal Name Not Set!")} [${product.productId}]</fo:block> + <#if line.product?has_content> + <fo:block>${line.product.internalName?default("Internal Name Not Set!")} [${line.product.productId}]</fo:block> <#else/> - <fo:block> </fo:block> + <fo:block>${line.getClass().getName()} </fo:block> </#if> </fo:table-cell> <fo:table-cell padding="2pt" background-color="${rowColor}"> - <fo:block>${orderItem.quantity}</fo:block> + <fo:block>${line.quantityRequested?default(0)}</fo:block> </fo:table-cell> <fo:table-cell padding="2pt" background-color="${rowColor}"> - <fo:block>${issue.quantity}</fo:block> + <fo:block>${line.quantityInPackage?default(0)}</fo:block> + </fo:table-cell> + <fo:table-cell padding="2pt" background-color="${rowColor}"> + <fo:block>${line.quantityShipped?default(0)}</fo:block> </fo:table-cell> </fo:table-row> - <#-- toggle the row color --> - <#if rowColor == "white"> - <#assign rowColor = "#CCCCCC"> - <#else> - <#assign rowColor = "white"> - </#if> - </#list> </#list> </fo:table-body> </fo:table> </fo:block> + + <#if package_has_next><fo:block break-before="page"/></#if> + </#list> <#-- packages --> + <fo:block space-after.optimum="10pt" font-size="10pt"> <fo:table> <fo:table-column column-width="450pt"/> Modified: ofbiz/trunk/applications/product/widget/facility/ShipmentScreens.xml URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/widget/facility/ShipmentScreens.xml?view=diff&rev=518682&r1=518681&r2=518682 ============================================================================== --- ofbiz/trunk/applications/product/widget/facility/ShipmentScreens.xml (original) +++ ofbiz/trunk/applications/product/widget/facility/ShipmentScreens.xml Thu Mar 15 09:31:50 2007 @@ -275,7 +275,7 @@ <set field="shipmentId" from-field="parameters.shipmentId"/> <script location="component://product/webapp/facility/WEB-INF/actions/shipment/ViewShipment.bsh"/> - <script location="component://product/webapp/facility/WEB-INF/actions/shipment/EditShipmentItems.bsh"/> + <script location="component://product/webapp/facility/WEB-INF/actions/shipment/PackingSlip.bsh"/> </actions> <widgets> <platform-specific> |
Free forum by Nabble | Edit this page |