blob: 17c3a32bb4fff5da99cd76c36397553186f08002 [file] [log] [blame]
<?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"
xsi:noNamespaceSchemaLocation="http://ofbiz.apache.org/dtds/simple-methods-v2.xsd">
<simple-method method-name="createOrganization" short-description="Create Customer" login-required="false">
<set field="require_email" value="true"/>
<set field="require_phone" value="false"/>
<set field="require_login" value="false"/>
<!-- this parameter must be set to true or the createUser method below will use a default password instead of the one entered by user -->
<set field="create_allow_password" value="true"/>
<set field="parameters.roleTypeId" value="INTERNAL_ORGANIZATIO"/>
<now-timestamp field="nowStamp"/>
<!-- Create the PartyGroup -->
<call-map-processor in-map-name="parameters" out-map-name="partyGroupContext">
<simple-map-processor name="newPartyGroup">
<process field="partyId"><copy/></process>
<process field="groupName"><copy to-field="groupName"/><not-empty><fail-property resource="" property="SetupOrganizationNameIsMissing"/></not-empty></process>
</simple-map-processor>
</call-map-processor>
<!-- Create the PartyRole -->
<set field="partyRoleContext.roleTypeId" from-field="parameters.roleTypeId"/>
<!-- Create the Postal Address -->
<if-compare field="parameters.USE_ADDRESS" operator="equals" value="false">
<!-- address not used, do nothing -->
<else>
<call-map-processor in-map-name="parameters" out-map-name="addressContext">
<simple-map-processor name="newPerson">
<process field="roleTypeId"><copy/></process>
<process field="groupName"><copy to-field="toName"/></process>
<process field="USER_ADDRESS1"><copy to-field="address1"/><not-empty><fail-property resource="PartyUiLabels" property="PartyAddressLine1Missing"/></not-empty></process>
<process field="USER_ADDRESS2"><copy to-field="address2"/></process>
<process field="USER_CITY"><copy to-field="city"/><not-empty><fail-property resource="PartyUiLabels" property="PartyCityMissing"/></not-empty></process>
<process field="USER_STATE"><copy to-field="stateProvinceGeoId"/></process>
<process field="USER_POSTAL_CODE"><copy to-field="postalCode"/><not-empty><fail-property resource="PartyUiLabels" property="PartyPostalCodeMissing"/></not-empty></process>
<process field="USER_COUNTRY"><copy to-field="countryGeoId"/><not-empty><fail-property resource="PartyUiLabels" property="PartyCountryMissing"/></not-empty></process>
<process field="USER_ADDRESS_ALLOW_SOL"><copy to-field="allowSolicitation"/></process>
</simple-map-processor>
</call-map-processor>
<if-compare value="USA" operator="equals" field="parameters.USER_COUNTRY">
<if-empty field="parameters.USER_STATE">
<property-to-field field="tempErrorMessage" resource="PartyUiLabels" property="PartyStateInUsMissing"/>
<field-to-list field="tempErrorMessage" list="error_list"/>
</if-empty>
</if-compare>
<if-compare value="CAN" operator="equals" field="parameters.USER_COUNTRY">
<if-empty field="parameters.USER_STATE">
<property-to-field field="tempErrorMessage" resource="PartyUiLabels" property="PartyStateInCanadaMissing"/>
<field-to-list field="tempErrorMessage" list="error_list"/>
</if-empty>
</if-compare>
</else>
</if-compare>
<!-- Create the Work Phone -->
<if-not-empty field="parameters.USER_WORK_CONTACT">
<call-map-processor in-map-name="parameters" out-map-name="workPhoneContext">
<simple-map-processor name="newTelecomNumber">
<process field="roleTypeId"><copy/></process>
<process field="USER_WORK_COUNTRY"><copy to-field="countryCode"/></process>
<process field="USER_WORK_AREA"><copy to-field="areaCode"/></process>
<process field="USER_WORK_CONTACT"><copy to-field="contactNumber"/></process>
<process field="USER_WORK_EXT"><copy to-field="extension"/></process>
<process field="USER_WORK_ALLOW_SOL"><copy to-field="allowSolicitation"/></process>
</simple-map-processor>
</call-map-processor>
</if-not-empty>
<!-- Create the Fax Phone -->
<if-not-empty field="parameters.USER_FAX_CONTACT">
<call-map-processor in-map-name="parameters" out-map-name="faxPhoneContext">
<simple-map-processor name="newTelecomNumber">
<process field="roleTypeId"><copy/></process>
<process field="USER_FAX_COUNTRY"><copy to-field="countryCode"/></process>
<process field="USER_FAX_AREA"><copy to-field="areaCode"/></process>
<process field="USER_FAX_CONTACT"><copy to-field="contactNumber"/></process>
<process field="USER_FAX_EXT"><copy to-field="extension"/></process>
<process field="USER_FAX_ALLOW_SOL"><copy to-field="allowSolicitation"/></process>
</simple-map-processor>
</call-map-processor>
</if-not-empty>
<!-- Check for required Phone -->
<if-compare field="require_phone" operator="equals" value="true">
<if-empty field="parameters.USER_HOME_CONTACT">
<if-empty field="parameters.USER_WORK_CONTACT">
<if-empty field="parameters.USER_MOBILE_CONTACT">
<call-map-processor in-map-name="parameters" out-map-name="dummymap">
<simple-map-processor name="checkRequiredPhone">
<process field="REQUIRED_PHONE">
<not-empty><fail-property resource="PartyUiLabels" property="PartyContactTelephoneMissing"/></not-empty>
</process>
</simple-map-processor>
</call-map-processor>
</if-empty>
</if-empty>
</if-empty>
</if-compare>
<!-- Create the email address -->
<call-map-processor in-map-name="parameters" out-map-name="emailContext">
<simple-map-processor name="newEmail">
<process field="roleTypeId"><copy/></process>
<process field="USER_EMAIL"><copy to-field="emailAddress"/></process>
<process field="USER_EMAIL_ALLOW_SOL"><copy to-field="allowSolicitation"/></process>
</simple-map-processor>
</call-map-processor>
<!-- Check for required E-Mail -->
<if-compare field="require_email" operator="equals" value="true">
<if-empty field="emailContext.emailAddress">
<call-map-processor in-map-name="emailContext" out-map-name="dummymap">
<simple-map-processor name="checkRequiredEmail">
<process field="emailAddress">
<not-empty><fail-property resource="PartyUiLabels" property="PartyEmailAddressMissing"/></not-empty>
</process>
</simple-map-processor>
</call-map-processor>
</if-empty>
<if-not-empty field="emailContext.emailAddress">
<call-map-processor in-map-name="emailContext" out-map-name="dummymap">
<simple-map-processor name="checkRequiredEmailFormat">
<process field="emailAddress">
<validate-method method="isEmail">
<fail-property resource="PartyUiLabels" property="PartyEmailAddressNotFormattedCorrectly"/>
</validate-method>
</process>
</simple-map-processor>
</call-map-processor>
</if-not-empty>
</if-compare>
<!-- get the visit from the session to get the visitId -->
<session-to-field field="visit"/>
<!-- now that everything is validated & setup, check to see if there are errors, then call the services -->
<check-errors/>
<call-service service-name="createPartyGroup" in-map-name="partyGroupContext">
<result-to-field result-name="partyId" field="tempMap.partyId"/>
</call-service>
<!-- now that we have the partyId, put it where it needs to go... -->
<set field="userLoginContext.partyId" from-field="tempMap.partyId"/>
<set field="partyGroupContext.partyId" from-field="tempMap.partyId"/>
<set field="partyRoleContext.partyId" from-field="tempMap.partyId"/>
<set field="addressContext.partyId" from-field="tempMap.partyId"/>
<set field="workPhoneContext.partyId" from-field="tempMap.partyId"/>
<set field="faxPhoneContext.partyId" from-field="tempMap.partyId"/>
<set field="mobilePhoneContext.partyId" from-field="tempMap.partyId"/>
<set field="emailContext.partyId" from-field="tempMap.partyId"/>
<call-service service-name="createPartyRole" in-map-name="partyRoleContext"/>
<!-- add Carrier roletype -->
<set field="partyRoleContext.roleTypeId" value="CARRIER"/>
<call-service service-name="createPartyRole" in-map-name="partyRoleContext"/>
<!-- billing address -->
<if-compare field="parameters.USE_ADDRESS" operator="equals" value="false">
<!-- address not used, do nothing -->
<else>
<call-service service-name="createPartyPostalAddress" in-map-name="addressContext">
<result-to-field result-name="contactMechId" field="addressPurposeContext.contactMechId"/>
</call-service>
<set field="addressPurposeContext.partyId" from-field="tempMap.partyId"/>
<!-- create the payment location -->
<set field="addressPurposeContext.contactMechPurposeTypeId" value="PAYMENT_LOCATION"/>
<call-service service-name="createPartyContactMechPurpose" in-map-name="addressPurposeContext"/>
<!-- also consider this address the general correspondence address -->
<set field="addressPurposeContext.contactMechPurposeTypeId" value="GENERAL_LOCATION"/>
<call-service service-name="createPartyContactMechPurpose" in-map-name="addressPurposeContext"/>
<!-- create the billing location -->
<set field="addressPurposeContext.contactMechPurposeTypeId" value="BILLING_LOCATION"/>
<call-service service-name="createPartyContactMechPurpose" in-map-name="addressPurposeContext"/>
</else>
</if-compare>
<!-- home phone -->
<if-not-empty field="parameters.USER_HOME_CONTACT">
<call-service service-name="createPartyTelecomNumber" in-map-name="homePhoneContext">
<result-to-field result-name="contactMechId" field="homePhonePurposeContext.contactMechId"/>
</call-service>
<set field="homePhonePurposeContext.partyId" from-field="tempMap.partyId"/>
<set field="homePhonePurposeContext.contactMechPurposeTypeId" value="PHONE_HOME"/>
<call-service service-name="createPartyContactMechPurpose" in-map-name="homePhonePurposeContext"/>
</if-not-empty>
<!-- work phone -->
<if-not-empty field="parameters.USER_WORK_CONTACT">
<call-service service-name="createPartyTelecomNumber" in-map-name="workPhoneContext">
<result-to-field result-name="contactMechId" field="workPhonePurposeContext.contactMechId"/>
</call-service>
<set field="workPhonePurposeContext.partyId" from-field="tempMap.partyId"/>
<set field="workPhonePurposeContext.contactMechPurposeTypeId" value="PHONE_WORK"/>
<call-service service-name="createPartyContactMechPurpose" in-map-name="workPhonePurposeContext"/>
</if-not-empty>
<!-- fax phone -->
<if-not-empty field="parameters.USER_FAX_CONTACT">
<call-service service-name="createPartyTelecomNumber" in-map-name="faxPhoneContext">
<result-to-field result-name="contactMechId" field="faxPhonePurposeContext.contactMechId"/>
</call-service>
<set field="faxPhonePurposeContext.partyId" from-field="tempMap.partyId"/>
<set field="faxPhonePurposeContext.contactMechPurposeTypeId" value="FAX_NUMBER"/>
<call-service service-name="createPartyContactMechPurpose" in-map-name="faxPhonePurposeContext"/>
</if-not-empty>
<!-- mobile phone -->
<if-not-empty field="parameters.USER_MOBILE_CONTACT">
<call-service service-name="createPartyTelecomNumber" in-map-name="mobilePhoneContext">
<result-to-field result-name="contactMechId" field="mobilePhonePurposeContext.contactMechId"/>
</call-service>
<set field="mobilePhonePurposeContext.partyId" from-field="tempMap.partyId"/>
<set field="mobilePhonePurposeContext.contactMechPurposeTypeId" value="PHONE_MOBILE"/>
<call-service service-name="createPartyContactMechPurpose" in-map-name="mobilePhonePurposeContext"/>
</if-not-empty>
<!-- email address -->
<if-not-empty field="parameters.USER_EMAIL">
<call-service service-name="createPartyEmailAddress" in-map-name="emailContext">
<result-to-field result-name="contactMechId" field="emailPurposeContext.contactMechId"/>
</call-service>
<set field="emailPurposeContext.partyId" from-field="tempMap.partyId"/>
<set field="emailPurposeContext.contactMechPurposeTypeId" value="PRIMARY_EMAIL"/>
<call-service service-name="createPartyContactMechPurpose" in-map-name="emailPurposeContext"/>
</if-not-empty>
<!-- General Ledger Setup for the new organization -->
<!--<call-simple-method method-name="setupDefaultGeneralLedger"/>-->
<!-- create CustomTimePeriod within one years -->
<now-timestamp field="nowTimestamp"/>
<set field="endMonth" value="12"/>
<set field="endDate" value="31"/>
<call-class-method class-name="org.ofbiz.base.util.UtilDateTime" method-name="getYearStart" ret-field="fromDateStamp">
<field field="nowTimestamp" type="java.sql.Timestamp"/>
</call-class-method>
<set field="curYearString" value="${str:toString(date:year(fromDateStamp, util:defaultTimeZone(), util:defaultLocale()))}"/>
<set field="customTimePeriodCtx.fromDate" from-field="fromDateStamp" type="Date"/>
<set field="customTimePeriodCtx.thruDate" value="${groovy:org.ofbiz.base.util.UtilDateTime.toSqlDate(endMonth ,endDate , curYearString)}" type="Date"/>
<set field="customTimePeriodCtx.isClosed" value="N"/>
<set field="customTimePeriodCtx.organizationPartyId" from-field="tempMap.partyId"/>
<set field="customTimePeriodCtx.periodName" from-field="curYearString"/>
<set field="customTimePeriodCtx.periodNum" value="1" type="Long"/>
<set field="customTimePeriodCtx.periodTypeId" value="FISCAL_YEAR"/>
<call-service service-name="createCustomTimePeriod" in-map-name="customTimePeriodCtx"/>
<!-- Create partyId for UserLogin -->
<session-to-field field="userLoginCtx" session-name="userLogin"/>
<if-empty field="userLoginCtx.partyId">
<make-value value-field="newEntity" entity-name="Party"/>
<set field="newEntity.partyId" from-field="userLoginCtx.userLoginId"/>
<set field="newEntity.partyTypeId" value="PERSON"/>
<create-value value-field="newEntity"/>
<clear-field field="newEntity"/>
<make-value value-field="newPerson" entity-name="Person"/>
<set field="newPerson.partyId" from-field="userLoginCtx.userLoginId"/>
<create-value value-field="newPerson"/>
<clear-field field="newPerson"/>
<set field="userLoginCtx.partyId" from-field="userLoginCtx.userLoginId"/>
<store-value value-field="userLoginCtx"/>
</if-empty>
<!-- set the partyId in the request -->
<field-to-request field="tempMap.partyId" request-name="partyId"/>
</simple-method>
<simple-method method-name="setupDefaultGeneralLedger" short-description="General Ledger Setup for the new organization">
<set field="partyId" from-field="parameters.partyId"/>
<!-- create GL journal for suspended transactions (failed post) -->
<set field="createGlJournalCtx.organizationPartyId" from-field="partyId"/>
<set field="createGlJournalCtx.glJournalName" value="Suspense transactions"/>
<call-service service-name="createGlJournal" in-map-name="createGlJournalCtx">
<result-to-field result-name="glJournalId" field="acctgPreferenceCtx.errorGlJournalId"/>
</call-service>
<entity-one entity-name="PartyGroup" value-field="partyGroup"/>
<call-bsh><![CDATA[
groupName = partyGroup.get("groupName");
if(groupName != null){
parameters.put("invoiceIdPrefix", groupName.toUpperCase().substring(0, 2)+"CI");
}else{
parameters.put("invoiceIdPrefix", "CI");
}
]]></call-bsh>
<set field="acctgPreferenceCtx.partyId" from-field="partyId"/>
<set field="acctgPreferenceCtx.taxFormId" value="US_IRS_1120"/>
<set field="acctgPreferenceCtx.cogsMethodId" value="COGS_AVG_COST"/>
<set field="acctgPreferenceCtx.baseCurrencyUomId" value="USD"/>
<set field="acctgPreferenceCtx.oldInvoiceSequenceEnumId" value="INVSQ_ENF_SEQ"/>
<set field="acctgPreferenceCtx.invoiceIdPrefix" from-field="parameters.invoiceIdPrefix"/>
<set field="acctgPreferenceCtx.oldQuoteSequenceEnumId" value="INVSQ_ENF_SEQ"/>
<set field="acctgPreferenceCtx.quoteIdPrefix" value="QU"/>
<set field="acctgPreferenceCtx.oldOrderSequenceEnumId" value="INVSQ_ENF_SEQ"/>
<set field="acctgPreferenceCtx.orderIdPrefix" value="OD"/>
<call-service service-name="createPartyAcctgPreference" in-map-name="acctgPreferenceCtx"/>
<!-- run demo General Chart Of Accounts -->
<entity-condition entity-name="GlAccount" list="glAccountList"/>
<if-empty field="glAccountList">
<set field="importChartOfAccountCtx.filename" value="${sys:getProperty('ofbiz.home')}/applications/accounting/data/DemoGeneralChartOfAccounts.xml"/>
<session-to-field field="importChartOfAccountCtx.userLogin" session-name="userLogin"/>
<call-service service-name="entityImport" in-map-name="importChartOfAccountCtx"/>
<check-errors/>
</if-empty>
<!-- create General Ledger Setup -->
<set field="pathFileString" value="file:${sys:getProperty('ofbiz.home')}/applications/commonext/data/GlAccountData.xml"/>
<set field="tempFileName" value="tempGlAccountData.xml"/>
<set field="topic" value="GlAccount"/>
<now-timestamp field="nowTimestamp"/>
<set field="nowString" value="${groovy:nowTimestamp.toString()}"/>
<set field="ORGPARTYID" from-field="partyId"/>
<set field="FROMDATE" from-field="nowString"/>
<call-simple-method method-name="importTempDataFile"/>
</simple-method>
<simple-method method-name="createCustomer" short-description="Create Customer" login-required="false">
<set field="require_email" value="true"/>
<set field="require_phone" value="false"/>
<set field="require_login" value="false"/>
<!-- this parameter must be set to true or the createUser method below will use a default password instead of the one entered by user -->
<set field="create_allow_password" value="true"/>
<set field="parameters.roleTypeId" value="CUSTOMER"/>
<set field="organizationPartyId" from-field="parameters.partyId"/>
<set field="personContext.partyId" from-field="parameters.customerPartyId"/>
<call-simple-method method-name="createUser" xml-resource="component://party/script/org/ofbiz/party/user/UserEvents.xml"/>
</simple-method>
<simple-method method-name="createFacilityAndContactMech" short-description="create Facility and ContactMech">
<if-empty field="parameters.facilityName">
<add-error>
<fail-property resource="SetupUiLabels" property="SetupFacilityNameIsMissing"/>
</add-error>
</if-empty>
<check-errors/>
<make-value value-field="newEntity" entity-name="Facility"/>
<set field="defaultDaysToShip" from-field="parameters.defaultDaysToShip" type="Long"/>
<clear-field field="parameters.defaultDaysToShip"/>
<set-nonpk-fields value-field="newEntity" map="parameters"/>
<set field="newEntity.defaultDaysToShip" from-field="defaultDaysToShip" type="Long"/>
<if-empty field="parameters.facilityId">
<sequenced-id sequence-name="Facility" field="facilityId"/>
<to-string field="facilityId"/>
<set field="newEntity.facilityId" from-field="facilityId"/>
<else>
<set field="newEntity.facilityId" from-field="parameters.facilityId"/>
</else>
</if-empty>
<set field="facilityId" from-field="newEntity.facilityId"/>
<field-to-request field="facilityId" request-name="facilityId"/>
<create-value value-field="newEntity"/>
<!-- create Facility ContactMech-->
<entity-and entity-name="PartyAndPostalAddress" list="listPartyPostalAddress" filter-by-date="true">
<field-map field-name="partyId" from-field="parameters.partyId"/>
</entity-and>
<first-from-list entry="partyPostalAddress" list="listPartyPostalAddress"/>
<sequenced-id sequence-name="ContactMech" field="partyPostalAddress.contactMechId"/>
<set-service-fields service-name="createPostalAddress" map="partyPostalAddress" to-map="addressContext"/>
<call-service service-name="createPostalAddress" in-map-name="addressContext">
<result-to-field result-name="contactMechId" field="contactMechId"/>
</call-service>
<set field="facilityContactMechCtx.contactMechId" from-field="contactMechId"/>
<set field="facilityContactMechCtx.facilityId" from-field="facilityId"/>
<call-service service-name="createFacilityContactMech" in-map-name="facilityContactMechCtx"/>
<!-- create the payment location -->
<set field="addressPurposeContext.facilityId" from-field="facilityId"/>
<set field="addressPurposeContext.contactMechId" from-field="contactMechId"/>
<set field="addressPurposeContext.contactMechPurposeTypeId" value="SHIPPING_LOCATION"/>
<call-service service-name="createFacilityContactMechPurpose" in-map-name="addressPurposeContext"/>
<!-- also consider this address the shipping origin address -->
<set field="addressPurposeContext.contactMechPurposeTypeId" value="SHIP_ORIG_LOCATION"/>
<call-service service-name="createFacilityContactMechPurpose" in-map-name="addressPurposeContext"/>
</simple-method>
<simple-method method-name="createProductStoreWithDefaultSetting" short-description="create ProductStore and setting default value for payment and shipping">
<if-empty field="parameters.storeName">
<add-error>
<fail-property resource="SetupUiLabels" property="SetupProductStoreNameIsMissing"/>
</add-error>
</if-empty>
<if-compare field="parameters.showPricesWithVatTax" operator="equals" value="Y">
<if-empty field="parameters.vatTaxAuthGeoId">
<add-error><fail-property property="ProductVatTaxAuthGeoNotSet" resource="ProductUiLabels"/></add-error>
</if-empty>
<if-empty field="parameters.vatTaxAuthPartyId">
<add-error><fail-property property="ProductVatTaxAuthPartyNotSet" resource="ProductUiLabels"/></add-error>
</if-empty>
</if-compare>
<check-errors/>
<!-- Create ProductStore -->
<make-value value-field="newEntity" entity-name="ProductStore"/>
<set-nonpk-fields value-field="newEntity" map="parameters"/>
<set field="newEntity.storeCreditValidDays" value="90" type="Long"/>
<set field="newEntity.daysToCancelNonPay" value="30" type="Long"/>
<if-empty field="parameters.productStoreId">
<sequenced-id sequence-name="Facility" field="productStoreId"/>
<to-string field="productStoreId"/>
<set field="newEntity.productStoreId" from-field="productStoreId"/>
<else>
<set field="newEntity.productStoreId" from-field="parameters.productStoreId"/>
</else>
</if-empty>
<set field="productStoreId" from-field="newEntity.productStoreId"/>
<field-to-request field="productStoreId" request-name="productStoreId"/>
<create-value value-field="newEntity"/>
<!-- create the ProductStoreFacility record -->
<now-timestamp field="nowTimestamp"/>
<if-not-empty field="newEntity.inventoryFacilityId">
<make-value value-field="storeFacility" entity-name="ProductStoreFacility"/>
<set from-field="newEntity.inventoryFacilityId" field="storeFacility.facilityId"/>
<set from-field="newEntity.productStoreId" field="storeFacility.productStoreId"/>
<set from-field="nowTimestamp" field="storeFacility.fromDate"/>
<create-value value-field="storeFacility"/>
</if-not-empty>
<field-to-request field="parameters.partyId" request-name="partyId"/>
<set field="organizationPartyId" from-field="parameters.partyId"/>
<!-- Create default data of ProductStoreShipmentMeth, ShipmentMethodType , CarrierShipmentMethod, and ShipmentCostEstimate. -->
<entity-condition entity-name="ShipmentMethodType" list="shipmentMethodTypeList"/>
<if-empty field="shipmentMethodTypeList">
<!-- run demo Shipping -->
<set field="importShippingCtx.filename" value="${sys:getProperty('ofbiz.home')}/applications/commonext/data/ShippingData.xml"/>
<session-to-field field="importShippingCtx.userLogin" session-name="userLogin"/>
<call-service service-name="entityImport" in-map-name="importShippingCtx"/>
<check-errors/>
</if-empty>
<!-- Import Default ProductStore & Shipment data -->
<set field="pathFileString" value="file:${sys:getProperty('ofbiz.home')}/applications/commonext/data/ProductStoreData.xml"/>
<set field="tempFileName" value="tempProductStore.xml"/>
<set field="topic" value="ProductStore"/>
<set field="ORGPARTYID" from-field="organizationPartyId"/>
<set field="PRODUCTSTOREID" from-field="productStoreId"/>
<call-simple-method method-name="importTempDataFile"/>
</simple-method>
<simple-method method-name="createProdCatalogAndProductStoreCatalog" short-description="create ProdCatalog And ProductStoreCatalog">
<set-service-fields service-name="createProdCatalog" map="parameters" to-map="createProdCatalogCtx"/>
<call-service service-name="createProdCatalog" in-map-name="createProdCatalogCtx">
<result-to-field result-name="prodCatalogId" field="newProductStoreCatalog.prodCatalogId"/>
<result-to-request result-name="prodCatalogId" request-name="prodCatalogId"/>
</call-service>
<set field="newProductStoreCatalog.productStoreId" from-field="parameters.productStoreId"/>
<call-service service-name="createProductStoreCatalog" in-map-name="newProductStoreCatalog"/>
</simple-method>
<simple-method method-name="createProductCategoryAndAddToProdCatalog" short-description="addProductCategoryToProdCatalog">
<!-- Create Parent ProductCategory -->
<set field="createPrimaryProductCategoryCtx.productCategoryId" value="${parameters.prodCatalogId}_ROOT"/>
<set field="createPrimaryProductCategoryCtx.categoryName" value="${parameters.prodCatalogId} Browse Root Category"/>
<set field="createPrimaryProductCategoryCtx.productCategoryTypeId" value="CATALOG_CATEGORY"/>
<call-service service-name="createProductCategory" in-map-name="createPrimaryProductCategoryCtx">
<result-to-field result-name="productCategoryId" field="parameters.primaryParentCategoryId"/>
</call-service>
<set field="addToProdCatalogCtx.productCategoryId" from-field="parameters.primaryParentCategoryId"/>
<set field="addToProdCatalogCtx.prodCatalogId" from-field="parameters.prodCatalogId"/>
<set field="addToProdCatalogCtx.prodCatalogCategoryTypeId" value="PCCT_BROWSE_ROOT"/>
<set field="addToProdCatalogCtx.sequenceNum" value="1" type="Long"/>
<call-service service-name="addProductCategoryToProdCatalog" in-map-name="addToProdCatalogCtx"/>
<!-- Create Promotion ProductCategory -->
<call-object-method obj-field="parameters.prodCatalogId" method-name="toUpperCase" ret-field="catalogUpperCase"/>
<set field="createPromotionCategoryCtx.productCategoryId" value="${catalogUpperCase}_PROMOTIONS"/>
<set field="createPromotionCategoryCtx.categoryName" value="${catalogUpperCase} Promotions"/>
<set field="createPromotionCategoryCtx.productCategoryTypeId" value="CATALOG_CATEGORY"/>
<set field="createPromotionCategoryCtx.detailScreen" value="component://ecommerce/widget/CatalogScreens.xml#categorydetailmatrix"/>
<call-service service-name="createProductCategory" in-map-name="createPromotionCategoryCtx">
<result-to-field result-name="productCategoryId" field="promotionCategoryId"/>
</call-service>
<set field="addPromoCatToProdCatalogCtx.productCategoryId" from-field="promotionCategoryId"/>
<set field="addPromoCatToProdCatalogCtx.prodCatalogId" from-field="parameters.prodCatalogId"/>
<set field="addPromoCatToProdCatalogCtx.prodCatalogCategoryTypeId" value="PCCT_PROMOTIONS"/>
<set field="addPromoCatToProdCatalogCtx.sequenceNum" value="2" type="Long"/>
<call-service service-name="addProductCategoryToProdCatalog" in-map-name="addPromoCatToProdCatalogCtx"/>
<!-- Create ProductCategory & ProductCategoryRollup -->
<set-service-fields service-name="createProductCategory" map="parameters" to-map="createProductCategoryCtx"/>
<call-service service-name="createProductCategory" in-map-name="createProductCategoryCtx">
<result-to-field result-name="productCategoryId" field="productCategoryId"/>
<result-to-request result-name="productCategoryId" request-name="productCategoryId"/>
</call-service>
<make-value value-field="newEntity" entity-name="ProductCategoryRollup"/>
<set field="newEntity.parentProductCategoryId" from-field="parameters.primaryParentCategoryId"/>
<set field="newEntity.productCategoryId" from-field="productCategoryId"/>
<set field="newEntity.sequenceNum" value="1" type="Long"/>
<if-empty field="newEntity.fromDate">
<now-timestamp field="nowTimestamp"/>
<set from-field="nowTimestamp" field="newEntity.fromDate"/>
</if-empty>
<create-value value-field="newEntity"/>
</simple-method>
<simple-method method-name="createUpdateProductInCategory" short-description="Create/Update a Product in a Category along with special information such as features">
<set value="createUpdateProductInCategory" field="callingMethodName"/>
<if-compare field="parameters.productId" operator="equals" value="${parameters.productCategoryId}">
<set field="parameters.productId" value="${parameters.productId}-001"/>
</if-compare>
<entity-one entity-name="Product" value-field="product"/>
<if-empty field="product">
<set field="checkAction" value="CREATE"/>
<else><set field="checkAction" value="UPDATE"/></else>
</if-empty>
<call-simple-method method-name="checkCategoryRelatedPermission" xml-resource="component://product/script/org/ofbiz/product/category/CategoryServices.xml"/>
<check-errors/>
<if-empty field="parameters.currencyUomId">
<!-- default to USD for lack of a better alternative, for now anyway... -->
<set field="parameters.currencyUomId" value="USD"/>
</if-empty>
<if-empty field="product">
<!-- create Product -->
<set-service-fields service-name="createProduct" map="parameters" to-map="callCreateProductMap"/>
<if-empty field="callCreateProductMap.productTypeId">
<set field="callCreateProductMap.productTypeId" value="FINISHED_GOOD"/>
</if-empty>
<call-service service-name="createProduct" in-map-name="callCreateProductMap">
<result-to-field result-name="productId"/>
</call-service>
<!-- create ProductCategoryMember -->
<set field="callCreateProductCategoryMemberMap.productId" from-field="productId"/>
<set field="callCreateProductCategoryMemberMap.productCategoryId" from-field="parameters.productCategoryId"/>
<call-service service-name="addProductToCategory" in-map-name="callCreateProductCategoryMemberMap"/>
<set field="callCreateProductCategoryMemberMap.productId" from-field="productId"/>
<set field="callCreateProductCategoryMemberMap.productCategoryId" from-field="parameters.promoCat"/>
<call-service service-name="addProductToCategory" in-map-name="callCreateProductCategoryMemberMap"/>
<!-- create ProductFeatureAppl(s) -->
<set field="hasSelectableFeatures" value="N"/>
<iterate-map map="parameters.productFeatureIdByType" key="productFeatureTypeId" value="productFeatureId">
<log level="info" message="Applying feature [${productFeatureId}] of type [${productFeatureTypeId}] to product [${productId}]"/>
<set field="createPfaMap.productId" from-field="productId"/>
<set field="createPfaMap.productFeatureId" from-field="productFeatureId"/>
<if-compare field="parameters.productFeatureSelectableByType[productFeatureTypeId]" operator="equals" value="Y">
<set field="createPfaMap.productFeatureApplTypeId" value="SELECTABLE_FEATURE"/>
<set field="hasSelectableFeatures" value="Y"/>
<else>
<set field="createPfaMap.productFeatureApplTypeId" value="STANDARD_FEATURE"/>
</else>
</if-compare>
<call-service service-name="applyFeatureToProduct" in-map-name="createPfaMap"/>
<clear-field field="createPfaMap"/>
</iterate-map>
<!-- set isVirtual based on hasSelectableFeatures -->
<if-compare field="hasSelectableFeatures" operator="equals" value="Y">
<entity-one entity-name="Product" value-field="newProduct"/>
<set field="newProduct.isVirtual" value="Y"/>
<store-value value-field="newProduct"/>
</if-compare>
<else>
<!-- update Product -->
<set-service-fields service-name="updateProduct" map="parameters" to-map="callUpdateProductMap"/>
<call-service service-name="updateProduct" in-map-name="callUpdateProductMap"/>
<set field="productId" from-field="parameters.productId"/>
</else>
</if-empty>
<field-to-result field="productId"/>
<!-- create/update defaultPrice and averageCost ProductPrice -->
<if-not-empty field="parameters.defaultPrice">
<entity-condition entity-name="ProductPrice" list="defaultPriceValues" filter-by-date="true">
<condition-list>
<condition-expr field-name="productId" from-field="productId"/>
<condition-expr field-name="productPriceTypeId" value="DEFAULT_PRICE"/>
<condition-expr field-name="productPricePurposeId" value="PURCHASE"/>
</condition-list>
</entity-condition>
<if-empty field="defaultPriceValues">
<set field="createDefaultPriceMap.productId" from-field="productId"/>
<set field="createDefaultPriceMap.currencyUomId" from-field="parameters.currencyUomId"/>
<set field="createDefaultPriceMap.price" from-field="parameters.defaultPrice" type="BigDecimal"/>
<set field="createDefaultPriceMap.productStoreGroupId" value="_NA_"/>
<set field="createDefaultPriceMap.productPriceTypeId" value="DEFAULT_PRICE"/>
<set field="createDefaultPriceMap.productPricePurposeId" value="PURCHASE"/>
<call-service service-name="createProductPrice" in-map-name="createDefaultPriceMap"/>
<else>
<first-from-list entry="defaultPrice" list="defaultPriceValues"/>
<set field="updateDefaultPriceMap.productId" from-field="productId"/>
<set field="updateDefaultPriceMap.price" from-field="parameters.defaultPrice" type="BigDecimal"/>
<set field="updateDefaultPriceMap.productPricePurposeId" from-field="defaultPrice.productPricePurposeId"/>
<set field="updateDefaultPriceMap.productPriceTypeId" from-field="defaultPrice.productPriceTypeId"/>
<set field="updateDefaultPriceMap.productStoreGroupId" from-field="defaultPrice.productStoreGroupId"/>
<set field="updateDefaultPriceMap.currencyUomId" from-field="defaultPrice.currencyUomId"/>
<set field="updateDefaultPriceMap.fromDate" from-field="defaultPrice.fromDate"/>
<call-service service-name="updateProductPrice" in-map-name="updateDefaultPriceMap"/>
</else>
</if-empty>
</if-not-empty>
<if-not-empty field="parameters.averageCost">
<entity-condition entity-name="ProductPrice" list="averageCostValues" filter-by-date="true">
<condition-list>
<condition-expr field-name="productId" from-field="productId"/>
<condition-expr field-name="productPriceTypeId" value="AVERAGE_COST"/>
<condition-expr field-name="productPricePurposeId" value="PURCHASE"/>
</condition-list>
</entity-condition>
<if-empty field="averageCostValues">
<set field="createAverageCostMap.productId" from-field="productId"/>
<set field="createAverageCostMap.currencyUomId" from-field="parameters.currencyUomId"/>
<set field="createAverageCostMap.price" from-field="parameters.averageCost" type="BigDecimal"/>
<set field="createAverageCostMap.productStoreGroupId" value="_NA_"/>
<set field="createAverageCostMap.productPriceTypeId" value="AVERAGE_COST"/>
<set field="createAverageCostMap.productPricePurposeId" value="PURCHASE"/>
<call-service service-name="createProductPrice" in-map-name="createAverageCostMap"/>
<else>
<first-from-list entry="averageCost" list="averageCostValues"/>
<set field="updateAverageCostMap.productId" from-field="productId"/>
<set field="updateAverageCostMap.productPricePurposeId" from-field="averageCost.productPricePurposeId"/>
<set field="updateAverageCostMap.productPriceTypeId" from-field="averageCost.productPriceTypeId"/>
<set field="updateAverageCostMap.productStoreGroupId" from-field="averageCost.productStoreGroupId"/>
<set field="updateAverageCostMap.currencyUomId" from-field="averageCost.currencyUomId"/>
<set field="updateAverageCostMap.fromDate" from-field="averageCost.fromDate"/>
<set field="updateAverageCostMap.price" from-field="parameters.averageCost" type="BigDecimal"/>
<call-service service-name="updateProductPrice" in-map-name="updateAverageCostMap"/>
</else>
</if-empty>
</if-not-empty>
</simple-method>
<simple-method method-name="importTempDataFile" short-description="replace value and import a temporary data file">
<create-object class-name="java.net.URL" field="templateUrl">
<field field="pathFileString"/>
</create-object>
<call-bsh><![CDATA[
try {
InputStream templateStream = templateUrl.openStream();
templateReader = new InputStreamReader(templateStream);
} catch (IOException ex) {
org.ofbiz.base.util.Debug.log(ex + "Unable to get template from URL : "+templateUrl.toExternalForm());
}
return org.ofbiz.base.util.UtilMisc.toMap("templateReader", templateReader);
]]></call-bsh>
<create-object class-name="java.io.BufferedReader" field="reader">
<field field="templateReader" type="java.io.Reader"/>
</create-object>
<set field="tempDir" value="${sys:getProperty('ofbiz.home')}/runtime/tmp"/>
<call-bsh><![CDATA[
sfileOut = new File(tempDir);
if (!sfileOut.exists()) {
sfileOut.mkdir();
}
fos = new FileOutputStream(new File(sfileOut, tempFileName));
sWriter = new OutputStreamWriter(fos);
return org.ofbiz.base.util.UtilMisc.toMap("sWriter", sWriter);
]]></call-bsh>
<create-object class-name="java.io.BufferedWriter" field="writer">
<field field="sWriter" type="java.io.Writer"/>
</create-object>
<!-- replace value and write to a temporary data file -->
<call-bsh><![CDATA[
String line = null;
while (null != (line = reader.readLine())) {
if("GlAccount".equals(topic)){
line = line.replaceAll("ORGPARTYID", ORGPARTYID);
line = line.replaceAll("FROMDATE", FROMDATE);
}else if("ProductStore".equals(topic)){
line = line.replaceAll("ORGPARTYID", ORGPARTYID);
line = line.replaceAll("PRODUCTSTOREID", PRODUCTSTOREID);
}
writer.write(line);
}
writer.close();
return org.ofbiz.base.util.UtilMisc.toMap("writer", writer);
]]></call-bsh>
<!-- Import a temporary data file -->
<set field="outputPathString" value="file:${tempDir}/${tempFileName}"/>
<create-object class-name="java.net.URL" field="outputPath">
<field field="outputPathString"/>
</create-object>
<set field="inputMap.url" from-field="outputPath"/>
<session-to-field field="inputMap.userLogin" session-name="userLogin"/>
<call-service service-name="parseEntityXmlFile" in-map-name="inputMap"/>
<!-- Delete a temporary data file -->
<call-bsh><![CDATA[
tmpPathFile = new File(tempDir, tempFileName);
if(tmpPathFile != null){
tmpPathFile.delete();
}
]]></call-bsh>
</simple-method>
<simple-method method-name="createDefaultWebSite" short-description="Create a WebSite, default webSiteId is WebStore.">
<set field="parameters.webSiteId" value="WebStore"/>
<call-service service-name="createWebSite" in-map-name="parameters"/>
</simple-method>
</simple-methods>