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="<@ofbizUrl>quickDropShipOrder?orderId=${orderId}&shipGroupSeqId=${shipGroup.shipGroupSeqId}&externalLoginKey=${externalLoginKey}</@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"