Hi Jacques,This is part of Verify Pick feature added recently in trunk. This commit is integral part of this feature and make this new feature complete.
Now about the problem description:With this commit, now it becomes necessary to do a Verify Pick before Packing. Being said that, user will also not be able to create a shipment until all the items of an order are verified.
Btw, I did not understand your last sentence {quote} On the other hand we could have a short period while such changes could be accepted... {quote}. Does it mean that new features can also be ported back to the release branch for few more days (like for example the https://issues.apache.org/jira/browse/OFBIZ-2225)?
Vikas On Apr 22, 2009, at 4:14 PM, Jacques Le Roux wrote:
Is this really a bug fix ? On the other hand we could have a short period while such changes could be accepted...Jacques From: <m...@apache.org>Author: mor Date: Wed Apr 22 06:50:16 2009 New Revision: 767394 URL: http://svn.apache.org/viewvc?rev=767394&view=rev Log:Facilitate packing screen to use verified orders from Verify Pick screen by using existing shipment and invoice. Patch from Akash Jain (reviewed and tested by Pranay Pandey), Part of OFBIZ-2329 (https://issues.apache.org/jira/browse/OFBIZ-2329).Note: I have done little modifications to the new labels part of this patch.This issue completes the functionality of the Verify Pick feature added recently. I would like to port these changes to release09.04 later todayif I do not see any objections. Modified: ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml ofbiz/trunk/applications/accounting/servicedef/services_invoice.xmlofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/ invoice/InvoiceServices.javaofbiz/trunk/applications/order/config/OrderErrorUiLabels.xml ofbiz/trunk/applications/product/config/ProductErrorUiLabels.xml ofbiz/trunk/applications/product/servicedef/services_shipment.xmlofbiz/trunk/applications/product/src/org/ofbiz/shipment/packing/ PackingServices.java ofbiz/trunk/applications/product/src/org/ofbiz/shipment/packing/ PackingSession.java ofbiz/trunk/applications/product/src/org/ofbiz/shipment/verify/ VerifyPickSession.java ofbiz/trunk/applications/product/src/org/ofbiz/shipment/verify/ VerifyPickSessionRow.java ofbiz/trunk/applications/product/webapp/facility/WEB-INF/actions/ shipment/PackOrder.groovy ofbiz/trunk/applications/product/webapp/facility/WEB-INF/actions/ shipment/VerifyPick.groovy ofbiz/trunk/applications/product/webapp/facility/shipment/ PackOrder.ftlModified: ofbiz/trunk/applications/accounting/config/ AccountingUiLabels.xmlURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/accounting/config/ AccountingUiLabels.xml (original) +++ ofbiz/trunk/applications/accounting/config/ AccountingUiLabels.xml Wed Apr 22 06:50:16 2009@@ -6390,6 +6390,9 @@<value xml:lang="th">à¸à¸±à¸à¸«à¸²à¸¡à¸µà¸à¸¥à¸à¹à¸ à¹à¸à¸£à¹à¸à¸£à¸¡à¸à¸£à¸°à¸¢à¸¸à¸à¸à¹à¹à¸à¹à¸à¸²à¸ £à¸à¸³à¸£à¸°à¹à¸à¸´à¸à¸ªà¸³à¸«à¸£à¸±à¸à¸£à¸«à¸±à¸ªà¸à¸²à¸ £à¸à¸³à¸£à¸°à¹à¸à¸´à¸ [${invoiceId}]</value> <value xml:lang="zh">为å票ç¼å·[$ {invoiceId}]è·å¾æ¯ä»åºç¨æ¶åºé</value></property> + <property key="AccountingProblemGettingShipmentItemBilling">+ <value xml:lang="en">Problem getting ShipmentItemBilling records</value>+ </property> <property key="AccountingProblemLookingUpOrderItemBilling"><value xml:lang="en">Problem looking up OrderItemBilling records for ${billFields}</value> <value xml:lang="es">Problema buscando Elemento de orden de facturación para ${billFields}</value>Modified: ofbiz/trunk/applications/accounting/servicedef/ services_invoice.xmlURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/accounting/servicedef/ services_invoice.xml (original) +++ ofbiz/trunk/applications/accounting/servicedef/ services_invoice.xml Wed Apr 22 06:50:16 2009@@ -152,7 +152,7 @@ </description><attribute name="orderId" type="String" mode="IN" optional="false"/> <attribute name="billItems" type="List" mode="IN" optional="false"/> - <attribute name="invoiceId" type="String" mode="OUT" optional="true"/> + <attribute name="invoiceId" type="String" mode="INOUT" optional="true"/> <attribute name="invoiceTypeId" type="String" mode="OUT" optional="true"/></service> <service name="createInvoiceFromReturn" engine="java"Modified: ofbiz/trunk/applications/accounting/src/org/ofbiz/ accounting/invoice/InvoiceServices.javaURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/ invoice/InvoiceServices.java (original) +++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/ invoice/InvoiceServices.java Wed Apr 22 06:50:16 2009@@ -151,6 +151,7 @@ String orderId = (String) context.get("orderId"); List billItems = (List) context.get("billItems"); + String invoiceId = (String) context.get("invoiceId"); boolean previousInvoiceFound = false; if (billItems == null || billItems.size() == 0) { @@ -241,6 +242,7 @@ } // create the invoice record + if (UtilValidate.isEmpty(invoiceId)) { Map createInvoiceContext = FastMap.newInstance();createInvoiceContext.put("partyId", billToCustomerPartyId); createInvoiceContext.put("partyIdFrom", billFromVendorPartyId);@@ -260,7 +262,8 @@ }// call service, not direct entity op: delegator.create(invoice); - String invoiceId = (String) createInvoiceResult.get("invoiceId"); + invoiceId = (String) createInvoiceResult.get("invoiceId");+ } // order roles to invoice roles List orderRoles = orderHeader.getRelated("OrderRole"); @@ -491,6 +494,8 @@ }if ("ItemIssuance".equals(currentValue.getEntityName())) { + List<GenericValue> shipmentItemBillings = delegator.findByAnd("ShipmentItemBilling", UtilMisc.toMap("shipmentId", currentValue.get("shipmentId"))); + if (UtilValidate.isEmpty(shipmentItemBillings)) {// create the ShipmentItemBilling recordGenericValue shipmentItemBilling = delegator.makeValue("ShipmentItemBilling", UtilMisc.toMap("invoiceId", invoiceId, "invoiceItemSeqId", invoiceItemSeqId));@@ -498,6 +503,7 @@shipmentItemBilling.put("shipmentItemSeqId", currentValue.get("shipmentItemSeqId"));shipmentItemBilling.create(); } + } String parentInvoiceItemSeqId = invoiceItemSeqId; // increment the counter @@ -1538,8 +1544,22 @@Debug.logInfo(UtilProperties.getMessage(resource, "AccountingIgnoringAdditionalShipCharges", productStore.getAllFields(), locale), module);} + String invoiceId = null; + List<GenericValue> shipmentItemBillings = null; + String shipmentId = (String) shipmentIds.get(0); + try {+ shipmentItemBillings = delegator.findByAnd("ShipmentItemBilling", UtilMisc.toMap("shipmentId", shipmentId));+ } catch ( GenericEntityException e ) {+ String errMsg = UtilProperties.getMessage(resource, "AccountingProblemGettingShipmentItemBilling", locale);+ return ServiceUtil.returnError(errMsg); + } + if (UtilValidate.isNotEmpty(shipmentItemBillings)) {+ GenericValue shipmentItemBilling = EntityUtil.getFirst(shipmentItemBillings); + invoiceId = shipmentItemBilling.getString("invoiceId");+ } + // call the createInvoiceForOrder service for each order- Map serviceContext = UtilMisc.toMap("orderId", orderId, "billItems", toBillItems, "userLogin", context.get("userLogin")); + Map serviceContext = UtilMisc.toMap("orderId", orderId, "billItems", toBillItems, "invoiceId", invoiceId, "userLogin", context.get("userLogin"));try {Map result = dispatcher.runSync("createInvoiceForOrder", serviceContext);invoicesCreated.add(result.get("invoiceId"));Modified: ofbiz/trunk/applications/order/config/ OrderErrorUiLabels.xmlURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/config/OrderErrorUiLabels.xml?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/order/config/OrderErrorUiLabels.xml (original) +++ ofbiz/trunk/applications/order/config/OrderErrorUiLabels.xml Wed Apr 22 06:50:16 2009@@ -334,6 +334,9 @@<value xml:lang="th">ERROR : à¸à¹à¸ à¸à¸´à¸à¸à¸¥à¸²à¸ ! </value><value xml:lang="zh">é误ï¼</value> </property> + <property key="OrderErrorAllItemsOfOrderAreAlreadyVerified">+ <value xml:lang="en">ERROR: All items of order #${orderId} are already verified</value>+ </property><property key="OrderErrorCallingCountProductQuantityOrderedService"> <value xml:lang="en">Error calling countProductQuantityOrdered service : </value> <value xml:lang="es">Error al llamar al servicio countProductQuantityOrdered:</value>@@ -685,6 +688,12 @@<value xml:lang="ru">ÐШÐÐÐÐ: ÐозиÑÐ¸Ñ Ð·Ð°ÐºÐ°Ð·Ð ° Ñ ÐºÐ¾Ð´Ð¾Ð¼ [${orderId}] и orderItemSeqId [${orderItemSeqId}] не найденÑ</value> <value xml:lang="th">ERROR : à¸à¹à¸ à¸à¸´à¸à¸à¸ ¥à¸²à¸ ! รายà¸à¸²à¸£à¸ªà¸±à¹à¸à¸à¸·à¹à¸ à¸à¹à¸§à¸¢à¸ £à¸«à¸±à¸ª [${orderId}] à¹à¸¥à¸°à¸£à¸«à¸±à¸ªà¸£à¸²à¸¢à¸à¸²à¸£à¸ªà¸ ±à¹à¸à¸à¸·à¹à¸ [${orderItemSeqId}] à¹à¸¡à¹à¸à¸</value></property> + <property key="OrderErrorOrderNotApprovedForPacking">+ <value xml:lang="en">ERROR: Order #${orderId} is not approved for packing</value>+ </property> + <property key="OrderErrorOrderNotApprovedForPicking">+ <value xml:lang="en">ERROR: Order #${orderId} is not approved for picking</value>+ </property> <property key="OrderErrorOrderNotPurchaseOrder"><value xml:lang="en">Order ${orderId} is not a Purchase Order</value> <value xml:lang="es">El pedido ${orderId} no es un pedido de compra</value>@@ -693,6 +702,9 @@<value xml:lang="ru">Ðаказ ${orderId} не ÑвлÑеÑÑÑ Ð·Ð°ÐºÑпоÑнÑм заказом</value> <value xml:lang="th">à¹à¸à¸ªà¸±à¹à¸à¸à¸·à¹à¸ สภ´à¸à¸à¹à¸² ${orderId} à¹à¸¡à¹à¹à¸à¹à¸à¸£à¸²à¸¢à¸à¸²à¸ £à¸ªà¸±à¹à¸à¸à¸·à¹à¸ </value></property> + <property key="OrderErrorOrderNotVerifiedForPacking">+ <value xml:lang="en">ERROR: Order #${orderId} is not verified for packing</value>+ </property> <property key="OrderErrorOrderTypeLookupFailed"><value xml:lang="en">ERROR : OrderType lookup failed : </ value><value xml:lang="es">ERROR: La búsqueda ha fallado :</value>Modified: ofbiz/trunk/applications/product/config/ ProductErrorUiLabels.xmlURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/config/ProductErrorUiLabels.xml?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/product/config/ ProductErrorUiLabels.xml (original) +++ ofbiz/trunk/applications/product/config/ ProductErrorUiLabels.xml Wed Apr 22 06:50:16 2009@@ -55,6 +55,9 @@<value xml:lang="en">Error Inventory Item Label Id Not Found</value> <value xml:lang="it">Errore riga etichetta inventario non trovata</value></property>+ <property key="ProductErrorNoShipGroupSequenceIdFoundCannotProcess"> + <value xml:lang="en">ERROR: No ship group sequence Id found cannot process</value>+ </property> <property key="ProductFeatureTypeIdMustContainsLettersAndDigits"><value xml:lang="de">Die Produktmerkmal Typ ID darf nur Buchstaben, Zahlen und _ enthalten. Bitte erneut eingeben.</value> <value xml:lang="en">The Product Feature TypeId must contains only letters, underscore and digits. Please re-enter</value>Modified: ofbiz/trunk/applications/product/servicedef/ services_shipment.xmlURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services_shipment.xml?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/product/servicedef/ services_shipment.xml (original) +++ ofbiz/trunk/applications/product/servicedef/ services_shipment.xml Wed Apr 22 06:50:16 2009@@ -562,6 +562,9 @@location="org.ofbiz.shipment.packing.PackingServices" invoke="completePack" auth="true"> <description>Complete the packging set the shipment to PACKED</description> <attribute name="packingSession" type="org.ofbiz.shipment.packing.PackingSession" mode="IN" optional="false"/> + <attribute name="orderId" type="String" mode="IN" optional="true"/> + <attribute name="invoiceId" type="String" mode="IN" optional="true"/> + <attribute name="shipmentId" type="String" mode="IN" optional="true"/> <attribute name="handlingInstructions" type="String" mode="IN" optional="true"/> <attribute name="pickerPartyId" type="String" mode="IN" optional="true"/> <attribute name="additionalShippingCharge" type="BigDecimal" mode="IN" optional="true"/>Modified: ofbiz/trunk/applications/product/src/org/ofbiz/shipment/ packing/PackingServices.javaURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/shipment/packing/PackingServices.java?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/shipment/packing/ PackingServices.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/shipment/packing/ PackingServices.java Wed Apr 22 06:50:16 2009@@ -271,11 +271,16 @@PackingSession session = (PackingSession) context.get("packingSession");// set the instructions -- will clear out previous if now null + String orderId = (String) context.get("orderId"); + String shipmentId = (String) context.get("shipmentId"); + String invoiceId = (String) context.get("invoiceId");String instructions = (String) context.get("handlingInstructions");String pickerPartyId = (String) context.get("pickerPartyId");BigDecimal additionalShippingCharge = (BigDecimal) context.get("additionalShippingCharge"); Map<String, String> packageWeights = UtilGenerics.checkMap(context.get("packageWeights"));String weightUomId = (String) context.get("weightUomId"); + session.setShipmentId(shipmentId); + session.setInvoiceId(invoiceId); session.setHandlingInstructions(instructions); session.setPickerPartyId(pickerPartyId); session.setAdditionalShippingCharge(additionalShippingCharge); @@ -287,9 +292,8 @@ force = Boolean.FALSE; } - String shipmentId = null; try { - shipmentId = session.complete(force); + shipmentId = session.complete(force, orderId); } catch (GeneralException e) { Debug.logError(e, module);return ServiceUtil.returnError(e.getMessage(), e.getMessageList());Modified: ofbiz/trunk/applications/product/src/org/ofbiz/shipment/ packing/PackingSession.javaURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/shipment/packing/PackingSession.java?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/shipment/packing/ PackingSession.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/shipment/packing/ PackingSession.java Wed Apr 22 06:50:16 2009@@ -60,6 +60,7 @@ protected String shipmentId = null; protected String instructions = null; protected String weightUomId = null; + protected String invoiceId = null; protected BigDecimal additionalShippingCharge = null; protected Map<Integer, BigDecimal> packageWeights = null; protected List<PackingEvent> packEvents = null; @@ -367,6 +368,18 @@ return this.shipmentId; } + public void setShipmentId(String shipmentId) { + this.shipmentId = shipmentId; + } + + public String getInvoiceId() { + return this.invoiceId; + } + + public void setInvoiceId(String invoiceId) { + this.invoiceId = invoiceId; + } + public List<PackingSessionLine> getLines() { return this.packLines; } @@ -613,7 +626,7 @@ this.runEvents(PackingEvent.EVENT_CODE_CLEAR); } - public String complete(boolean force) throws GeneralException {+ public String complete(boolean force, String orderId) throws GeneralException {// clear out empty lines// this.checkEmptyLines(); // removing, this seems to be causeing issues - mja@@ -622,12 +635,16 @@ return "EMPTY"; } + this.checkPackedQty(orderId); // check for errors this.checkReservations(force); // set the status to 0 this.status = 0; // create the shipment - this.createShipment(); + String shipmentId = this.getShipmentId(); + if (UtilValidate.isEmpty(shipmentId)) { + this.createShipment(); + } // create the packages this.createPackages(); // issue the items @@ -646,6 +663,27 @@ return this.shipmentId; }+ protected void checkPackedQty(String orderId) throws GeneralException {+ int counter = 0; + List<GenericValue> orderItems = null; + for (PackingSessionLine line : this.getLines()) {+ orderItems = this.getDelegator().findByAnd("OrderItem", UtilMisc.toMap("orderId", orderId));+ for (GenericValue orderItem : orderItems) { + if (orderId.equals(line.getOrderId())) {+ if ((orderItem .get("orderItemSeqId")).equals(line.getOrderItemSeqId())) { + BigDecimal packedQty = this.getPackedQuantity(line.getOrderId(), line.getOrderItemSeqId(), line.getShipGroupSeqId(), line.getProductId()); + if ((packedQty.compareTo(orderItem.getBigDecimal("quantity"))) == 0 ) {+ counter++; + } + } + } + } + }+ if (((this.getLines().size()) != (orderItems.size())) || (counter != (orderItems.size()))) { + throw new GeneralException("All order items are not packed");+ } + } +protected void checkReservations(boolean ignore) throws GeneralException {List<String> errors = FastList.newInstance(); for (PackingSessionLine line: this.getLines()) {Modified: ofbiz/trunk/applications/product/src/org/ofbiz/shipment/ verify/VerifyPickSession.javaURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/shipment/verify/VerifyPickSession.java?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/shipment/verify/ VerifyPickSession.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/shipment/verify/ VerifyPickSession.java Wed Apr 22 06:50:16 2009@@ -140,14 +140,11 @@ } public String complete(String orderId) throws GeneralException { - String shipmentId = null; String shipmentItemSeqId = null; String invoiceId = null; String invoiceItemSeqId = null; - for (VerifyPickSessionRow line: this.getPickRows(orderId)) { - shipmentId = this.createShipment(line); - break; - } + this.checkVerifiedQty(orderId);+ String shipmentId = this.createShipment((this.getPickRows(orderId)).get(0));for (VerifyPickSessionRow line: this.getPickRows(orderId)) {shipmentItemSeqId = this.createShipmentItem(line,shipmentId);line.setShipmentItemSeqId(shipmentItemSeqId); @@ -160,6 +157,24 @@ return shipmentId; }+ protected void checkVerifiedQty(String orderId) throws GeneralException {+ int counter = 0; + List<GenericValue> orderItems = null;+ for (VerifyPickSessionRow line : this.getPickRows(orderId)) { + orderItems = this.getDelegator().findByAnd("OrderItem", UtilMisc.toMap("orderId", orderId));+ for (GenericValue orderItem : orderItems) {+ if ((orderItem.get("orderItemSeqId")).equals(line.getOrderSeqId())) { + if (((line .getReadyToVerifyQty ()).compareTo(orderItem.getBigDecimal("quantity"))) == 0 ) {+ counter++; + } + } + } + } + if (counter != (orderItems.size())) {+ throw new GeneralException("All order items are not verified");+ } + } +protected String createShipment(VerifyPickSessionRow line) throws GeneralException {Map<String, Object> newShipment = FastMap.newInstance(); newShipment.put("originFacilityId", line.getFacilityId()); @@ -202,11 +217,17 @@ }protected String createInvoice(String orderId) throws GeneralException {+ GenericDelegator delegator = this.getDelegator(); Map createInvoiceContext = FastMap.newInstance();- createInvoiceContext.put("partyId", (EntityUtil.getFirst(this.getDelegator().findByAnd("OrderRole", UtilMisc.toMap("orderId", orderId, "roleTypeId", "BILL_TO_CUSTOMER")))).getString("partyId")); - createInvoiceContext.put("partyIdFrom", (EntityUtil.getFirst(this.getDelegator().findByAnd("OrderRole", UtilMisc.toMap("orderId", orderId, "roleTypeId", "BILL_FROM_VENDOR")))).getString("partyId")); + GenericValue orderHeader = delegator.findOne("OrderHeader", UtilMisc.toMap("orderId", orderId), false); + GenericValue billingAccount = orderHeader.getRelatedOne("BillingAccount"); + String billingAccountId = billingAccount != null ? billingAccount.getString("billingAccountId") : null; + createInvoiceContext.put("partyId", (EntityUtil.getFirst(delegator.findByAnd("OrderRole", UtilMisc.toMap("orderId", orderId, "roleTypeId", "BILL_TO_CUSTOMER")))).getString("partyId")); + createInvoiceContext.put("partyIdFrom", (EntityUtil.getFirst(delegator.findByAnd("OrderRole", UtilMisc.toMap("orderId", orderId, "roleTypeId", "BILL_FROM_VENDOR")))).getString("partyId")); + createInvoiceContext.put("billingAccountId", billingAccountId);createInvoiceContext.put("invoiceTypeId", "SALES_INVOICE"); createInvoiceContext.put("statusId", "INVOICE_IN_PROCESS");+ createInvoiceContext.put("currencyUomId", orderHeader.getString("currencyUom"));createInvoiceContext.put("userLogin", this.getUserLogin());Map createInvoiceResult = this.getDispatcher().runSync("createInvoice", createInvoiceContext);if (ServiceUtil.isError(createInvoiceResult)) {Modified: ofbiz/trunk/applications/product/src/org/ofbiz/shipment/ verify/VerifyPickSessionRow.javaURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/src/org/ofbiz/shipment/verify/VerifyPickSessionRow.java?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/product/src/org/ofbiz/shipment/verify/ VerifyPickSessionRow.java (original) +++ ofbiz/trunk/applications/product/src/org/ofbiz/shipment/verify/ VerifyPickSessionRow.java Wed Apr 22 06:50:16 2009@@ -50,6 +50,7 @@ this.orderItem = orderItem; this.rowItem = rowItem; this.shipmentItemSeqId = null; + this.invoiceItemSeqId = null; } public String getOrderId() {Modified: ofbiz/trunk/applications/product/webapp/facility/WEB-INF/ actions/shipment/PackOrder.groovyURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/facility/WEB-INF/actions/shipment/PackOrder.groovy?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/product/webapp/facility/WEB-INF/ actions/shipment/PackOrder.groovy (original) +++ ofbiz/trunk/applications/product/webapp/facility/WEB-INF/ actions/shipment/PackOrder.groovy Wed Apr 22 06:50:16 2009@@ -115,6 +115,16 @@ context.shipGroupSeqId = shipGroupSeqId; context.picklistBinId = picklistBinId;+shipment = EntityUtil.getFirst(delegator.findByAnd("Shipment", [primaryOrderId : orderId, statusId : "SHIPMENT_PICKED"]));+context.shipment = shipment; + +if (shipment) {+ invoice = EntityUtil.getFirst(delegator.findByAnd("ShipmentItemBilling", [shipmentId : shipment.shipmentId]));+ context.invoice = invoice; +} else { + context.invoice = null; +} + // grab the order information if (orderId) {orderHeader = delegator.findOne("OrderHeader", [orderId : orderId], false);@@ -128,6 +138,7 @@ if ("ORDER_APPROVED".equals(orderHeader.statusId)) { if (shipGroupSeqId) { + if (shipment) {// Generate the shipment cost estimate for the ship groupproductStoreId = orh.getProductStoreId(); @@ -145,13 +156,16 @@ //context.put("itemInfos", shippableItemInfo); } } else {- request.setAttribute("errorMessageList", ['No ship group sequence ID. Cannot process.']); + request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage("OrderErrorUiLabels", "OrderErrorOrderNotVerifiedForPacking", [orderId : orderId], locale));+ } + } else {+ request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage("ProductErrorUiLabels", "ProductErrorNoShipGroupSequenceIdFoundCannotProcess", locale));} } else {- request.setAttribute("errorMessageList", ["Order #" + orderId + " is not approved for packing."]); + request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage("OrderErrorUiLabels", "OrderErrorOrderNotApprovedForPacking", [orderId : orderId], locale));} } else {- request.setAttribute("errorMessageList", ["Order #" + orderId + " cannot be found."]); + request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage("OrderErrorUiLabels", "OrderErrorOrderIdNotFound", [orderId : orderId], locale));} }Modified: ofbiz/trunk/applications/product/webapp/facility/WEB-INF/ actions/shipment/VerifyPick.groovyURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/facility/WEB-INF/actions/shipment/VerifyPick.groovy?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/product/webapp/facility/WEB-INF/ actions/shipment/VerifyPick.groovy (original) +++ ofbiz/trunk/applications/product/webapp/facility/WEB-INF/ actions/shipment/VerifyPick.groovy Wed Apr 22 06:50:16 2009@@ -17,9 +17,10 @@ * under the License. */ -import org.ofbiz.order.order.OrderReadHelper; +import org.ofbiz.base.util.UtilProperties; import org.ofbiz.entity.util.EntityUtil; import org.ofbiz.entity.condition.EntityCondition; +import org.ofbiz.order.order.OrderReadHelper; import org.ofbiz.shipment.verify.VerifyPickSession; verifyPickSession = session.getAttribute("verifyPickSession"); @@ -42,6 +43,7 @@invoiceIds = EntityUtil.getFieldListFromEntityList(shipmentItemBillingList, "invoiceId", true);if (invoiceIds) { context.invoiceIds = invoiceIds; + parameters.orderId = null; } } } @@ -90,14 +92,18 @@ if (shipGroupSeqId) { productStoreId = orh.getProductStoreId(); context.productStoreId = productStoreId;+ shipments = delegator.findByAnd("Shipment", [primaryOrderId : orderId, statusId : "SHIPMENT_PICKED"]);+ if (shipments) {+ request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage("OrderErrorUiLabels", "OrderErrorAllItemsOfOrderAreAlreadyVerified", [orderId : orderId], locale));+ } } else {- request.setAttribute("errorMessageList", ['No ship group sequence ID. Cannot process.']); + request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage("ProductErrorUiLabels", "ProductErrorNoShipGroupSequenceIdFoundCannotProcess", locale));} } else {- request.setAttribute("errorMessageList", ["Order #" + orderId + " is not approved for picking."]); + request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage("OrderErrorUiLabels", "OrderErrorOrderNotApprovedForPicking", [orderId : orderId], locale));} } else {- request.setAttribute("errorMessageList", ["Order #" + orderId + " cannot be found."]); + request.setAttribute("_ERROR_MESSAGE_", UtilProperties.getMessage("OrderErrorUiLabels", "OrderErrorOrderIdNotFound", [orderId : orderId], locale));} } context.verifyPickSession = verifyPickSession; \ No newline at end of fileModified: ofbiz/trunk/applications/product/webapp/facility/shipment/ PackOrder.ftlURL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/webapp/facility/shipment/PackOrder.ftl?rev=767394&r1=767393&r2=767394&view=diff= = = = = = = = = ===================================================================== --- ofbiz/trunk/applications/product/webapp/facility/shipment/ PackOrder.ftl (original) +++ ofbiz/trunk/applications/product/webapp/facility/shipment/ PackOrder.ftl Wed Apr 22 06:50:16 2009@@ -21,7 +21,7 @@ <#assign showInput = requestParameters.showInput?default("Y")> <#assign hideGrid = requestParameters.hideGrid?default("N")>- <#if (requestParameters.forceComplete?has_content && ! shipmentId?has_content)> + <#if (requestParameters.forceComplete?has_content && ! invoiceIds?has_content)><#assign forceComplete = "true"> <#assign showInput = "Y"> </#if> @@ -33,12 +33,11 @@ <br class="clear"/> </div> <div class="screenlet-body"> - <#if shipmentId?has_content>+ <#if shipmentId?has_content && invoiceIds?exists && invoiceIds?has_content><div>${uiLabelMap.CommonView} <a href="<@ofbizUrl>/ PackingSlip.pdf?shipmentId=${shipmentId}</@ofbizUrl>" target="_blank" class="buttontext">$ {uiLabelMap.ProductPackingSlip}</a> ${uiLabelMap.CommonOr} ${uiLabelMap.CommonView} <a href="<@ofbizUrl>/ ShipmentBarCode.pdf?shipmentId=${shipmentId}</@ofbizUrl>" target="_blank" class="buttontext">${uiLabelMap.ProductBarcode}</a> ${uiLabelMap.CommonFor} ${uiLabelMap.ProductShipmentId} <a href="<@ofbizUrl>/ViewShipment?shipmentId=${shipmentId}</ @ofbizUrl>" class="buttontext">${shipmentId}</a></div> - <#if invoiceIds?exists && invoiceIds?has_content> <div> <p>${uiLabelMap.AccountingInvoices}:</p> <ul> @@ -50,7 +49,6 @@ </#list> </ul> </div> - </#if> </#if> <br/> @@ -115,6 +113,7 @@ </div> </div> + <#if ((shipment?has_content) && (shipment.shipmentId)?exists)><#if showInput != "N" && ((orderHeader?exists && orderHeader? has_content))><div class="screenlet"> <div class="screenlet-title-bar"> @@ -329,6 +328,8 @@<input type="hidden" name="facilityId" value="$ {facilityId?if_exists}"/> <input type="hidden" name="forceComplete" value="$ {forceComplete?default('false')}"/> <input type="hidden" name="weightUomId" value="$ {defaultWeightUomId}"/> + <input type="hidden" name="shipmentId" value="$ {(shipment.shipmentId)?default("")}"/> + <input type="hidden" name="invoiceId" value="$ {(invoice.invoiceId)?default("")}"/><input type="hidden" name="showInput" value="N"/> <hr><table class="basic-table" cellpadding="2" cellspacing='0'>@@ -490,6 +491,7 @@ </#if> </div> </div> + </#if> <#else> <h3>${uiLabelMap.ProductFacilityViewPermissionError}</h3> </#if> \ No newline at end of file
smime.p7s
Description: S/MIME cryptographic signature