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

# -- logical location of server (10 char max)
CNTROLAREA.SENDER.LOGICALID=1234567890

# -- auth id is required to access machine that generated the BOD (50 char max)
CNTROLAREA.SENDER.AUTHID=OFBiz

# if these are set to true the XML content of the messages will be saved to OagisMessageInfo.fullMessageXml
Oagis.Debug.Save.Xml.Out=true
Oagis.Debug.Save.Xml.In=true

Oagis.Template.ConfirmBod=component://oagis/widget/MessageInfoScreens.xml#ConfirmBod
Oagis.Template.ReceiveDelivery=component://oagis/widget/MessageInfoScreens.xml#ReceiveDelivery
Oagis.Template.ProcessShipment=component://oagis/widget/MessageInfoScreens.xml#ProcessShipment

Oagis.Warehouse.PoReceiptFacilityId=WebStoreWarehouse

Oagis.Warehouse.ReturnReceiptFacilityId=WebStoreWarehouse
Oagis.Warehouse.ReturnReceiptLocationSeqId=

Oagis.Warehouse.SyncInventoryFacilityId=WebStoreWarehouse
Oagis.Warehouse.SyncInventoryProductStoreId=9001

Oagis.Order.ValidProductStores=9001

# email notification
#oagis.notification.email.sendTo=

# Client Cert, etc settings
#auth.client.certificate.alias=testrpckey
#auth.basic.username=foo
#auth.basic.password=bar

# URLs for outgoing messages
#url.send.processShipment=https://foo.bar.com/receive
#url.send.confirmBod=https://foo.bar.com/receive
#url.send.receiveDelivery=https://foo.bar.com/receive

# if the test.save.outgoing.directory is specified the files will be saved there but not sent to any URL that might be specified
#test.save.outgoing.directory=
#test.save.outgoing.filename.base=
