You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ofbiz.apache.org by ak...@apache.org on 2020/06/30 06:14:55 UTC
[ofbiz-framework] branch trunk updated: Improved: Convert
AutoAcctgTransTestsPurchase.xml to Groovy (OFBIZ-11522)
This is an automated email from the ASF dual-hosted git repository.
akashjain pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/ofbiz-framework.git
The following commit(s) were added to refs/heads/trunk by this push:
new 8be1705 Improved: Convert AutoAcctgTransTestsPurchase.xml to Groovy (OFBIZ-11522)
8be1705 is described below
commit 8be1705765e12336b554569ea9c41594c8bfd74a
Author: Akash Jain <ak...@hotwaxsystems.com>
AuthorDate: Tue Jun 30 11:43:23 2020 +0530
Improved: Convert AutoAcctgTransTestsPurchase.xml to Groovy (OFBIZ-11522)
Thanks, Rohit Hukkeri for the report.
---
.../minilang/test/AutoAcctgTransTestsPurchase.xml | 178 +------------------
.../accounting/AutoAcctgTransTestsPurchase.groovy | 194 +++++++++++++++++++++
.../accounting/testdef/accountingtests.xml | 2 +-
3 files changed, 196 insertions(+), 178 deletions(-)
diff --git a/applications/accounting/minilang/test/AutoAcctgTransTestsPurchase.xml b/applications/accounting/minilang/test/AutoAcctgTransTestsPurchase.xml
index f6523a3..459e366 100644
--- a/applications/accounting/minilang/test/AutoAcctgTransTestsPurchase.xml
+++ b/applications/accounting/minilang/test/AutoAcctgTransTestsPurchase.xml
@@ -21,183 +21,7 @@ under the License.
<simple-methods xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://ofbiz.apache.org/Simple-Method" xsi:schemaLocation="http://ofbiz.apache.org/Simple-Method http://ofbiz.apache.org/dtds/simple-methods.xsd">
- <!-- Test case for Accounting Transaction on Purchase -->
- <simple-method method-name="testAcctgTransOnPoReceipts" short-description="Test case for Accounting Transaction on Receipts of Purchase Order." login-required="false">
- <!-- Precondition : shipment is created from supplier and order items are issued -->
- <!-- create a purchase order using following:
- Supplier : DemoSupplier
- Item : WG-1111
- Quantity : 10 -->
-
- <!-- Post condition : Credit in account 214000 - UNINVOICED ITEM RECEIPT amount = grand total of order.
- Debit in account 140000- INVENTORY amount = grand total of order. -->
-
- <!-- set few variables so that they can be changed easily to test with different values -->
- <set field="orderId" value="DEMO10091"/>
- <set field="productId" value="GZ-2644"/>
- <set field="orderItemSeqId" value="00001"/>
- <set field="shipmentId" value="9999"/>
-
- <entity-one entity-name="UserLogin" value-field="userLogin">
- <field-map field-name="userLoginId" value="system"/>
- </entity-one>
- <set field="serviceCtx.userLogin" from-field="userLogin"/>
- <set field="serviceCtx.inventoryItemTypeId" value="NON_SERIAL_INV_ITEM"/>
- <set field="serviceCtx.productId" from-field="productId"/>
- <set field="serviceCtx.facilityId" value="WebStoreWarehouse"/>
- <set field="serviceCtx.quantityAccepted" value="5" type="BigDecimal"/>
- <set field="serviceCtx.quantityRejected" value="0" type="BigDecimal"/>
- <set field="serviceCtx.shipmentId" from-field="shipmentId"/>
- <set field="serviceCtx.orderId" from-field="orderId"/>
- <set field="serviceCtx.orderItemSeqId" from-field="orderItemSeqId"/>
-
- <call-service service-name="receiveInventoryProduct" in-map-name="serviceCtx"/>
-
- <entity-and entity-name="AcctgTrans" list="acctgTransList">
- <field-map field-name="shipmentId"/>
- </entity-and>
- <assert><not><if-empty field="acctgTransList"/></not></assert>
- <first-from-list list="acctgTransList" entry="acctgTrans"/>
-
- <assert><if-compare field="acctgTrans.glJournalId" operator="not-equals" value="ERROR_JOURNAL"/></assert>
-
- <get-related value-field="acctgTrans" relation-name="AcctgTransEntry" list="acctgTransEntryList"/>
- <set field="productFilter.productId" from-field="productId"/>
- <filter-list-by-and list="acctgTransEntryList" map="productFilter" to-list="acctgTransEntryList"/>
-
- <assert><not><if-empty field="acctgTransEntryList"/></not></assert>
-
- <call-simple-method method-name="checkEntriesBalance"/>
-
- <iterate list="acctgTransEntryList" entry="acctgTransEntry">
- <if-compare field="acctgTransEntry.debitCreditFlag" operator="equals" value="C">
- <assert>
- <if-compare field="acctgTransEntry.glAccountTypeId" operator="equals" value="UNINVOICED_SHIP_RCPT"/>
- <if-compare field="acctgTransEntry.glAccountId" operator="equals" value="214000"/>
- </assert>
- <else>
- <if-compare field="acctgTransEntry.debitCreditFlag" operator="equals" value="D">
- <assert>
- <if-compare field="acctgTransEntry.glAccountTypeId" operator="equals" value="INVENTORY_ACCOUNT"/>
- <if-compare field="acctgTransEntry.glAccountId" operator="equals" value="140000"/>
- </assert>
- </if-compare>
- </else>
- </if-compare>
- </iterate>
- <!-- check if invoice created -->
- <entity-and entity-name="OrderItemBilling" list="orderItemBillings">
- <field-map field-name="orderId"/>
- </entity-and>
- <assert>
- <not><if-empty field="orderItemBillings"/></not>
- </assert>
- <check-errors/>
- </simple-method>
-
- <simple-method method-name="testAcctgTransOnEditPoInvoice" short-description="Test case for Purchase Invoices: editing, adding taxes and shipping charges and posting to GL" login-required="false">
- <!-- Precondition: To the Purchase Invoice created add taxes and two different shipping charges
- 1. for taxes: set "Invoice Item Type" = "Invoice Sales Tax" and "Unit Price" = 10$
- 2. for the first shipping charge: set "Invoice Item Type" = "Invoice Shipping And Handling" and "Unit Price" = 5$
- 3. for the second shipping charge: set "Invoice Item Type" = "Invoice Shipping And Handling", set "Override Gl Account Id" = "516100" and "Unit Price" = 5$
- -->
- <!-- Post condition: When status is set to ready, an accounting transaction is automatically posted to the GL:
- * Credit; in account 210000 - "ACCOUNTS PAYABLE"; amount: 290$
- * Debit; in account 214000 - "UNINVOICED ITEM RECEIPTS"; amount: 270$
- * Debit; in account 516100 - "PURCHASE ORDER ADJUSTMENTS"; amount: 10$
- * Debit; in account 510000 - "FREIGHT IN"; amount: 5$
- * Debit; in account 516100 - "PURCHASE ORDER ADJUSTMENTS"; amount: 5$
- -->
-
- <set field="orderId" value="DEMO10091"/>
- <entity-and entity-name="OrderItemBilling" list="orderItemBillings">
- <field-map field-name="orderId"/>
- </entity-and>
- <first-from-list list="orderItemBillings" entry="orderItemBilling"/>
- <entity-one entity-name="UserLogin" value-field="userLogin">
- <field-map field-name="userLoginId" value="system"/>
- </entity-one>
- <set field="serviceCtx.userLogin" from-field="userLogin"/>
- <set field="serviceCtx.statusId" value="INVOICE_READY"/>
- <set field="serviceCtx.invoiceId" from-field="orderItemBilling.invoiceId"/>
- <call-service service-name="setInvoiceStatus" in-map-name="serviceCtx"/>
- <entity-one entity-name="Invoice" value-field="invoice">
- <field-map field-name="invoiceId" from-field="orderItemBilling.invoiceId"/>
- </entity-one>
- <get-related value-field="invoice" relation-name="AcctgTrans" list="acctgTransList"/>
- <first-from-list list="acctgTransList" entry="acctgTrans"/>
-
- <assert><if-compare field="acctgTrans.glJournalId" operator="not-equals" value="ERROR_JOURNAL"/></assert>
-
- <get-related value-field="acctgTrans" relation-name="AcctgTransEntry" list="acctgTransEntryList"/>
-
- <assert><not><if-empty field="acctgTransEntryList"/></not></assert>
-
- <call-simple-method method-name="checkEntriesBalance"/>
-
- <iterate list="acctgTransEntryList" entry="acctgTransEntry">
- <if-compare field="acctgTransEntry.debitCreditFlag" operator="equals" value="C">
- <assert>
- <if-compare field="acctgTransEntry.glAccountTypeId" operator="equals" value="ACCOUNTS_PAYABLE"/>
- <if-compare field="acctgTransEntry.glAccountId" operator="equals" value="210000"/>
- </assert>
- </if-compare>
- </iterate>
- <check-errors/>
- </simple-method>
-
- <simple-method method-name="testAcctgTransOnPaymentSentToSupplier" short-description="Test case for Payment sent to supplier for purchase invoice." login-required="false">
- <!--
- Precondition: New payment is created for: supplierId = "DemoSupplier", "Payment Type ID" = "Vendor Payment" and
- a proper "Payment Method Type" (e.g. "Electronic Funds Transfer"), amount = $290
-
- Post condition: On payment's status is sent: a double-entry accounting transaction is automatically posted to the GL:
- * Credit; in account 111100 - "GENERAL CHECKING ACCOUNT"; amount: 290$; however this depends on the "Payment method type" selected;
- * Debit; in account 216000 - "ACCOUNTS PAYABLE - UNAPPLIED PAYMENTS"; amount: 290$
- -->
-
- <set field="paymentId" value="9000"/>
- <entity-one entity-name="UserLogin" value-field="userLogin">
- <field-map field-name="userLoginId" value="system"/>
- </entity-one>
- <set field="serviceCtx.userLogin" from-field="userLogin"/>
- <set field="serviceCtx.paymentId" from-field="paymentId"/>
- <set field="serviceCtx.statusId" value="PMNT_SENT"/>
-
- <call-service service-name="setPaymentStatus" in-map-name="serviceCtx"/>
- <entity-one entity-name="Payment" value-field="payment">
- <field-map field-name="paymentId" from-field="paymentId"/>
- </entity-one>
- <get-related value-field="payment" relation-name="AcctgTrans" list="acctgTransList"/>
- <first-from-list list="acctgTransList" entry="acctgTrans"/>
-
- <assert><if-compare field="acctgTrans.glJournalId" operator="not-equals" value="ERROR_JOURNAL"/></assert>
-
- <get-related value-field="acctgTrans" relation-name="AcctgTransEntry" list="acctgTransEntryList"/>
-
- <assert><not><if-empty field="acctgTransEntryList"/></not></assert>
-
- <call-simple-method method-name="checkEntriesBalance"/>
-
- <iterate list="acctgTransEntryList" entry="acctgTransEntry">
- <if-compare field="acctgTransEntry.debitCreditFlag" operator="equals" value="C">
- <assert>
- <if-compare field="acctgTransEntry.glAccountId" operator="equals" value="111100"/>
- </assert>
- <else>
- <if-compare field="acctgTransEntry.debitCreditFlag" operator="equals" value="D">
- <assert>
- <if-compare field="acctgTransEntry.glAccountTypeId" operator="equals" value="ACCPAYABLE_UNAPPLIED"/>
- <if-compare field="acctgTransEntry.glAccountId" operator="equals" value="216000"/>
- </assert>
- </if-compare>
- </else>
- </if-compare>
- </iterate>
- <check-errors/>
- </simple-method>
-
-
+ <!-- TODO: This method is also called from other methods. Will remove it when convert AutoAcctgTransTestsSales xml file to groovy. -->
<simple-method method-name="checkEntriesBalance" login-required="false"
short-description="Short util method that takes a list of AcctgTransEntry values (acctgTransEntryList) and checks that the debit and credit totals balance.">
<set field="debitTotal" type="BigDecimal" value="0.0"/>
diff --git a/applications/accounting/src/main/groovy/org/apache/ofbiz/accounting/AutoAcctgTransTestsPurchase.groovy b/applications/accounting/src/main/groovy/org/apache/ofbiz/accounting/AutoAcctgTransTestsPurchase.groovy
new file mode 100644
index 0000000..aad5b26
--- /dev/null
+++ b/applications/accounting/src/main/groovy/org/apache/ofbiz/accounting/AutoAcctgTransTestsPurchase.groovy
@@ -0,0 +1,194 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.ofbiz.accounting
+
+import org.apache.ofbiz.entity.GenericValue
+import org.apache.ofbiz.service.ServiceUtil
+import org.apache.ofbiz.service.testtools.OFBizTestCase
+
+class AutoAcctgTransTestsPurchase extends OFBizTestCase {
+ public AutoAcctgTransTestsPurchase(String name) {
+ super(name)
+ }
+
+ // Test case for Accounting Transaction on Purchase
+ void testAcctgTransOnPoReceipts() {
+ /*
+ Precondition : shipment is created from supplier and order items are issued
+ create a purchase order using following:
+ Supplier : DemoSupplier
+ Item : WG-1111
+ Quantity : 10
+
+ Post condition : Credit in account 214000 - UNINVOICED ITEM RECEIPT amount = grand total of order.
+ Debit in account 140000- INVENTORY amount = grand total of order.
+ */
+ String orderId = 'DEMO10091'
+ String shipmentId = '9999'
+ String productId = 'GZ-2644'
+
+ Map serviceCtx = [
+ inventoryItemTypeId: 'NON_SERIAL_INV_ITEM',
+ productId: productId,
+ facilityId: 'WebStoreWarehouse',
+ quantityAccepted: new BigDecimal('5'),
+ quantityRejected: new BigDecimal('0'),
+ shipmentId: shipmentId,
+ orderId: orderId,
+ orderItemSeqId: '00001',
+ userLogin: userLogin
+ ]
+ Map serviceResult = dispatcher.runSync('receiveInventoryProduct', serviceCtx)
+ assert ServiceUtil.isSuccess(serviceResult)
+
+ GenericValue acctgTrans = from('AcctgTrans')
+ .where('shipmentId', shipmentId)
+ .queryFirst()
+ assert acctgTrans
+ assert acctgTrans.glJournalId != 'ERROR_JOURNAL'
+
+ List<GenericValue> acctgTransEntryList = from('AcctgTransEntry')
+ .where('acctgTransId', acctgTrans.acctgTransId, 'productId', productId)
+ .queryList()
+ assert acctgTransEntryList
+
+ checkEntriesBalance(acctgTransEntryList)
+
+ for (GenericValue acctgTransEntry : acctgTransEntryList) {
+ if (acctgTransEntry.debitCreditFlag == 'C') {
+ assert acctgTransEntry.glAccountTypeId == 'UNINVOICED_SHIP_RCPT'
+ assert acctgTransEntry.glAccountId == '214000'
+ } else if (acctgTransEntry.debitCreditFlag == 'D') {
+ assert acctgTransEntry.glAccountTypeId == 'INVENTORY_ACCOUNT'
+ assert acctgTransEntry.glAccountId == '140000'
+ }
+ }
+
+ GenericValue orderItemBilling = from('OrderItemBilling')
+ .where('orderId', orderId)
+ .queryFirst()
+ assert orderItemBilling
+ }
+
+ void testAcctgTransOnEditPoInvoice() {
+ /*
+ Precondition: To the Purchase Invoice created add taxes and two different shipping charges
+ 1. for taxes: set "Invoice Item Type" = "Invoice Sales Tax" and "Unit Price" = 10$
+ 2. for the first shipping charge: set "Invoice Item Type" = "Invoice Shipping And Handling" and "Unit Price" = 5$
+ 3. for the second shipping charge: set "Invoice Item Type" = "Invoice Shipping And Handling", set "Override Gl Account Id" = "516100" and "Unit Price" = 5$
+
+ Post condition: When status is set to ready, an accounting transaction is automatically posted to the GL:
+ * Credit; in account 210000 - "ACCOUNTS PAYABLE"; amount: 290$
+ * Debit; in account 214000 - "UNINVOICED ITEM RECEIPTS"; amount: 270$
+ * Debit; in account 516100 - "PURCHASE ORDER ADJUSTMENTS"; amount: 10$
+ * Debit; in account 510000 - "FREIGHT IN"; amount: 5$
+ * Debit; in account 516100 - "PURCHASE ORDER ADJUSTMENTS"; amount: 5$
+ */
+ GenericValue orderItemBilling = from('OrderItemBilling')
+ .where('orderId', 'DEMO10091')
+ .queryFirst()
+ assert orderItemBilling
+
+ Map serviceCtx = [
+ statusId: 'INVOICE_READY',
+ invoiceId: orderItemBilling.invoiceId,
+ userLogin: userLogin
+ ]
+ Map serviceResult = dispatcher.runSync('setInvoiceStatus', serviceCtx)
+ assert ServiceUtil.isSuccess(serviceResult)
+
+ GenericValue acctgTrans = from('AcctgTrans')
+ .where('invoiceId', orderItemBilling.invoiceId)
+ .queryFirst()
+ assert acctgTrans
+ assert acctgTrans.glJournalId != 'ERROR_JOURNAL'
+
+ List<GenericValue> acctgTransEntryList = from('AcctgTransEntry')
+ .where('acctgTransId', acctgTrans.acctgTransId)
+ .queryList()
+ assert acctgTransEntryList
+
+ checkEntriesBalance(acctgTransEntryList)
+
+ for (GenericValue acctgTransEntry : acctgTransEntryList) {
+ if (acctgTransEntry.debitCreditFlag == 'C') {
+ assert acctgTransEntry.glAccountTypeId == 'ACCOUNTS_PAYABLE'
+ assert acctgTransEntry.glAccountId == '210000'
+ }
+ }
+ }
+
+ void testAcctgTransOnPaymentSentToSupplier() {
+ /*
+ Precondition: New payment is created for: supplierId = "DemoSupplier", "Payment Type ID" = "Vendor Payment" and
+ a proper "Payment Method Type" (e.g. "Electronic Funds Transfer"), amount = $290
+
+ Post condition: On payment's status is sent: a double-entry accounting transaction is automatically posted to the GL:
+ * Credit; in account 111100 - "GENERAL CHECKING ACCOUNT"; amount: 290$; however this depends on the "Payment method type" selected;
+ * Debit; in account 216000 - "ACCOUNTS PAYABLE - UNAPPLIED PAYMENTS"; amount: 290$
+ */
+ String paymentId = '9000'
+
+ Map serviceCtx = [
+ statusId: 'PMNT_SENT',
+ paymentId: paymentId,
+ userLogin: userLogin
+ ]
+ Map serviceResult = dispatcher.runSync('setPaymentStatus', serviceCtx)
+ assert ServiceUtil.isSuccess(serviceResult)
+
+ GenericValue acctgTrans = from('AcctgTrans')
+ .where('paymentId', paymentId)
+ .queryFirst()
+ assert acctgTrans
+ assert acctgTrans.glJournalId != 'ERROR_JOURNAL'
+
+ List<GenericValue> acctgTransEntryList = from('AcctgTransEntry')
+ .where('acctgTransId', acctgTrans.acctgTransId)
+ .queryList()
+ assert acctgTransEntryList
+
+ checkEntriesBalance(acctgTransEntryList)
+
+ for (GenericValue acctgTransEntry : acctgTransEntryList) {
+ if (acctgTransEntry.debitCreditFlag == 'C') {
+ assert acctgTransEntry.glAccountId == '111100'
+ } else if (acctgTransEntry.debitCreditFlag == 'D') {
+ assert acctgTransEntry.glAccountTypeId == 'ACCPAYABLE_UNAPPLIED'
+ assert acctgTransEntry.glAccountId == '216000'
+ }
+ }
+ }
+
+ void checkEntriesBalance(List<GenericValue> acctgTransEntryList) {
+ BigDecimal debitTotal = new BigDecimal('0')
+ BigDecimal creditTotal = new BigDecimal('0')
+
+ for (GenericValue acctgTransEntry : acctgTransEntryList) {
+ if (acctgTransEntry.debitCreditFlag == 'C') {
+ creditTotal = creditTotal.add(acctgTransEntry.origAmount)
+ } else if (acctgTransEntry.debitCreditFlag == 'D') {
+ debitTotal = debitTotal.add(acctgTransEntry.origAmount)
+ }
+ }
+
+ assert debitTotal.compareTo(creditTotal) == 0
+ }
+}
\ No newline at end of file
diff --git a/applications/accounting/testdef/accountingtests.xml b/applications/accounting/testdef/accountingtests.xml
index c3693bb..23b750c 100644
--- a/applications/accounting/testdef/accountingtests.xml
+++ b/applications/accounting/testdef/accountingtests.xml
@@ -34,7 +34,7 @@
<simple-method-test location="component://accounting/minilang/test/AutoAcctgTransTestsSales.xml"/>
</test-case>
<test-case case-name="auto-accounting-transaction-tests-purchase">
- <simple-method-test location="component://accounting/minilang/test/AutoAcctgTransTestsPurchase.xml"/>
+ <junit-test-suite class-name="org.apache.ofbiz.accounting.AutoAcctgTransTestsPurchase"/>
</test-case>
<test-case case-name="auto-accounting-admin-tests">
<junit-test-suite class-name="org.apache.ofbiz.accounting.AutoAcctgAdminTests"/>