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

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