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> |
Free forum by Nabble | Edit this page |