Author: pgil
Date: Tue May 30 07:14:27 2017
New Revision: 1796731
URL: http://svn.apache.org/viewvc?rev=1796731&view=rev
Log:
Fixed: Convert AcctgAdminServices.xml mini-lang to groovyDSL (OFBIZ-9372)
Related to task OFBIZ-9350 Deprecate Mini Lang, convert services
createPartyAcctgPreference, getPartyAccountingPreferences, setAcctgCompany,
updateFXConversion and getFXConversion from mini-lang to groovyDSL
Commited slightly modified patch from Leila, implementing Jacques and Deepak
recommendations.
Thanks to Jacques and Deepak for the review, Leila for the provided patch.
Added:
ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/admin/AcctgAdminServices.groovy
(with props)
Removed:
ofbiz/ofbiz-framework/trunk/applications/accounting/minilang/admin/
Modified:
ofbiz/ofbiz-framework/trunk/applications/accounting/servicedef/services_admin.xml
Added:
ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/admin/AcctgAdminServices.groovy
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/admin/AcctgAdminServices.groovy?rev=1796731&view=auto
==============================================================================
---
ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/admin/AcctgAdminServices.groovy
(added)
+++
ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/admin/AcctgAdminServices.groovy
Tue May 30 07:14:27 2017
@@ -0,0 +1,171 @@
+/*
+ * 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.
+ */
+
+import java.sql.Timestamp
+import org.apache.ofbiz.base.util.UtilDateTime
+import org.apache.ofbiz.base.util.UtilProperties
+import org.apache.ofbiz.entity.condition.EntityConditionBuilder
+import org.apache.ofbiz.entity.GenericValue
+import org.apache.ofbiz.entity.util.EntityUtil
+
+def createPartyAcctgPreference() {
+ //check that the party is an INTERNAL_ORGANIZATION, as defined in PartyRole
+ partyRole =
select().from('PartyRole').where([partyId:parameters.partyId,roleTypeId:"INTERNAL_ORGANIZATIO"]).queryOne()
+ if (!partyRole) {
+ String errorMessage =
UtilProperties.getMessage("AccountingUiLabels","AccountingPartyMustBeInternalOrganization",
locale)
+ logError(errorMessage)
+ return error(errorMessage)
+ }
+ //Does not check if the Party is actually a company because real people
have to pay taxes too
+
+ //TODO: maybe check to make sure that all fields are not null
+ newEntity = delegator.makeValidValue("PartyAcctgPreference", parameters)
+ delegator.create(newEntity)
+ return success()
+}
+
+def getPartyAccountingPreferences() {
+ Map result = success()
+ GenericValue aggregatedPartyAcctgPref =
delegator.makeValidValue("PartyAcctgPreference", parameters)
+ String currentOrganizationPartyId = parameters.organizationPartyId
+ Boolean containsEmptyFields = true
+
+ while (currentOrganizationPartyId && containsEmptyFields) {
+ GenericValue currentPartyAcctgPref =
select().from('PartyAcctgPreference').where([partyId:currentOrganizationPartyId]).queryOne()
+ containsEmptyFields = false
+ if (currentPartyAcctgPref) {
+ for (String entityKey : currentPartyAcctgPref.keySet()) {
+ Object entityValue = currentPartyAcctgPref.get(entityKey)
+ if (entityValue) {
+ aggregatedPartyAcctgPref.put(entityKey,entityValue)
+ } else {
+ containsEmptyFields = true
+ }
+ }
+ } else {
+ containsEmptyFields = true
+ }
+ List<GenericValue> parentPartyRelationships =
select().from('PartyRelationship').where([partyIdTo:currentOrganizationPartyId,
partyRelationshipTypeId:"GROUP_ROLLUP", roleTypeIdFrom:"_NA_",
roleTypeIdTo:"_NA_"]).filterByDate().queryList()
+ if (parentPartyRelationships) {
+ GenericValue parentPartyRelationship =
EntityUtil.getFirst(parentPartyRelationships)
+ currentOrganizationPartyId = parentPartyRelationship.partyIdFrom
+ } else {
+ currentOrganizationPartyId = null
+ }
+ }
+
+ if (aggregatedPartyAcctgPref) {
+ aggregatedPartyAcctgPref.put("partyId",parameters.organizationPartyId)
+ result.put("partyAccountingPreference", aggregatedPartyAcctgPref)
+ }
+ return result
+}
+
+def setAcctgCompany() {
+ Map result = success()
+ //Set user preference
+ GenericValue partyAcctgPreference =
select().from('PartyAcctgPreference').where([partyId:
parameters.organizationPartyId]).queryOne()
+ if (partyAcctgPreference) {
+ result = runService("setUserPreference", [userPrefValue:
parameters.organizationPartyId, userPrefGroupTypeId: "GLOBAL_PREFERENCES",
userPrefTypeId: "ORGANIZATION_PARTY"])
+ }
+ result.put("organizationPartyId", parameters.organizationPartyId)
+
+ return result
+}
+
+def updateFXConversion() {
+ //Set the FX rate changes as of now
+ Timestamp nowTimestamp = parameters.asOfTimestamp
+ if (!nowTimestamp) {
+ nowTimestamp = UtilDateTime.nowTimestamp()
+ }
+
+ //find the existing exchange rates for this currency pair
+ exprBldr = new EntityConditionBuilder()
+ condition = exprBldr.AND() {
+ EQUALS(uomId: parameters.uomId)
+ EQUALS(uomIdTo: parameters.uomIdTo)
+ }
+ if (parameters.purposeEnumId) {
+ condition = exprBldr.AND(condition) {
+ EQUALS(purposeEnumId: parameters.purposeEnumId)
+ }
+ }
+ List<GenericValue> uomConversions =
select().from('UomConversionDated').where(condition).orderBy("-fromDate").filterByDate().queryList()
+
+ //expire all of them
+ for (GenericValue uomConversion : uomConversions) {
+ if (!parameters.fromDate) {
+ uomConversion.put("thruDate", nowTimestamp)
+ } else {
+ uomConversion.put("thruDate", parameters.fromDate)
+ }
+ }
+ delegator.storeAll(uomConversions)
+
+ //now create a new conversion relationship
+ Map createParams =
dispatcher.getDispatchContext().makeValidContext("createUomConversionDated",
"IN", parameters)
+ if (!parameters.fromDate) {
+ createParams.put("fromDate", nowTimestamp)
+ }
+ result = runService("createUomConversionDated", createParams)
+
+ return success()
+}
+
+def getFXConversion() {
+ Map result = success()
+ Timestamp asOfTimestamp = parameters.asOfTimestamp
+ if (!asOfTimestamp) {
+ asOfTimestamp = UtilDateTime.nowTimestamp()
+ }
+
+ //find the existing exchange rates
+ exprBldr = new EntityConditionBuilder()
+ thruDateCondition = exprBldr.OR() {
+ EQUALS(thruDate: null)
+ GREATER_THAN_EQUAL_TO(thruDate: asOfTimestamp)
+ }
+ condition = exprBldr.AND(thruDateCondition) {
+ EQUALS(uomId: parameters.uomId)
+ EQUALS(uomIdTo: parameters.uomIdTo)
+ LESS_THAN_EQUAL_TO(fromDate: asOfTimestamp)
+ }
+ if (parameters.purposeEnumId) {
+ condition = exprBldr.AND(condition) {
+ EQUALS(purposeEnumId: parameters.purposeEnumId)
+ }
+ }
+ List<GenericValue> rates =
select().from('UomConversionDated').where(condition).orderBy("-fromDate").filterByDate().queryList()
+
+ BigDecimal conversionRate
+ int decimalScale = 2
+ int roundingMode = BigDecimal.ROUND_HALF_UP
+ if (rates) {
+ conversionFactor =
EntityUtil.getFirst(rates).getBigDecimal("conversionFactor")
+ BigDecimal originalValue = BigDecimal.ONE
+ conversionRate = originalValue.divide(conversionFactor, decimalScale,
roundingMode)
+ } else {
+ String errorMessage = "Could not find conversion rate"
+ logError(errorMessage)
+ return error(errorMessage)
+ }
+ result.put("conversionRate",conversionRate)
+ return result
+}
\ No newline at end of file
Propchange:
ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/admin/AcctgAdminServices.groovy
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/admin/AcctgAdminServices.groovy
------------------------------------------------------------------------------
svn:keywords = Date Rev Author URL Id
Propchange:
ofbiz/ofbiz-framework/trunk/applications/accounting/groovyScripts/admin/AcctgAdminServices.groovy
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified:
ofbiz/ofbiz-framework/trunk/applications/accounting/servicedef/services_admin.xml
URL:
http://svn.apache.org/viewvc/ofbiz/ofbiz-framework/trunk/applications/accounting/servicedef/services_admin.xml?rev=1796731&r1=1796730&r2=1796731&view=diff
==============================================================================
---
ofbiz/ofbiz-framework/trunk/applications/accounting/servicedef/services_admin.xml
(original)
+++
ofbiz/ofbiz-framework/trunk/applications/accounting/servicedef/services_admin.xml
Tue May 30 07:14:27 2017
@@ -23,8 +23,9 @@ under the License.
<description>Accounting Services - Miscellaneous</description>
<vendor>OFBiz</vendor>
<version>1.0</version>
- <service name="createPartyAcctgPreference"
default-entity-name="PartyAcctgPreference" engine="simple"
-
location="component://accounting/minilang/admin/AcctgAdminServices.xml"
invoke="createPartyAcctgPreference" auth="true">
+
+ <service name="createPartyAcctgPreference"
default-entity-name="PartyAcctgPreference" engine="groovy"
+
location="component://accounting/groovyScripts/admin/AcctgAdminServices.groovy"
invoke="createPartyAcctgPreference" auth="true">
<description>Create accounting preferences for a party
(organization)</description>
<permission-service service-name="acctgPrefPermissionCheck"
main-action="CREATE"/>
<auto-attributes include="pk" mode="IN" optional="false"/>
@@ -58,22 +59,24 @@ under the License.
<exclude field-name="lastOrderNumber"/>
</auto-attributes>
</service>
- <service name="getPartyAccountingPreferences"
default-entity-name="PartyAcctgPreference" engine="simple"
-
location="component://accounting/minilang/admin/AcctgAdminServices.xml"
invoke="getPartyAccountingPreferences" auth="true">
+
+ <service name="getPartyAccountingPreferences"
default-entity-name="PartyAcctgPreference" engine="groovy"
+
location="component://accounting/groovyScripts/admin/AcctgAdminServices.groovy"
invoke="getPartyAccountingPreferences" auth="true">
<description>Get accounting preferences for a party
(organization)</description>
<permission-service service-name="acctgPrefPermissionCheck"
main-action="VIEW"/>
<attribute type="String" mode="IN" name="organizationPartyId"
optional="false"/>
<attribute name="partyAccountingPreference"
type="org.apache.ofbiz.entity.GenericValue" mode="OUT" optional="true"/>
</service>
- <service name="setAcctgCompany" engine="simple"
-
location="component://accounting/minilang/admin/AcctgAdminServices.xml"
invoke="setAcctgCompany" auth="true">
+
+ <service name="setAcctgCompany" engine="groovy"
+
location="component://accounting/groovyScripts/admin/AcctgAdminServices.groovy"
invoke="setAcctgCompany" auth="true">
<description>Set Accounting Company when select</description>
<permission-service service-name="acctgPrefPermissionCheck"
main-action="CREATE"/>
<attribute type="String" mode="INOUT" name="organizationPartyId"
optional="true"/>
</service>
- <service name="updateFXConversion" engine="simple"
-
location="component://accounting/minilang/admin/AcctgAdminServices.xml"
invoke="updateFXConversion">
+ <service name="updateFXConversion" engine="groovy"
+
location="component://accounting/groovyScripts/admin/AcctgAdminServices.groovy"
invoke="updateFXConversion">
<description>Update the conversion rate between two currencies and
expire the old conversion rates</description>
<permission-service service-name="acctgFxPermissionCheck"
main-action="UPDATE"/>
<attribute type="String" mode="IN" name="uomId" optional="false"/>
@@ -128,8 +131,8 @@ under the License.
<auto-attributes mode="IN" entity-name="PaymentMethodTypeGlAccount"
include="pk" optional="false"/>
</service>
- <service name="getFXConversion" engine="simple"
-
location="component://accounting/minilang/admin/AcctgAdminServices.xml"
invoke="getFXConversion">
+ <service name="getFXConversion" engine="groovy"
+
location="component://accounting/groovyScripts/admin/AcctgAdminServices.groovy"
invoke="getFXConversion">
<description>get the conversion rate</description>
<attribute type="String" mode="IN" name="uomId" optional="false"/>
<attribute type="String" mode="IN" name="uomIdTo" optional="false"/>