###############################################################################
# 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.
###############################################################################

# -- unique instance id (20 char max)
unique.instanceId=ofbiz1

# -- the default currency to use for prices, etc
currency.uom.id.default=USD

# These values override the _NA_ DEFAULT values in user preferences for the GLOBAL_PREFERENCES userPrefGroupTypeId
# -- the default organizationPartyId for used in dropdowns and reports
ORGANIZATION_PARTY=Company
# ID of the VisualTheme to use if there is no VISUAL_THEME UserPreference record for the current user (ie default value)
VISUAL_THEME=TOMAHAWK

# -- the default decimal format for currency (used in UtilFormatOut.java)
currency.decimal.format=#,##0.00

# -- the default rounding for currency (used in OfbizCurrencyTransform.java)
currency.rounding.default=10

# -- Properties fallback locale. Change this setting with caution. If you
#    start getting "resource not found" exceptions, then there are
#    properties missing in the locale you specified. This property does not
#    control the default locale - the default locale is set in start.properties.
locale.properties.fallback=en

# -- Locales made available, separated by commas. This property controls
#    which locales the user can select from. If this property is not used,
#    then the user will be able to select from all the locales available
#    in the JVM. The list below corresponds to the languages really available OOTB (2010-16-02)
#locales.available=ar,de,en,es,fr,hi,it,nl,pt,ro,ru,th,zh

# -- Time zones made available, separated by commas. This property controls
#    which time zones the user can select from. If this property is not used,
#    then the user will be able to select from all the time zones available
#    in the JVM.
#timeZones.available=US/Eastern,US/Central,US/Mountain,US/Pacific,US/Alaska,US/Hawaii

# -- the default country for drop downs
country.geo.id.default=USA

# -- Available countries, separated by commas.This property controls
#    which countries the user can select from. If this property is not used,
#    then the user will be able to select from all the countries.
#countries.geo.id.available=USA

# -- the default trackingCodeId to use for Partner Managed Tracking Codes
partner.trackingCodeId.default=

# -- USPS address matching string - should be all lower case, no spaces, pipe delimited
usps.address.match=(^.*?p[\\. ]*o[\\. ]*box.*$)|(^.*?post.*?office.*?box.*$)|((^|(^.*? ))r[\\. ]*r[\\. ]*(( +)|([0-9#]+)).*$)|(^.*?rural.*?route.*$)

# -- general default 'fromEmailAddress' can be overridden in: EmailTemplateSetting
defaultFromEmailAddress=ofbiztest@example.com

# -- The default domainname used in the notification emails links
# as 'baseUrl' and 'baseSecureUrl' are set in the url.properties file. 

# -- mail notifications enabled (Y|N)
mail.notifications.enabled=Y

# -- redirect all mail notifications to this address for testing
#mail.notifications.redirectTo=

# -- the default mail server to use
mail.smtp.relay.host=localhost

# -- SMTP Auth settings
#mail.smtp.auth.user=
#mail.smtp.auth.password=

# -- Additional Required Fields needed for Gmail and other non traditional smtp servers
# -- These added fields also work for Yahoo business mail for instance
# -- Gmail smtp port can be either 465 or 587
#mail.smtp.port=465
# -- Gmail requires StartTLS
#mail.smtp.starttls.enable=true

# -- Gmail requires a JSSE socket factory, the following socketFactory settings will override JavaMail's default socketFactory settings
# -- Port needs to be the same as mail.smtp.port
#mail.smtp.socketFactory.port=465
#mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
#--Fallback [true|false] determines whether you will allow a non secure connection if you are unable to get a secure one
#mail.smtp.socketFactory.fallback=false

# -- how the address are matched with the CRM addresses
mail.address.caseInsensitive=N

# -- debug SMTP mail option enabled (Y|N)
mail.debug.on=Y

# -- if some addresses fail the SMTP check using the RCPT TO: command then setting this property to false will abort sending the message
#    to any recipients valid or not
mail.smtp.sendpartial=true

# -- HTTP upload settings
# -- directory used to temporarily store files that are larger than the configured size threshold (10K)
http.upload.max.sizethreshold=10240
# -- directory used to temporarily store files that are larger than the configured size threshold
http.upload.tmprepository=runtime/tmp
# -- max size in bytes (-1 for unlimited)
http.upload.max.size=-1

# -- spam header name and value to block incoming spam detected by external spam checker, configured for spam assin
mail.spam.name=X-Spam-Flag
mail.spam.value=YES

# -- Google Map key (by domain, see http://code.google.com/intl/en/apis/maps/signup.html, note that it works for http://localhost)
https.demo-trunk.ofbiz.apache.org=ABQIAAAAtt0d8djaYFkk8N5LJVcDSBTl26GJHIFzHZYG8GNWSTKWDUTxchRLjgT9hY3-DDYk27lvZS84RH4aiQ
https.demo-stable.ofbiz.apache.org=ABQIAAAAtt0d8djaYFkk8N5LJVcDSBR8L_-1UdAfCE2bleqTaEvMtKARZxSrkTzKktKY2_Znm0TRq2DF4YhGPg

https.www.ofbiz.it=ABQIAAAAtt0d8djaYFkk8N5LJVcDSBQUlpTe-xmKVkX0xosnXLpfGrWfqBTaTBsLPVxB5fgaomcHPo0N2h6IXg

https.localhost=ABQIAAAAtt0d8djaYFkk8N5LJVcDSBQN-clGH2vvMMwJjYtcwF78UzZgEBTN70S6uIgRoAtXRkADNoesbw5etg
http.localhost=ABQIAAAAtt0d8djaYFkk8N5LJVcDSBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxR3euHYk9bpwvdF2Qg1EYO1LQitHA

# -- Y if you want to display the multi-tenant textbox in the login page and install specify components which related to each tenant
multitenant=N

# -- Y if you use a cluster. Most of the time this should not be needed. Setting distributed-cache-clear-enabled="true" is enough 
# -- to guarantee no sequenceIds duplicates. See OFBIZ-2353 for details
cluster=N
