| <?xml version="1.0" encoding="UTF-8"?> |
| <!-- |
| 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. |
| --> |
| |
| <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"> |
| <simple-method method-name="commonGenericPermission" short-description="Main permission logic"> |
| <set field="primaryPermission" value="COMMON"/> |
| <call-simple-method method-name="genericBasePermissionCheck" xml-resource="component://common/minilang/permission/CommonPermissionServices.xml"/> |
| </simple-method> |
| |
| <simple-method method-name="createKeywordThesaurus" short-description="Create a KeywordThesaurus"> |
| <check-permission permission="CATALOG" action="_CREATE"> |
| <fail-property resource="CommonUiLabels" property="CommonGenericPermissionError"/> |
| </check-permission> |
| <check-errors/> |
| <make-value value-field="newEntity" entity-name="KeywordThesaurus"/> |
| <set-pk-fields map="parameters" value-field="newEntity"/> |
| <set-nonpk-fields map="parameters" value-field="newEntity"/> |
| <call-object-method obj-field="newEntity.enteredKeyword" method-name="toLowerCase" ret-field="newEntity.enteredKeyword"/> |
| <call-object-method obj-field="newEntity.alternateKeyword" method-name="toLowerCase" ret-field="newEntity.alternateKeyword"/> |
| <create-value value-field="newEntity"/> |
| </simple-method> |
| <simple-method method-name="updateKeywordThesaurus" short-description="Update a KeywordThesaurus"> |
| <check-permission permission="CATALOG" action="_UPDATE"> |
| <fail-property resource="CommonUiLabels" property="CommonGenericPermissionError"/> |
| </check-permission> |
| <check-errors/> |
| <make-value value-field="newEntity" entity-name="KeywordThesaurus"/> |
| <set-pk-fields map="parameters" value-field="newEntity"/> |
| <set-nonpk-fields map="parameters" value-field="newEntity"/> |
| <store-value value-field="newEntity"/> |
| </simple-method> |
| <simple-method method-name="deleteKeywordThesaurus" short-description="Delete a KeywordThesaurus"> |
| <check-permission permission="CATALOG" action="_DELETE"> |
| <fail-property resource="CommonUiLabels" property="CommonGenericPermissionError"/> |
| </check-permission> |
| <check-errors/> |
| <make-value value-field="newEntity" entity-name="KeywordThesaurus"/> |
| <set-pk-fields map="parameters" value-field="newEntity"/> |
| <remove-by-and entity-name="KeywordThesaurus" map="newEntity"/> |
| </simple-method> |
| |
| <!-- Uom Conversion service --> |
| <simple-method method-name="createUomConversionDated" short-description="Create a new dated UOM conversion entity"> |
| <make-value value-field="newEntity" entity-name="UomConversionDated"/> |
| <set-pk-fields map="parameters" value-field="newEntity"/> |
| <set-nonpk-fields map="parameters" value-field="newEntity"/> |
| <create-value value-field="newEntity"/> |
| </simple-method> |
| |
| <simple-method method-name="convertUom" short-description="Convert UOM values" login-required="false"> |
| <!-- base case: if both uomIds are the same, return the original value --> |
| <if-compare-field field="parameters.uomId" to-field="parameters.uomIdTo" operator="equals"> |
| <field-to-result field="parameters.originalValue" result-name="convertedValue"/> |
| <return/> |
| </if-compare-field> |
| |
| <if-empty field="parameters.asOfDate"> |
| <now-timestamp field="nowTimestamp"/> |
| <set field="asOfDate" from-field="nowTimestamp"/> |
| <else> |
| <set field="asOfDate" from-field="parameters.asOfDate"/> |
| </else> |
| </if-empty> |
| |
| <!-- first try the regular UomConversion entity (no dates) --> |
| <entity-one entity-name="UomConversion" value-field="uomConversion" auto-field-map="true" use-cache="true"/> |
| |
| <!-- if not found, try the dated uom conversion entity --> |
| <if-empty field="uomConversion"> |
| <entity-condition entity-name="UomConversionDated" list="uomConversions" use-cache="true"> |
| <condition-list combine="and"> |
| <condition-expr field-name="uomId" from-field="parameters.uomId"/> |
| <condition-expr field-name="uomIdTo" from-field="parameters.uomIdTo"/> |
| <condition-expr field-name="purposeEnumId" operator="equals" from-field="parameters.purposeEnumId" ignore-if-empty="true"/> |
| <condition-expr field-name="fromDate" operator="less-equals" from-field="asOfDate"/> |
| <condition-list combine="or"> |
| <condition-expr field-name="thruDate" operator="greater-equals" from-field="asOfDate"/> |
| <condition-expr field-name="thruDate" operator="equals" from-field="nullField"/> |
| </condition-list> |
| </condition-list> |
| <!-- sort by descending fromDate to get newest (biggest) first --> |
| <order-by field-name="-fromDate"/> |
| </entity-condition> |
| <first-from-list list="uomConversions" entry="uomConversion"/> |
| |
| <!-- if no conversion found with specified purpose, try w/o purpose --> |
| <if-empty field="uomConversion"> |
| <if-not-empty field="parameters.purposeEnumId"> |
| <entity-condition entity-name="UomConversionDated" list="uomConversions" use-cache="true"> |
| <condition-list combine="and"> |
| <condition-expr field-name="uomId" from-field="parameters.uomId"/> |
| <condition-expr field-name="uomIdTo" from-field="parameters.uomIdTo"/> |
| <condition-expr field-name="fromDate" operator="less-equals" from-field="asOfDate"/> |
| <condition-list combine="or"> |
| <condition-expr field-name="thruDate" operator="greater-equals" from-field="asOfDate"/> |
| <condition-expr field-name="thruDate" operator="equals" from-field="nullField"/> |
| </condition-list> |
| </condition-list> |
| <order-by field-name="-fromDate"/> |
| </entity-condition> |
| <first-from-list list="uomConversions" entry="uomConversion"/> |
| </if-not-empty> |
| </if-empty> |
| </if-empty> |
| <log level="verbose" message="using conversion factor=${uomConversion.conversionFactor}"/> |
| |
| <if-empty field="uomConversion"> |
| <!-- if still no uom conversion entity, then no conversion is possible --> |
| <add-error><fail-property resource="CommonUiLabels" property="CommonNoUomConversionFound"/></add-error> |
| <check-errors/> |
| <else> |
| <!-- Do custom conversion, if we have customMethodId --> |
| <if-not-empty field="uomConversion.customMethodId"> <!-- custom conversion? --> |
| <log level="verbose" message="using custom conversion customMethodId=${uomConversion.customMethodId}"/> |
| <set-service-fields service-name="convertUomCustom" map="parameters" to-map="customParms"/> |
| <set field="customParms.uomConversion" from-field="uomConversion"/> |
| <call-service service-name="convertUomCustom" in-map-name="customParms"> |
| <result-to-field result-name="convertedValue"/> |
| </call-service> |
| <log level="verbose" message="Custom UoM conversion returning convertedValue=${convertedValue}"/> |
| <else> <!-- not custom conversion --> |
| <!-- do the conversion --> |
| <calculate field="convertedValue" type="BigDecimal" decimal-scale="15"> |
| <calcop operator="multiply"> |
| <calcop operator="get" field="parameters.originalValue"/> |
| <calcop operator="get" field="uomConversion.conversionFactor"/> |
| </calcop> |
| </calculate> |
| </else> |
| </if-not-empty> <!-- custom conversion? --> |
| |
| <!-- round result, if UomConversion[Dated] so specifies --> |
| <set field="roundingMode" from-field="uomConversion.roundingMode" default-value="${parameters.defaultRoundingMode}"/> |
| <set field="decimalScale" from-field="uomConversion.decimalScale" default-value="${parameters.defaultDecimalScale}"/> |
| <if-not-empty field="roundingMode"> |
| <calculate field="roundedValue" type="BigDecimal" decimal-scale="${decimalScale}" rounding-mode="${roundingMode}"> |
| <calcop operator="get" field="convertedValue"/> |
| </calculate> |
| <set field="convertedValue" from-field="roundedValue"/> |
| </if-not-empty> |
| </else> |
| </if-empty> <!-- no UomConversion or UomConversionDated found --> |
| |
| <!-- all done --> |
| <field-to-result field="convertedValue"/> |
| |
| <log level="verbose" message="Uom conversion of [${parameters.originalValue}] from [${parameters.uomId}] to [${parameters.uomIdTo}] using conversion factor [${uomConversion.conversionFactor}], result is [${convertedValue}]"/> |
| </simple-method> |
| |
| <!-- convertUomCustom: Dispatcher for calling Custom Method for UoM conversion --> |
| <simple-method method-name="convertUomCustom" short-description="Convert UOM values using CustomMethod" login-required="false"> |
| <set field="customMethodId" from-field="parameters.uomConversion.customMethodId"/> |
| <entity-one entity-name="CustomMethod" value-field="customMethod" auto-field-map="true" use-cache="true"/> |
| |
| <if-empty field="customMethod.customMethodName"> |
| <add-error> <fail-property resource="CommonUiLabels" property="CommonNoCustomMethodName"/> </add-error> |
| <check-errors/> |
| <else> |
| <log level="verbose" message="calling custom method ${customMethod.customMethodName}"/> |
| <set field="args.arguments" from-field="parameters"/> |
| <call-service service-name="${customMethod.customMethodName}" in-map-name="args"> |
| <result-to-result result-name="convertedValue"/> |
| </call-service> |
| </else> |
| </if-empty> |
| </simple-method> |
| |
| <simple-method method-name="getFileUploadProgressStatus" short-description="Look up progress made in File Upload process"> |
| <set field="uploadProgressListener" from-field="parameters.uploadProgressListener"/> |
| <if-not-empty field="uploadProgressListener"> |
| <call-object-method obj-field="uploadProgressListener" method-name="getContentLength" ret-field="parameters.contentLength"/> |
| <field-to-result field="parameters.contentLength" result-name="contentLength"/> |
| <call-object-method obj-field="uploadProgressListener" method-name="getBytesRead" ret-field="parameters.bytesRead"/> |
| <field-to-result field="parameters.bytesRead" result-name="bytesRead"/> |
| <call-object-method obj-field="uploadProgressListener" method-name="hasStarted" ret-field="parameters.hasStarted"/> |
| <field-to-result field="parameters.hasStarted" result-name="hasStarted"/> |
| <script>groovy: |
| contentLength = parameters.get("contentLength"); |
| bytesRead = parameters.get("bytesRead"); |
| int readPercent = (bytesRead* 100)/contentLength; |
| parameters.put("readPercent", readPercent); |
| </script> |
| <field-to-result field="parameters.readPercent" result-name="readPercent"/> |
| <field-to-result field="parameters.hasStarted" result-name="hasStarted"/> |
| </if-not-empty> |
| </simple-method> |
| |
| <simple-method method-name="getVisualThemeResources" short-description="Get visual theme resources" login-required="false"> |
| <set field="visualThemeId" from-field="parameters.visualThemeId"/> |
| <set field="themeResources" from-field="parameters.themeResources"/> |
| <entity-condition entity-name="VisualThemeResource" list="resourceList" use-cache="true"> |
| <condition-expr field-name="visualThemeId" from-field="visualThemeId"/> |
| <order-by field-name="resourceTypeEnumId"/> |
| <order-by field-name="sequenceId"/> |
| </entity-condition> |
| <if-empty field="resourceList"> |
| <!-- if not found use the good old initial ofbiz theme so the system will at least start up and will be usable --> |
| <log level="error" message="Could not find the '${visualThemeId}' theme, reverting back to the good old OFBiz theme..."></log> |
| <entity-condition entity-name="VisualThemeResource" list="resourceList" use-cache="true"> |
| <condition-expr field-name="visualThemeId" value="FLAT_GREY"/> |
| <order-by field-name="resourceTypeEnumId"/> |
| <order-by field-name="sequenceId"/> |
| </entity-condition> |
| </if-empty> |
| <if-empty field="resourceList"> |
| <add-error><fail-property resource="CommonUiLabels" property="CommonVisualThemeResourcesNotFound"/></add-error> |
| <check-errors/> |
| </if-empty> |
| <iterate list="resourceList" entry="resourceRecord"> |
| <set field="resourceTypeEnumId" from-field="resourceRecord.resourceTypeEnumId"/> |
| <set field="resourceValue" from-field="resourceRecord.resourceValue"/> |
| <if-empty field="resourceValue"> |
| <property-to-field field="warningMsg" property="CommonVisualThemeInvalidRecord" resource="CommonUiLabels"/> |
| <log level="warning" message="${warningMsg}"/> |
| <else> |
| <set field="themeResources[resourceTypeEnumId][]" from-field="resourceValue"/> |
| </else> |
| </if-empty> |
| </iterate> |
| <field-to-result field="themeResources"/> |
| </simple-method> |
| |
| <simple-method method-name="getCountryList" short-description="Returns a list of country" login-required="false"> |
| <call-class-method method-name="getCountryList" class-name="org.apache.ofbiz.common.CommonWorkers" ret-field="geoList"> |
| <field field="delegator" type="org.apache.ofbiz.entity.Delegator"/> |
| </call-class-method> |
| <iterate list="geoList" entry="countryGeo"> |
| <set field="countryName" value="${countryGeo.geoName}: ${countryGeo.geoId}"/> |
| <field-to-list list="countryList" field="countryName"/> |
| </iterate> |
| <field-to-result field="countryList"/> |
| </simple-method> |
| |
| <simple-method method-name="getAssociatedStateList" short-description="set the state options for selected country" login-required="false"> |
| <set field="countryGeoId" from-field="parameters.countryGeoId"/> |
| <set field="listOrderBy" from-field="parameters.listOrderBy"/> |
| <call-class-method method-name="getAssociatedStateList" class-name="org.apache.ofbiz.common.CommonWorkers" ret-field="geoList"> |
| <field field="delegator" type="org.apache.ofbiz.entity.Delegator"/> |
| <field field="countryGeoId" type="String"/> |
| <field field="listOrderBy" type="String"/> |
| </call-class-method> |
| <iterate list="geoList" entry="stateGeo"> |
| <set field="stateName" value="${stateGeo.geoName}: ${stateGeo.geoId}"/> |
| <field-to-list list="stateList" field="stateName"/> |
| </iterate> |
| <if-empty field="stateList"> |
| <property-to-field resource="CommonUiLabels" property="CommonNoStatesProvinces" field="noOptions"/> |
| <field-to-list list="stateList" field="noOptions"/> |
| </if-empty> |
| <field-to-result field="stateList"/> |
| </simple-method> |
| |
| <simple-method method-name="linkGeos" short-description="Link Geos to another Geo"> |
| <entity-and entity-name="GeoAssoc" list="geoAssocs"> |
| <field-map field-name="geoId" from-field="parameters.geoId"/> |
| <field-map field-name="geoAssocTypeId" from-field="parameters.geoAssocTypeId"/> |
| </entity-and> |
| <set field="oldGeoIds" value="${groovy:org.apache.ofbiz.entity.util.EntityUtil.getFieldListFromEntityList(geoAssocs, 'geoIdTo', true);}"/> |
| <!-- Old list contains current values --> |
| <iterate list="parameters.geoIds" entry="geoIdTo"> |
| <if-compare-field field="oldGeoIds" operator="contains" to-field="geoIdTo"> |
| <!-- Yes, nothing to do, it already exists and we keep it --> |
| <else> |
| <entity-one entity-name="GeoAssoc" value-field="oldGeoAssoc"> |
| <field-map field-name="geoId" from-field="parameters.geoId"/> |
| <field-map field-name="geoIdTo" from-field="geoIdTo"/> |
| </entity-one> |
| <if-empty field="oldGeoAssoc"> |
| <!-- Add as it does not exist --> |
| <make-value value-field="newGeoAssoc" entity-name="GeoAssoc"/> |
| <set field="newGeoAssoc.geoId" from-field="parameters.geoId"/> |
| <set field="newGeoAssoc.geoIdTo" from-field="geoIdTo"/> |
| <set field="newGeoAssoc.geoAssocTypeId" from-field="parameters.geoAssocTypeId"/> |
| <create-value value-field="newGeoAssoc"/> |
| </if-empty> |
| </else> |
| </if-compare-field> |
| </iterate> |
| <check-errors/> |
| </simple-method> |
| |
| <simple-method method-name="getRelatedGeos" short-description="get related geos to a geo through a geoAssoc" login-required="false"> |
| <entity-and entity-name="GeoAssoc" list="geoAssoc"> |
| <field-map field-name="geoId" from-field="parameters.geoId"/> |
| <field-map field-name="geoAssocTypeId" from-field="parameters.geoAssocTypeId"/> |
| </entity-and> |
| <if-empty field="geoAssoc"> |
| <set field="noOptions" value="____"/> |
| <field-to-list list="geoList" field="noOptions"/> |
| <else> |
| <iterate list="geoAssoc" entry="geo"> |
| <field-to-list list="geoList" field="geo.geoIdTo"/> |
| </iterate> |
| </else> |
| </if-empty> |
| <field-to-result field="geoList"/> |
| </simple-method> |
| |
| <simple-method method-name="checkUomConversion" short-description="Returns true if an UomConversion record exists"> |
| <entity-one entity-name="UomConversion" value-field="uomConversion"> |
| <field-map field-name="uomId" from-field="parameters.uomId"/> |
| <field-map field-name="uomIdTo" from-field="parameters.uomIdTo"/> |
| </entity-one> |
| <if-not-empty field="uomConversion"> |
| <set field="exist" value="true" type="Boolean"/> |
| <else> |
| <set field="exist" value="false" type="Boolean"/> |
| </else> |
| </if-not-empty> |
| <field-to-result field="exist"/> |
| </simple-method> |
| |
| <simple-method method-name="checkUomConversionDated" short-description="Returns true if an UomConversionDated record exists"> |
| <entity-condition entity-name="UomConversionDated" list="uomConversions" filter-by-date="true"> |
| <condition-list> |
| <condition-expr field-name="uomId" operator="equals" from-field="parameters.uomId"/> |
| <condition-expr field-name="uomIdTo" operator="equals" from-field="parameters.uomIdTo"/> |
| <condition-expr field-name="purposeEnumId" operator="equals" from-field="parameters.purposeEnumId" ignore-if-empty="true"/> |
| </condition-list> |
| </entity-condition> |
| <if-not-empty field="uomConversions"> |
| <set field="exist" value="true" type="Boolean"/> |
| <else> |
| <set field="exist" value="false" type="Boolean"/> |
| </else> |
| </if-not-empty> |
| <field-to-result field="exist"/> |
| </simple-method> |
| |
| <simple-method method-name="getServerTimestamp" login-required="false"> |
| <now field="serverTimestamp" type="java.sql.Timestamp"/> |
| <field-to-result field="serverTimestamp"/> |
| </simple-method> |
| |
| <simple-method method-name="getServerTimeZone" login-required="false"> |
| <set field="serverTimeZone" value="${util:defaultTimeZone()}" type="String"/> |
| <field-to-result field="serverTimeZone"/> |
| </simple-method> |
| |
| <simple-method method-name="getServerTimestampAsLong" login-required="false"> |
| <now field="serverTimestamp" type="java.lang.Long"/> |
| <field-to-result field="serverTimestamp"/> |
| </simple-method> |
| |
| </simple-methods> |