<?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.
-->
<section xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="5.0" xmlns:xl="http://www.w3.org/1999/xlink"
    xmlns:xi="http://www.w3.org/2001/XInclude" xsi:schemaLocation="http://docbook.org/ns/docbook ../../../content/dtd/docbook.xsd"
    xmlns="http://docbook.org/ns/docbook">
    <title>The OFBiz Setup Edit First Catalog help screen.</title>
    <para> It provides an overview on Catalog, Category, and Product which is the first one of your organization. You will be able to create/edit
        Catalog, Category, and Product for your organization and also be able to create order by that product. </para>
    <section>
        <title>How do I create a Catalog?</title>
        <para>
            <orderedlist>
                <listitem>
                    <para>Select the 'Product Catalog' sub menu and the screen will be displayed</para>
                </listitem>
                <listitem>
                    <para>Enter the 'Prod Catalog Id' field (NOTE: If you do not enter the 'Prod Catalog Id' field it will be used the default as
                        'Organization Party Id')</para>
                </listitem>
                <listitem>
                    <para>Enter the 'Catalog Name' field </para>
                </listitem>
                <listitem>
                    <para>Press the 'Update' button</para>
                </listitem>
            </orderedlist>
        </para>
    </section>
    <section>
        <title>How do I update a Catalog?</title>
        <para>Not all the fields on the Catalog can be updated. For example Prod Catalog Id cannot be updated. If these fields need to be amended then
            the Catalog will need to be removed and then re-created.</para>
        <para>
            <orderedlist>
                <listitem>
                    <para>Select the 'Product Catalog' sub menu and the screen will be displayed</para>
                </listitem>
                <listitem>
                    <para>Any existing Catalog will be displayed in the box</para>
                </listitem>
                <listitem>
                    <para>Amend the details in the line item that needs to be updated (eg Catalog Name)</para>
                </listitem>
                <listitem>
                    <para>Press the 'Update' button displayed at the end of the line item that has been updated </para>
                </listitem>
            </orderedlist>
        </para>
    </section>
</section>
