Author: hansbak
Date: Tue Aug 30 04:11:16 2011
New Revision: 1163083
URL: http://svn.apache.org/viewvc?rev=1163083&view=rev
Log:
added a new accounting configuration option to generate invoice per order or
per shipment. can be overridden at the order level
Modified:
ofbiz/trunk/applications/accounting/config/AccountingConfig.properties
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml
ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
ofbiz/trunk/applications/accounting/src/org/ofbiz/accounting/invoice/InvoiceServices.java
ofbiz/trunk/applications/order/entitydef/entitymodel.xml
ofbiz/trunk/applications/order/servicedef/secas.xml
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
ofbiz/trunk/applications/order/webapp/ordermgr/order/orderinfo.ftl
Modified: ofbiz/trunk/applications/accounting/config/AccountingConfig.properties
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/config/AccountingConfig.properties?rev=1163083&r1=1163082&r2=1163083&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/config/AccountingConfig.properties
(original)
+++ ofbiz/trunk/applications/accounting/config/AccountingConfig.properties Tue
Aug 30 04:11:16 2011
@@ -37,3 +37,5 @@ accounting.payment.application.autocreat
# create a 'not-paid' payment record if the purchase order is approved
accounting.payment.purchaseorder.autocreate=Y
+# create invoice per shipment = Y Invoice per order = N
+create.invoice.per.shipment=Y
Modified:
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml?rev=1163083&r1=1163082&r2=1163083&view=diff
==============================================================================
---
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml
(original)
+++
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml
Tue Aug 30 04:11:16 2011
@@ -883,4 +883,46 @@ under the License.
</else>
</if>
</simple-method>
+
+ <simple-method method-name="createInvoiceFromOrder"
short-description="Create an invoice from existing order when
invoicePerShipment is N">
+ <entity-one value-field="orderHeader" entity-name="OrderHeader">
+ <field-map field-name="orderId" from-field="parameters.orderId"/>
+ </entity-one>
+ <set field="invoicePerShipment"
from-field="orderHeader.invoicePerShipment"/>
+ <if-empty field="invoicePerShipment">
+ <property-to-field resource="AccountingConfig"
property="create.invoice.per.shipment" field="invoicePerShipment"/>
+ </if-empty>
+ <if-compare operator="equals" value="N" field="invoicePerShipment">
+ <entity-and list="orderItemBilling" entity-name="OrderItemBilling">
+ <field-map field-name="orderId"
from-field="parameters.orderId"/>
+ </entity-and>
+ <if-empty field="orderItemBilling">
+ <set field="createInvoiceContext.orderId"
from-field="parameters.orderId"/>
+ <call-service service-name="createInvoiceForOrderAllItems"
in-map-name="createInvoiceContext">
+ <result-to-field result-name="invoiceId"
field="invoiceId"/>
+ </call-service>
+ <else>
+ <entity-and list="orderItems" entity-name="OrderItem">
+ <field-map field-name="orderId"
from-field="parameters.orderId"/>
+ <order-by field-name="orderItemSeqId"/>
+ </entity-and>
+ <iterate entry="orderItem" list="orderItems">
+ <entity-and list="checkOrderItem"
entity-name="OrderItemBilling">
+ <field-map field-name="orderId"
from-field="parameters.orderId"/>
+ <field-map field-name="orderItemSeqId"
from-field="orderItem.orderItemSeqId"/>
+ </entity-and>
+ <if-empty field="checkOrderItem">
+ <field-to-list list="billItems" field="orderItem"/>
+ </if-empty>
+ <set field="createInvoiceContext.orderId"
from-field="parameters.orderId"/>
+ <set field="createInvoiceContext.billItems"
from-field="billItems"/>
+ </iterate>
+ <call-service service-name="createInvoiceForOrder"
in-map-name="createInvoiceContext">
+ <result-to-field result-name="invoiceId"
field="invoiceId"/>
+ </call-service>
+ </else>
+ </if-empty>
+ <field-to-result field="invoiceId" result-name="invoiceId"/>
+ </if-compare>
+ </simple-method>
</simple-methods>
Modified: ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml?rev=1163083&r1=1163082&r2=1163083&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml
(original)
+++ ofbiz/trunk/applications/accounting/servicedef/services_invoice.xml Tue Aug
30 04:11:16 2011
@@ -371,4 +371,11 @@ under the License.
<attribute name="errorMessage" type="String" optional="true"
mode="OUT"/>
</service>
+ <service name="createInvoiceFromOrder" engine="simple"
+
location="component://accounting/script/org/ofbiz/accounting/invoice/InvoiceServices.xml"
invoke="createInvoiceFromOrder">
+ <description>Create an invoice from existing order when
invoicePerShipment is N</description>
+ <attribute name="orderId" type="String" mode="IN" optional="false"/>
+ <attribute name="invoiceId" type="String" mode="OUT" optional="true"/>
+ </service>
+
</services>
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=1163083&r1=1163082&r2=1163083&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
Tue Aug 30 04:11:16 2011
@@ -1063,23 +1063,47 @@ public class InvoiceServices {
public static Map<String, Object>
createInvoicesFromShipment(DispatchContext dctx, Map<String, Object> context) {
//Delegator delegator = dctx.getDelegator();
+ Delegator delegator = dctx.getDelegator();
LocalDispatcher dispatcher = dctx.getDispatcher();
String shipmentId = (String) context.get("shipmentId");
Locale locale = (Locale) context.get("locale");
List<String> invoicesCreated = FastList.newInstance();
+ Map<String, Object> response = ServiceUtil.returnSuccess();
+ List<GenericValue> orderShipments = FastList.newInstance();
+ String invoicePerShipment = null;
- Map<String, Object> serviceContext = UtilMisc.toMap("shipmentIds",
UtilMisc.toList(shipmentId), "eventDate", context.get("eventDate"),
"userLogin", context.get("userLogin"));
try {
- Map<String, Object> result =
dispatcher.runSync("createInvoicesFromShipments", serviceContext);
- invoicesCreated =
UtilGenerics.checkList(result.get("invoicesCreated"));
- } catch (GenericServiceException e) {
- Debug.logError(e, "Trouble calling createInvoicesFromShipment
service; invoice not created for shipment [" + shipmentId + "]", module);
- return ServiceUtil.returnError(UtilProperties.getMessage(resource,
-
"AccountingTroubleCallingCreateInvoicesFromShipmentService",
- UtilMisc.toMap("shipmentId", shipmentId), locale));
+ orderShipments = delegator.findByAnd("OrderShipment",
UtilMisc.toMap("shipmentId", shipmentId));
+ } catch (GenericEntityException e) {
+ return ServiceUtil.returnError(e.getMessage());
+ }
+
+ GenericValue orderShipment = EntityUtil.getFirst(orderShipments);
+ if (orderShipment != null) {
+ String orderId = orderShipment.getString("orderId");
+ try {
+ GenericValue orderHeader =
delegator.findByPrimaryKey("OrderHeader", UtilMisc.toMap("orderId", orderId));
+ invoicePerShipment =
orderHeader.getString("invoicePerShipment");
+ } catch (GenericEntityException e) {
+ return ServiceUtil.returnError(e.getMessage());
+ }
+ } else {
+ invoicePerShipment =
UtilProperties.getPropertyValue("AccountingConfig","create.invoice.per.shipment");
+ }
+
+ if ("Y".equals(invoicePerShipment)) {
+ Map<String, Object> serviceContext = UtilMisc.toMap("shipmentIds",
UtilMisc.toList(shipmentId), "eventDate", context.get("eventDate"),
"userLogin", context.get("userLogin"));
+ try {
+ Map<String, Object> result =
dispatcher.runSync("createInvoicesFromShipments", serviceContext);
+ invoicesCreated =
UtilGenerics.checkList(result.get("invoicesCreated"));
+ } catch (GenericServiceException e) {
+ Debug.logError(e, "Trouble calling createInvoicesFromShipment
service; invoice not created for shipment [" + shipmentId + "]", module);
+ return
ServiceUtil.returnError(UtilProperties.getMessage(resource,
+
"AccountingTroubleCallingCreateInvoicesFromShipmentService",
+ UtilMisc.toMap("shipmentId", shipmentId), locale));
+ }
+ response.put("invoicesCreated", invoicesCreated);
}
- Map<String, Object> response = ServiceUtil.returnSuccess();
- response.put("invoicesCreated", invoicesCreated);
return response;
}
Modified: ofbiz/trunk/applications/order/entitydef/entitymodel.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/entitydef/entitymodel.xml?rev=1163083&r1=1163082&r2=1163083&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/entitydef/entitymodel.xml (original)
+++ ofbiz/trunk/applications/order/entitydef/entitymodel.xml Tue Aug 30
04:11:16 2011
@@ -391,6 +391,7 @@ under the License.
<field name="remainingSubTotal" type="currency-amount"></field>
<field name="grandTotal" type="currency-amount"></field>
<field name="isViewed" type="indicator"></field>
+ <field name="invoicePerShipment" type="indicator"></field>
<prim-key field="orderId"/>
<relation type="one" fk-name="ORDER_HDR_TYPE"
rel-entity-name="OrderType">
<key-map field-name="orderTypeId"/>
Modified: ofbiz/trunk/applications/order/servicedef/secas.xml
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/servicedef/secas.xml?rev=1163083&r1=1163082&r2=1163083&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/servicedef/secas.xml (original)
+++ ofbiz/trunk/applications/order/servicedef/secas.xml Tue Aug 30 04:11:16 2011
@@ -90,6 +90,7 @@ under the License.
<eca service="changeOrderStatus" event="global-commit"
run-on-error="false">
<condition field-name="statusId" operator="equals"
value="ORDER_COMPLETED"/>
<condition-field field-name="statusId" operator="not-equals"
to-field-name="oldStatusId"/>
+ <action service="createInvoiceFromOrder" mode="sync"/>
<action service="resetGrandTotal" mode="sync"/>
<action service="sendOrderCompleteNotification" mode="async"
persist="true"/>
</eca>
Modified:
ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java?rev=1163083&r1=1163082&r2=1163083&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
(original)
+++ ofbiz/trunk/applications/order/src/org/ofbiz/order/order/OrderServices.java
Tue Aug 30 04:11:16 2011
@@ -558,6 +558,11 @@ public class OrderServices {
orderHeader.set("createdBy", userLogin.getString("userLoginId"));
}
+ String invoicePerShipment =
UtilProperties.getPropertyValue("AccountingConfig","create.invoice.per.shipment");
+ if (UtilValidate.isNotEmpty(invoicePerShipment)) {
+ orderHeader.set("invoicePerShipment", invoicePerShipment);
+ }
+
// first try to create the OrderHeader; if this does not fail,
continue.
try {
delegator.create(orderHeader);
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?rev=1163083&r1=1163082&r2=1163083&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml
(original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/WEB-INF/controller.xml Tue
Aug 30 04:11:16 2011
@@ -1763,6 +1763,13 @@ under the License.
<response name="error" type="request" value="json"/>
</request-map>
+ <request-map uri="setInvoicePerShipment">
+ <security https="true" auth="true"/>
+ <event type="service" invoke="updateOrderHeader"/>
+ <response name="success" type="view" value="orderview"/>
+ <response name="error" type="view" value="orderview"/>
+ </request-map>
+
<request-map uri="addShippingAddress">
<security https="true" auth="true"/>
<event type="service" invoke="createUpdateShippingAddress"/>
Modified: ofbiz/trunk/applications/order/webapp/ordermgr/order/orderinfo.ftl
URL:
http://svn.apache.org/viewvc/ofbiz/trunk/applications/order/webapp/ordermgr/order/orderinfo.ftl?rev=1163083&r1=1163082&r2=1163083&view=diff
==============================================================================
--- ofbiz/trunk/applications/order/webapp/ordermgr/order/orderinfo.ftl
(original)
+++ ofbiz/trunk/applications/order/webapp/ordermgr/order/orderinfo.ftl Tue Aug
30 04:11:16 2011
@@ -252,8 +252,23 @@ under the License.
</form>
</td>
</tr>
- <tr><td colspan="3"><hr /></td></tr>
</#if>
+ <tr><td colspan="3"><hr /></td></tr>
+ <tr>
+ <td align="right" valign="top" width="15%"
class="label"> Invoice Per Shipment</td>
+ <td width="5%"> </td>
+ <td valign="top" width="80%">
+ <form name="setInvoicePerShipment" method="post"
action="<@ofbizUrl>setInvoicePerShipment</@ofbizUrl>">
+ <input type = "hidden" name="orderId" value="${orderId}"/>
+ <select name="invoicePerShipment">
+ <option value="Y" <#if
(orderHeader.invoicePerShipment)?if_exists == "Y">selected="selected"
</#if>>Y</option>
+ <option value="N" <#if
(orderHeader.invoicePerShipment)?if_exists == "N">selected="selected"
</#if>>N</option>
+ </select>
+ <input type="submit" class="smallSubmit"
value="${uiLabelMap.CommonUpdate}"/>
+ </form>
+ </td>
+ </tr>
+ <tr><td colspan="3"><hr /></td></tr>
<#if orderHeader.isViewed?has_content && orderHeader.isViewed ==
"Y">
<tr>
<td class="label">${uiLabelMap.OrderViewed}</td>