You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by bi...@apache.org on 2008/05/21 10:08:03 UTC
svn commit: r658585 - in /ofbiz/trunk/applications:
accounting/script/org/ofbiz/accounting/ledger/ accounting/servicedef/
product/entitydef/ product/script/org/ofbiz/shipment/issuance/
product/servicedef/
Author: bibryam
Date: Wed May 21 01:08:03 2008
New Revision: 658585
URL: http://svn.apache.org/viewvc?rev=658585&view=rev
Log:
Applied the patch from JIRA Issue # OFBIZ-1798 "Service for Canceling ItemIssuance".
Modified:
ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml
ofbiz/trunk/applications/accounting/servicedef/secas_ledger.xml
ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml
ofbiz/trunk/applications/product/entitydef/entitymodel_shipment.xml
ofbiz/trunk/applications/product/script/org/ofbiz/shipment/issuance/IssuanceServices.xml
ofbiz/trunk/applications/product/servicedef/services_shipment.xml
Modified: ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml?rev=658585&r1=658584&r2=658585&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml (original)
+++ ofbiz/trunk/applications/accounting/script/org/ofbiz/accounting/ledger/GeneralLedgerServices.xml Wed May 21 01:08:03 2008
@@ -1334,6 +1334,64 @@
<field-to-result field-name="acctgTransId" result-name="acctgTransId"/>
</simple-method>
+ <simple-method method-name="createAcctgTransForCanceledSalesShipmentIssuance" short-description="Create an accounting transactions for a canceled sales shipment issuance (D: INVENTORY_ACCOUNT, C: COGS_ACCOUNT">
+ <!-- retrieve ledger rounding properties -->
+ <property-to-field resource="arithmetic" property="ledger.decimals" field-name="ledgerDecimals"/>
+ <property-to-field resource="arithmetic" property="ledger.rounding" field-name="roundingMode"/>
+ <log level="info" message="Using ledger decimals [${ledgerDecimals}] and rounding [${roundingMode}]"/>
+
+ <entity-one entity-name="ItemIssuance" value-name="itemIssuance"/>
+ <get-related-one value-name="itemIssuance" relation-name="InventoryItem" to-value-name="inventoryItem"/>
+ <entity-and entity-name="OrderRole" list-name="billToCustomers">
+ <field-map field-name="orderId" env-name="itemIssuance.orderId"/>
+ <field-map field-name="roleTypeId" value="BILL_TO_CUSTOMER"/>
+ </entity-and>
+ <first-from-list list-name="billToCustomers" entry-name="billToCustomer"/>
+ <!-- TODO: handle serialized inventory -->
+ <calculate field-name="origAmount" type="BigDecimal" decimal-scale="${ledgerDecimals}" rounding-mode="${roundingMode}">
+ <calcop operator="multiply">
+ <calcop operator="get" field-name="parameters.canceledQuantity"/>
+ <calcop operator="get" field-name="inventoryItem.unitCost"/>
+ </calcop>
+ </calculate>
+ <!-- prepare the doble posting (D/C) entries (AcctgTransEntry) -->
+ <!-- Credit -->
+ <make-value entity-name="AcctgTransEntry" value-name="creditEntry"/>
+ <set field="creditEntry.debitCreditFlag" value="C"/>
+ <set field="creditEntry.glAccountTypeId" value="COGS_ACCOUNT"/>
+ <set field="creditEntry.organizationPartyId" from-field="inventoryItem.ownerPartyId"/>
+ <set field="creditEntry.productId" from-field="inventoryItem.productId"/>
+ <set field="creditEntry.origAmount" from-field="origAmount"/>
+ <set field="creditEntry.origCurrencyUomId" from-field="inventoryItem.currencyUomId"/>
+ <if-not-empty field-name="billToCustomer">
+ <set field="creditEntry.partyId" from-field="billToCustomer.partyId"/>
+ <set field="creditEntry.roleTypeId" from-field="billToCustomer.roleTypeId"/>
+ </if-not-empty>
+ <set field="acctgTransEntries[]" from-field="creditEntry" type="Object"/>
+ <!-- Debit -->
+ <make-value entity-name="AcctgTransEntry" value-name="debitEntry"/>
+ <set field="debitEntry.debitCreditFlag" value="D"/>
+ <set field="debitEntry.glAccountTypeId" value="INVENTORY_ACCOUNT"/>
+ <set field="debitEntry.organizationPartyId" from-field="inventoryItem.ownerPartyId"/>
+ <set field="debitEntry.productId" from-field="inventoryItem.productId"/>
+ <set field="debitEntry.origAmount" from-field="origAmount"/>
+ <set field="debitEntry.origCurrencyUomId" from-field="inventoryItem.currencyUomId"/>
+ <if-not-empty field-name="billToCustomer">
+ <set field="debitEntry.partyId" from-field="billToCustomer.partyId"/>
+ <set field="debitEntry.roleTypeId" from-field="billToCustomer.roleTypeId"/>
+ </if-not-empty>
+ <set field="acctgTransEntries[]" from-field="debitEntry" type="Object"/>
+ <!-- Set header fields (AcctgTrans) -->
+ <set field="createAcctgTransAndEntriesInMap.glFiscalTypeId" value="ACTUAL"/>
+ <set field="createAcctgTransAndEntriesInMap.acctgTransTypeId" value="SALES_SHIPMENT"/>
+ <set field="createAcctgTransAndEntriesInMap.shipmentId" from-field="itemIssuance.shipmentId"/>
+ <set field="createAcctgTransAndEntriesInMap.acctgTransEntries" from-field="acctgTransEntries"/>
+ <call-service service-name="createAcctgTransAndEntries" in-map-name="createAcctgTransAndEntriesInMap">
+ <result-to-field result-name="acctgTransId"/>
+ </call-service>
+ <field-to-result field-name="acctgTransId" result-name="acctgTransId"/>
+ </simple-method>
+
<simple-method method-name="createAcctgTransForShipmentReceipt" short-description="Create an accounting transactions for a shipment receipt (D: INVENTORY_ACCOUNT, C: UNINVOICED_SHIP_RCPT or COGS_ACCOUNT for returns)">
<!-- retrieve ledger rounding properties -->
<property-to-field resource="arithmetic" property="ledger.decimals" field-name="ledgerDecimals"/>
Modified: ofbiz/trunk/applications/accounting/servicedef/secas_ledger.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/secas_ledger.xml?rev=658585&r1=658584&r2=658585&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/servicedef/secas_ledger.xml (original)
+++ ofbiz/trunk/applications/accounting/servicedef/secas_ledger.xml Wed May 21 01:08:03 2008
@@ -33,6 +33,12 @@
<condition field-name="inventoryItemId" operator="is-not-empty"/>
<action service="createAcctgTransForSalesShipmentIssuance" mode="sync"/>
</eca>
+
+ <!-- create an accounting transactions every time an issuance to sales shipment is canceled -->
+ <eca service="cancelOrderItemIssuanceFromSalesShipment" event="commit">
+ <condition field-name="canceledQuantity" operator="greater" value="0" type="Double"/>
+ <action service="createAcctgTransForCanceledSalesShipmentIssuance" mode="sync"/>
+ </eca>
<!-- create the accounting transactions for a shipment receipt every time the inventory is received -->
<eca service="createShipmentReceipt" event="commit">
Modified: ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml?rev=658585&r1=658584&r2=658585&view=diff
==============================================================================
--- ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml (original)
+++ ofbiz/trunk/applications/accounting/servicedef/services_ledger.xml Wed May 21 01:08:03 2008
@@ -355,10 +355,17 @@
Typically, these services are triggered by SECAs -->
<service name="createAcctgTransForSalesShipmentIssuance" engine="simple" auth="true"
location="org/ofbiz/accounting/ledger/GeneralLedgerServices.xml" invoke="createAcctgTransForSalesShipmentIssuance">
- <description>Create an accounting transaction for for a sales shipment issuance (D: INVENTORY_ACCOUNT, C: COGS_ACCOUNT)</description>
+ <description>Create an accounting transaction for a sales shipment issuance (D: INVENTORY_ACCOUNT, C: COGS_ACCOUNT)</description>
<attribute name="itemIssuanceId" type="String" mode="IN" optional="false"/>
<attribute name="acctgTransId" type="String" mode="OUT" optional="true"/>
</service>
+ <service name="createAcctgTransForCanceledSalesShipmentIssuance" engine="simple" auth="true"
+ location="org/ofbiz/accounting/ledger/GeneralLedgerServices.xml" invoke="createAcctgTransForCanceledSalesShipmentIssuance">
+ <description>Create an accounting transaction for a canceled sales shipment issuance (D: INVENTORY_ACCOUNT, C: COGS_ACCOUNT)</description>
+ <attribute name="itemIssuanceId" type="String" mode="IN" optional="false"/>
+ <attribute name="canceledQuantity" type="Double" mode="IN" optional="false"/>
+ <attribute name="acctgTransId" type="String" mode="OUT" optional="true"/>
+ </service>
<service name="createAcctgTransForInventoryItemCostChange" engine="simple" auth="true"
location="org/ofbiz/accounting/ledger/GeneralLedgerServices.xml" invoke="createAcctgTransForInventoryItemCostChange">
<description>Create accounting transaction when item cost is changed (D: INV_ADJ_VAL, C: INVENTORY_ACCOUNT)</description>
Modified: ofbiz/trunk/applications/product/entitydef/entitymodel_shipment.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/entitydef/entitymodel_shipment.xml?rev=658585&r1=658584&r2=658585&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/entitydef/entitymodel_shipment.xml (original)
+++ ofbiz/trunk/applications/product/entitydef/entitymodel_shipment.xml Wed May 21 01:08:03 2008
@@ -58,6 +58,7 @@
<field name="issuedDateTime" type="date-time"></field>
<field name="issuedByUserLoginId" type="id-vlong"></field>
<field name="quantity" type="floating-point"></field>
+ <field name="cancelQuantity" type="floating-point"></field>
<prim-key field="itemIssuanceId"/>
<relation type="one" fk-name="ITEM_ISS_INVITM" rel-entity-name="InventoryItem">
<key-map field-name="inventoryItemId"/>
Modified: ofbiz/trunk/applications/product/script/org/ofbiz/shipment/issuance/IssuanceServices.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/script/org/ofbiz/shipment/issuance/IssuanceServices.xml?rev=658585&r1=658584&r2=658585&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/script/org/ofbiz/shipment/issuance/IssuanceServices.xml (original)
+++ ofbiz/trunk/applications/product/script/org/ofbiz/shipment/issuance/IssuanceServices.xml Wed May 21 01:08:03 2008
@@ -435,4 +435,91 @@
<call-service service-name="createInventoryItemDetail" in-map-name="createDetailMap"/>
</simple-method>
+ <simple-method method-name="cancelOrderItemIssuanceFromSalesShipment" short-description="Cancel an ItemIssuance quantity from Sales Shipment">
+ <set value="Cancel Order Item Issuance from Sales Shipment" field="operationName"/>
+ <check-permission permission="FACILITY" action="_UPDATE">
+ <fail-message message="Security Error: to run ${operationName} you must have the FACILITY_UPDATE or FACILITY_ADMIN permission"/>
+ </check-permission>
+
+ <!-- get ItemIssuance and related entities-->
+ <entity-one entity-name="ItemIssuance" value-name="itemIssuance"/>
+ <get-related-one value-name="itemIssuance" relation-name="OrderHeader" to-value-name="orderHeader"/>
+ <get-related-one value-name="itemIssuance" relation-name="InventoryItem" to-value-name="inventoryItem"/>
+
+ <!-- issuance can be canceled only if the sales shipment is not packed -->
+ <set from-field="itemIssuance.shipmentId" field="shipmentId"/>
+ <call-simple-method method-name="checkCanChangeShipmentStatusPacked" xml-resource="org/ofbiz/shipment/shipment/ShipmentServices.xml"/>
+ <check-errors/>
+
+ <!-- make sure the order is of orderTypeId: SALES_ORDER -->
+ <if-compare field-name="orderTypeId" map-name="orderHeader" operator="not-equals" value="SALES_ORDER">
+ <add-error><fail-message message="Not canceling ItemIssuance because the order is not a Sales Order"/></add-error>
+ </if-compare>
+
+ <!-- get the quantity that can be cancelled ItemIssuance -->
+ <calculate field-name="qtyIssuedLeft">
+ <calcop field-name="itemIssuance.quantity" operator="subtract">
+ <calcop operator="get" field-name="itemIssuance.cancelQuantity"/>
+ </calcop>
+ </calculate>
+
+ <!-- if not provided, get the left issued quantity -->
+ <set from-field="parameters.cancelQuantity" field="toCancelQuantity"/>
+ <if-empty field-name="toCancelQuantity">
+ <set from-field="qtyIssuedLeft" field="toCancelQuantity"/>
+ </if-empty>
+
+ <!-- make sure specified cancel Quantity is not less than or equal to 0 -->
+ <if-compare field-name="toCancelQuantity" operator="less-equals" value="0" type="Double">
+ <add-error><fail-message message="Not cancelling ItemIssuance [${parameters.itemIssuanceId}] because the quantity to cancel [${toCancelQuantity}] is less than or equal to 0 "/></add-error>
+ </if-compare>
+
+ <!-- make sure specified quantity is not greater than issued quantity left -->
+ <if-compare-field field-name="toCancelQuantity" operator="greater" to-field-name="qtyIssuedLeft" type="Double">
+ <add-error><fail-message message="Not cancelling ItemIssuanc because the quantity to cancel [${toCancelQuantity}] is greater than the quantity left [${qtyIssuedLeft}] for ItemIssuance [${itemIssuanceId}]"/></add-error>
+ </if-compare-field>
+ <check-errors/>
+
+ <!-- update ItemIssuance -->
+ <calculate field-name="totalCancelQty">
+ <calcop operator="add" field-name="itemIssuance.cancelQuantity"/>
+ <calcop operator="add" field-name="toCancelQuantity"/>
+ </calculate>
+ <set from-field="totalCancelQty" field="itemIssuanceUpdate.cancelQuantity"/>
+ <set from-field="parameters.itemIssuanceId" field="itemIssuanceUpdate.itemIssuanceId"/>
+ <call-service service-name="updateItemIssuance" in-map-name="itemIssuanceUpdate"/>
+
+ <!-- increment InventoryItem quantityOnHand AND availableToPromise -->
+ <!-- instead of updating InventoryItem, add an InventoryItemDetail -->
+ <set from-field="itemIssuance.inventoryItemId" field="createDetailMap.inventoryItemId"/>
+ <set from-field="itemIssuance.itemIssuanceId" field="createDetailMap.itemIssuanceId"/>
+ <set from-field="toCancelQuantity" field="createDetailMap.availableToPromiseDiff"/>
+ <set from-field="toCancelQuantity" field="createDetailMap.quantityOnHandDiff"/>
+ <call-service service-name="createInventoryItemDetail" in-map-name="createDetailMap"/>
+
+ <!-- reassign inventory reservations -->
+ <set field="reassignInventoryReservationsCtx.productId" from-field="inventoryItem.productId"/>
+ <set field="reassignInventoryReservationsCtx.facilityId" from-field="inventoryItem.facilityId"/>
+ <call-service service-name="reassignInventoryReservations" in-map-name="reassignInventoryReservationsCtx"/>
+
+ <!-- reserve the order item -->
+ <entity-one entity-name="ProductStore" value-name="productStore" auto-field-map="false">
+ <field-map field-name="productStoreId" env-name="orderHeader.productStoreId"/>
+ </entity-one>
+ <if-compare value="Y" operator="equals" field-name="productStore.isImmediatelyFulfilled">
+ <log level="verbose" message="ProductStore with id ${productStore.productStoreId}, is immediatly fulfilled. Not reseving inventory"/>
+ <else>
+ <set field="reserveStoreInventoryMap.productId" from-field="inventoryItem.productId"/>
+ <set field="reserveStoreInventoryMap.orderId" from-field="itemIssuance.orderId"/>
+ <set field="reserveStoreInventoryMap.orderItemSeqId" from-field="itemIssuance.orderItemSeqId"/>
+ <set field="reserveStoreInventoryMap.shipGroupSeqId" from-field="itemIssuance.shipGroupSeqId"/>
+ <set field="reserveStoreInventoryMap.quantity" from-field="toCancelQuantity"/>
+ <set field="reserveStoreInventoryMap.productStoreId" from-field="orderHeader.productStoreId"/>
+ <call-service service-name="reserveStoreInventory" in-map-name="reserveStoreInventoryMap"/>
+ </else>
+ </if-compare>
+
+ <field-to-result field-name="toCancelQuantity" result-name="canceledQuantity"/>
+ </simple-method>
+
</simple-methods>
Modified: ofbiz/trunk/applications/product/servicedef/services_shipment.xml
URL: http://svn.apache.org/viewvc/ofbiz/trunk/applications/product/servicedef/services_shipment.xml?rev=658585&r1=658584&r2=658585&view=diff
==============================================================================
--- ofbiz/trunk/applications/product/servicedef/services_shipment.xml (original)
+++ ofbiz/trunk/applications/product/servicedef/services_shipment.xml Wed May 21 01:08:03 2008
@@ -395,6 +395,13 @@
<description>Return InventoryItem Issued to a FixedAssetMaint - for conversion to use as supples/parts</description>
<attribute name="itemIssuanceId" type="String" mode="IN" optional="false"/>
</service>
+ <service name="cancelOrderItemIssuanceFromSalesShipment" engine="simple"
+ location="org/ofbiz/shipment/issuance/IssuanceServices.xml" invoke="cancelOrderItemIssuanceFromSalesShipment" auth="true">
+ <description>Cancel an ItemIssuance from Sales Shipment</description>
+ <attribute name="itemIssuanceId" type="String" mode="IN" optional="false"/>
+ <attribute name="cancelQuantity" type="Double" mode="IN" optional="true"/>
+ <attribute name="canceledQuantity" type="Double" mode="OUT" optional="false"/>
+ </service>
<!-- Pack Order Services -->
<service name="packSingleItem" engine="java"