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