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 today if I do not see any objections. Modified: ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java ofbiz/trunk/applications/order/config/OrderErrorUiLabels.xml ofbiz/trunk/applications/product/config/ProductErrorUiLabels.xml ofbiz/trunk/applications/product/servicedef/services_shipment.xml ofbiz/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.ftl Modified: ofbiz/trunk/applications/accounting/config/AccountingUiLabels.xml URL: 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.xml URL: 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.java URL: 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 record GenericValue 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.xml URL: 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.xml URL: 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.xml URL: 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.java URL: 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.java URL: 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.java URL: 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.java URL: 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.groovy URL: 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 group productStoreId = 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.groovy URL: 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 file Modified: ofbiz/trunk/applications/product/webapp/facility/shipment/PackOrder.ftl URL: 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 |
On Apr 22, 2009, at 12:50 AM, [hidden email] wrote: > 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 today > if I do not see any objections. No, these changes should NOT be migrated to the release branch. That violates the general intent of the release branch which is that only bug fixes should go there (ie no new functionality, which is what this is). For more information please read the Release Plan document: http://docs.ofbiz.org/display/OFBADMIN/Release+Plan -David |
Free forum by Nabble | Edit this page |