You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ofbiz.apache.org by Pranay Pandey <pr...@hotwaxmedia.com> on 2009/04/22 09:39:14 UTC

Re: svn commit: r767394 - in /ofbiz/trunk/applications: accounting/config/ accounting/servicedef/ accounting/src/org/ofbiz/accounting/invoice/ order/config/ product/config/ product/servicedef/ product/src/org/ofbiz/shipment/packing/ product/src/org/ofbiz/s...

Thanks Vikas.

Regards
--
Pranay Pandey
HotWax Media
www.hotwaxmedia.com


On Apr 22, 2009, at 12:20 PM, mor@apache.org 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.
>
>
>
> 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="<@o...@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
>
>