You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by si...@apache.org on 2007/02/22 22:49:11 UTC
svn commit: r510664 - in /ofbiz/trunk/applications: accounting/servicedef/
accounting/src/org/ofbiz/accounting/invoice/ order/webapp/ordermgr/WEB-INF/
order/webapp/ordermgr/order/ product/config/
product/script/org/ofbiz/shipment/shipment/ product/serv...
Author: sichen
Date: Thu Feb 22 13:49:10 2007
New Revision: 510664
URL: http://svn.apache.org/viewvc?view=rev&rev=510664
Log:
OFBIZ-733: Create invoices for drop ship orders
- Adding logic to createInvoicesFromShipments service to deal with creating both purchase invoices for drop shipment orders and sales invoices for the sales order linked to drop shipment orders - a sales invoice is created if the createSalesInvoicesForDropShipments parameter is true.
- Adding createSalesInvoiceFromDropShipment service to wrap call to createInvoicesFromShipments, passing the createSalesInvoicesForDropShipments parameter.
- Adding SECAs on updateShipment to generate a purchase invoice when a drop shipment is shipped and a sales invoice when a drop shipment is received
- Adding quickDropShipOrder service, linked from orderview page, to create a drop shipment and set the shipment status to shipped and then received, in order to trigger the SECAs for drop shipment invoice generation.
- Fixed flaw in createInvoiceForOrder service - now pro-rating OrderAdjustments based on OrderItem quantity from the database instead of the passed-in OrderItem, in case the OrderItem quantity has been replaced upstream.
Modified:
ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl
ofbiz/trunk/applications/product/config/ProductUiLabels.properties
ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml
ofbiz/trunk/applications/product/servicedef/secas_shipment.xml
ofbiz/trunk/applications/product/servicedef/services_shipment.xml
Modified: ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml?view=diff&rev=510664&r1=510663&r2=510664
==============================================================================
--- ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml (original)
+++ ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml Thu Feb 22 13:49:10 2007
@@ -215,6 +215,15 @@
<attribute name="shipmentId" type="String" mode="IN" optional="false"/>
<attribute name="invoicesCreated" type="List" mode="OUT" optional="true"/>
</service>
+ <service name="createSalesInvoicesFromDropShipment" engine="java"
+ location="org.ofbiz.accounting.invoice.InvoiceServices" invoke="createSalesInvoicesFromDropShipment">
+ <description>
+ Create sales invoice(s) from a drop shipment by wrapping a call to
+ createInvoicesFromShipments with the createSalesInvoicesForDropShipments parameter
+ </description>
+ <attribute name="shipmentId" type="String" mode="IN" optional="false"/>
+ <attribute name="invoicesCreated" type="List" mode="OUT" optional="true"/>
+ </service>
<service name="createInvoicesFromShipments" engine="java"
location="org.ofbiz.accounting.invoice.InvoiceServices" invoke="createInvoicesFromShipments">
<description>
@@ -222,9 +231,12 @@
All the order items associated with the shipments will be selected and
one invoice for each order will be created (each invoice could contain
items shipped in different shipments).
+ If the shipments are drop shipments, the type of invoices (purchase or sales) created
+ will be controlled by the createSalesInvoicesForDropShipments parameter (purchase by default).
invoicesCreated = List of invoiceIds which were created by this service
</description>
<attribute name="shipmentIds" type="List" mode="IN" optional="false"/>
+ <attribute name="createSalesInvoicesForDropShipments" type="Boolean" mode="IN" optional="true"/>
<attribute name="invoicesCreated" type="List" mode="OUT" optional="true"/>
</service>
<service name="createInvoicesFromReturnShipment" 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?view=diff&rev=510664&r1=510663&r2=510664
==============================================================================
--- ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java (original)
+++ ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java Thu Feb 22 13:49:10 2007
@@ -50,6 +50,7 @@
import org.ofbiz.entity.condition.EntityCondition;
import org.ofbiz.entity.condition.EntityOperator;
import org.ofbiz.entity.condition.EntityExpr;
+import org.ofbiz.entity.condition.EntityConditionList;
import org.ofbiz.order.order.OrderReadHelper;
import org.ofbiz.product.product.ProductWorker;
import org.ofbiz.service.DispatchContext;
@@ -473,6 +474,9 @@
invoiceItemSeqNum++;
invoiceItemSeqId = UtilFormatOut.formatPaddedNumber(invoiceItemSeqNum, 2);
+ // Get the original order item from the DB, in case the quantity has been overridden
+ GenericValue originalOrderItem = delegator.findByPrimaryKey("OrderItem", UtilMisc.toMap("orderId", orderId, "orderItemSeqId", orderItem.getString("orderItemSeqId")));
+
// create the item adjustment as line items
List itemAdjustments = OrderReadHelper.getOrderItemAdjustmentList(orderItem, orh.getAdjustments());
Iterator itemAdjIter = itemAdjustments.iterator();
@@ -500,7 +504,7 @@
if (adj.get("amount") != null) {
// pro-rate the amount
// set decimals = 100 means we don't round this intermediate value, which is very important
- amount = adj.getBigDecimal("amount").divide(orderItem.getBigDecimal("quantity"), 100, rounding);
+ amount = adj.getBigDecimal("amount").divide(originalOrderItem.getBigDecimal("quantity"), 100, rounding);
amount = amount.multiply(billingQuantity);
amount = amount.setScale(decimals, rounding);
}
@@ -510,7 +514,7 @@
BigDecimal percent = adj.getBigDecimal("sourcePercentage");
percent = percent.divide(new BigDecimal(100), 100, rounding);
amount = billingAmount.multiply(percent);
- amount = amount.divide(orderItem.getBigDecimal("quantity"), 100, rounding);
+ amount = amount.divide(originalOrderItem.getBigDecimal("quantity"), 100, rounding);
amount = amount.multiply(billingQuantity);
amount = amount.setScale(decimals, rounding);
}
@@ -989,14 +993,36 @@
return response;
}
+ public static Map createSalesInvoicesFromDropShipment(DispatchContext dctx, Map context) {
+ LocalDispatcher dispatcher = dctx.getDispatcher();
+ String shipmentId = (String) context.get("shipmentId");
+ Locale locale = (Locale) context.get("locale");
+
+ Map serviceContext = UtilMisc.toMap("shipmentIds", UtilMisc.toList(shipmentId), "createSalesInvoicesForDropShipments", Boolean.TRUE, "userLogin", context.get("userLogin"));
+
+ Map serviceResult;
+ try {
+ serviceResult = dispatcher.runSync("createInvoicesFromShipments", serviceContext);
+ } catch (GenericServiceException e) {
+ String errorMessage = UtilProperties.getMessage(resource, "AccountingTroubleCallingCreateInvoicesFromShipmentService", UtilMisc.toMap("shipmentId", shipmentId), locale);
+ Debug.logError(e, errorMessage, module);
+ return ServiceUtil.returnError(errorMessage);
+ }
+
+ return serviceResult;
+ }
+
public static Map createInvoicesFromShipments(DispatchContext dctx, Map context) {
GenericDelegator delegator = dctx.getDelegator();
LocalDispatcher dispatcher = dctx.getDispatcher();
List shipmentIds = (List) context.get("shipmentIds");
Locale locale = (Locale) context.get("locale");
+ Boolean createSalesInvoicesForDropShipments = (Boolean) context.get("createSalesInvoicesForDropShipments");
+ if (UtilValidate.isEmpty(createSalesInvoicesForDropShipments)) createSalesInvoicesForDropShipments = Boolean.FALSE;
boolean salesShipmentFound = false;
boolean purchaseShipmentFound = false;
+ boolean dropShipmentFound = false;
List invoicesCreated = new ArrayList();
@@ -1007,10 +1033,12 @@
GenericValue shipment = delegator.findByPrimaryKey("Shipment", UtilMisc.toMap("shipmentId", tmpShipmentId));
if ((shipment.getString("shipmentTypeId") != null) && (shipment.getString("shipmentTypeId").equals("PURCHASE_SHIPMENT"))) {
purchaseShipmentFound = true;
+ } else if ((shipment.getString("shipmentTypeId") != null) && (shipment.getString("shipmentTypeId").equals("DROP_SHIPMENT"))) {
+ dropShipmentFound = true;
} else {
salesShipmentFound = true;
}
- if (purchaseShipmentFound && salesShipmentFound) {
+ if (purchaseShipmentFound && salesShipmentFound && dropShipmentFound) {
return ServiceUtil.returnError(UtilProperties.getMessage(resource,"AccountingShipmentsOfDifferentTypes",UtilMisc.toMap("tmpShipmentId",tmpShipmentId,"shipmentTypeId",shipment.getString("shipmentTypeId")),locale));
}
} catch (GenericEntityException e) {
@@ -1022,12 +1050,33 @@
EntityCondition shipmentIdsCond = new EntityExpr("shipmentId", EntityOperator.IN, shipmentIds);
// check the status of the shipment
- // get the items of the shipment. They can come from ItemIssuance if the shipment were from a sales order or ShipmentReceipt
- // if it were a purchase order
+ // get the items of the shipment. They can come from ItemIssuance if the shipment were from a sales order, ShipmentReceipt
+ // if it were a purchase order or from the order items of the (possibly linked) orders if the shipment is a drop shipment
List items = null;
+ List orderItemAssocs = null;
try {
if (purchaseShipmentFound) {
items = delegator.findByCondition("ShipmentReceipt", shipmentIdsCond, null, UtilMisc.toList("shipmentId"));
+ } else if (dropShipmentFound) {
+
+ List shipments = delegator.findByCondition("Shipment", shipmentIdsCond, null, null);
+
+ // Get the list of purchase order IDs related to the shipments
+ List purchaseOrderIds = EntityUtil.getFieldListFromEntityList(shipments, "primaryOrderId", true);
+
+ if (createSalesInvoicesForDropShipments.booleanValue()) {
+
+ // If a sales invoice is being created for a drop shipment, we have to reference the original sales order items
+ // Get the list of the linked orderIds (original sales orders)
+ orderItemAssocs = delegator.findByCondition("OrderItemAssoc", new EntityExpr("toOrderId", EntityOperator.IN, purchaseOrderIds), null, null);
+
+ // Get only the order items which are indirectly related to the purchase order - this limits the list to the drop ship group(s)
+ items = EntityUtil.getRelated("FromOrderItem", orderItemAssocs);
+ } else {
+
+ // If it's a purchase invoice being created, the order items for that purchase orders can be used directly
+ items = delegator.findByCondition("OrderItem", new EntityExpr("orderId", EntityOperator.IN, purchaseOrderIds), null, null);
+ }
} else {
items = delegator.findByCondition("ItemIssuance", shipmentIdsCond, null, UtilMisc.toList("shipmentId"));
}
@@ -1055,7 +1104,13 @@
// check and make sure we haven't already billed for this issuance or shipment receipt
Map billFields = UtilMisc.toMap("orderId", orderId, "orderItemSeqId", orderItemSeqId);
- if (item.getEntityName().equals("ItemIssuance")) {
+ if (dropShipmentFound) {
+
+ // Drop shipments have neither issuances nor receipts, so this check is meaningless
+ itemsByOrder.add(item);
+ shippedOrderItems.put(orderId, itemsByOrder);
+ continue;
+ } else if (item.getEntityName().equals("ItemIssuance")) {
billFields.put("itemIssuanceId", item.get("itemIssuanceId"));
} else if (item.getEntityName().equals("ShipmentReceipt")) {
billFields.put("shipmentReceiptId", item.getString("receiptId"));
@@ -1098,6 +1153,7 @@
while (billIt.hasNext()) {
GenericValue issue = (GenericValue) billIt.next();
BigDecimal issueQty = ZERO;
+
if (issue.getEntityName().equals("ShipmentReceipt")) {
issueQty = issue.getBigDecimal("quantityAccepted");
} else {
@@ -1109,8 +1165,22 @@
Map lookup = UtilMisc.toMap("orderId", orderId, "orderItemSeqId", issue.get("orderItemSeqId"));
GenericValue orderItem = null;
List billed = null;
+ BigDecimal orderedQty = null;
try {
- orderItem = issue.getRelatedOne("OrderItem");
+ orderItem = issue.getEntityName().equals("OrderItem") ? issue : issue.getRelatedOne("OrderItem");
+
+ // total ordered
+ orderedQty = orderItem.getBigDecimal("quantity");
+
+ if (dropShipmentFound && createSalesInvoicesForDropShipments.booleanValue()) {
+
+ // Override the issueQty with the quantity from the purchase order item
+ GenericValue orderItemAssoc = EntityUtil.getFirst(EntityUtil.filterByAnd(orderItemAssocs, UtilMisc.toMap("orderId", issue.getString("orderId"), "orderItemSeqId", issue.getString("orderItemSeqId"))));
+ GenericValue purchaseOrderItem = orderItemAssoc.getRelatedOne("ToOrderItem");
+ orderItem.set("quantity", purchaseOrderItem.getDouble("quantity"));
+ issueQty = purchaseOrderItem.getBigDecimal("quantity");
+ }
+
billed = delegator.findByAnd("OrderItemBilling", lookup);
} catch (GenericEntityException e) {
String errMsg = UtilProperties.getMessage(resource, "AccountingProblemGettingOrderItemOrderItemBilling",UtilMisc.toMap("lookup",lookup), locale);
@@ -1118,8 +1188,6 @@
return ServiceUtil.returnError(errMsg);
}
- // total ordered
- BigDecimal orderedQty = orderItem.getBigDecimal("quantity");
// add up the already billed total
if (billed != null && billed.size() > 0) {
@@ -1165,10 +1233,43 @@
if (productStore.getString("prorateShipping").equals("N")) {
// Get the set of filtered shipments
- List invoiceableShipmentIds = EntityUtil.getFieldListFromEntityList(toBillItems, "shipmentId", true);
List invoiceableShipments = null;
try {
- invoiceableShipments = delegator.findByCondition("Shipment", new EntityExpr("shipmentId", EntityOperator.IN, invoiceableShipmentIds), null, null);
+ if (dropShipmentFound) {
+
+ List invoiceablePrimaryOrderIds = null;
+ if (createSalesInvoicesForDropShipments.booleanValue()) {
+
+ // If a sales invoice is being created for the drop shipment, we need to reference back to the original purchase order IDs
+
+ // Get the IDs for orders which have billable items
+ List invoiceableLinkedOrderIds = EntityUtil.getFieldListFromEntityList(toBillItems, "orderId", true);
+
+ // Get back the IDs of the purchase orders - this will be a list of the purchase order items which are billable by virtue of not having been
+ // invoiced in a previous sales invoice
+ List reverseOrderItemAssocs = EntityUtil.filterByCondition(orderItemAssocs, new EntityExpr("orderId", EntityOperator.IN, invoiceableLinkedOrderIds));
+ invoiceablePrimaryOrderIds = EntityUtil.getFieldListFromEntityList(reverseOrderItemAssocs, "toOrderId", true);
+
+ } else {
+
+ // If a purchase order is being created for a drop shipment, the purchase order IDs can be used directly
+ invoiceablePrimaryOrderIds = EntityUtil.getFieldListFromEntityList(toBillItems, "orderId", true);
+
+ }
+
+ // Get the list of shipments which are associated with the filtered purchase orders
+ if (! UtilValidate.isEmpty(invoiceablePrimaryOrderIds)) {
+ List invoiceableShipmentConds = UtilMisc.toList(
+ new EntityExpr("primaryOrderId", EntityOperator.IN, invoiceablePrimaryOrderIds),
+ new EntityExpr("shipmentId", EntityOperator.IN, shipmentIds));
+ invoiceableShipments = delegator.findByCondition("Shipment", new EntityConditionList(invoiceableShipmentConds, EntityOperator.AND), null, null);
+ }
+ } else {
+ List invoiceableShipmentIds = EntityUtil.getFieldListFromEntityList(toBillItems, "shipmentId", true);
+ if (! UtilValidate.isEmpty(invoiceableShipmentIds)) {
+ invoiceableShipments = delegator.findByCondition("Shipment", new EntityExpr("shipmentId", EntityOperator.IN, invoiceableShipmentIds), null, null);
+ }
+ }
} catch( GenericEntityException e ) {
String errMsg = UtilProperties.getMessage(resource, "AccountingTroubleCallingCreateInvoicesFromShipmentsService", locale);
Debug.logError(e, errMsg, module);
@@ -1178,13 +1279,15 @@
// Total the additional shipping charges for the shipments
Map additionalShippingCharges = new HashMap();
BigDecimal totalAdditionalShippingCharges = ZERO;
- Iterator isit = invoiceableShipments.iterator();
- while(isit.hasNext()) {
- GenericValue shipment = (GenericValue) isit.next();
- if (shipment.get("additionalShippingCharge") == null) continue;
- BigDecimal shipmentAdditionalShippingCharges = shipment.getBigDecimal("additionalShippingCharge").setScale(decimals, rounding);
- additionalShippingCharges.put(shipment, shipmentAdditionalShippingCharges);
- totalAdditionalShippingCharges = totalAdditionalShippingCharges.add(shipmentAdditionalShippingCharges);
+ if (! UtilValidate.isEmpty(invoiceableShipments)) {
+ Iterator isit = invoiceableShipments.iterator();
+ while(isit.hasNext()) {
+ GenericValue shipment = (GenericValue) isit.next();
+ if (shipment.get("additionalShippingCharge") == null) continue;
+ BigDecimal shipmentAdditionalShippingCharges = shipment.getBigDecimal("additionalShippingCharge").setScale(decimals, rounding);
+ additionalShippingCharges.put(shipment, shipmentAdditionalShippingCharges);
+ totalAdditionalShippingCharges = totalAdditionalShippingCharges.add(shipmentAdditionalShippingCharges);
+ }
}
// If the additional shipping charges are greater than zero, process them
Modified: ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml?view=diff&rev=510664&r1=510663&r2=510664
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml Thu Feb 22 13:49:10 2007
@@ -277,6 +277,12 @@
<response name="success" type="request-redirect" value="orderview"/>
<response name="error" type="request-redirect" value="orderview"/>
</request-map>
+ <request-map uri="quickDropShipOrder">
+ <security https="true" auth="true"/>
+ <event type="service" path="" invoke="quickDropShipOrder"/>
+ <response name="success" type="request-redirect" value="orderview"/>
+ <response name="error" type="request-redirect" value="orderview"/>
+ </request-map>
<request-map uri="editOrderItems">
<security https="true" auth="true"/>
<response name="success" type="view" value="editorderitems"/>
Modified: ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl?view=diff&rev=510664&r1=510663&r2=510664
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl (original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/order/ordershippinginfo.ftl Thu Feb 22 13:49:10 2007
@@ -332,6 +332,7 @@
</form>
</div>
<#else>
+ <div class="tabletext"><a href="<@o...@ofbizUrl>" class="buttontext" target="_blank">${uiLabelMap.ProductShipmentQuickComplete}</a></div>
<div class="tabletext"><a href="/facility/control/createShipment?primaryOrderId=${orderId}&primaryShipGroupSeqId=${shipGroup.shipGroupSeqId}&shipmentTypeId=DROP_SHIPMENT&statusId=PURCH_SHIP_CREATED&externalLoginKey=${externalLoginKey}" class="buttontext">${uiLabelMap.OrderNewDropShipmentForShipGroup} [${shipGroup.shipGroupSeqId}]</a></div>
</#if>
</#if>
Modified: ofbiz/trunk/applications/product/config/ProductUiLabels.properties
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/config/ProductUiLabels.properties?view=diff&rev=510664&r1=510663&r2=510664
==============================================================================
--- ofbiz/trunk/applications/product/config/ProductUiLabels.properties (original)
+++ ofbiz/trunk/applications/product/config/ProductUiLabels.properties Thu Feb 22 13:49:10 2007
@@ -1193,6 +1193,7 @@
ProductShipmentNotFoundId=The Shipment was not found with ID
ProductShipmentPlan=Shipment Plan
ProductShipmentPlanToOrderItems=Shipment Plan --> Order Items
+ProductShipmentQuickComplete=Quick Complete Drop Shipment
ProductShipmentTotalWeight=Total Weight
ProductShipmentTotalVolume=Total Volume
ProductShipmentType=Shipment Type
Modified: ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml?view=diff&rev=510664&r1=510663&r2=510664
==============================================================================
--- ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml (original)
+++ ofbiz/trunk/applications/product/script/org/ofbiz/shipment/shipment/ShipmentServices.xml Thu Feb 22 13:49:10 2007
@@ -1168,6 +1168,25 @@
<check-errors/>
</simple-method>
+ <simple-method method-name="quickDropShipOrder" short-description="Create and complete a drop shipment for a ship group">
+ <set from-field="parameters.orderId" field="shipmentContext.primaryOrderId"/>
+ <set from-field="parameters.shipGroupSeqId" field="shipmentContext.primaryShipGroupSeqId"/>
+ <set value="PURCH_SHIP_CREATED" field="shipmentContext.statusId"/>
+ <set value="DROP_SHIPMENT" field="shipmentContext.shipmentTypeId"/>
+ <call-service service-name="createShipment" in-map-name="shipmentContext">
+ <result-to-field result-name="shipmentId" field-name="shipmentId"/>
+ </call-service>
+ <check-errors/>
+ <set from-field="shipmentId" field="updateShipmentContext.shipmentId"/>
+ <set value="PURCH_SHIP_SHIPPED" field="updateShipmentContext.statusId"/>
+ <call-service service-name="updateShipment" in-map-name="updateShipmentContext"/>
+ <check-errors/>
+ <set value="PURCH_SHIP_RECEIVED" field="updateShipmentContext.statusId"/>
+ <call-service service-name="updateShipment" in-map-name="updateShipmentContext"/>
+ <check-errors/>
+ <field-to-result field-name="shipmentId" result-name="shipmentId"/>
+ </simple-method>
+
<simple-method method-name="quickShipPurchaseOrder" short-description="Quick ships an entire purchase order to a facility">
<entity-one entity-name="OrderHeader" value-name="orderHeader"/>
<call-simple-method method-name="getOrderItemShipGroupLists"/>
Modified: ofbiz/trunk/applications/product/servicedef/secas_shipment.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/secas_shipment.xml?view=diff&rev=510664&r1=510663&r2=510664
==============================================================================
--- ofbiz/trunk/applications/product/servicedef/secas_shipment.xml (original)
+++ ofbiz/trunk/applications/product/servicedef/secas_shipment.xml Thu Feb 22 13:49:10 2007
@@ -36,6 +36,22 @@
<action service="balanceItemIssuancesForShipment" mode="sync"/>
<action service="createInvoicesFromShipment" mode="sync"/>
</eca>
+
+ <!-- if new statusId of a DROP_SHIPMENT is PURCH_SHIP_SHIPPED, create purchase invoice -->
+ <eca service="updateShipment" event="commit">
+ <condition-field field-name="statusId" operator="not-equals" to-field-name="oldStatusId"/>
+ <condition field-name="statusId" operator="equals" value="PURCH_SHIP_SHIPPED"/>
+ <condition field-name="shipmentTypeId" operator="equals" value="DROP_SHIPMENT"/>
+ <action service="createInvoicesFromShipment" mode="sync"/>
+ </eca>
+
+ <!-- if new statusId of a DROP_SHIPMENT is PURCH_SHIP_RECEIVED, create sales invoice -->
+ <eca service="updateShipment" event="commit">
+ <condition-field field-name="statusId" operator="not-equals" to-field-name="oldStatusId"/>
+ <condition field-name="statusId" operator="equals" value="PURCH_SHIP_RECEIVED"/>
+ <condition field-name="shipmentTypeId" operator="equals" value="DROP_SHIPMENT"/>
+ <action service="createSalesInvoicesFromDropShipment" mode="sync"/>
+ </eca>
<!-- if new statusId of a SALES_RETURN is PURCH_SHIP_RECEIVED, create a return invoice.
Note that PURCH_SHIP_RECEIVED now means any received shipment. We determine the
Modified: ofbiz/trunk/applications/product/servicedef/services_shipment.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services_shipment.xml?view=diff&rev=510664&r1=510663&r2=510664
==============================================================================
--- ofbiz/trunk/applications/product/servicedef/services_shipment.xml (original)
+++ ofbiz/trunk/applications/product/servicedef/services_shipment.xml Thu Feb 22 13:49:10 2007
@@ -149,6 +149,14 @@
</description>
<attribute name="shipmentId" type="String" mode="IN" optional="false"/>
</service>
+ <service name="quickDropShipOrder" engine="simple"
+ location="org/ofbiz/shipment/shipment/ShipmentServices.xml" invoke="quickDropShipOrder" auth="true">
+ <description>Creates a drop shipment for a ship group and calls updateShipment twice in succession to set
+ shipment status to PURCH_SHIP_SHIPPED and then to PURCH_SHIP_RECEIVED</description>
+ <attribute name="orderId" type="String" mode="IN" optional="false"/>
+ <attribute name="shipGroupSeqId" type="String" mode="IN" optional="false"/>
+ <attribute name="shipmentId" type="String" mode="OUT" optional="false"/>
+ </service>
<!-- ShipmentItem Services -->
<service name="createShipmentItem" default-entity-name="ShipmentItem" engine="simple"